diff --git a/README.md b/README.md index 398dd5d194..99bab79444 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# Outline Client +# Outline Apps -![Build and Test](https://github.com/Jigsaw-Code/outline-client/actions/workflows/build_and_test_debug.yml/badge.svg?branch=master) [![Mattermost](https://badgen.net/badge/Mattermost/Outline%20Community/blue)](https://community.internetfreedomfestival.org/community/channels/outline-community) [![Reddit](https://badgen.net/badge/Reddit/r%2Foutlinevpn/orange)](https://www.reddit.com/r/outlinevpn/) +![Build and Test](https://github.com/Jigsaw-Code/outline-apps/actions/workflows/build_and_test_debug.yml/badge.svg?branch=master) [![Mattermost](https://badgen.net/badge/Mattermost/Outline%20Community/blue)](https://community.internetfreedomfestival.org/community/channels/outline-community) [![Reddit](https://badgen.net/badge/Reddit/r%2Foutlinevpn/orange)](https://www.reddit.com/r/outlinevpn/) > **Test coverage currently only tracks the Apple Libraries and core web view code:** > -> [![codecov](https://codecov.io/gh/Jigsaw-Code/outline-client/branch/master/graph/badge.svg?token=gasD8v5tjn)](https://codecov.io/gh/Jigsaw-Code/outline-client) +> [![codecov](https://codecov.io/gh/Jigsaw-Code/outline-apps/branch/master/graph/badge.svg?token=gasD8v5tjn)](https://codecov.io/gh/Jigsaw-Code/outline-client) The Outline Client is a cross-platform VPN or proxy client for Windows, macOS, iOS, Android, and ChromeOS. The Outline Client is designed for use with the [Outline Server](https://github.com/Jigsaw-Code/outline-server) software, but it is fully compatible with any [Shadowsocks](https://shadowsocks.org/) server. diff --git a/commitlint.config.js b/commitlint.config.js index d53855c5e3..765fb7304d 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -5,21 +5,18 @@ module.exports = { 2, 'always', [ - 'build', - 'cordova', - 'cordova/android', - 'cordova/apple', - 'cordova/apple/ios', - 'cordova/apple/macos', - 'devtools', - 'docs', - 'electron', - 'electron/linux', - 'electron/windows', - 'www', - 'service', - 'service/linux', - 'service/windows', + 'client/build', + 'client/cordova', + 'client/cordova/android', + 'client/cordova/apple', + 'client/cordova/apple/ios', + 'client/cordova/apple/macos', + 'client/dotfiles', + 'client/docs', + 'client/electron', + 'client/electron/linux', + 'client/electron/windows', + 'client/www' ], ], }, diff --git a/.browserslistrc b/outline_client/.browserslistrc similarity index 100% rename from .browserslistrc rename to outline_client/.browserslistrc diff --git a/.eslintignore b/outline_client/.eslintignore similarity index 100% rename from .eslintignore rename to outline_client/.eslintignore diff --git a/.eslintrc.json b/outline_client/.eslintrc.json similarity index 100% rename from .eslintrc.json rename to outline_client/.eslintrc.json diff --git a/.prettierignore b/outline_client/.prettierignore similarity index 100% rename from .prettierignore rename to outline_client/.prettierignore diff --git a/.prettierrc.json b/outline_client/.prettierrc.json similarity index 100% rename from .prettierrc.json rename to outline_client/.prettierrc.json diff --git a/outline_client/build/electron/electron/index.js b/outline_client/build/electron/electron/index.js new file mode 100644 index 0000000000..697d5c2903 --- /dev/null +++ b/outline_client/build/electron/electron/index.js @@ -0,0 +1,6 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ +/******/ +/******/ })() +; \ No newline at end of file diff --git a/outline_client/build/electron/electron/preload.js b/outline_client/build/electron/electron/preload.js new file mode 100644 index 0000000000..697d5c2903 --- /dev/null +++ b/outline_client/build/electron/electron/preload.js @@ -0,0 +1,6 @@ +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ +/******/ +/******/ })() +; \ No newline at end of file diff --git a/config.xml b/outline_client/config.xml similarity index 100% rename from config.xml rename to outline_client/config.xml diff --git a/docs/invitation-instructions.md b/outline_client/docs/invitation-instructions.md similarity index 64% rename from docs/invitation-instructions.md rename to outline_client/docs/invitation-instructions.md index 5146eebe86..1b0837fc10 100644 --- a/docs/invitation-instructions.md +++ b/outline_client/docs/invitation-instructions.md @@ -1 +1,3 @@ -Moved to [`invitation_instructions.md`](./invitation_instructions.md). \ No newline at end of file +Moved to [`invitation_instructions.md`](./invitation_instructions.md). + +# What do we do about this?? \ No newline at end of file diff --git a/docs/invitation_instructions.md b/outline_client/docs/invitation_instructions.md similarity index 100% rename from docs/invitation_instructions.md rename to outline_client/docs/invitation_instructions.md diff --git a/docs/life_of_a_packet.md b/outline_client/docs/life_of_a_packet.md similarity index 100% rename from docs/life_of_a_packet.md rename to outline_client/docs/life_of_a_packet.md diff --git a/docs/resources/invitation_instructions_001.png b/outline_client/docs/resources/invitation_instructions_001.png similarity index 100% rename from docs/resources/invitation_instructions_001.png rename to outline_client/docs/resources/invitation_instructions_001.png diff --git a/docs/resources/invitation_instructions_002.png b/outline_client/docs/resources/invitation_instructions_002.png similarity index 100% rename from docs/resources/invitation_instructions_002.png rename to outline_client/docs/resources/invitation_instructions_002.png diff --git a/docs/resources/invitation_instructions_003.png b/outline_client/docs/resources/invitation_instructions_003.png similarity index 100% rename from docs/resources/invitation_instructions_003.png rename to outline_client/docs/resources/invitation_instructions_003.png diff --git a/list.action.mjs b/outline_client/list.action.mjs similarity index 100% rename from list.action.mjs rename to outline_client/list.action.mjs diff --git a/outline_client/package-lock.json b/outline_client/package-lock.json new file mode 100644 index 0000000000..929576d7ff --- /dev/null +++ b/outline_client/package-lock.json @@ -0,0 +1,35448 @@ +{ + "name": "outline-client", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "outline-client", + "version": "0.0.0", + "workspaces": [ + "src/cordova/plugin" + ], + "dependencies": { + "@material/mwc-button": "^0.25.3", + "@material/mwc-icon-button": "^0.25.3", + "@material/mwc-menu": "^0.25.3", + "@polymer/app-layout": "^3.1.0", + "@polymer/app-localize-behavior": "^3.0.1", + "@polymer/app-route": "^3.0.2", + "@polymer/decorators": "^3.0.0", + "@polymer/font-roboto": "^3.0.2", + "@polymer/iron-icons": "^3.0.1", + "@polymer/iron-iconset-svg": "^3.0.1", + "@polymer/iron-pages": "^3.0.1", + "@polymer/paper-behaviors": "^3.0.1", + "@polymer/paper-button": "^3.0.1", + "@polymer/paper-card": "^3.0.1", + "@polymer/paper-dialog": "^3.0.1", + "@polymer/paper-dropdown-menu": "^3.1.0", + "@polymer/paper-icon-button": "^3.0.2", + "@polymer/paper-input": "^3.2.1", + "@polymer/paper-item": "^3.0.1", + "@polymer/paper-listbox": "^3.0.1", + "@polymer/paper-menu-button": "^3.0.1", + "@polymer/paper-ripple": "^3.0.2", + "@polymer/paper-styles": "^3.0.1", + "@polymer/paper-toast": "^3.0.1", + "@sentry/browser": "^7.31.1", + "@sentry/electron": "^4.2.0", + "@webcomponents/webcomponentsjs": "^2.4.4", + "auto-launch": "^5.0.5", + "browserslist": "^4.20.3", + "cordova-plugin-splashscreen": "^6.0.0", + "cordova-plugin-statusbar": "^2.2.3", + "electron-updater": "^5.0.5", + "lit": "^2.2.2", + "ShadowsocksConfig": "github:Jigsaw-Code/outline-shadowsocksconfig#v0.2.1", + "socks": "^1.1.10", + "sudo-prompt": "^9.2.1", + "uuidv4": "^4.0.0", + "web-animations-js": "^2.3.2" + }, + "devDependencies": { + "@babel/core": "^7.12.10", + "@babel/polyfill": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@commitlint/config-conventional": "^16.2.4", + "@jsdevtools/coverage-istanbul-loader": "^3.0.5", + "@rollup/plugin-image": "^2.1.1", + "@types/auto-launch": "^5.0.0", + "@types/cordova": "^0.0.34", + "@types/jasmine": "^2.8.6", + "@types/node": "^14.14.7", + "@types/polymer": "^1.2.9", + "@types/uuidv4": "^2.0.0", + "@typescript-eslint/eslint-plugin": "^5.32.0", + "@typescript-eslint/parser": "^5.32.0", + "@web/dev-server": "^0.1.35", + "@web/dev-server-esbuild": "^0.3.3", + "@web/dev-server-storybook": "^0.5.4", + "babel-loader": "^8.2.2", + "chalk": "^5.0.1", + "copy-dir": "^1.3.0", + "copy-webpack-plugin": "^5.1.1", + "cordova-android": "^11.0.0", + "cordova-browser": "~6.0.0", + "cordova-ios": "~6.3.0", + "cordova-lib": "^11.0.0", + "cordova-osx": "github:apache/cordova-osx", + "cordova-plugin-clipboard": "github:Jigsaw-Code/outline-cordova-plugin-clipboard#v2.0.0", + "cordova-plugin-outline": "file:src/cordova/plugin", + "cordova-webintent": "github:cordova-misc/cordova-webintent#v2.0.0", + "css-loader": "^5.0.1", + "electron": "^19.1.9", + "electron-builder": "^23.6.0", + "electron-icon-maker": "^0.0.5", + "eslint": "^8.15.0", + "eslint-import-resolver-typescript": "^3.4.0", + "eslint-plugin-compat": "^4.0.2", + "eslint-plugin-import": "^2.26.0", + "esm": "^3.2.25", + "file-loader": "^6.2.0", + "html-webpack-plugin": "^5.1.0", + "husky": "^1.3.1", + "intl-messageformat": "^9.12.0", + "istanbul": "^0.4.5", + "karma": "^6.3.16", + "karma-chrome-launcher": "^3.1.0", + "karma-coverage-istanbul-reporter": "^3.0.3", + "karma-jasmine": "^4.0.1", + "karma-webpack": "^5.0.0", + "minimist": "^1.2.6", + "node-fetch": "^3.3.0", + "outline-i18n": "Jigsaw-Code/outline-i18n#v0.0.7", + "postcss": "^7.0.39", + "postcss-rtl": "^1.7.3", + "prettier": "^1.19.1", + "pretty-quick": "^2.0.1", + "puppeteer": "^13.1.2", + "replace-in-file": "^6.3.5", + "rimraf": "^2.7.1", + "rmfr": "^2.0.0", + "style-loader": "^2.0.0", + "ts-loader": "^9.3.1", + "typescript": "^4.7.4", + "url": "^0.11.0", + "webpack": "^5.16.0", + "webpack-cli": "^4.4.0", + "webpack-dev-server": "^4.5.0", + "webpack-merge": "^5.8.0", + "webpack-shell-plugin-next": "^2.1.1", + "xmlbuilder2": "^3.1.1" + }, + "engines": { + "node": "^18.16.0", + "npm": "^9.5.1" + }, + "optionalDependencies": { + "ios-deploy": "^1.11.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.18.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-function-name": "^7.18.9", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.11", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.11", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.18.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/polyfill": { + "version": "7.12.1", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.9", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.18.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "16.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-changelog-conventionalcommits": "^4.3.1" + }, + "engines": { + "node": ">=v12" + } + }, + "node_modules/@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "dependencies": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@electron/get": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", + "integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^9.6.0", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=8.6" + }, + "optionalDependencies": { + "global-agent": "^3.0.0", + "global-tunnel-ng": "^2.7.1" + } + }, + "node_modules/@electron/get/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/@electron/get/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/get/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/@electron/universal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz", + "integrity": "sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==", + "dev": true, + "dependencies": { + "@malept/cross-spawn-promise": "^1.1.0", + "asar": "^3.1.0", + "debug": "^4.3.1", + "dir-compare": "^2.4.0", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "1.11.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/fast-memoize": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/icu-skeleton-parser": "1.3.6", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.2.25", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "dev": true, + "license": "Apache-2.0", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jimp/bmp": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "bmp-js": "^0.1.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/core": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "node_modules/@jimp/custom": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.14.0" + } + }, + "node_modules/@jimp/gif": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/jpeg": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "jpeg-js": "^0.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blit": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blur": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-circle": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-color": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-contain": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-cover": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-crop": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-displace": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-dither": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-fisheye": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-flip": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-rotate": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-gaussian": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-invert": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-mask": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-normalize": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-print": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "load-bmfont": "^1.4.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-resize": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-rotate": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-scale": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-shadow": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blur": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-threshold": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-color": ">=0.8.0", + "@jimp/plugin-resize": ">=0.8.0" + } + }, + "node_modules/@jimp/plugins": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.14.0", + "@jimp/plugin-blur": "^0.14.0", + "@jimp/plugin-circle": "^0.14.0", + "@jimp/plugin-color": "^0.14.0", + "@jimp/plugin-contain": "^0.14.0", + "@jimp/plugin-cover": "^0.14.0", + "@jimp/plugin-crop": "^0.14.0", + "@jimp/plugin-displace": "^0.14.0", + "@jimp/plugin-dither": "^0.14.0", + "@jimp/plugin-fisheye": "^0.14.0", + "@jimp/plugin-flip": "^0.14.0", + "@jimp/plugin-gaussian": "^0.14.0", + "@jimp/plugin-invert": "^0.14.0", + "@jimp/plugin-mask": "^0.14.0", + "@jimp/plugin-normalize": "^0.14.0", + "@jimp/plugin-print": "^0.14.0", + "@jimp/plugin-resize": "^0.14.0", + "@jimp/plugin-rotate": "^0.14.0", + "@jimp/plugin-scale": "^0.14.0", + "@jimp/plugin-shadow": "^0.14.0", + "@jimp/plugin-threshold": "^0.14.0", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/png": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "pngjs": "^3.3.3" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/tiff": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/types": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.14.0", + "@jimp/gif": "^0.14.0", + "@jimp/jpeg": "^0.14.0", + "@jimp/png": "^0.14.0", + "@jimp/tiff": "^0.14.0", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/utils": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@jsdevtools/coverage-istanbul-loader": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "dev": true, + "dependencies": { + "convert-source-map": "^1.7.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", + "merge-source-map": "^1.1.0", + "schema-utils": "^2.7.0" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@lion/accordion": { + "version": "0.9.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@lion/core": "^0.22.0" + } + }, + "node_modules/@lion/core": { + "version": "0.22.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@open-wc/scoped-elements": "^2.1.1", + "lit": "^2.0.2" + } + }, + "node_modules/@lit/reactive-element": { + "version": "1.0.0-rc.4", + "license": "BSD-3-Clause" + }, + "node_modules/@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@material/animation": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/base": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/density": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dom": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/elevation": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/feature-targeting": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/list": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/list": "14.0.0-canary.261f2db59.0", + "@material/menu-surface": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu-surface": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/mwc-base": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@lit/reactive-element": "1.0.0-rc.4", + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-button": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-icon": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-checkbox": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-icon-button": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-list": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/list": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-checkbox": "^0.25.3", + "@material/mwc-radio": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-menu": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/menu": "=14.0.0-canary.261f2db59.0", + "@material/menu-surface": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-list": "^0.25.3", + "@material/shape": "=14.0.0-canary.261f2db59.0", + "@material/theme": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-radio": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "@material/radio": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/mwc-ripple": { + "version": "0.25.3", + "license": "Apache-2.0", + "dependencies": { + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/ripple": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "node_modules/@material/radio": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/ripple": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/rtl": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/shape": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/theme": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/touch-target": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/typography": { + "version": "14.0.0-canary.261f2db59.0", + "license": "MIT", + "dependencies": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@mdjs/core": { + "version": "0.9.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@mdjs/mdjs-preview": "^0.5.8", + "@mdjs/mdjs-story": "^0.3.2", + "@types/unist": "^2.0.3", + "es-module-lexer": "^0.9.3", + "github-markdown-css": "^4.0.0", + "plugins-manager": "^0.3.0", + "rehype-autolink-headings": "^5.0.1", + "rehype-prism": "^1.0.1", + "rehype-raw": "^5.0.0", + "rehype-slug": "^4.0.1", + "rehype-stringify": "^8.0.0", + "remark": "^13.0.0", + "remark-gfm": "^1.0.0", + "remark-parse": "^9.0.0", + "remark-rehype": "^8.0.0", + "slash": "^3.0.0", + "unified": "^9.2.0", + "unist-util-remove": "^2.0.1", + "unist-util-visit": "^2.0.3" + } + }, + "node_modules/@mdjs/core/node_modules/es-module-lexer": { + "version": "0.9.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@mdjs/core/node_modules/remark-parse": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdjs/mdjs-preview": { + "version": "0.5.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@lion/accordion": "^0.9.0", + "@open-wc/scoped-elements": "^2.0.0", + "lit": "^2.2.5" + } + }, + "node_modules/@mdjs/mdjs-story": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "lit": "^2.2.5" + } + }, + "node_modules/@mdn/browser-compat-data": { + "version": "4.2.1", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/@mdx-js/mdx": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/core": { + "version": "7.12.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@mdx-js/mdx/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@mdx-js/mdx/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@mdx-js/util": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@netflix/nerror": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "extsprintf": "^1.4.0", + "lodash": "^4.17.15" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "node_modules/@npmcli/git/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "1.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/promise-spawn": { + "version": "1.3.2", + "dev": true, + "license": "ISC", + "dependencies": { + "infer-owner": "^1.0.4" + } + }, + "node_modules/@npmcli/run-script": { + "version": "1.8.6", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "node_modules/@oozcitak/dom": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", + "integrity": "sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==", + "dev": true, + "dependencies": { + "@oozcitak/infra": "1.0.8", + "@oozcitak/url": "1.0.4", + "@oozcitak/util": "8.3.8" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@oozcitak/infra": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-1.0.8.tgz", + "integrity": "sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==", + "dev": true, + "dependencies": { + "@oozcitak/util": "8.3.8" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@oozcitak/url": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-1.0.4.tgz", + "integrity": "sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==", + "dev": true, + "dependencies": { + "@oozcitak/infra": "1.0.8", + "@oozcitak/util": "8.3.8" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@oozcitak/util": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", + "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", + "dev": true, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@open-wc/dedupe-mixin": { + "version": "1.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@open-wc/scoped-elements": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@lit/reactive-element": "^1.0.0", + "@open-wc/dedupe-mixin": "^1.3.0" + } + }, + "node_modules/@open-wc/scoped-elements/node_modules/@lit/reactive-element": { + "version": "1.3.4", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@pkgr/utils": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@pkgr/utils/node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@polymer/app-layout": { + "version": "3.1.0", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-media-query": "^3.0.0-pre.26", + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/iron-scroll-target-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/app-localize-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-ajax": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0", + "intl-messageformat": "^2.2.0" + } + }, + "node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat": { + "version": "2.2.0", + "license": "BSD-3-Clause", + "dependencies": { + "intl-messageformat-parser": "1.4.0" + } + }, + "node_modules/@polymer/app-route": { + "version": "3.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-location": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/decorators": { + "version": "3.0.0", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.5" + } + }, + "node_modules/@polymer/font-roboto": { + "version": "3.0.2", + "license": "BSD-3-Clause" + }, + "node_modules/@polymer/iron-a11y-announcer": { + "version": "3.2.0", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-a11y-keys-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-ajax": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-autogrow-textarea": { + "version": "3.0.3", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-behaviors": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-checked-element-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-form-element-behavior": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-dropdown": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/neon-animation": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-fit-behavior": { + "version": "3.1.0", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-flex-layout": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-form-element-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-icon": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-icons": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-icon": "^3.0.0-pre.26", + "@polymer/iron-iconset-svg": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-iconset-svg": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-image": { + "version": "3.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-input": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-announcer": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-location": { + "version": "3.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-media-query": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-menu-behavior": { + "version": "3.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-selector": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-meta": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-overlay-behavior": { + "version": "3.0.3", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-fit-behavior": "^3.0.0-pre.26", + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-pages": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/iron-selector": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-resizable-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-scroll-target-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-selector": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/iron-validatable-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/neon-animation": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/iron-selector": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-behaviors": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-checked-element-behavior": "^3.0.0-pre.26", + "@polymer/paper-ripple": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-button": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/paper-behaviors": "^3.0.0-pre.27", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-card": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-image": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-dialog": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/neon-animation": "^3.0.0-pre.26", + "@polymer/paper-dialog-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-dialog-behavior": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-dropdown-menu": { + "version": "3.2.0", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-form-element-behavior": "^3.0.0-pre.26", + "@polymer/iron-icon": "^3.0.0-pre.26", + "@polymer/iron-iconset-svg": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/paper-behaviors": "^3.0.0-pre.27", + "@polymer/paper-input": "^3.1.0", + "@polymer/paper-menu-button": "^3.1.0", + "@polymer/paper-ripple": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.3.1" + } + }, + "node_modules/@polymer/paper-icon-button": { + "version": "3.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-icon": "^3.0.0-pre.26", + "@polymer/paper-behaviors": "^3.0.0-pre.27", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-input": { + "version": "3.2.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-autogrow-textarea": "^3.0.0-pre.26", + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-form-element-behavior": "^3.0.0-pre.26", + "@polymer/iron-input": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-item": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-listbox": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-menu-behavior": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-menu-button": { + "version": "3.1.0", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-dropdown": "^3.0.0-pre.26", + "@polymer/iron-fit-behavior": "^3.1.0", + "@polymer/neon-animation": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-ripple": { + "version": "3.0.2", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-styles": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/font-roboto": "^3.0.1", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/paper-toast": { + "version": "3.0.1", + "license": "BSD-3-Clause", + "dependencies": { + "@polymer/iron-a11y-announcer": "^3.0.0-pre.26", + "@polymer/iron-fit-behavior": "^3.0.0-pre.26", + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/polymer": "^3.0.0" + } + }, + "node_modules/@polymer/polymer": { + "version": "3.5.1", + "license": "BSD-3-Clause", + "dependencies": { + "@webcomponents/shadycss": "^1.9.1" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-image": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "mini-svg-data-uri": "^1.2.3" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@sentry/browser": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.31.1.tgz", + "integrity": "sha512-Rg9F61S1tz1Dv3iUyyGP26bxoi7WJAG2+f2fBbSmFuJ+JTH4Jvu2/F1bBig8Dz01ejzVhbNSUUCfoDhSvksIsQ==", + "dependencies": { + "@sentry/core": "7.31.1", + "@sentry/replay": "7.31.1", + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/browser/node_modules/@sentry/core": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.31.1.tgz", + "integrity": "sha512-quaNU6z8jabmatBTDi28Wpff2yzfWIp/IU4bbi2QOtEiCNT+TQJXqlRTRMu9xLrX7YzyKCL5X2gbit/85lyWUg==", + "dependencies": { + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/browser/node_modules/@sentry/types": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.31.1.tgz", + "integrity": "sha512-1uzr2l0AxEnxUX/S0EdmXUQ15/kDsam8Nbdw4Gai8SU764XwQgA/TTjoewVP597CDI/AHKan67Y630/Ylmkx9w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/browser/node_modules/@sentry/utils": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.31.1.tgz", + "integrity": "sha512-ZsIPq29aNdP9q3R7qIzJhZ9WW+4DzE9g5SfGwx3UjTIxoRRBfdUJUbf7S+LKEdvCkKbyoDt6FLt5MiSJV43xBA==", + "dependencies": { + "@sentry/types": "7.31.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/core": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.30.0.tgz", + "integrity": "sha512-NeLigkBlpcK63ymM63GoIHurml6V3BUe1Vi+trwm4/qqOTzT7PQhvdJCX+o3+atzRBH+zdb6kd4VWx44Oye3KA==", + "dependencies": { + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/electron": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sentry/electron/-/electron-4.2.0.tgz", + "integrity": "sha512-9r7Kb4BOPXNClsYvzWJ1Nppf5cL8sck9Li4KIAgCq/ofogPiE54fbUdJtx5Fkagon5sBSjy0gu74xuhnPexhoA==", + "dependencies": { + "@sentry/browser": "7.30.0", + "@sentry/core": "7.30.0", + "@sentry/node": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "deepmerge": "4.2.2", + "tslib": "^2.3.1" + } + }, + "node_modules/@sentry/electron/node_modules/@sentry/browser": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.30.0.tgz", + "integrity": "sha512-9hpaNAqIBDLdnrZ51iWkqenRotqqweE1f2AlHO56nyT/UE+u+GdmAiBrgRNqdFQQM13JtTG/gu4HGOyLWb9HEA==", + "dependencies": { + "@sentry/core": "7.30.0", + "@sentry/replay": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/electron/node_modules/@sentry/browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/electron/node_modules/@sentry/replay": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.30.0.tgz", + "integrity": "sha512-qJgz1tG0uStqMF5V7gN7KqxZuZY0MMQQY7siwPcSQVYj7X3AQswHjmvD4npEKbIa+jP6aQ6fFjoBjl3c0t3Mmg==", + "dependencies": { + "@sentry/core": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "@sentry/browser": ">=7.24.0" + } + }, + "node_modules/@sentry/node": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.30.0.tgz", + "integrity": "sha512-YYasu6C3I0HBP4N1oc/ed2nunxhGJgtAWaKwq3lo8uk3uF6cB1A8+2e0CpjzU5ejhbaFPUBxHyj4th39Bvku/w==", + "dependencies": { + "@sentry/core": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/node/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/replay": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.31.1.tgz", + "integrity": "sha512-sLArvwZn6IwA/bASctyhxN7LhdCXJvMmyTynRfmk7pzuNzBMc5CNlHeIsDpHrfQuH53IKicvl6cHnHyclu5DSA==", + "dependencies": { + "@sentry/core": "7.31.1", + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@sentry/replay/node_modules/@sentry/core": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.31.1.tgz", + "integrity": "sha512-quaNU6z8jabmatBTDi28Wpff2yzfWIp/IU4bbi2QOtEiCNT+TQJXqlRTRMu9xLrX7YzyKCL5X2gbit/85lyWUg==", + "dependencies": { + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/replay/node_modules/@sentry/types": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.31.1.tgz", + "integrity": "sha512-1uzr2l0AxEnxUX/S0EdmXUQ15/kDsam8Nbdw4Gai8SU764XwQgA/TTjoewVP597CDI/AHKan67Y630/Ylmkx9w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/replay/node_modules/@sentry/utils": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.31.1.tgz", + "integrity": "sha512-ZsIPq29aNdP9q3R7qIzJhZ9WW+4DzE9g5SfGwx3UjTIxoRRBfdUJUbf7S+LKEdvCkKbyoDt6FLt5MiSJV43xBA==", + "dependencies": { + "@sentry/types": "7.31.1", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/replay/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sentry/types": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.30.0.tgz", + "integrity": "sha512-l4A86typvt/SfWh5JffpdxNGkg5EEA8m35BzpIcKmCAQZUDmnb4b478r8jdD2uuOjLmPNmZr1tifdRW4NCLuxQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.30.0.tgz", + "integrity": "sha512-tSlBhr5u/LdE2emxIDTDmjmyRr99GnZGIAh5GwRxUgeDQ3VEfNUFlyFodBCbZ6yeYTYd6PWNih5xoHn1+Rf3Sw==", + "dependencies": { + "@sentry/types": "7.30.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@storybook/csf": { + "version": "0.0.2--canary.4566f4d.1", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/@storybook/csf-tools": { + "version": "6.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/traverse": "^7.12.11", + "@babel/types": "^7.12.11", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/mdx1-csf": "^0.0.1", + "core-js": "^3.8.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@storybook/mdx2-csf": "^0.0.3" + }, + "peerDependenciesMeta": { + "@storybook/mdx2-csf": { + "optional": true + } + } + }, + "node_modules/@storybook/csf-tools/node_modules/core-js": { + "version": "3.24.1", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/@storybook/mdx1-csf": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/preset-env": "^7.12.11", + "@babel/types": "^7.12.11", + "@mdx-js/mdx": "^1.6.22", + "@types/lodash": "^4.14.167", + "js-string-escape": "^1.0.1", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "ts-dedent": "^2.0.0" + } + }, + "node_modules/@storybook/mdx1-csf/node_modules/prettier": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/accepts": { + "version": "1.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/auto-launch": { + "version": "5.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/command-line-args": { + "version": "5.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/component-emitter": { + "version": "1.2.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/content-disposition": { + "version": "0.5.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cookies": { + "version": "0.7.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/express": "*", + "@types/keygrip": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cordova": { + "version": "0.0.34", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.30", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "optional": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-assert": { + "version": "1.5.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "1.8.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "2.8.19", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keygrip": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/koa": { + "version": "2.13.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/accepts": "*", + "@types/content-disposition": "*", + "@types/cookies": "*", + "@types/http-assert": "*", + "@types/http-errors": "*", + "@types/keygrip": "*", + "@types/koa-compose": "*", + "@types/node": "*" + } + }, + "node_modules/@types/koa-compose": { + "version": "3.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/koa": "*" + } + }, + "node_modules/@types/lodash": { + "version": "4.14.182", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "3.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "14.18.23", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse5": { + "version": "6.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/plist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz", + "integrity": "sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "node_modules/@types/polymer": { + "version": "1.2.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/webcomponents.js": "*" + } + }, + "node_modules/@types/prismjs": { + "version": "1.26.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.3.11", + "license": "MIT" + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/trusted-types": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/@types/unist": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/uuidv4": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/verror": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", + "integrity": "sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==", + "dev": true, + "optional": true + }, + "node_modules/@types/webcomponents.js": { + "version": "0.6.37", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "7.4.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "5.33.0", + "@typescript-eslint/type-utils": "5.33.0", + "@typescript-eslint/utils": "5.33.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.33.0", + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/typescript-estree": "5.33.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/visitor-keys": "5.33.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "5.33.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.33.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/visitor-keys": "5.33.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.33.0", + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/typescript-estree": "5.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.33.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@web/config-loader": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/config-loader/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@web/dev-server": { + "version": "0.1.35", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.35.tgz", + "integrity": "sha512-E7TSTSFdGPzhkiE3kIVt8i49gsiAYpJIZHzs1vJmVfdt8U4rsmhE+5roezxZo0hkEw4mNsqj9zCc4Dzqy/IFHg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.11", + "@types/command-line-args": "^5.0.0", + "@web/config-loader": "^0.1.3", + "@web/dev-server-core": "^0.3.19", + "@web/dev-server-rollup": "^0.3.19", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "ip": "^1.1.5", + "nanocolors": "^0.2.1", + "open": "^8.0.2", + "portfinder": "^1.0.32" + }, + "bin": { + "wds": "dist/bin.js", + "web-dev-server": "dist/bin.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-core": { + "version": "0.3.19", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^1.2.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^4.0.6", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^6.0.0", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-esbuild": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.3.3.tgz", + "integrity": "sha512-hB9C8X9NsFWUG2XKT3W+Xcw3IZ/VObf4LNbK14BTjApnNyZfV6hVhSlJfvhgOoJ4DxsImfhIB5+gMRKOG9NmBw==", + "dev": true, + "dependencies": { + "@mdn/browser-compat-data": "^4.0.0", + "@web/dev-server-core": "^0.3.19", + "esbuild": "^0.12 || ^0.13 || ^0.14", + "parse5": "^6.0.1", + "ua-parser-js": "^1.0.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-rollup": { + "version": "0.3.19", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/plugin-node-resolve": "^13.0.4", + "@web/dev-server-core": "^0.3.19", + "nanocolors": "^0.2.1", + "parse5": "^6.0.1", + "rollup": "^2.67.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/dev-server-storybook": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@web/dev-server-storybook/-/dev-server-storybook-0.5.4.tgz", + "integrity": "sha512-zZg2cRrE9HjObL2rtD+P6OvV0qDcxOkSeY13iLxv938/01vAsNUS8eTvdGi2Hzz+EzxvuM6QitKKlxFGG3rKZw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.16.0", + "@babel/preset-env": "^7.16.4", + "@mdx-js/mdx": "^1.6.22", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-node-resolve": "^13.0.4", + "@storybook/csf-tools": "^6.4.9", + "@web/dev-server-core": "^0.3.19", + "@web/rollup-plugin-html": "^1.10.1", + "@web/rollup-plugin-polyfills-loader": "^1.1.1", + "@web/storybook-prebuilt": "^0.1.32", + "babel-plugin-bundled-import-meta": "^0.3.2", + "babel-plugin-template-html-minifier": "^4.1.0", + "es-module-lexer": "^1.0.2", + "globby": "^11.0.1", + "path-is-inside": "^1.0.2", + "rollup": "^2.66.1", + "rollup-plugin-terser": "^7.0.2", + "storybook-addon-markdown-docs": "^1.0.4" + }, + "bin": { + "build-storybook": "dist/build/cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/parse5-utils": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@web/polyfills-loader": { + "version": "1.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.12.10", + "@web/parse5-utils": "^1.3.0", + "@webcomponents/shadycss": "^1.11.0", + "@webcomponents/webcomponentsjs": "^2.5.0", + "abortcontroller-polyfill": "^1.5.0", + "construct-style-sheets-polyfill": "^3.0.5", + "core-js-bundle": "^3.8.1", + "dynamic-import-polyfill": "^0.1.1", + "es-module-shims": "^1.4.1", + "intersection-observer": "^0.12.0", + "parse5": "^6.0.1", + "regenerator-runtime": "^0.13.7", + "resize-observer-polyfill": "^1.5.1", + "shady-css-scoped-element": "^0.0.2", + "systemjs": "^6.8.1", + "terser": "^5.14.2", + "whatwg-fetch": "^3.5.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/rollup-plugin-html": { + "version": "1.10.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@web/parse5-utils": "^1.3.0", + "glob": "^7.1.6", + "html-minifier-terser": "^6.0.0", + "parse5": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/rollup-plugin-polyfills-loader": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@web/polyfills-loader": "^1.3.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@web/storybook-prebuilt": { + "version": "0.1.34", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webcomponents/shadycss": { + "version": "1.11.0", + "license": "BSD-3-Clause" + }, + "node_modules/@webcomponents/webcomponentsjs": { + "version": "2.6.0", + "license": "BSD-3-Clause" + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/7zip-bin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", + "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.3", + "dev": true, + "license": "MIT" + }, + "node_modules/accepts": { + "version": "1.3.8", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.0", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/agentkeepalive/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/android-versions": { + "version": "1.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^5.7.1" + } + }, + "node_modules/android-versions/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/ansi": { + "version": "0.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-base": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/app-builder-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "dev": true + }, + "node_modules/app-builder-lib": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.6.0.tgz", + "integrity": "sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA==", + "dev": true, + "dependencies": { + "@develar/schema-utils": "~2.6.5", + "@electron/universal": "1.2.1", + "@malept/flatpak-bundler": "^0.4.0", + "7zip-bin": "~5.1.1", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.4", + "ejs": "^3.1.7", + "electron-osx-sign": "^0.6.0", + "electron-publish": "23.6.0", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "is-ci": "^3.0.0", + "isbinaryfile": "^4.0.10", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "minimatch": "^3.1.2", + "read-config-file": "6.2.0", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.7", + "tar": "^6.1.11", + "temp-file": "^3.4.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/app-builder-lib/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/append-type": { + "version": "1.0.2", + "dev": true, + "license": "MIT-0" + }, + "node_modules/applescript": { + "version": "1.0.0" + }, + "node_modules/aproba": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/args": { + "version": "2.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "4.1.0", + "chalk": "1.1.3", + "minimist": "1.2.0", + "pkginfo": "0.4.0", + "string-similarity": "1.1.0" + }, + "engines": { + "node": ">= 6.6.0" + } + }, + "node_modules/args/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/args/node_modules/ansi-styles": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/args/node_modules/camelcase": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/args/node_modules/chalk": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/args/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/args/node_modules/minimist": { + "version": "1.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/args/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/args/node_modules/supports-color": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/array-back": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/array-differ": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/array-ify": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-to-sentence": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asar": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz", + "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==", + "deprecated": "Please use @electron/asar moving forward. There is no API change, just a package name change", + "dev": true, + "dependencies": { + "chromium-pickle-js": "^0.2.0", + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + }, + "optionalDependencies": { + "@types/glob": "^7.1.1" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert-valid-glob-opts": { + "version": "1.0.0", + "dev": true, + "license": "CC0-1.0", + "dependencies": { + "glob-option-error": "^1.0.0", + "validate-glob-opts": "^1.0.0" + } + }, + "node_modules/ast-metadata-inferer": { + "version": "0.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@mdn/browser-compat-data": "^3.3.14" + } + }, + "node_modules/ast-metadata-inferer/node_modules/@mdn/browser-compat-data": { + "version": "3.3.14", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "node_modules/async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/auto-launch": { + "version": "5.0.5", + "license": "MIT", + "dependencies": { + "applescript": "^1.0.0", + "mkdirp": "^0.5.1", + "path-is-absolute": "^1.0.0", + "untildify": "^3.0.2", + "winreg": "1.2.4" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-loader": { + "version": "8.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@babel/core": "^7.11.6" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-bundled-import-meta": { + "version": "0.3.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/plugin-syntax-import-meta": "^7.2.0", + "@babel/template": "^7.7.0" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "@babel/core": "^7.7.0" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-extract-import-names": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.2", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-template-html-minifier": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-css": "^4.2.1", + "html-minifier-terser": "^5.0.0", + "is-builtin-module": "^3.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/babel-plugin-template-html-minifier/node_modules/commander": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/babel-plugin-template-html-minifier/node_modules/html-minifier-terser": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/babel-plugin-template-html-minifier/node_modules/terser": { + "version": "4.8.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/babel-plugin-template-html-minifier/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/bail": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64id": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "dev": true, + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big-integer": { + "version": "1.6.51", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "dev": true, + "license": "MIT" + }, + "node_modules/bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5" + } + }, + "node_modules/bmp-js": { + "version": "0.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.0.13", + "dev": true, + "license": "MIT", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/bonjour-service/node_modules/array-flatten": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true, + "optional": true + }, + "node_modules/bplist-creator": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "stream-buffers": "2.2.x" + } + }, + "node_modules/bplist-parser": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.44" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.3", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/builder-util": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.6.0.tgz", + "integrity": "sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ==", + "dev": true, + "dependencies": { + "@types/debug": "^4.1.6", + "@types/fs-extra": "^9.0.11", + "7zip-bin": "~5.1.1", + "app-builder-bin": "4.0.0", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0" + } + }, + "node_modules/builder-util-runtime": { + "version": "9.0.3", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/builder-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/builder-util/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/builtins": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "12.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/cacache/node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/cache-content-type": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001451", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz", + "integrity": "sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/caseless": { + "version": "0.12.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/ccount": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "dev": true, + "license": "ISC" + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true + }, + "node_modules/ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "4.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "optional": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/co": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collapse-white-space": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.19", + "dev": true, + "license": "MIT" + }, + "node_modules/colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/command-line-args": { + "version": "5.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/command-line-usage/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/compare-func": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/compressible": { + "version": "2.0.18", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "optional": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/connect": { + "version": "3.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/finalhandler": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/connect/node_modules/on-finished": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/connect/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/construct-style-sheets-polyfill": { + "version": "3.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/content-type": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "4.6.3", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.4.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/cookies": { + "version": "0.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-dir": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-webpack-plugin": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/array-union": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/dir-glob": { + "version": "2.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/find-cache-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/find-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "3.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ignore": { + "version": "3.3.10", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-webpack-plugin/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/copy-webpack-plugin/node_modules/loader-utils": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/make-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/make-dir/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/pkg-dir": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cordova-android": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-11.0.0.tgz", + "integrity": "sha512-ZhvSF5BYY8gmrAu1PtMPdHFsRoom/emT4OtTcecmh3Zj22900y4Golg5whhBPcYcTPC7BU6PG/EmG9BBHcX9tQ==", + "dev": true, + "dependencies": { + "android-versions": "^1.7.0", + "cordova-common": "^4.0.2", + "execa": "^5.1.1", + "fast-glob": "^3.2.11", + "fs-extra": "^10.1.0", + "is-path-inside": "^3.0.3", + "nopt": "^5.0.0", + "properties-parser": "^0.3.1", + "semver": "^7.3.7", + "untildify": "^4.0.0", + "which": "^2.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/cordova-android/node_modules/fs-extra": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cordova-android/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cordova-android/node_modules/untildify": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cordova-browser": { + "version": "6.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "cordova-common": "^3.1.0", + "cordova-serve": "^3.0.0", + "nopt": "^4.0.1", + "shelljs": "^0.5.3" + }, + "bin": { + "cordova-browser": "bin/create" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/cordova-browser/node_modules/bplist-parser": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.7" + } + }, + "node_modules/cordova-browser/node_modules/cordova-common": { + "version": "3.2.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "ansi": "^0.3.1", + "bplist-parser": "^0.1.0", + "cross-spawn": "^6.0.5", + "elementtree": "0.1.7", + "endent": "^1.1.1", + "fs-extra": "^8.0.0", + "glob": "^7.1.2", + "minimatch": "^3.0.0", + "plist": "^3.0.1", + "q": "^1.4.1", + "strip-bom": "^3.0.0", + "underscore": "^1.8.3", + "which": "^1.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/cordova-browser/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cordova-browser/node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/cordova-browser/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/cordova-browser/node_modules/nopt": { + "version": "4.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/cordova-browser/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-browser/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/cordova-browser/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cordova-browser/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cordova-browser/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-browser/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/cordova-browser/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/cordova-common": { + "version": "4.0.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@netflix/nerror": "^1.1.3", + "ansi": "^0.3.1", + "bplist-parser": "^0.2.0", + "cross-spawn": "^7.0.1", + "elementtree": "^0.1.7", + "endent": "^1.4.1", + "fast-glob": "^3.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "plist": "^3.0.1", + "q": "^1.5.1", + "read-chunk": "^3.2.0", + "strip-bom": "^4.0.0", + "underscore": "^1.9.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/cordova-fetch": { + "version": "3.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "cordova-common": "^4.0.0", + "fs-extra": "^9.0.0", + "npm-package-arg": "^8.0.1", + "pacote": "^11.1.11", + "pify": "^5.0.0", + "resolve": "^1.15.1", + "semver": "^7.1.3", + "which": "^2.0.2" + }, + "engines": { + "node": ">= 10", + "npm": ">= 5.6.0" + } + }, + "node_modules/cordova-fetch/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cordova-ios": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-6.3.0.tgz", + "integrity": "sha512-BZybgFzc7D0HmhkTYurFrRXiWgvYohmT7bwQsLPhf+VdiDjwGXbiSWgg3uP9MChvacCNcGXXUl2NhOaNC9UVaA==", + "dev": true, + "dependencies": { + "cordova-common": "^4.0.2", + "fs-extra": "^9.1.0", + "ios-sim": "^8.0.2", + "nopt": "^5.0.0", + "plist": "^3.0.1", + "semver": "^7.3.4", + "unorm": "^1.6.0", + "which": "^2.0.2", + "xcode": "^3.0.1", + "xml-escape": "^1.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cordova-ios/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cordova-lib": { + "version": "11.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "cordova-common": "^4.0.2", + "cordova-fetch": "^3.0.1", + "cordova-serve": "^4.0.0", + "dep-graph": "^1.1.0", + "detect-indent": "^6.1.0", + "detect-newline": "^3.1.0", + "elementtree": "^0.1.7", + "execa": "^5.1.1", + "fs-extra": "^10.0.0", + "globby": "^11.0.4", + "init-package-json": "^2.0.5", + "md5-file": "^5.0.0", + "pify": "^5.0.0", + "semver": "^7.3.5", + "stringify-package": "^1.0.1", + "write-file-atomic": "^3.0.3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cordova-lib/node_modules/chalk": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cordova-lib/node_modules/cordova-serve": { + "version": "4.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "chalk": "^3.0.0", + "compression": "^1.7.4", + "express": "^4.17.1", + "open": "^7.0.3", + "which": "^2.0.2" + }, + "engines": { + "node": ">= 10", + "npm": ">= 5.6.0" + } + }, + "node_modules/cordova-lib/node_modules/fs-extra": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cordova-lib/node_modules/open": { + "version": "7.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cordova-lib/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cordova-osx": { + "version": "7.1.0-dev", + "resolved": "git+ssh://git@github.com/apache/cordova-osx.git#16b56e4a9297c5195a06a57450aeb983e7053184", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "cordova-common": "^4.0.2", + "nopt": "^5.0.0", + "plist": "^3.0.4", + "shelljs": "^0.8.5", + "underscore": "^1.13.2", + "unorm": "^1.4.1", + "xcode": "^3.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/cordova-osx/node_modules/interpret": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cordova-osx/node_modules/rechoir": { + "version": "0.6.2", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cordova-osx/node_modules/shelljs": { + "version": "0.8.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-plugin-clipboard": { + "version": "2.0.0", + "resolved": "git+ssh://git@github.com/Jigsaw-Code/outline-cordova-plugin-clipboard.git#8cc5101b7a264122c71f7f3a3cb5744a8fad8498", + "dev": true, + "license": "MIT" + }, + "node_modules/cordova-plugin-outline": { + "resolved": "src/cordova/plugin", + "link": true + }, + "node_modules/cordova-plugin-splashscreen": { + "version": "6.0.2", + "license": "Apache-2.0", + "engines": { + "cordovaDependencies": { + ">=4.0.0": { + "cordova-android": ">=3.6.0", + "cordova-windows": ">=4.4.0" + }, + "2.0.0": { + "cordova-android": ">=3.6.0" + }, + "6.0.2": { + "cordova-android": ">=3.6.0 <11.0.0", + "cordova-windows": ">=4.4.0" + }, + "7.0.0": { + "cordova": ">100" + } + } + } + }, + "node_modules/cordova-plugin-statusbar": { + "version": "2.4.3", + "license": "Apache-2.0", + "engines": { + "cordovaDependencies": { + "0.1.0": { + "cordova": ">=3.0.0" + }, + "3.0.0": { + "cordova": ">100" + } + } + } + }, + "node_modules/cordova-serve": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "chalk": "^2.4.1", + "compression": "^1.6.0", + "express": "^4.13.3", + "opn": "^5.3.0", + "which": "^1.3.0" + }, + "engines": { + "node": ">= 6", + "npm": ">= 3" + } + }, + "node_modules/cordova-serve/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-serve/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-serve/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/cordova-serve/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/cordova-serve/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/cordova-serve/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-serve/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cordova-serve/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/cordova-webintent": { + "version": "2.0.0", + "resolved": "git+ssh://git@github.com/cordova-misc/cordova-webintent.git#6c045cece3e49e4dd061d56fc15569053e9a0c4a", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js": { + "version": "2.6.12", + "dev": true, + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/core-js-bundle": { + "version": "3.24.1", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.24.1", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.3", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/cosmiconfig/node_modules/import-fresh": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/cosmiconfig/node_modules/resolve-from": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/cosmiconfig/node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/cross-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/cross-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "5.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/css-loader/node_modules/icss-utils": { + "version": "5.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/css-loader/node_modules/postcss": { + "version": "8.4.16", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/css-loader/node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/postcss-modules-scope": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/postcss-modules-values": { + "version": "4.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/css-loader/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-selector-parser": { + "version": "1.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/css-what": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/cyclist": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/date-format": { + "version": "4.0.13", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debounce": { + "version": "1.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-equal": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/del": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/del/node_modules/array-union": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/dep-graph": { + "version": "1.1.0", + "dev": true, + "dependencies": { + "underscore": "1.2.1" + } + }, + "node_modules/dep-graph/node_modules/underscore": { + "version": "1.2.1", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detab": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/devtools-protocol": { + "version": "0.0.981744", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/di": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-compare": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", + "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==", + "dev": true, + "dependencies": { + "buffer-equal": "1.0.0", + "colors": "1.0.3", + "commander": "2.9.0", + "minimatch": "3.0.4" + }, + "bin": { + "dircompare": "src/cli/dircompare.js" + } + }, + "node_modules/dir-compare/node_modules/commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", + "dev": true, + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/dir-compare/node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dmg-builder": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.6.0.tgz", + "integrity": "sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA==", + "dev": true, + "dependencies": { + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "fs-extra": "^10.0.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "optionalDependencies": { + "dmg-license": "^1.0.11" + } + }, + "node_modules/dmg-builder/node_modules/builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/dmg-builder/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + }, + "bin": { + "dmg-license": "bin/dmg-license.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "dev": true + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/dynamic-import-polyfill": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron": { + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/electron/-/electron-19.1.9.tgz", + "integrity": "sha512-XT5LkTzIHB+ZtD3dTmNnKjVBWrDWReCKt9G1uAFLz6uJMEVcIUiYO+fph5pLXETiBw/QZBx8egduMEfIccLx+g==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@electron/get": "^1.14.1", + "@types/node": "^16.11.26", + "extract-zip": "^1.0.3" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 8.6" + } + }, + "node_modules/electron-builder": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.6.0.tgz", + "integrity": "sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw==", + "dev": true, + "dependencies": { + "@types/yargs": "^17.0.1", + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "dmg-builder": "23.6.0", + "fs-extra": "^10.0.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.2.0", + "simple-update-notifier": "^1.0.7", + "yargs": "^17.5.1" + }, + "bin": { + "electron-builder": "cli.js", + "install-app-deps": "install-app-deps.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/electron-builder/node_modules/builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/electron-builder/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/electron-builder/node_modules/fs-extra": { + "version": "10.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-icon-maker": { + "version": "0.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "args": "^2.3.0", + "icon-gen": "2.0.0", + "jimp": "^0.14.0" + }, + "bin": { + "electron-icon-maker": "index.js" + } + }, + "node_modules/electron-osx-sign": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", + "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", + "deprecated": "Please use @electron/osx-sign moving forward. Be aware the API is slightly different", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "compare-version": "^0.1.2", + "debug": "^2.6.8", + "isbinaryfile": "^3.0.2", + "minimist": "^1.2.0", + "plist": "^3.0.1" + }, + "bin": { + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/electron-osx-sign/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/electron-osx-sign/node_modules/isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "dependencies": { + "buffer-alloc": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/electron-osx-sign/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/electron-publish": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.6.0.tgz", + "integrity": "sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg==", + "dev": true, + "dependencies": { + "@types/fs-extra": "^9.0.11", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "fs-extra": "^10.0.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + } + }, + "node_modules/electron-publish/node_modules/builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/electron-publish/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/electron-publish/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.215", + "license": "ISC" + }, + "node_modules/electron-updater": { + "version": "5.2.1", + "license": "MIT", + "dependencies": { + "@types/semver": "^7.3.6", + "builder-util-runtime": "9.0.3", + "fs-extra": "^10.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "lodash.escaperegexp": "^4.1.2", + "lodash.isequal": "^4.5.0", + "semver": "^7.3.5", + "typed-emitter": "^2.1.0" + } + }, + "node_modules/electron-updater/node_modules/fs-extra": { + "version": "10.1.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-updater/node_modules/semver": { + "version": "7.3.7", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/electron/node_modules/@types/node": { + "version": "16.11.47", + "dev": true, + "license": "MIT" + }, + "node_modules/elementtree": { + "version": "0.1.7", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "sax": "1.1.4" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/elementtree/node_modules/sax": { + "version": "1.1.4", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/endent": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.4" + } + }, + "node_modules/engine.io": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/ws": { + "version": "8.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/entities": { + "version": "2.2.0", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.20.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-module-lexer": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/es-module-shims": { + "version": "1.5.14", + "dev": true, + "license": "MIT" + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "optional": true + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.12.29", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/escodegen/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.10.0", + "get-tsconfig": "^4.2.0", + "globby": "^13.1.2", + "is-core-module": "^2.9.0", + "is-glob": "^4.0.3", + "synckit": "^0.8.1" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/globby": { + "version": "13.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/slash": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-limit": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-try": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-compat": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@mdn/browser-compat-data": "^4.1.5", + "ast-metadata-inferer": "^0.7.0", + "browserslist": "^4.16.8", + "caniuse-lite": "^1.0.30001304", + "core-js": "^3.16.2", + "find-up": "^5.0.0", + "lodash.memoize": "4.1.2", + "semver": "7.3.5" + }, + "engines": { + "node": ">=9.x" + }, + "peerDependencies": { + "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-compat/node_modules/core-js": { + "version": "3.24.1", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/eslint-plugin-compat/node_modules/semver": { + "version": "7.3.5", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esm": { + "version": "3.2.25", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/espree": { + "version": "9.3.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exif-parser": { + "version": "0.1.12", + "dev": true + }, + "node_modules/express": { + "version": "4.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/extract-zip/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/extract-zip/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.4.1", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-parse": { + "version": "1.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "dev": true, + "license": "ISC" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/file-type": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/file-url": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/findup": { + "version": "0.1.5", + "dev": true, + "dependencies": { + "colors": "~0.6.0-1", + "commander": "~2.1.0" + }, + "bin": { + "findup": "bin/findup.js" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/findup/node_modules/colors": { + "version": "0.6.2", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/findup/node_modules/commander": { + "version": "2.1.0", + "dev": true, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.2.6", + "dev": true, + "license": "ISC" + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "dev": true, + "license": "Unlicense" + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "dev": true, + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "2.7.4", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stdin": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/gifwrap": { + "version": "0.9.4", + "dev": true, + "license": "MIT", + "dependencies": { + "image-q": "^4.0.0", + "omggif": "^1.0.10" + } + }, + "node_modules/github-markdown-css": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-slugger": { + "version": "1.4.0", + "dev": true, + "license": "ISC" + }, + "node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-option-error": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/global": { + "version": "4.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-agent/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "optional": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/global-tunnel-ng": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", + "dev": true, + "optional": true, + "dependencies": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "optional": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globalyzer": { + "version": "0.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "license": "ISC" + }, + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", + "dev": true + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/hasha": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hasha/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5/node_modules/@types/parse5": { + "version": "5.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/hast-util-has-property": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-heading-rank": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-sanitize": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-html": { + "version": "7.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ccount": "^1.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.0", + "html-void-elements": "^1.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0", + "stringify-entities": "^3.0.1", + "unist-util-is": "^4.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "dev": true, + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/clean-css": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-void-elements": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-assert": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-assert/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-assert/node_modules/http-errors": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-assert/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/husky": { + "version": "1.3.1", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^5.0.7", + "execa": "^1.0.0", + "find-up": "^3.0.0", + "get-stdin": "^6.0.0", + "is-ci": "^2.0.0", + "pkg-dir": "^3.0.0", + "please-upgrade-node": "^3.1.1", + "read-pkg": "^4.0.1", + "run-node": "^1.0.0", + "slash": "^2.0.0" + }, + "bin": { + "husky-upgrade": "lib/upgrader/bin.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/husky/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/husky/node_modules/execa": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/find-up": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/is-ci": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/husky/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/husky/node_modules/locate-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/npm-run-path": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/husky/node_modules/p-locate": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/path-exists": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/husky/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/husky/node_modules/pkg-dir": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/husky/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/husky/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/husky/node_modules/slash": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/icon-gen": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "del": "^3.0.0", + "mkdirp": "^0.5.1", + "pngjs-nozlib": "^1.0.0", + "svg2png": "4.1.1", + "uuid": "^3.3.2" + }, + "bin": { + "icon-gen": "dist/bin/index.js" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + }, + "engines": { + "node": "^8.11.2 || >=10" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/iferr": { + "version": "0.1.5", + "dev": true, + "license": "MIT" + }, + "node_modules/ignore": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "3.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/image-q": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "16.9.1" + } + }, + "node_modules/image-q/node_modules/@types/node": { + "version": "16.9.1", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/indexed-filter": { + "version": "1.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "append-type": "^1.0.1" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true + }, + "node_modules/init-package-json": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-package-arg": "^8.1.5", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "^4.1.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/init-package-json/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/inspect-with-kind": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "kind-of": "^6.0.2" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/intersection-observer": { + "version": "0.12.2", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/intl-messageformat": { + "version": "9.13.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/fast-memoize": "1.2.1", + "@formatjs/icu-messageformat-parser": "2.1.0", + "tslib": "^2.1.0" + } + }, + "node_modules/intl-messageformat-parser": { + "version": "1.4.0", + "license": "BSD-3-Clause" + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ios-deploy": { + "version": "1.11.4", + "hasInstallScript": true, + "license": "GPLv3", + "optional": true, + "os": [ + "darwin" + ], + "bin": { + "ios-deploy": "build/Release/ios-deploy" + } + }, + "node_modules/ios-sim": { + "version": "8.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bplist-parser": "^0.0.6", + "nopt": "1.0.9", + "plist": "^3.0.1", + "simctl": "^2" + }, + "bin": { + "ios-sim": "bin/ios-sim" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ios-sim/node_modules/bplist-parser": { + "version": "0.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/ios-sim/node_modules/nopt": { + "version": "1.0.9", + "dev": true, + "license": "MIT", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/ip": { + "version": "1.1.8", + "license": "MIT" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-function": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-module": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-cwd": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-in-cwd": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-in-cwd/node_modules/is-path-inside": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-word-character": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha512-nMtdn4hvK0HjUlzr1DrKSUY8ychprt8dzHOgY2KXsIhHu5PuQQEOTM27gV9Xblyon7aUH/TSFIjRHEODF/FRPg==", + "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", + "dev": true, + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul/node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true + }, + "node_modules/istanbul/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/istanbul/node_modules/async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "node_modules/istanbul/node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul/node_modules/glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/istanbul/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/istanbul/node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "node_modules/istanbul/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/istanbul/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/istanbul/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jasmine-core": { + "version": "3.99.1", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jimp": { + "version": "0.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.14.0", + "@jimp/plugins": "^0.14.0", + "@jimp/types": "^0.14.0", + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/js-base64": { + "version": "3.7.2", + "license": "BSD-3-Clause" + }, + "node_modules/js-string-escape": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/jsprim": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jsprim/node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/jsprim/node_modules/extsprintf": { + "version": "1.3.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/jsprim/node_modules/verror": { + "version": "1.10.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/karma": { + "version": "6.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-chrome-launcher/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/karma-coverage-istanbul-reporter": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz", + "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^3.0.2", + "minimatch": "^3.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/mattlewis92" + } + }, + "node_modules/karma-jasmine": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^3.6.0" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "karma": "*" + } + }, + "node_modules/karma-webpack": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "webpack-merge": "^4.1.5" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/karma-webpack/node_modules/webpack-merge": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/karma/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/karma/node_modules/ua-parser-js": { + "version": "0.7.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", + "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/karma/node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/kew": { + "version": "0.7.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/keygrip": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tsscmp": "1.0.6" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/koa": { + "version": "2.13.4", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^2.0.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + }, + "engines": { + "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" + } + }, + "node_modules/koa-compose": { + "version": "4.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/koa-convert": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "co": "^4.6.0", + "koa-compose": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/koa-etag": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "etag": "^1.8.1" + } + }, + "node_modules/koa-send": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/koa-send/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa-send/node_modules/http-errors": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa-send/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa-static": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.1.0", + "koa-send": "^5.0.0" + }, + "engines": { + "node": ">= 7.6.0" + } + }, + "node_modules/koa-static/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/koa/node_modules/http-errors": { + "version": "1.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa/node_modules/http-errors/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/lazy-val": { + "version": "1.0.5", + "license": "MIT" + }, + "node_modules/lcid": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lit": { + "version": "2.2.8", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.3.0", + "lit-element": "^3.2.0", + "lit-html": "^2.2.0" + } + }, + "node_modules/lit-element": { + "version": "3.2.2", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.2.0" + } + }, + "node_modules/lit-element/node_modules/@lit/reactive-element": { + "version": "1.3.4", + "license": "BSD-3-Clause" + }, + "node_modules/lit-html": { + "version": "2.2.7", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, + "node_modules/lit/node_modules/@lit/reactive-element": { + "version": "1.3.4", + "license": "BSD-3-Clause" + }, + "node_modules/load-bmfont": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "node_modules/load-bmfont/node_modules/buffer-equal": { + "version": "0.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/load-bmfont/node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/log4js": { + "version": "6.6.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.13", + "debug": "^4.3.4", + "flatted": "^3.2.6", + "rfdc": "^1.3.0", + "streamroller": "^3.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/longest-streak": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/@tootallnate/once": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "15.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/make-fetch-happen/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/md5-file": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "bin": { + "md5-file": "cli.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^4.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "0.8.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-gfm-autolink-literal": "^0.1.0", + "mdast-util-gfm-strikethrough": "^0.2.0", + "mdast-util-gfm-table": "^0.1.0", + "mdast-util-gfm-task-list-item": "^0.1.0", + "mdast-util-to-markdown": "^0.6.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ccount": "^1.0.0", + "mdast-util-find-and-replace": "^1.1.0", + "micromark": "^2.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "0.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-to-markdown": "^0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "markdown-table": "^2.0.0", + "mdast-util-to-markdown": "~0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "0.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-to-markdown": "~0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "0.6.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.4.7", + "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "2.11.4", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark": "~2.11.0", + "micromark-extension-gfm-autolink-literal": "~0.5.0", + "micromark-extension-gfm-strikethrough": "~0.6.5", + "micromark-extension-gfm-table": "~0.4.0", + "micromark-extension-gfm-tagfilter": "~0.3.0", + "micromark-extension-gfm-task-list-item": "~0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "0.5.7", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark": "~2.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "0.6.5", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "0.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark": "~2.11.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-document": { + "version": "2.19.0", + "dev": true, + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "license": "MIT" + }, + "node_modules/minipass": { + "version": "3.3.4", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mississippi": { + "version": "3.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "dev": true, + "license": "MIT" + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multimatch": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "dev": true, + "license": "ISC" + }, + "node_modules/nanocolors": { + "version": "0.2.13", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "optional": true + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", + "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", + "dev": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "7.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/node-gyp/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/nopt": { + "version": "5.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "optional": true, + "dependencies": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-conf/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-install-checks": { + "version": "4.0.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-install-checks/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/npm-package-arg": { + "version": "8.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-packlist": { + "version": "2.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest": { + "version": "6.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "node_modules/npm-pick-manifest/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-registry-fetch": { + "version": "11.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/objectorarray": { + "version": "1.0.5", + "dev": true, + "license": "ISC" + }, + "node_modules/obuf": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/omggif": { + "version": "1.0.10", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/only": { + "version": "0.0.2", + "dev": true + }, + "node_modules/open": { + "version": "8.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/outline-i18n": { + "version": "0.0.7", + "resolved": "git+ssh://git@github.com/Jigsaw-Code/outline-i18n.git#4642c3657074246b8eca09486941434718f66608", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "11.3.5", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/cacache": { + "version": "15.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pacote/node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pacote/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pacote/node_modules/ssri": { + "version": "8.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-bmfont-ascii": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-bmfont-binary": { + "version": "1.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-bmfont-xml": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/phantomjs-prebuilt": { + "version": "2.1.16", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "es6-promise": "^4.0.3", + "extract-zip": "^1.6.5", + "fs-extra": "^1.0.0", + "hasha": "^2.2.0", + "kew": "^0.7.0", + "progress": "^1.1.8", + "request": "^2.81.0", + "request-progress": "^2.0.1", + "which": "^1.2.10" + }, + "bin": { + "phantomjs": "bin/phantomjs" + } + }, + "node_modules/phantomjs-prebuilt/node_modules/fs-extra": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "node_modules/phantomjs-prebuilt/node_modules/jsonfile": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/phantomjs-prebuilt/node_modules/progress": { + "version": "1.1.8", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/phantomjs-prebuilt/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/phin": { + "version": "2.9.3", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "0.2.1", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pixelmatch": { + "version": "4.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "pngjs": "^3.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkginfo": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/plist": { + "version": "3.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/plugins-manager": { + "version": "0.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/pn": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/pngjs": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pngjs-nozlib": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/postcss": { + "version": "7.0.39", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-rtl": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "rtlcss": "2.5.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "1.19.1", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-quick": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2", + "execa": "^2.1.0", + "find-up": "^4.1.0", + "ignore": "^5.1.4", + "mri": "^1.1.4", + "multimatch": "^4.0.0" + }, + "bin": { + "pretty-quick": "bin/pretty-quick.js" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "prettier": ">=1.8.0" + } + }, + "node_modules/pretty-quick/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-quick/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-quick/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/pretty-quick/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/pretty-quick/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/pretty-quick/node_modules/execa": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^3.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/pretty-quick/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-quick/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-quick/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/npm-run-path": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/p-finally": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-quick/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prismjs": { + "version": "1.28.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process": { + "version": "0.11.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promzard": { + "version": "0.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "read": "1" + } + }, + "node_modules/properties-parser": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "string.prototype.codepointat": "^0.2.0" + }, + "engines": { + "node": ">= 0.3.1" + } + }, + "node_modules/property-information": { + "version": "5.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "optional": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "license": "MIT" + }, + "node_modules/puppeteer": { + "version": "13.7.0", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.5.0" + }, + "engines": { + "node": ">=10.18.1" + } + }, + "node_modules/puppeteer/node_modules/extract-zip": { + "version": "2.0.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/puppeteer/node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/puppeteer/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/puppeteer/node_modules/ws": { + "version": "8.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/q": { + "version": "1.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.10.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read": { + "version": "1.0.7", + "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/read-chunk": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "with-open-file": "^0.1.6" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-chunk/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/read-config-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", + "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==", + "dev": true, + "dependencies": { + "dotenv": "^9.0.2", + "dotenv-expand": "^5.1.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.0", + "lazy-val": "^1.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/read-package-json": { + "version": "4.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-pkg": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg-up/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/path-type": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/pify": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.8.4", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/rehype-autolink-headings": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "extend": "^3.0.0", + "hast-util-has-property": "^1.0.0", + "hast-util-heading-rank": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hast-util-from-parse5": "^6.0.0", + "parse5": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-prism": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "^14.14.31", + "@types/prismjs": "^1.16.6", + "prismjs": "^1.24.1", + "rehype-parse": "^7.0.1", + "unist-util-is": "^4.1.0", + "unist-util-select": "^4.0.0", + "unist-util-visit": "^3.1.0" + }, + "peerDependencies": { + "unified": "^9 || ^10" + } + }, + "node_modules/rehype-prism/node_modules/unist-util-visit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-prism/node_modules/unist-util-visit-parents": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-prism/node_modules/unist-util-visit-parents/node_modules/unist-util-is": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-prism/node_modules/unist-util-visit/node_modules/unist-util-is": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "hast-util-raw": "^6.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-raw/node_modules/hast-util-raw": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-slug": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "github-slugger": "^1.1.1", + "hast-util-has-property": "^1.0.0", + "hast-util-heading-rank": "^1.0.0", + "hast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-stringify": { + "version": "8.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "hast-util-to-html": "^7.1.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark": { + "version": "13.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-footnotes": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-gfm": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-gfm": "^0.1.0", + "micromark-extension-gfm": "^0.3.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-html": { + "version": "13.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "hast-util-sanitize": "^3.0.0", + "hast-util-to-html": "^7.0.0", + "mdast-util-to-hast": "^10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "1.6.22", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true, + "license": "MIT" + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/remark-mdx/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-parse": { + "version": "8.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-to-hast": "^10.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype/node_modules/mdast-util-to-hast": { + "version": "10.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug": { + "version": "6.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-slug/node_modules/mdast-util-to-string": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "9.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-to-markdown": "^0.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark/node_modules/remark-parse": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-in-file": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz", + "integrity": "sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "bin": { + "replace-in-file": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/replace-in-file/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/request": { + "version": "2.88.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-progress": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-path": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/resolve-path/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/http-errors": { + "version": "1.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/resolve-path/node_modules/inherits": { + "version": "2.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/resolve-path/node_modules/setprototypeof": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/resolve-path/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "2.7.1", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rmfr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "assert-valid-glob-opts": "^1.0.0", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "inspect-with-kind": "^1.0.4", + "rimraf": "^2.6.2" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/rollup": { + "version": "2.77.3", + "dev": true, + "license": "MIT", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rtlcss": { + "version": "2.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2", + "findup": "^0.1.5", + "mkdirp": "^0.5.1", + "postcss": "^6.0.23", + "strip-json-comments": "^2.0.0" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + } + }, + "node_modules/rtlcss/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rtlcss/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/rtlcss/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/rtlcss/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/rtlcss/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/rtlcss/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/rtlcss/node_modules/postcss": { + "version": "6.0.23", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/rtlcss/node_modules/strip-json-comments": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rtlcss/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/run-node": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "bin": { + "run-node": "run-node" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-queue": { + "version": "1.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/rxjs": { + "version": "7.5.6", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "license": "ISC" + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/send": { + "version": "0.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/ShadowsocksConfig": { + "name": "outline-shadowsocksconfig", + "version": "0.2.1", + "resolved": "git+ssh://git@github.com/Jigsaw-Code/outline-shadowsocksconfig.git#6d01c4b1beae3a3bc2a1074e5e310dfa023be57d", + "license": "Apache-2.0", + "dependencies": { + "ipaddr.js": "^2.0.0", + "js-base64": "^3.5.2", + "punycode": "^1.4.1" + } + }, + "node_modules/ShadowsocksConfig/node_modules/ipaddr.js": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/shady-css-scoped-element": { + "version": "0.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.5.3", + "dev": true, + "license": "BSD*", + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "dev": true, + "license": "ISC" + }, + "node_modules/simctl": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "shelljs": "^0.8.5", + "tail": "^0.4.0" + } + }, + "node_modules/simctl/node_modules/interpret": { + "version": "1.4.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/simctl/node_modules/rechoir": { + "version": "0.6.2", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/simctl/node_modules/shelljs": { + "version": "0.8.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/simple-plist": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + } + }, + "node_modules/simple-plist/node_modules/bplist-parser": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "big-integer": "1.6.x" + }, + "engines": { + "node": ">= 5.10.0" + } + }, + "node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", + "socket.io-parser": "~4.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/socket.io-parser": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/socks": { + "version": "1.1.10", + "license": "MIT", + "dependencies": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + }, + "engines": { + "node": ">= 0.10.0", + "npm": ">= 1.3.5" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/socks-proxy-agent/node_modules/ip": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/socks-proxy-agent/node_modules/socks": { + "version": "2.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks/node_modules/smart-buffer": { + "version": "1.1.15", + "license": "MIT", + "engines": { + "node": ">= 0.10.15", + "npm": ">= 1.3.5" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true, + "optional": true + }, + "node_modules/sshpk": { + "version": "1.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/storybook-addon-markdown-docs": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/core": "^7.17.5", + "@babel/generator": "^7.17.3", + "@babel/parser": "^7.17.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-react-jsx": "^7.17.3", + "@mdjs/core": "^0.9.2", + "@mdx-js/mdx": "^1.6.22", + "detab": "^2.0.4", + "mdurl": "^1.0.1", + "remark-html": "^13.0.2", + "remark-parse": "^9.0.0", + "remark-slug": "^6.1.0", + "unified": "^9.2.2", + "unist-builder": "^2.0.3", + "unist-util-visit-parents": "^3.1.1" + } + }, + "node_modules/storybook-addon-markdown-docs/node_modules/remark-parse": { + "version": "9.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/storybook-addon-markdown-docs/node_modules/unified": { + "version": "9.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/stream-buffers": { + "version": "2.2.0", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/streamroller": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "^4.0.13", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/streamroller/node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/streamroller/node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-similarity": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "lodash": "^4.13.1" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.codepointat": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-entities": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-package": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/style-loader/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/sudo-prompt": { + "version": "9.2.1", + "license": "MIT" + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg2png": { + "version": "4.1.1", + "dev": true, + "license": "WTFPL", + "dependencies": { + "file-url": "^2.0.0", + "phantomjs-prebuilt": "^2.1.14", + "pn": "^1.0.0", + "yargs": "^6.5.0" + }, + "bin": { + "svg2png": "bin/svg2png-cli.js" + } + }, + "node_modules/svg2png/node_modules/ansi-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg2png/node_modules/camelcase": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg2png/node_modules/cliui": { + "version": "3.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/svg2png/node_modules/get-caller-file": { + "version": "1.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/svg2png/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg2png/node_modules/string-width": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg2png/node_modules/strip-ansi": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg2png/node_modules/wrap-ansi": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg2png/node_modules/y18n": { + "version": "3.2.2", + "dev": true, + "license": "ISC" + }, + "node_modules/svg2png/node_modules/yargs": { + "version": "6.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + }, + "node_modules/svg2png/node_modules/yargs-parser": { + "version": "4.2.1", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^3.0.0" + } + }, + "node_modules/synckit": { + "version": "0.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/utils": "^2.3.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/systemjs": { + "version": "6.12.2", + "dev": true, + "license": "MIT" + }, + "node_modules/table-layout": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/tail": { + "version": "0.4.0", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.11", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar/node_modules/chownr": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "dependencies": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + } + }, + "node_modules/temp-file/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/terser": { + "version": "5.14.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "dev": true, + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/throttleit": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/timm": { + "version": "1.7.1", + "dev": true, + "license": "MIT" + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "dev": true, + "license": "MIT", + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "node_modules/tinycolor2": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/tmp": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "dependencies": { + "tmp": "^0.2.0" + } + }, + "node_modules/tmp/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tough-cookie/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/trim": { + "version": "0.0.1", + "dev": true + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-loader": { + "version": "9.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/semver": { + "version": "7.3.7", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "license": "0BSD" + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "dev": true, + "license": "0BSD" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-emitter": { + "version": "2.1.0", + "license": "MIT", + "optionalDependencies": { + "rxjs": "*" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.7.4", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/typical": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ua-parser-js": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.33.tgz", + "integrity": "sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/underscore": { + "version": "1.13.4", + "dev": true, + "license": "MIT" + }, + "node_modules/unherit": { + "version": "1.1.3", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "9.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/unist-builder": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-select": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "css-selector-parser": "^1.0.0", + "nth-check": "^2.0.0", + "unist-util-is": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-select/node_modules/unist-util-is": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-select/node_modules/zwitch": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unorm": { + "version": "1.6.0", + "dev": true, + "license": "MIT or GPL-2.0", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/untildify": { + "version": "3.0.3", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-browserslist-db/node_modules/picocolors": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/url": { + "version": "0.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", + "dev": true + }, + "node_modules/utif": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "pako": "^1.0.5" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/utila": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/uuidv4": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "uuid": "3.3.2" + } + }, + "node_modules/uuidv4/node_modules/uuid": { + "version": "3.3.2", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-glob-opts": { + "version": "1.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "array-to-sentence": "^1.1.0", + "indexed-filter": "^1.0.0", + "inspect-with-kind": "^1.0.4", + "is-plain-obj": "^1.1.0" + } + }, + "node_modules/validate-glob-opts/node_modules/is-plain-obj": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "optional": true, + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "optional": true + }, + "node_modules/vfile": { + "version": "4.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-animations-js": { + "version": "2.3.2", + "license": "Apache-2.0" + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/webpack": { + "version": "5.74.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/@types/ws": { + "version": "8.5.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.11.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/ipaddr.js": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.8.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-shell-plugin-next": { + "version": "2.2.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "webpack": "^5.18.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/es-module-lexer": { + "version": "0.9.3", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/wide-align": { + "version": "1.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/winreg": { + "version": "1.2.4", + "license": "BSD-2-Clause" + }, + "node_modules/with-open-file": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0", + "p-try": "^2.1.0", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/with-open-file/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xcode": { + "version": "3.0.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/xcode/node_modules/uuid": { + "version": "7.0.3", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/xhr": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xml-escape": { + "version": "1.1.0", + "dev": true, + "license": "MIT License" + }, + "node_modules/xml-parse-from-string": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/xml2js": { + "version": "0.4.23", + "dev": true, + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xml2js/node_modules/xmlbuilder": { + "version": "11.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlbuilder": { + "version": "15.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0" + } + }, + "node_modules/xmlbuilder2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.1.1.tgz", + "integrity": "sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==", + "dev": true, + "dependencies": { + "@oozcitak/dom": "1.15.10", + "@oozcitak/infra": "1.0.8", + "@oozcitak/util": "8.3.8", + "js-yaml": "3.14.1" + }, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/xmlbuilder2/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/xmlbuilder2/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/xmlbuilder2/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.5.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "5.0.8", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/ylru": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "src/cordova/plugin": { + "name": "cordova-plugin-outline", + "version": "0.0.0" + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.8", + "dev": true + }, + "@babel/core": { + "version": "7.18.10", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.18.12", + "dev": true, + "requires": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.2", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "dev": true + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.9", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.18.10", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.18.11", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.18.9", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.11", + "@babel/types": "^7.18.10" + } + }, + "@babel/helpers": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.18.11", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.18.8", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.18.10" + }, + "dependencies": { + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + } + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/polyfill": { + "version": "7.12.1", + "dev": true, + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/preset-env": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.18.9", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.18.11", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.18.10", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "dev": true + }, + "@commitlint/config-conventional": { + "version": "16.2.4", + "dev": true, + "requires": { + "conventional-changelog-conventionalcommits": "^4.3.1" + } + }, + "@develar/schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", + "dev": true, + "requires": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "dev": true + }, + "@electron/get": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz", + "integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "global-agent": "^3.0.0", + "global-tunnel-ng": "^2.7.1", + "got": "^9.6.0", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, + "@electron/universal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz", + "integrity": "sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==", + "dev": true, + "requires": { + "@malept/cross-spawn-promise": "^1.1.0", + "asar": "^3.1.0", + "debug": "^4.3.1", + "dir-compare": "^2.4.0", + "fs-extra": "^9.0.1", + "minimatch": "^3.0.4", + "plist": "^3.0.4" + } + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.17.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, + "@formatjs/ecma402-abstract": { + "version": "1.11.4", + "dev": true, + "requires": { + "@formatjs/intl-localematcher": "0.2.25", + "tslib": "^2.1.0" + } + }, + "@formatjs/fast-memoize": { + "version": "1.2.1", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "@formatjs/icu-messageformat-parser": { + "version": "2.1.0", + "dev": true, + "requires": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/icu-skeleton-parser": "1.3.6", + "tslib": "^2.1.0" + } + }, + "@formatjs/icu-skeleton-parser": { + "version": "1.3.6", + "dev": true, + "requires": { + "@formatjs/ecma402-abstract": "1.11.4", + "tslib": "^2.1.0" + } + }, + "@formatjs/intl-localematcher": { + "version": "0.2.25", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "@gar/promisify": { + "version": "1.1.3", + "dev": true + }, + "@humanwhocodes/config-array": { + "version": "0.10.4", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jimp/bmp": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "bmp-js": "^0.1.0" + } + }, + "@jimp/core": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^9.0.0", + "load-bmfont": "^1.3.1", + "mkdirp": "^0.5.1", + "phin": "^2.9.1", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/custom": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/core": "^0.14.0" + } + }, + "@jimp/gif": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "gifwrap": "^0.9.2", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "jpeg-js": "^0.4.0" + } + }, + "@jimp/plugin-blit": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-blur": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-circle": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-color": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "tinycolor2": "^1.4.1" + } + }, + "@jimp/plugin-contain": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-cover": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-crop": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-displace": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-dither": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-fisheye": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-flip": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-gaussian": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-invert": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-mask": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-normalize": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-print": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "load-bmfont": "^1.4.0" + } + }, + "@jimp/plugin-resize": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-rotate": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-scale": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-shadow": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugin-threshold": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0" + } + }, + "@jimp/plugins": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/plugin-blit": "^0.14.0", + "@jimp/plugin-blur": "^0.14.0", + "@jimp/plugin-circle": "^0.14.0", + "@jimp/plugin-color": "^0.14.0", + "@jimp/plugin-contain": "^0.14.0", + "@jimp/plugin-cover": "^0.14.0", + "@jimp/plugin-crop": "^0.14.0", + "@jimp/plugin-displace": "^0.14.0", + "@jimp/plugin-dither": "^0.14.0", + "@jimp/plugin-fisheye": "^0.14.0", + "@jimp/plugin-flip": "^0.14.0", + "@jimp/plugin-gaussian": "^0.14.0", + "@jimp/plugin-invert": "^0.14.0", + "@jimp/plugin-mask": "^0.14.0", + "@jimp/plugin-normalize": "^0.14.0", + "@jimp/plugin-print": "^0.14.0", + "@jimp/plugin-resize": "^0.14.0", + "@jimp/plugin-rotate": "^0.14.0", + "@jimp/plugin-scale": "^0.14.0", + "@jimp/plugin-shadow": "^0.14.0", + "@jimp/plugin-threshold": "^0.14.0", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.14.0", + "pngjs": "^3.3.3" + } + }, + "@jimp/tiff": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "utif": "^2.0.1" + } + }, + "@jimp/types": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/bmp": "^0.14.0", + "@jimp/gif": "^0.14.0", + "@jimp/jpeg": "^0.14.0", + "@jimp/png": "^0.14.0", + "@jimp/tiff": "^0.14.0", + "timm": "^1.6.1" + } + }, + "@jimp/utils": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "regenerator-runtime": "^0.13.3" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jsdevtools/coverage-istanbul-loader": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", + "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==", + "dev": true, + "requires": { + "convert-source-map": "^1.7.0", + "istanbul-lib-instrument": "^4.0.3", + "loader-utils": "^2.0.0", + "merge-source-map": "^1.1.0", + "schema-utils": "^2.7.0" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "dev": true + }, + "@lion/accordion": { + "version": "0.9.0", + "dev": true, + "requires": { + "@lion/core": "^0.22.0" + } + }, + "@lion/core": { + "version": "0.22.0", + "dev": true, + "requires": { + "@open-wc/dedupe-mixin": "^1.3.0", + "@open-wc/scoped-elements": "^2.1.1", + "lit": "^2.0.2" + } + }, + "@lit/reactive-element": { + "version": "1.0.0-rc.4" + }, + "@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + } + }, + "@material/animation": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/base": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/density": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/dom": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/elevation": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/feature-targeting": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "tslib": "^2.1.0" + } + }, + "@material/list": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/typography": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/menu": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/list": "14.0.0-canary.261f2db59.0", + "@material/menu-surface": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/menu-surface": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/elevation": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/shape": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/mwc-base": { + "version": "0.25.3", + "requires": { + "@lit/reactive-element": "1.0.0-rc.4", + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-button": { + "version": "0.25.3", + "requires": { + "@material/mwc-icon": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-checkbox": { + "version": "0.25.3", + "requires": { + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-icon": { + "version": "0.25.3", + "requires": { + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-icon-button": { + "version": "0.25.3", + "requires": { + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-list": { + "version": "0.25.3", + "requires": { + "@material/base": "=14.0.0-canary.261f2db59.0", + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/list": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-checkbox": "^0.25.3", + "@material/mwc-radio": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-menu": { + "version": "0.25.3", + "requires": { + "@material/menu": "=14.0.0-canary.261f2db59.0", + "@material/menu-surface": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/mwc-list": "^0.25.3", + "@material/shape": "=14.0.0-canary.261f2db59.0", + "@material/theme": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-radio": { + "version": "0.25.3", + "requires": { + "@material/mwc-base": "^0.25.3", + "@material/mwc-ripple": "^0.25.3", + "@material/radio": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/mwc-ripple": { + "version": "0.25.3", + "requires": { + "@material/dom": "=14.0.0-canary.261f2db59.0", + "@material/mwc-base": "^0.25.3", + "@material/ripple": "=14.0.0-canary.261f2db59.0", + "lit": "^2.0.0", + "tslib": "^2.0.1" + } + }, + "@material/radio": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/density": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/ripple": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "@material/touch-target": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/ripple": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/animation": "14.0.0-canary.261f2db59.0", + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/dom": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/rtl": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/shape": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/theme": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/touch-target": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/base": "14.0.0-canary.261f2db59.0", + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/rtl": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@material/typography": { + "version": "14.0.0-canary.261f2db59.0", + "requires": { + "@material/feature-targeting": "14.0.0-canary.261f2db59.0", + "@material/theme": "14.0.0-canary.261f2db59.0", + "tslib": "^2.1.0" + } + }, + "@mdjs/core": { + "version": "0.9.5", + "dev": true, + "requires": { + "@mdjs/mdjs-preview": "^0.5.8", + "@mdjs/mdjs-story": "^0.3.2", + "@types/unist": "^2.0.3", + "es-module-lexer": "^0.9.3", + "github-markdown-css": "^4.0.0", + "plugins-manager": "^0.3.0", + "rehype-autolink-headings": "^5.0.1", + "rehype-prism": "^1.0.1", + "rehype-raw": "^5.0.0", + "rehype-slug": "^4.0.1", + "rehype-stringify": "^8.0.0", + "remark": "^13.0.0", + "remark-gfm": "^1.0.0", + "remark-parse": "^9.0.0", + "remark-rehype": "^8.0.0", + "slash": "^3.0.0", + "unified": "^9.2.0", + "unist-util-remove": "^2.0.1", + "unist-util-visit": "^2.0.3" + }, + "dependencies": { + "es-module-lexer": { + "version": "0.9.3", + "dev": true + }, + "remark-parse": { + "version": "9.0.0", + "dev": true, + "requires": { + "mdast-util-from-markdown": "^0.8.0" + } + } + } + }, + "@mdjs/mdjs-preview": { + "version": "0.5.9", + "dev": true, + "requires": { + "@lion/accordion": "^0.9.0", + "@open-wc/scoped-elements": "^2.0.0", + "lit": "^2.2.5" + } + }, + "@mdjs/mdjs-story": { + "version": "0.3.2", + "dev": true, + "requires": { + "lit": "^2.2.5" + } + }, + "@mdn/browser-compat-data": { + "version": "4.2.1", + "dev": true + }, + "@mdx-js/mdx": { + "version": "1.6.22", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "dev": true + } + } + }, + "@mdx-js/util": { + "version": "1.6.22", + "dev": true + }, + "@netflix/nerror": { + "version": "1.1.3", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "extsprintf": "^1.4.0", + "lodash": "^4.17.15" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@npmcli/fs": { + "version": "1.1.1", + "dev": true, + "requires": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/git": { + "version": "2.1.0", + "dev": true, + "requires": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@npmcli/installed-package-contents": { + "version": "1.0.7", + "dev": true, + "requires": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "@npmcli/move-file": { + "version": "1.1.2", + "dev": true, + "requires": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "@npmcli/node-gyp": { + "version": "1.0.3", + "dev": true + }, + "@npmcli/promise-spawn": { + "version": "1.3.2", + "dev": true, + "requires": { + "infer-owner": "^1.0.4" + } + }, + "@npmcli/run-script": { + "version": "1.8.6", + "dev": true, + "requires": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "@oozcitak/dom": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@oozcitak/dom/-/dom-1.15.10.tgz", + "integrity": "sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==", + "dev": true, + "requires": { + "@oozcitak/infra": "1.0.8", + "@oozcitak/url": "1.0.4", + "@oozcitak/util": "8.3.8" + } + }, + "@oozcitak/infra": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@oozcitak/infra/-/infra-1.0.8.tgz", + "integrity": "sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==", + "dev": true, + "requires": { + "@oozcitak/util": "8.3.8" + } + }, + "@oozcitak/url": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@oozcitak/url/-/url-1.0.4.tgz", + "integrity": "sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==", + "dev": true, + "requires": { + "@oozcitak/infra": "1.0.8", + "@oozcitak/util": "8.3.8" + } + }, + "@oozcitak/util": { + "version": "8.3.8", + "resolved": "https://registry.npmjs.org/@oozcitak/util/-/util-8.3.8.tgz", + "integrity": "sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==", + "dev": true + }, + "@open-wc/dedupe-mixin": { + "version": "1.3.1", + "dev": true + }, + "@open-wc/scoped-elements": { + "version": "2.1.3", + "dev": true, + "requires": { + "@lit/reactive-element": "^1.0.0", + "@open-wc/dedupe-mixin": "^1.3.0" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.3.4", + "dev": true + } + } + }, + "@pkgr/utils": { + "version": "2.3.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "is-glob": "^4.0.3", + "open": "^8.4.0", + "picocolors": "^1.0.0", + "tiny-glob": "^0.2.9", + "tslib": "^2.4.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "dev": true + } + } + }, + "@polymer/app-layout": { + "version": "3.1.0", + "requires": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-media-query": "^3.0.0-pre.26", + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/iron-scroll-target-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/app-localize-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/iron-ajax": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0", + "intl-messageformat": "^2.2.0" + }, + "dependencies": { + "intl-messageformat": { + "version": "2.2.0", + "requires": { + "intl-messageformat-parser": "1.4.0" + } + } + } + }, + "@polymer/app-route": { + "version": "3.0.2", + "requires": { + "@polymer/iron-location": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/decorators": { + "version": "3.0.0", + "requires": { + "@polymer/polymer": "^3.0.5" + } + }, + "@polymer/font-roboto": { + "version": "3.0.2" + }, + "@polymer/iron-a11y-announcer": { + "version": "3.2.0", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-a11y-keys-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-ajax": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-autogrow-textarea": { + "version": "3.0.3", + "requires": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-behaviors": { + "version": "3.0.1", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-checked-element-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/iron-form-element-behavior": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-dropdown": { + "version": "3.0.1", + "requires": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/neon-animation": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-fit-behavior": { + "version": "3.1.0", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-flex-layout": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-form-element-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-icon": { + "version": "3.0.1", + "requires": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-icons": { + "version": "3.0.1", + "requires": { + "@polymer/iron-icon": "^3.0.0-pre.26", + "@polymer/iron-iconset-svg": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-iconset-svg": { + "version": "3.0.1", + "requires": { + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-image": { + "version": "3.0.2", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-input": { + "version": "3.0.1", + "requires": { + "@polymer/iron-a11y-announcer": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-location": { + "version": "3.0.2", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-media-query": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-menu-behavior": { + "version": "3.0.2", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-selector": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-meta": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-overlay-behavior": { + "version": "3.0.3", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-fit-behavior": "^3.0.0-pre.26", + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-pages": { + "version": "3.0.1", + "requires": { + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/iron-selector": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-resizable-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-scroll-target-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-selector": { + "version": "3.0.1", + "requires": { + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/iron-validatable-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/iron-meta": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/neon-animation": { + "version": "3.0.1", + "requires": { + "@polymer/iron-resizable-behavior": "^3.0.0-pre.26", + "@polymer/iron-selector": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-behaviors": { + "version": "3.0.1", + "requires": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-checked-element-behavior": "^3.0.0-pre.26", + "@polymer/paper-ripple": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-button": { + "version": "3.0.1", + "requires": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/paper-behaviors": "^3.0.0-pre.27", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-card": { + "version": "3.0.1", + "requires": { + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/iron-image": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-dialog": { + "version": "3.0.1", + "requires": { + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/neon-animation": "^3.0.0-pre.26", + "@polymer/paper-dialog-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-dialog-behavior": { + "version": "3.0.1", + "requires": { + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-dropdown-menu": { + "version": "3.2.0", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-form-element-behavior": "^3.0.0-pre.26", + "@polymer/iron-icon": "^3.0.0-pre.26", + "@polymer/iron-iconset-svg": "^3.0.0-pre.26", + "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", + "@polymer/paper-behaviors": "^3.0.0-pre.27", + "@polymer/paper-input": "^3.1.0", + "@polymer/paper-menu-button": "^3.1.0", + "@polymer/paper-ripple": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.3.1" + } + }, + "@polymer/paper-icon-button": { + "version": "3.0.2", + "requires": { + "@polymer/iron-icon": "^3.0.0-pre.26", + "@polymer/paper-behaviors": "^3.0.0-pre.27", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-input": { + "version": "3.2.1", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-autogrow-textarea": "^3.0.0-pre.26", + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-form-element-behavior": "^3.0.0-pre.26", + "@polymer/iron-input": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-item": { + "version": "3.0.1", + "requires": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-listbox": { + "version": "3.0.1", + "requires": { + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-menu-behavior": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-menu-button": { + "version": "3.1.0", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/iron-behaviors": "^3.0.0-pre.26", + "@polymer/iron-dropdown": "^3.0.0-pre.26", + "@polymer/iron-fit-behavior": "^3.1.0", + "@polymer/neon-animation": "^3.0.0-pre.26", + "@polymer/paper-styles": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-ripple": { + "version": "3.0.2", + "requires": { + "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-styles": { + "version": "3.0.1", + "requires": { + "@polymer/font-roboto": "^3.0.1", + "@polymer/iron-flex-layout": "^3.0.0-pre.26", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/paper-toast": { + "version": "3.0.1", + "requires": { + "@polymer/iron-a11y-announcer": "^3.0.0-pre.26", + "@polymer/iron-fit-behavior": "^3.0.0-pre.26", + "@polymer/iron-overlay-behavior": "^3.0.0-pre.27", + "@polymer/polymer": "^3.0.0" + } + }, + "@polymer/polymer": { + "version": "3.5.1", + "requires": { + "@webcomponents/shadycss": "^1.9.1" + } + }, + "@rollup/plugin-babel": { + "version": "5.3.1", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-image": { + "version": "2.1.1", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "mini-svg-data-uri": "^1.2.3" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.3.0", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@sentry/browser": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.31.1.tgz", + "integrity": "sha512-Rg9F61S1tz1Dv3iUyyGP26bxoi7WJAG2+f2fBbSmFuJ+JTH4Jvu2/F1bBig8Dz01ejzVhbNSUUCfoDhSvksIsQ==", + "requires": { + "@sentry/core": "7.31.1", + "@sentry/replay": "7.31.1", + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1", + "tslib": "^1.9.3" + }, + "dependencies": { + "@sentry/core": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.31.1.tgz", + "integrity": "sha512-quaNU6z8jabmatBTDi28Wpff2yzfWIp/IU4bbi2QOtEiCNT+TQJXqlRTRMu9xLrX7YzyKCL5X2gbit/85lyWUg==", + "requires": { + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1", + "tslib": "^1.9.3" + } + }, + "@sentry/types": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.31.1.tgz", + "integrity": "sha512-1uzr2l0AxEnxUX/S0EdmXUQ15/kDsam8Nbdw4Gai8SU764XwQgA/TTjoewVP597CDI/AHKan67Y630/Ylmkx9w==" + }, + "@sentry/utils": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.31.1.tgz", + "integrity": "sha512-ZsIPq29aNdP9q3R7qIzJhZ9WW+4DzE9g5SfGwx3UjTIxoRRBfdUJUbf7S+LKEdvCkKbyoDt6FLt5MiSJV43xBA==", + "requires": { + "@sentry/types": "7.31.1", + "tslib": "^1.9.3" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/core": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.30.0.tgz", + "integrity": "sha512-NeLigkBlpcK63ymM63GoIHurml6V3BUe1Vi+trwm4/qqOTzT7PQhvdJCX+o3+atzRBH+zdb6kd4VWx44Oye3KA==", + "requires": { + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/electron": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@sentry/electron/-/electron-4.2.0.tgz", + "integrity": "sha512-9r7Kb4BOPXNClsYvzWJ1Nppf5cL8sck9Li4KIAgCq/ofogPiE54fbUdJtx5Fkagon5sBSjy0gu74xuhnPexhoA==", + "requires": { + "@sentry/browser": "7.30.0", + "@sentry/core": "7.30.0", + "@sentry/node": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "deepmerge": "4.2.2", + "tslib": "^2.3.1" + }, + "dependencies": { + "@sentry/browser": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.30.0.tgz", + "integrity": "sha512-9hpaNAqIBDLdnrZ51iWkqenRotqqweE1f2AlHO56nyT/UE+u+GdmAiBrgRNqdFQQM13JtTG/gu4HGOyLWb9HEA==", + "requires": { + "@sentry/core": "7.30.0", + "@sentry/replay": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/replay": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.30.0.tgz", + "integrity": "sha512-qJgz1tG0uStqMF5V7gN7KqxZuZY0MMQQY7siwPcSQVYj7X3AQswHjmvD4npEKbIa+jP6aQ6fFjoBjl3c0t3Mmg==", + "requires": { + "@sentry/core": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0" + } + } + } + }, + "@sentry/node": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-7.30.0.tgz", + "integrity": "sha512-YYasu6C3I0HBP4N1oc/ed2nunxhGJgtAWaKwq3lo8uk3uF6cB1A8+2e0CpjzU5ejhbaFPUBxHyj4th39Bvku/w==", + "requires": { + "@sentry/core": "7.30.0", + "@sentry/types": "7.30.0", + "@sentry/utils": "7.30.0", + "cookie": "^0.4.1", + "https-proxy-agent": "^5.0.0", + "lru_map": "^0.3.3", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/replay": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/replay/-/replay-7.31.1.tgz", + "integrity": "sha512-sLArvwZn6IwA/bASctyhxN7LhdCXJvMmyTynRfmk7pzuNzBMc5CNlHeIsDpHrfQuH53IKicvl6cHnHyclu5DSA==", + "requires": { + "@sentry/core": "7.31.1", + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1" + }, + "dependencies": { + "@sentry/core": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.31.1.tgz", + "integrity": "sha512-quaNU6z8jabmatBTDi28Wpff2yzfWIp/IU4bbi2QOtEiCNT+TQJXqlRTRMu9xLrX7YzyKCL5X2gbit/85lyWUg==", + "requires": { + "@sentry/types": "7.31.1", + "@sentry/utils": "7.31.1", + "tslib": "^1.9.3" + } + }, + "@sentry/types": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.31.1.tgz", + "integrity": "sha512-1uzr2l0AxEnxUX/S0EdmXUQ15/kDsam8Nbdw4Gai8SU764XwQgA/TTjoewVP597CDI/AHKan67Y630/Ylmkx9w==" + }, + "@sentry/utils": { + "version": "7.31.1", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.31.1.tgz", + "integrity": "sha512-ZsIPq29aNdP9q3R7qIzJhZ9WW+4DzE9g5SfGwx3UjTIxoRRBfdUJUbf7S+LKEdvCkKbyoDt6FLt5MiSJV43xBA==", + "requires": { + "@sentry/types": "7.31.1", + "tslib": "^1.9.3" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sentry/types": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.30.0.tgz", + "integrity": "sha512-l4A86typvt/SfWh5JffpdxNGkg5EEA8m35BzpIcKmCAQZUDmnb4b478r8jdD2uuOjLmPNmZr1tifdRW4NCLuxQ==" + }, + "@sentry/utils": { + "version": "7.30.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.30.0.tgz", + "integrity": "sha512-tSlBhr5u/LdE2emxIDTDmjmyRr99GnZGIAh5GwRxUgeDQ3VEfNUFlyFodBCbZ6yeYTYd6PWNih5xoHn1+Rf3Sw==", + "requires": { + "@sentry/types": "7.30.0", + "tslib": "^1.9.3" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + } + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@storybook/csf": { + "version": "0.0.2--canary.4566f4d.1", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "@storybook/csf-tools": { + "version": "6.5.10", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/plugin-transform-react-jsx": "^7.12.12", + "@babel/preset-env": "^7.12.11", + "@babel/traverse": "^7.12.11", + "@babel/types": "^7.12.11", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/mdx1-csf": "^0.0.1", + "core-js": "^3.8.2", + "fs-extra": "^9.0.1", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "core-js": { + "version": "3.24.1", + "dev": true + } + } + }, + "@storybook/mdx1-csf": { + "version": "0.0.1", + "dev": true, + "requires": { + "@babel/generator": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/preset-env": "^7.12.11", + "@babel/types": "^7.12.11", + "@mdx-js/mdx": "^1.6.22", + "@types/lodash": "^4.14.167", + "js-string-escape": "^1.0.1", + "loader-utils": "^2.0.0", + "lodash": "^4.17.21", + "prettier": ">=2.2.1 <=2.3.0", + "ts-dedent": "^2.0.0" + }, + "dependencies": { + "prettier": { + "version": "2.3.0", + "dev": true + } + } + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@types/accepts": { + "version": "1.3.5", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/auto-launch": { + "version": "5.0.2", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.2", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/command-line-args": { + "version": "5.2.0", + "dev": true + }, + "@types/component-emitter": { + "version": "1.2.11", + "dev": true + }, + "@types/connect": { + "version": "3.4.35", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/content-disposition": { + "version": "0.5.5", + "dev": true + }, + "@types/cookie": { + "version": "0.4.1", + "dev": true + }, + "@types/cookies": { + "version": "0.7.7", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/express": "*", + "@types/keygrip": "*", + "@types/node": "*" + } + }, + "@types/cordova": { + "version": "0.0.34", + "dev": true + }, + "@types/cors": { + "version": "2.8.12", + "dev": true + }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dev": true, + "requires": { + "@types/ms": "*" + } + }, + "@types/eslint": { + "version": "8.4.5", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.39", + "dev": true + }, + "@types/express": { + "version": "4.17.13", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.30", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "optional": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/hast": { + "version": "2.3.4", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "dev": true + }, + "@types/http-assert": { + "version": "1.5.3", + "dev": true + }, + "@types/http-errors": { + "version": "1.8.2", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.9", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/jasmine": { + "version": "2.8.19", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "dev": true + }, + "@types/keygrip": { + "version": "1.0.2", + "dev": true + }, + "@types/koa": { + "version": "2.13.5", + "dev": true, + "requires": { + "@types/accepts": "*", + "@types/content-disposition": "*", + "@types/cookies": "*", + "@types/http-assert": "*", + "@types/http-errors": "*", + "@types/keygrip": "*", + "@types/koa-compose": "*", + "@types/node": "*" + } + }, + "@types/koa-compose": { + "version": "3.2.5", + "dev": true, + "requires": { + "@types/koa": "*" + } + }, + "@types/lodash": { + "version": "4.14.182", + "dev": true + }, + "@types/mdast": { + "version": "3.0.10", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, + "@types/mime": { + "version": "3.0.1", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.5", + "dev": true + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "dev": true + }, + "@types/node": { + "version": "14.18.23", + "dev": true + }, + "@types/parse5": { + "version": "6.0.3", + "dev": true + }, + "@types/plist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz", + "integrity": "sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*", + "xmlbuilder": ">=11.0.1" + } + }, + "@types/polymer": { + "version": "1.2.12", + "dev": true, + "requires": { + "@types/webcomponents.js": "*" + } + }, + "@types/prismjs": { + "version": "1.26.0", + "dev": true + }, + "@types/qs": { + "version": "6.9.7", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "dev": true + }, + "@types/resolve": { + "version": "1.17.1", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/retry": { + "version": "0.12.0", + "dev": true + }, + "@types/semver": { + "version": "7.3.11" + }, + "@types/serve-index": { + "version": "1.9.1", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.0", + "dev": true, + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/trusted-types": { + "version": "2.0.2" + }, + "@types/unist": { + "version": "2.0.6", + "dev": true + }, + "@types/uuidv4": { + "version": "2.0.0", + "dev": true + }, + "@types/verror": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", + "integrity": "sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==", + "dev": true, + "optional": true + }, + "@types/webcomponents.js": { + "version": "0.6.37", + "dev": true + }, + "@types/ws": { + "version": "7.4.7", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "17.0.11", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "dev": true + }, + "@types/yauzl": { + "version": "2.10.0", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.33.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.33.0", + "@typescript-eslint/type-utils": "5.33.0", + "@typescript-eslint/utils": "5.33.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.33.0", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.33.0", + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/typescript-estree": "5.33.0", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/visitor-keys": "5.33.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.33.0", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.33.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.33.0", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/visitor-keys": "5.33.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.33.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.33.0", + "@typescript-eslint/types": "5.33.0", + "@typescript-eslint/typescript-estree": "5.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.33.0", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.33.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "@web/config-loader": { + "version": "0.1.3", + "dev": true, + "requires": { + "semver": "^7.3.4" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@web/dev-server": { + "version": "0.1.35", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.35.tgz", + "integrity": "sha512-E7TSTSFdGPzhkiE3kIVt8i49gsiAYpJIZHzs1vJmVfdt8U4rsmhE+5roezxZo0hkEw4mNsqj9zCc4Dzqy/IFHg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.11", + "@types/command-line-args": "^5.0.0", + "@web/config-loader": "^0.1.3", + "@web/dev-server-core": "^0.3.19", + "@web/dev-server-rollup": "^0.3.19", + "camelcase": "^6.2.0", + "command-line-args": "^5.1.1", + "command-line-usage": "^6.1.1", + "debounce": "^1.2.0", + "deepmerge": "^4.2.2", + "ip": "^1.1.5", + "nanocolors": "^0.2.1", + "open": "^8.0.2", + "portfinder": "^1.0.32" + } + }, + "@web/dev-server-core": { + "version": "0.3.19", + "dev": true, + "requires": { + "@types/koa": "^2.11.6", + "@types/ws": "^7.4.0", + "@web/parse5-utils": "^1.2.0", + "chokidar": "^3.4.3", + "clone": "^2.1.2", + "es-module-lexer": "^1.0.0", + "get-stream": "^6.0.0", + "is-stream": "^2.0.0", + "isbinaryfile": "^4.0.6", + "koa": "^2.13.0", + "koa-etag": "^4.0.0", + "koa-send": "^5.0.1", + "koa-static": "^5.0.0", + "lru-cache": "^6.0.0", + "mime-types": "^2.1.27", + "parse5": "^6.0.1", + "picomatch": "^2.2.2", + "ws": "^7.4.2" + } + }, + "@web/dev-server-esbuild": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@web/dev-server-esbuild/-/dev-server-esbuild-0.3.3.tgz", + "integrity": "sha512-hB9C8X9NsFWUG2XKT3W+Xcw3IZ/VObf4LNbK14BTjApnNyZfV6hVhSlJfvhgOoJ4DxsImfhIB5+gMRKOG9NmBw==", + "dev": true, + "requires": { + "@mdn/browser-compat-data": "^4.0.0", + "@web/dev-server-core": "^0.3.19", + "esbuild": "^0.12 || ^0.13 || ^0.14", + "parse5": "^6.0.1", + "ua-parser-js": "^1.0.2" + } + }, + "@web/dev-server-rollup": { + "version": "0.3.19", + "dev": true, + "requires": { + "@rollup/plugin-node-resolve": "^13.0.4", + "@web/dev-server-core": "^0.3.19", + "nanocolors": "^0.2.1", + "parse5": "^6.0.1", + "rollup": "^2.67.0", + "whatwg-url": "^11.0.0" + } + }, + "@web/dev-server-storybook": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@web/dev-server-storybook/-/dev-server-storybook-0.5.4.tgz", + "integrity": "sha512-zZg2cRrE9HjObL2rtD+P6OvV0qDcxOkSeY13iLxv938/01vAsNUS8eTvdGi2Hzz+EzxvuM6QitKKlxFGG3rKZw==", + "dev": true, + "requires": { + "@babel/core": "^7.16.0", + "@babel/preset-env": "^7.16.4", + "@mdx-js/mdx": "^1.6.22", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-node-resolve": "^13.0.4", + "@storybook/csf-tools": "^6.4.9", + "@web/dev-server-core": "^0.3.19", + "@web/rollup-plugin-html": "^1.10.1", + "@web/rollup-plugin-polyfills-loader": "^1.1.1", + "@web/storybook-prebuilt": "^0.1.32", + "babel-plugin-bundled-import-meta": "^0.3.2", + "babel-plugin-template-html-minifier": "^4.1.0", + "es-module-lexer": "^1.0.2", + "globby": "^11.0.1", + "path-is-inside": "^1.0.2", + "rollup": "^2.66.1", + "rollup-plugin-terser": "^7.0.2", + "storybook-addon-markdown-docs": "^1.0.4" + } + }, + "@web/parse5-utils": { + "version": "1.3.0", + "dev": true, + "requires": { + "@types/parse5": "^6.0.1", + "parse5": "^6.0.1" + } + }, + "@web/polyfills-loader": { + "version": "1.3.5", + "dev": true, + "requires": { + "@babel/core": "^7.12.10", + "@web/parse5-utils": "^1.3.0", + "@webcomponents/shadycss": "^1.11.0", + "@webcomponents/webcomponentsjs": "^2.5.0", + "abortcontroller-polyfill": "^1.5.0", + "construct-style-sheets-polyfill": "^3.0.5", + "core-js-bundle": "^3.8.1", + "dynamic-import-polyfill": "^0.1.1", + "es-module-shims": "^1.4.1", + "intersection-observer": "^0.12.0", + "parse5": "^6.0.1", + "regenerator-runtime": "^0.13.7", + "resize-observer-polyfill": "^1.5.1", + "shady-css-scoped-element": "^0.0.2", + "systemjs": "^6.8.1", + "terser": "^5.14.2", + "whatwg-fetch": "^3.5.0" + } + }, + "@web/rollup-plugin-html": { + "version": "1.10.3", + "dev": true, + "requires": { + "@web/parse5-utils": "^1.3.0", + "glob": "^7.1.6", + "html-minifier-terser": "^6.0.0", + "parse5": "^6.0.1" + } + }, + "@web/rollup-plugin-polyfills-loader": { + "version": "1.3.1", + "dev": true, + "requires": { + "@web/polyfills-loader": "^1.3.4" + } + }, + "@web/storybook-prebuilt": { + "version": "0.1.34", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webcomponents/shadycss": { + "version": "1.11.0" + }, + "@webcomponents/webcomponentsjs": { + "version": "2.6.0" + }, + "@webpack-cli/configtest": { + "version": "1.2.0", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.5.0", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.7.0", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "dev": true + }, + "7zip-bin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", + "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "dev": true + }, + "abortcontroller-polyfill": { + "version": "1.7.3", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.0", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "dev": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "dev": true, + "requires": {} + }, + "agent-base": { + "version": "6.0.2", + "requires": { + "debug": "4" + } + }, + "agentkeepalive": { + "version": "4.2.1", + "dev": true, + "requires": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "dev": true + } + } + }, + "aggregate-error": { + "version": "3.1.0", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "dev": true, + "requires": {} + }, + "ajv-formats": { + "version": "2.1.1", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "dev": true, + "requires": {} + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "optional": true + }, + "android-versions": { + "version": "1.7.0", + "dev": true, + "requires": { + "semver": "^5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "dev": true + } + } + }, + "ansi": { + "version": "0.3.1", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "any-base": { + "version": "1.1.0", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "app-builder-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", + "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "dev": true + }, + "app-builder-lib": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.6.0.tgz", + "integrity": "sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA==", + "dev": true, + "requires": { + "@develar/schema-utils": "~2.6.5", + "@electron/universal": "1.2.1", + "@malept/flatpak-bundler": "^0.4.0", + "7zip-bin": "~5.1.1", + "async-exit-hook": "^2.0.1", + "bluebird-lst": "^1.0.9", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chromium-pickle-js": "^0.2.0", + "debug": "^4.3.4", + "ejs": "^3.1.7", + "electron-osx-sign": "^0.6.0", + "electron-publish": "23.6.0", + "form-data": "^4.0.0", + "fs-extra": "^10.1.0", + "hosted-git-info": "^4.1.0", + "is-ci": "^3.0.0", + "isbinaryfile": "^4.0.10", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "minimatch": "^3.1.2", + "read-config-file": "6.2.0", + "sanitize-filename": "^1.6.3", + "semver": "^7.3.7", + "tar": "^6.1.11", + "temp-file": "^3.4.0" + }, + "dependencies": { + "builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "sax": "^1.2.4" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "append-type": { + "version": "1.0.2", + "dev": true + }, + "applescript": { + "version": "1.0.0" + }, + "aproba": { + "version": "1.2.0", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.7", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "2.0.1" + }, + "args": { + "version": "2.6.1", + "dev": true, + "requires": { + "camelcase": "4.1.0", + "chalk": "1.1.3", + "minimist": "1.2.0", + "pkginfo": "0.4.0", + "string-similarity": "1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "dev": true + } + } + }, + "array-back": { + "version": "3.1.0", + "dev": true + }, + "array-differ": { + "version": "3.0.0", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "dev": true + }, + "array-ify": { + "version": "1.0.0", + "dev": true + }, + "array-includes": { + "version": "3.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-to-sentence": { + "version": "1.1.0", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "arrify": { + "version": "2.0.1", + "dev": true + }, + "asar": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz", + "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "chromium-pickle-js": "^0.2.0", + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + } + }, + "asn1": { + "version": "0.2.6", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "dev": true + }, + "assert-valid-glob-opts": { + "version": "1.0.0", + "dev": true, + "requires": { + "glob-option-error": "^1.0.0", + "validate-glob-opts": "^1.0.0" + } + }, + "ast-metadata-inferer": { + "version": "0.7.0", + "dev": true, + "requires": { + "@mdn/browser-compat-data": "^3.3.14" + }, + "dependencies": { + "@mdn/browser-compat-data": { + "version": "3.3.14", + "dev": true + } + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "optional": true + }, + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, + "async-exit-hook": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", + "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "dev": true + }, + "auto-launch": { + "version": "5.0.5", + "requires": { + "applescript": "^1.0.0", + "mkdirp": "^0.5.1", + "path-is-absolute": "^1.0.0", + "untildify": "^3.0.2", + "winreg": "1.2.4" + } + }, + "aws-sign2": { + "version": "0.7.0", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "dev": true + }, + "babel-loader": { + "version": "8.2.5", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true + } + } + }, + "babel-plugin-bundled-import-meta": { + "version": "0.3.2", + "dev": true, + "requires": { + "@babel/plugin-syntax-import-meta": "^7.2.0", + "@babel/template": "^7.7.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-extract-import-names": { + "version": "1.6.22", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.2", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.2", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.3", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.0", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.2" + } + }, + "babel-plugin-template-html-minifier": { + "version": "4.1.0", + "dev": true, + "requires": { + "clean-css": "^4.2.1", + "html-minifier-terser": "^5.0.0", + "is-builtin-module": "^3.0.0" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "dev": true + }, + "html-minifier-terser": { + "version": "5.1.1", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + } + }, + "terser": { + "version": "4.8.1", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "dev": true + } + } + } + } + }, + "bail": { + "version": "1.0.5", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "dev": true + }, + "base64id": { + "version": "2.0.0", + "dev": true + }, + "batch": { + "version": "0.6.1", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "big-integer": { + "version": "1.6.51", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "dev": true + }, + "bl": { + "version": "4.1.0", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "bluebird": { + "version": "3.7.2", + "dev": true + }, + "bluebird-lst": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", + "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5" + } + }, + "bmp-js": { + "version": "0.1.0", + "dev": true + }, + "body-parser": { + "version": "1.20.0", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "dev": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.0.13", + "dev": true, + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "dev": true + }, + "boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "dev": true, + "optional": true + }, + "bplist-creator": { + "version": "0.1.0", + "dev": true, + "requires": { + "stream-buffers": "2.2.x" + } + }, + "bplist-parser": { + "version": "0.2.0", + "dev": true, + "requires": { + "big-integer": "^1.6.44" + } + }, + "brace-expansion": { + "version": "1.1.11", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.3", + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, + "buffer": { + "version": "5.7.1", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true + }, + "buffer-crc32": { + "version": "0.2.13", + "dev": true + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", + "dev": true + }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "dev": true + }, + "builder-util": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.6.0.tgz", + "integrity": "sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ==", + "dev": true, + "requires": { + "@types/debug": "^4.1.6", + "@types/fs-extra": "^9.0.11", + "7zip-bin": "~5.1.1", + "app-builder-bin": "4.0.0", + "bluebird-lst": "^1.0.9", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "cross-spawn": "^7.0.3", + "debug": "^4.3.4", + "fs-extra": "^10.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-ci": "^3.0.0", + "js-yaml": "^4.1.0", + "source-map-support": "^0.5.19", + "stat-mode": "^1.0.0", + "temp-file": "^3.4.0" + }, + "dependencies": { + "builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "sax": "^1.2.4" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "builder-util-runtime": { + "version": "9.0.3", + "requires": { + "debug": "^4.3.4", + "sax": "^1.2.4" + } + }, + "builtin-modules": { + "version": "3.3.0", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "dev": true + }, + "cacache": { + "version": "12.0.4", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "dev": true + } + } + }, + "cache-content-type": { + "version": "1.0.1", + "dev": true, + "requires": { + "mime-types": "^2.1.18", + "ylru": "^1.2.0" + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "call-bind": { + "version": "1.0.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caller-callsite": { + "version": "2.0.0", + "dev": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "dev": true + } + } + }, + "caller-path": { + "version": "2.0.0", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "6.3.0", + "dev": true + }, + "camelcase-css": { + "version": "2.0.1", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001451", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001451.tgz", + "integrity": "sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==" + }, + "caseless": { + "version": "0.12.0", + "dev": true + }, + "ccount": { + "version": "1.1.0", + "dev": true + }, + "chalk": { + "version": "5.0.1", + "dev": true + }, + "character-entities": { + "version": "1.2.4", + "dev": true + }, + "character-entities-html4": { + "version": "1.1.4", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "chownr": { + "version": "1.1.4", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "dev": true + }, + "chromium-pickle-js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", + "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", + "dev": true + }, + "ci-info": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", + "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", + "dev": true + }, + "clean-css": { + "version": "4.2.4", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "dev": true + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "optional": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "7.0.4", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "2.1.2", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "co": { + "version": "4.6.0", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "dev": true + }, + "collapse-white-space": { + "version": "1.0.6", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, + "colorette": { + "version": "2.0.19", + "dev": true + }, + "colors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", + "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "comma-separated-tokens": { + "version": "1.0.8", + "dev": true + }, + "command-line-args": { + "version": "5.2.1", + "dev": true, + "requires": { + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-usage": { + "version": "6.1.3", + "dev": true, + "requires": { + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "array-back": { + "version": "4.0.2", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "typical": { + "version": "5.2.0", + "dev": true + } + } + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "dev": true + }, + "compare-func": { + "version": "2.0.0", + "dev": true, + "requires": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "compare-version": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", + "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "optional": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "connect": { + "version": "3.7.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "finalhandler": { + "version": "1.1.2", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "dev": true + }, + "construct-style-sheets-polyfill": { + "version": "3.1.0", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "dev": true + }, + "conventional-changelog-conventionalcommits": { + "version": "4.6.3", + "dev": true, + "requires": { + "compare-func": "^2.0.0", + "lodash": "^4.17.15", + "q": "^1.5.1" + } + }, + "convert-source-map": { + "version": "1.8.0", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.2" + }, + "cookie-signature": { + "version": "1.0.6", + "dev": true + }, + "cookies": { + "version": "0.8.0", + "dev": true, + "requires": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + } + }, + "copy-concurrently": { + "version": "1.0.5", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-dir": { + "version": "1.3.0", + "dev": true + }, + "copy-webpack-plugin": { + "version": "5.1.2", + "dev": true, + "requires": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "dir-glob": { + "version": "2.2.2", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "find-cache-dir": { + "version": "2.1.0", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globby": { + "version": "7.1.1", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + }, + "ignore": { + "version": "3.3.10", + "dev": true + }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.2", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "dev": true + } + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "slash": { + "version": "1.0.0", + "dev": true + } + } + }, + "cordova-android": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/cordova-android/-/cordova-android-11.0.0.tgz", + "integrity": "sha512-ZhvSF5BYY8gmrAu1PtMPdHFsRoom/emT4OtTcecmh3Zj22900y4Golg5whhBPcYcTPC7BU6PG/EmG9BBHcX9tQ==", + "dev": true, + "requires": { + "android-versions": "^1.7.0", + "cordova-common": "^4.0.2", + "execa": "^5.1.1", + "fast-glob": "^3.2.11", + "fs-extra": "^10.1.0", + "is-path-inside": "^3.0.3", + "nopt": "^5.0.0", + "properties-parser": "^0.3.1", + "semver": "^7.3.7", + "untildify": "^4.0.0", + "which": "^2.0.2" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "untildify": { + "version": "4.0.0", + "dev": true + } + } + }, + "cordova-browser": { + "version": "6.0.0", + "dev": true, + "requires": { + "cordova-common": "^3.1.0", + "cordova-serve": "^3.0.0", + "nopt": "^4.0.1", + "shelljs": "^0.5.3" + }, + "dependencies": { + "bplist-parser": { + "version": "0.1.1", + "dev": true, + "requires": { + "big-integer": "^1.6.7" + } + }, + "cordova-common": { + "version": "3.2.1", + "dev": true, + "requires": { + "ansi": "^0.3.1", + "bplist-parser": "^0.1.0", + "cross-spawn": "^6.0.5", + "elementtree": "0.1.7", + "endent": "^1.1.1", + "fs-extra": "^8.0.0", + "glob": "^7.1.2", + "minimatch": "^3.0.0", + "plist": "^3.0.1", + "q": "^1.4.1", + "strip-bom": "^3.0.0", + "underscore": "^1.8.3", + "which": "^1.3.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "nopt": { + "version": "4.0.3", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "path-key": { + "version": "2.0.1", + "dev": true + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "dev": true + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "cordova-common": { + "version": "4.0.2", + "dev": true, + "requires": { + "@netflix/nerror": "^1.1.3", + "ansi": "^0.3.1", + "bplist-parser": "^0.2.0", + "cross-spawn": "^7.0.1", + "elementtree": "^0.1.7", + "endent": "^1.4.1", + "fast-glob": "^3.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "plist": "^3.0.1", + "q": "^1.5.1", + "read-chunk": "^3.2.0", + "strip-bom": "^4.0.0", + "underscore": "^1.9.2" + } + }, + "cordova-fetch": { + "version": "3.0.1", + "dev": true, + "requires": { + "cordova-common": "^4.0.0", + "fs-extra": "^9.0.0", + "npm-package-arg": "^8.0.1", + "pacote": "^11.1.11", + "pify": "^5.0.0", + "resolve": "^1.15.1", + "semver": "^7.1.3", + "which": "^2.0.2" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "cordova-ios": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/cordova-ios/-/cordova-ios-6.3.0.tgz", + "integrity": "sha512-BZybgFzc7D0HmhkTYurFrRXiWgvYohmT7bwQsLPhf+VdiDjwGXbiSWgg3uP9MChvacCNcGXXUl2NhOaNC9UVaA==", + "dev": true, + "requires": { + "cordova-common": "^4.0.2", + "fs-extra": "^9.1.0", + "ios-sim": "^8.0.2", + "nopt": "^5.0.0", + "plist": "^3.0.1", + "semver": "^7.3.4", + "unorm": "^1.6.0", + "which": "^2.0.2", + "xcode": "^3.0.1", + "xml-escape": "^1.1.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "cordova-lib": { + "version": "11.0.0", + "dev": true, + "requires": { + "cordova-common": "^4.0.2", + "cordova-fetch": "^3.0.1", + "cordova-serve": "^4.0.0", + "dep-graph": "^1.1.0", + "detect-indent": "^6.1.0", + "detect-newline": "^3.1.0", + "elementtree": "^0.1.7", + "execa": "^5.1.1", + "fs-extra": "^10.0.0", + "globby": "^11.0.4", + "init-package-json": "^2.0.5", + "md5-file": "^5.0.0", + "pify": "^5.0.0", + "semver": "^7.3.5", + "stringify-package": "^1.0.1", + "write-file-atomic": "^3.0.3" + }, + "dependencies": { + "chalk": { + "version": "3.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cordova-serve": { + "version": "4.0.0", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "compression": "^1.7.4", + "express": "^4.17.1", + "open": "^7.0.3", + "which": "^2.0.2" + } + }, + "fs-extra": { + "version": "10.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "open": { + "version": "7.4.2", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "cordova-osx": { + "version": "git+ssh://git@github.com/apache/cordova-osx.git#16b56e4a9297c5195a06a57450aeb983e7053184", + "dev": true, + "from": "cordova-osx@github:apache/cordova-osx", + "requires": { + "cordova-common": "^4.0.2", + "nopt": "^5.0.0", + "plist": "^3.0.4", + "shelljs": "^0.8.5", + "underscore": "^1.13.2", + "unorm": "^1.4.1", + "xcode": "^3.0.1" + }, + "dependencies": { + "interpret": { + "version": "1.4.0", + "dev": true + }, + "rechoir": { + "version": "0.6.2", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "shelljs": { + "version": "0.8.5", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + } + } + }, + "cordova-plugin-clipboard": { + "version": "git+ssh://git@github.com/Jigsaw-Code/outline-cordova-plugin-clipboard.git#8cc5101b7a264122c71f7f3a3cb5744a8fad8498", + "dev": true, + "from": "cordova-plugin-clipboard@github:Jigsaw-Code/outline-cordova-plugin-clipboard#v2.0.0" + }, + "cordova-plugin-outline": { + "version": "file:src/cordova/plugin" + }, + "cordova-plugin-splashscreen": { + "version": "6.0.2" + }, + "cordova-plugin-statusbar": { + "version": "2.4.3" + }, + "cordova-serve": { + "version": "3.0.0", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "compression": "^1.6.0", + "express": "^4.13.3", + "opn": "^5.3.0", + "which": "^1.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "cordova-webintent": { + "version": "git+ssh://git@github.com/cordova-misc/cordova-webintent.git#6c045cece3e49e4dd061d56fc15569053e9a0c4a", + "dev": true, + "from": "cordova-webintent@github:cordova-misc/cordova-webintent#v2.0.0" + }, + "core-js": { + "version": "2.6.12", + "dev": true + }, + "core-js-bundle": { + "version": "3.24.1", + "dev": true + }, + "core-js-compat": { + "version": "3.24.1", + "dev": true, + "requires": { + "browserslist": "^4.21.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.3", + "dev": true + }, + "cors": { + "version": "2.8.5", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "5.2.1", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "import-fresh": { + "version": "2.0.0", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "js-yaml": { + "version": "3.14.1", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "dev": true + } + } + }, + "crc": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.1.0" + } + }, + "cross-fetch": { + "version": "3.1.5", + "dev": true, + "requires": { + "node-fetch": "2.6.7" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, + "cross-spawn": { + "version": "7.0.3", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-loader": { + "version": "5.2.7", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "dependencies": { + "icss-utils": { + "version": "5.1.0", + "dev": true, + "requires": {} + }, + "picocolors": { + "version": "1.0.0", + "dev": true + }, + "postcss": { + "version": "8.4.16", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "css-select": { + "version": "4.3.0", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-selector-parser": { + "version": "1.4.1", + "dev": true + }, + "css-what": { + "version": "6.1.0", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "dev": true + }, + "custom-event": { + "version": "1.0.1", + "dev": true + }, + "cyclist": { + "version": "1.0.1", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-uri-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", + "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", + "dev": true + }, + "date-format": { + "version": "4.0.13", + "dev": true + }, + "debounce": { + "version": "1.2.1", + "dev": true + }, + "debug": { + "version": "4.3.4", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "dev": true + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "dedent": { + "version": "0.7.0", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "dev": true + }, + "deep-extend": { + "version": "0.6.0", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "dev": true + }, + "deepmerge": { + "version": "4.2.2" + }, + "default-gateway": { + "version": "6.0.3", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "define-lazy-prop": { + "version": "2.0.0", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "del": { + "version": "3.0.0", + "dev": true, + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "dependencies": { + "array-union": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "globby": { + "version": "6.1.0", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "dev": true + } + } + }, + "pify": { + "version": "3.0.0", + "dev": true + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "dev": true + }, + "dep-graph": { + "version": "1.1.0", + "dev": true, + "requires": { + "underscore": "1.2.1" + }, + "dependencies": { + "underscore": { + "version": "1.2.1", + "dev": true + } + } + }, + "depd": { + "version": "2.0.0", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "dev": true + }, + "detab": { + "version": "2.0.4", + "dev": true, + "requires": { + "repeat-string": "^1.5.4" + } + }, + "detect-indent": { + "version": "6.1.0", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "dev": true + }, + "devtools-protocol": { + "version": "0.0.981744", + "dev": true + }, + "di": { + "version": "0.0.1", + "dev": true + }, + "dir-compare": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", + "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==", + "dev": true, + "requires": { + "buffer-equal": "1.0.0", + "colors": "1.0.3", + "commander": "2.9.0", + "minimatch": "3.0.4" + }, + "dependencies": { + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", + "dev": true, + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "dir-glob": { + "version": "3.0.1", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dmg-builder": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.6.0.tgz", + "integrity": "sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA==", + "dev": true, + "requires": { + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "dmg-license": "^1.0.11", + "fs-extra": "^10.0.0", + "iconv-lite": "^0.6.2", + "js-yaml": "^4.1.0" + }, + "dependencies": { + "builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "sax": "^1.2.4" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "dmg-license": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", + "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", + "dev": true, + "optional": true, + "requires": { + "@types/plist": "^3.0.1", + "@types/verror": "^1.10.3", + "ajv": "^6.10.0", + "crc": "^3.8.0", + "iconv-corefoundation": "^1.1.7", + "plist": "^3.0.4", + "smart-buffer": "^4.0.2", + "verror": "^1.10.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "dev": true + }, + "dns-packet": { + "version": "5.4.0", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "doctrine": { + "version": "3.0.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serialize": { + "version": "2.2.1", + "dev": true, + "requires": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "dom-serializer": { + "version": "1.4.1", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "dom-walk": { + "version": "0.1.2", + "dev": true + }, + "domelementtype": { + "version": "2.3.0", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dot-prop": { + "version": "5.3.0", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", + "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "dynamic-import-polyfill": { + "version": "0.1.1", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "dev": true + }, + "ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dev": true, + "requires": { + "jake": "^10.8.5" + } + }, + "electron": { + "version": "19.1.9", + "resolved": "https://registry.npmjs.org/electron/-/electron-19.1.9.tgz", + "integrity": "sha512-XT5LkTzIHB+ZtD3dTmNnKjVBWrDWReCKt9G1uAFLz6uJMEVcIUiYO+fph5pLXETiBw/QZBx8egduMEfIccLx+g==", + "dev": true, + "requires": { + "@electron/get": "^1.14.1", + "@types/node": "^16.11.26", + "extract-zip": "^1.0.3" + }, + "dependencies": { + "@types/node": { + "version": "16.11.47", + "dev": true + } + } + }, + "electron-builder": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.6.0.tgz", + "integrity": "sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw==", + "dev": true, + "requires": { + "@types/yargs": "^17.0.1", + "app-builder-lib": "23.6.0", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "dmg-builder": "23.6.0", + "fs-extra": "^10.0.0", + "is-ci": "^3.0.0", + "lazy-val": "^1.0.5", + "read-config-file": "6.2.0", + "simple-update-notifier": "^1.0.7", + "yargs": "^17.5.1" + }, + "dependencies": { + "builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "sax": "^1.2.4" + } + }, + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "fs-extra": { + "version": "10.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "electron-icon-maker": { + "version": "0.0.5", + "dev": true, + "requires": { + "args": "^2.3.0", + "icon-gen": "2.0.0", + "jimp": "^0.14.0" + } + }, + "electron-osx-sign": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", + "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "compare-version": "^0.1.2", + "debug": "^2.6.8", + "isbinaryfile": "^3.0.2", + "minimist": "^1.2.0", + "plist": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "isbinaryfile": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", + "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", + "dev": true, + "requires": { + "buffer-alloc": "^1.2.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "electron-publish": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.6.0.tgz", + "integrity": "sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg==", + "dev": true, + "requires": { + "@types/fs-extra": "^9.0.11", + "builder-util": "23.6.0", + "builder-util-runtime": "9.1.1", + "chalk": "^4.1.1", + "fs-extra": "^10.0.0", + "lazy-val": "^1.0.5", + "mime": "^2.5.2" + }, + "dependencies": { + "builder-util-runtime": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.1.1.tgz", + "integrity": "sha512-azRhYLEoDvRDR8Dhis4JatELC/jUvYjm4cVSj7n9dauGTOM2eeNn9KS0z6YA6oDsjI1xphjNbY6PZZeHPzzqaw==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "sax": "^1.2.4" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "electron-to-chromium": { + "version": "1.4.215" + }, + "electron-updater": { + "version": "5.2.1", + "requires": { + "@types/semver": "^7.3.6", + "builder-util-runtime": "9.0.3", + "fs-extra": "^10.0.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "lodash.escaperegexp": "^4.1.2", + "lodash.isequal": "^4.5.0", + "semver": "^7.3.5", + "typed-emitter": "^2.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "semver": { + "version": "7.3.7", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "elementtree": { + "version": "0.1.7", + "dev": true, + "requires": { + "sax": "1.1.4" + }, + "dependencies": { + "sax": { + "version": "1.1.4", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "dev": true, + "optional": true, + "requires": { + "iconv-lite": "^0.6.2" + } + }, + "end-of-stream": { + "version": "1.4.4", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "endent": { + "version": "1.4.1", + "dev": true, + "requires": { + "dedent": "^0.7.0", + "fast-json-parse": "^1.0.3", + "objectorarray": "^1.0.4" + } + }, + "engine.io": { + "version": "6.2.0", + "dev": true, + "requires": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.2.3" + }, + "dependencies": { + "ws": { + "version": "8.2.3", + "dev": true, + "requires": {} + } + } + }, + "engine.io-parser": { + "version": "5.0.4", + "dev": true + }, + "enhanced-resolve": { + "version": "5.10.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "ent": { + "version": "2.2.0", + "dev": true + }, + "entities": { + "version": "2.2.0", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "dev": true + }, + "err-code": { + "version": "2.0.3", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.20.1", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "regexp.prototype.flags": "^1.4.3", + "string.prototype.trimend": "^1.0.5", + "string.prototype.trimstart": "^1.0.5", + "unbox-primitive": "^1.0.2" + } + }, + "es-module-lexer": { + "version": "1.0.3", + "dev": true + }, + "es-module-shims": { + "version": "1.5.14", + "dev": true + }, + "es-shim-unscopables": { + "version": "1.0.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true, + "optional": true + }, + "es6-promise": { + "version": "4.2.8", + "dev": true + }, + "esbuild": { + "version": "0.12.29", + "dev": true + }, + "escalade": { + "version": "3.1.1" + }, + "escape-html": { + "version": "1.0.3", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "dev": true + }, + "escodegen": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "requires": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" + }, + "dependencies": { + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true + }, + "estraverse": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "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" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true + }, + "source-map": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "8.21.0", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "eslint-scope": { + "version": "7.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.17.0", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "type-fest": { + "version": "0.20.2", + "dev": true + } + } + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-import-resolver-typescript": { + "version": "3.4.0", + "dev": true, + "requires": { + "debug": "^4.3.4", + "enhanced-resolve": "^5.10.0", + "get-tsconfig": "^4.2.0", + "globby": "^13.1.2", + "is-core-module": "^2.9.0", + "is-glob": "^4.0.3", + "synckit": "^0.8.1" + }, + "dependencies": { + "globby": { + "version": "13.1.2", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "slash": { + "version": "4.0.0", + "dev": true + } + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "2.1.0", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "dev": true + } + } + }, + "eslint-plugin-compat": { + "version": "4.0.2", + "dev": true, + "requires": { + "@mdn/browser-compat-data": "^4.1.5", + "ast-metadata-inferer": "^0.7.0", + "browserslist": "^4.16.8", + "caniuse-lite": "^1.0.30001304", + "core-js": "^3.16.2", + "find-up": "^5.0.0", + "lodash.memoize": "4.1.2", + "semver": "7.3.5" + }, + "dependencies": { + "core-js": { + "version": "3.24.1", + "dev": true + }, + "semver": { + "version": "7.3.5", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "dev": true + }, + "esm": { + "version": "3.2.25", + "dev": true + }, + "espree": { + "version": "9.3.3", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "dev": true + }, + "etag": { + "version": "1.8.1", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "dev": true + }, + "events": { + "version": "3.3.0", + "dev": true + }, + "execa": { + "version": "5.1.1", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "exif-parser": { + "version": "0.1.12", + "dev": true + }, + "express": { + "version": "4.18.1", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "cookie": { + "version": "0.5.0", + "dev": true + }, + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "dev": true + }, + "extract-zip": { + "version": "1.7.0", + "dev": true, + "requires": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.4.1", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fast-json-parse": { + "version": "1.0.3", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fd-slicer": { + "version": "1.1.0", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "dev": true, + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "dev": true + }, + "file-entry-cache": { + "version": "6.0.1", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.2.0", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "file-type": { + "version": "9.0.0", + "dev": true + }, + "file-url": { + "version": "2.0.2", + "dev": true + }, + "filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "requires": { + "minimatch": "^5.0.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "fill-range": { + "version": "7.0.1", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-replace": { + "version": "3.0.0", + "dev": true, + "requires": { + "array-back": "^3.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "findup": { + "version": "0.1.5", + "dev": true, + "requires": { + "colors": "~0.6.0-1", + "commander": "~2.1.0" + }, + "dependencies": { + "colors": { + "version": "0.6.2", + "dev": true + }, + "commander": { + "version": "2.1.0", + "dev": true + } + } + }, + "flat-cache": { + "version": "3.0.4", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "3.2.6", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "dev": true + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dev": true, + "requires": { + "fetch-blob": "^3.1.2" + } + }, + "forwarded": { + "version": "0.2.0", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "dev": true + }, + "from2": { + "version": "2.3.0", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "dev": true + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.2", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-stdin": { + "version": "6.0.0", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "dev": true + }, + "get-symbol-description": { + "version": "1.0.0", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-tsconfig": { + "version": "4.2.0", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gifwrap": { + "version": "0.9.4", + "dev": true, + "requires": { + "image-q": "^4.0.0", + "omggif": "^1.0.10" + } + }, + "github-markdown-css": { + "version": "4.0.0", + "dev": true + }, + "github-slugger": { + "version": "1.4.0", + "dev": true + }, + "glob": { + "version": "7.2.3", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-option-error": { + "version": "1.0.0", + "dev": true + }, + "glob-parent": { + "version": "5.1.2", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "dev": true + }, + "global": { + "version": "4.4.0", + "dev": true, + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "dev": true, + "optional": true, + "requires": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "optional": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "global-tunnel-ng": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz", + "integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==", + "dev": true, + "optional": true, + "requires": { + "encodeurl": "^1.0.2", + "lodash": "^4.17.10", + "npm-conf": "^1.1.3", + "tunnel": "^0.0.6" + } + }, + "globals": { + "version": "11.12.0", + "dev": true + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "optional": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globalyzer": { + "version": "0.1.0", + "dev": true + }, + "globby": { + "version": "11.1.0", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "globrex": { + "version": "0.1.2", + "dev": true + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "dependencies": { + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "graceful-fs": { + "version": "4.2.10" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", + "dev": true + }, + "grapheme-splitter": { + "version": "1.0.4", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "dev": true + }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, + "har-schema": { + "version": "2.0.0", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + } + } + }, + "has-bigints": { + "version": "1.0.2", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.0", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-unicode": { + "version": "2.0.1", + "dev": true + }, + "hasha": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "dev": true + } + } + }, + "hast-to-hyperscript": { + "version": "9.0.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-from-parse5": { + "version": "6.0.1", + "dev": true, + "requires": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "dependencies": { + "@types/parse5": { + "version": "5.0.3", + "dev": true + } + } + }, + "hast-util-has-property": { + "version": "1.0.4", + "dev": true + }, + "hast-util-heading-rank": { + "version": "1.0.1", + "dev": true + }, + "hast-util-is-element": { + "version": "1.1.0", + "dev": true + }, + "hast-util-parse-selector": { + "version": "2.2.5", + "dev": true + }, + "hast-util-raw": { + "version": "6.0.1", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hast-util-sanitize": { + "version": "3.0.2", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + }, + "hast-util-to-html": { + "version": "7.1.3", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.0", + "html-void-elements": "^1.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0", + "stringify-entities": "^3.0.1", + "unist-util-is": "^4.0.0", + "xtend": "^4.0.0" + } + }, + "hast-util-to-parse5": { + "version": "6.0.0", + "dev": true, + "requires": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hast-util-to-string": { + "version": "1.0.4", + "dev": true + }, + "hast-util-whitespace": { + "version": "1.0.4", + "dev": true + }, + "hastscript": { + "version": "6.0.0", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "he": { + "version": "1.2.0", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "html-entities": { + "version": "2.3.3", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.1.0", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "dependencies": { + "clean-css": { + "version": "5.3.1", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "commander": { + "version": "8.3.0", + "dev": true + } + } + }, + "html-void-elements": { + "version": "1.0.5", + "dev": true + }, + "html-webpack-plugin": { + "version": "5.5.0", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-assert": { + "version": "1.5.0", + "dev": true, + "requires": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "is-plain-obj": { + "version": "3.0.0", + "dev": true + } + } + }, + "http-signature": { + "version": "1.2.0", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "dev": true + }, + "humanize-ms": { + "version": "1.2.1", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "husky": { + "version": "1.3.1", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.7", + "execa": "^1.0.0", + "find-up": "^3.0.0", + "get-stdin": "^6.0.0", + "is-ci": "^2.0.0", + "pkg-dir": "^3.0.0", + "please-upgrade-node": "^3.1.1", + "read-pkg": "^4.0.1", + "run-node": "^1.0.0", + "slash": "^2.0.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "dev": true + }, + "cross-spawn": { + "version": "6.0.5", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "npm-run-path": { + "version": "2.0.2", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "dev": true + }, + "slash": { + "version": "2.0.0", + "dev": true + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "icon-gen": { + "version": "2.0.0", + "dev": true, + "requires": { + "del": "^3.0.0", + "mkdirp": "^0.5.1", + "pngjs-nozlib": "^1.0.0", + "svg2png": "4.1.1", + "uuid": "^3.3.2" + } + }, + "iconv-corefoundation": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", + "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", + "dev": true, + "optional": true, + "requires": { + "cli-truncate": "^2.1.0", + "node-addon-api": "^1.6.3" + } + }, + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "ieee754": { + "version": "1.2.1", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "dev": true + }, + "ignore-walk": { + "version": "3.0.4", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "image-q": { + "version": "4.0.0", + "dev": true, + "requires": { + "@types/node": "16.9.1" + }, + "dependencies": { + "@types/node": { + "version": "16.9.1", + "dev": true + } + } + }, + "import-fresh": { + "version": "3.3.0", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.1.0", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "dev": true + }, + "indexed-filter": { + "version": "1.0.3", + "dev": true, + "requires": { + "append-type": "^1.0.1" + } + }, + "infer-owner": { + "version": "1.0.4", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true + }, + "init-package-json": { + "version": "2.0.5", + "dev": true, + "requires": { + "npm-package-arg": "^8.1.5", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "^4.1.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "inline-style-parser": { + "version": "0.1.1", + "dev": true + }, + "inspect-with-kind": { + "version": "1.0.5", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "internal-slot": { + "version": "1.0.3", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "2.2.0", + "dev": true + }, + "intersection-observer": { + "version": "0.12.2", + "dev": true + }, + "intl-messageformat": { + "version": "9.13.0", + "dev": true, + "requires": { + "@formatjs/ecma402-abstract": "1.11.4", + "@formatjs/fast-memoize": "1.2.1", + "@formatjs/icu-messageformat-parser": "2.1.0", + "tslib": "^2.1.0" + } + }, + "intl-messageformat-parser": { + "version": "1.4.0" + }, + "invert-kv": { + "version": "1.0.0", + "dev": true + }, + "ios-deploy": { + "version": "1.11.4", + "optional": true + }, + "ios-sim": { + "version": "8.0.2", + "dev": true, + "requires": { + "bplist-parser": "^0.0.6", + "nopt": "1.0.9", + "plist": "^3.0.1", + "simctl": "^2" + }, + "dependencies": { + "bplist-parser": { + "version": "0.0.6", + "dev": true + }, + "nopt": { + "version": "1.0.9", + "dev": true, + "requires": { + "abbrev": "1" + } + } + } + }, + "ip": { + "version": "1.1.8" + }, + "ipaddr.js": { + "version": "1.9.1", + "dev": true + }, + "is-alphabetical": { + "version": "1.0.4", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "dev": true + }, + "is-builtin-module": { + "version": "3.2.0", + "dev": true, + "requires": { + "builtin-modules": "^3.3.0" + } + }, + "is-callable": { + "version": "1.2.4", + "dev": true + }, + "is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "requires": { + "ci-info": "^3.2.0" + } + }, + "is-core-module": { + "version": "2.10.0", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.5", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-decimal": { + "version": "1.0.4", + "dev": true + }, + "is-directory": { + "version": "0.3.1", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true + }, + "is-function": { + "version": "1.0.2", + "dev": true + }, + "is-generator-function": { + "version": "1.0.10", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "dev": true + }, + "is-lambda": { + "version": "1.0.1", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + }, + "dependencies": { + "is-path-inside": { + "version": "1.0.1", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + } + } + }, + "is-path-inside": { + "version": "3.0.3", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.4", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "2.0.1", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typedarray": { + "version": "1.0.0", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-whitespace-character": { + "version": "1.0.4", + "dev": true + }, + "is-word-character": { + "version": "1.0.4", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "dev": true + }, + "isbinaryfile": { + "version": "4.0.10", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "dev": true + }, + "istanbul": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha512-nMtdn4hvK0HjUlzr1DrKSUY8ychprt8dzHOgY2KXsIhHu5PuQQEOTM27gV9Xblyon7aUH/TSFIjRHEODF/FRPg==", + "dev": true, + "requires": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "abbrev": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "dependencies": { + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jake": { + "version": "10.8.5", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", + "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", + "dev": true, + "requires": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "jasmine-core": { + "version": "3.99.1", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "jimp": { + "version": "0.14.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/custom": "^0.14.0", + "@jimp/plugins": "^0.14.0", + "@jimp/types": "^0.14.0", + "regenerator-runtime": "^0.13.3" + } + }, + "jpeg-js": { + "version": "0.4.4", + "dev": true + }, + "js-base64": { + "version": "3.7.2" + }, + "js-string-escape": { + "version": "1.0.1", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "0.1.1", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "dev": true + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonparse": { + "version": "1.3.1", + "dev": true + }, + "jsprim": { + "version": "1.4.2", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "dev": true + }, + "extsprintf": { + "version": "1.3.0", + "dev": true + }, + "verror": { + "version": "1.10.0", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + } + } + }, + "karma": { + "version": "6.4.0", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ua-parser-js": { + "version": "0.7.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", + "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "dev": true + } + } + }, + "karma-chrome-launcher": { + "version": "3.1.1", + "dev": true, + "requires": { + "which": "^1.2.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "karma-coverage-istanbul-reporter": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz", + "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^3.0.6", + "istanbul-reports": "^3.0.2", + "minimatch": "^3.0.4" + } + }, + "karma-jasmine": { + "version": "4.0.2", + "dev": true, + "requires": { + "jasmine-core": "^3.6.0" + } + }, + "karma-webpack": { + "version": "5.0.0", + "dev": true, + "requires": { + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "webpack-merge": "^4.1.5" + }, + "dependencies": { + "webpack-merge": { + "version": "4.2.2", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + } + } + }, + "kew": { + "version": "0.7.0", + "dev": true + }, + "keygrip": { + "version": "1.1.0", + "dev": true, + "requires": { + "tsscmp": "1.0.6" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "kind-of": { + "version": "6.0.3", + "dev": true + }, + "klaw": { + "version": "1.3.1", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "koa": { + "version": "2.13.4", + "dev": true, + "requires": { + "accepts": "^1.3.5", + "cache-content-type": "^1.0.0", + "content-disposition": "~0.5.2", + "content-type": "^1.0.4", + "cookies": "~0.8.0", + "debug": "^4.3.2", + "delegates": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.0.4", + "encodeurl": "^1.0.2", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.3.0", + "http-errors": "^1.6.3", + "is-generator-function": "^1.0.7", + "koa-compose": "^4.1.0", + "koa-convert": "^2.0.0", + "on-finished": "^2.3.0", + "only": "~0.0.2", + "parseurl": "^1.3.2", + "statuses": "^1.5.0", + "type-is": "^1.6.16", + "vary": "^1.1.2" + }, + "dependencies": { + "http-errors": { + "version": "1.8.1", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "dev": true + } + } + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "koa-compose": { + "version": "4.1.0", + "dev": true + }, + "koa-convert": { + "version": "2.0.0", + "dev": true, + "requires": { + "co": "^4.6.0", + "koa-compose": "^4.1.0" + } + }, + "koa-etag": { + "version": "4.0.0", + "dev": true, + "requires": { + "etag": "^1.8.1" + } + }, + "koa-send": { + "version": "5.0.1", + "dev": true, + "requires": { + "debug": "^4.1.1", + "http-errors": "^1.7.3", + "resolve-path": "^1.4.0" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "koa-static": { + "version": "5.0.0", + "dev": true, + "requires": { + "debug": "^3.1.0", + "koa-send": "^5.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "lazy-val": { + "version": "1.0.5" + }, + "lcid": { + "version": "1.0.0", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "levn": { + "version": "0.4.1", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lit": { + "version": "2.2.8", + "requires": { + "@lit/reactive-element": "^1.3.0", + "lit-element": "^3.2.0", + "lit-html": "^2.2.0" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.3.4" + } + } + }, + "lit-element": { + "version": "3.2.2", + "requires": { + "@lit/reactive-element": "^1.3.0", + "lit-html": "^2.2.0" + }, + "dependencies": { + "@lit/reactive-element": { + "version": "1.3.4" + } + } + }, + "lit-html": { + "version": "2.2.7", + "requires": { + "@types/trusted-types": "^2.0.2" + } + }, + "load-bmfont": { + "version": "1.4.1", + "dev": true, + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + }, + "dependencies": { + "buffer-equal": { + "version": "0.0.1", + "dev": true + }, + "mime": { + "version": "1.6.0", + "dev": true + } + } + }, + "load-json-file": { + "version": "1.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "parse-json": { + "version": "2.2.0", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "pify": { + "version": "2.3.0", + "dev": true + }, + "strip-bom": { + "version": "2.0.0", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "loader-runner": { + "version": "4.3.0", + "dev": true + }, + "loader-utils": { + "version": "2.0.4", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "dev": true + }, + "lodash.escaperegexp": { + "version": "4.1.2" + }, + "lodash.isequal": { + "version": "4.5.0" + }, + "lodash.memoize": { + "version": "4.1.2", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "dev": true + }, + "log4js": { + "version": "6.6.1", + "dev": true, + "requires": { + "date-format": "^4.0.13", + "debug": "^4.3.4", + "flatted": "^3.2.6", + "rfdc": "^1.3.0", + "streamroller": "^3.1.2" + } + }, + "longest-streak": { + "version": "2.0.4", + "dev": true + }, + "lower-case": { + "version": "2.0.2", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==" + }, + "lru-cache": { + "version": "6.0.0", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "make-fetch-happen": { + "version": "9.1.0", + "dev": true, + "requires": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "dependencies": { + "@tootallnate/once": { + "version": "1.1.2", + "dev": true + }, + "cacache": { + "version": "15.3.0", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "chownr": { + "version": "2.0.0", + "dev": true + }, + "http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "p-map": { + "version": "4.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ssri": { + "version": "8.0.1", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + } + } + }, + "markdown-escapes": { + "version": "1.0.4", + "dev": true + }, + "markdown-table": { + "version": "2.0.0", + "dev": true, + "requires": { + "repeat-string": "^1.0.0" + } + }, + "matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "dev": true, + "optional": true, + "requires": { + "escape-string-regexp": "^4.0.0" + } + }, + "md5-file": { + "version": "5.0.0", + "dev": true + }, + "mdast-squeeze-paragraphs": { + "version": "4.0.0", + "dev": true, + "requires": { + "unist-util-remove": "^2.0.0" + } + }, + "mdast-util-definitions": { + "version": "4.0.0", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-find-and-replace": { + "version": "1.1.1", + "dev": true, + "requires": { + "escape-string-regexp": "^4.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "mdast-util-from-markdown": { + "version": "0.8.5", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "mdast-util-to-string": "^2.0.0", + "micromark": "~2.11.0", + "parse-entities": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "mdast-util-gfm": { + "version": "0.1.2", + "dev": true, + "requires": { + "mdast-util-gfm-autolink-literal": "^0.1.0", + "mdast-util-gfm-strikethrough": "^0.2.0", + "mdast-util-gfm-table": "^0.1.0", + "mdast-util-gfm-task-list-item": "^0.1.0", + "mdast-util-to-markdown": "^0.6.1" + } + }, + "mdast-util-gfm-autolink-literal": { + "version": "0.1.3", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "mdast-util-find-and-replace": "^1.1.0", + "micromark": "^2.11.3" + } + }, + "mdast-util-gfm-strikethrough": { + "version": "0.2.3", + "dev": true, + "requires": { + "mdast-util-to-markdown": "^0.6.0" + } + }, + "mdast-util-gfm-table": { + "version": "0.1.6", + "dev": true, + "requires": { + "markdown-table": "^2.0.0", + "mdast-util-to-markdown": "~0.6.0" + } + }, + "mdast-util-gfm-task-list-item": { + "version": "0.1.6", + "dev": true, + "requires": { + "mdast-util-to-markdown": "~0.6.0" + } + }, + "mdast-util-to-hast": { + "version": "10.0.1", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-markdown": { + "version": "0.6.5", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "longest-streak": "^2.0.0", + "mdast-util-to-string": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.0.0", + "zwitch": "^1.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "dev": true + }, + "memfs": { + "version": "3.4.7", + "dev": true, + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "merge-stream": { + "version": "2.0.0", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "dev": true + }, + "methods": { + "version": "1.1.2", + "dev": true + }, + "micromark": { + "version": "2.11.4", + "dev": true, + "requires": { + "debug": "^4.0.0", + "parse-entities": "^2.0.0" + } + }, + "micromark-extension-gfm": { + "version": "0.3.3", + "dev": true, + "requires": { + "micromark": "~2.11.0", + "micromark-extension-gfm-autolink-literal": "~0.5.0", + "micromark-extension-gfm-strikethrough": "~0.6.5", + "micromark-extension-gfm-table": "~0.4.0", + "micromark-extension-gfm-tagfilter": "~0.3.0", + "micromark-extension-gfm-task-list-item": "~0.3.0" + } + }, + "micromark-extension-gfm-autolink-literal": { + "version": "0.5.7", + "dev": true, + "requires": { + "micromark": "~2.11.3" + } + }, + "micromark-extension-gfm-strikethrough": { + "version": "0.6.5", + "dev": true, + "requires": { + "micromark": "~2.11.0" + } + }, + "micromark-extension-gfm-table": { + "version": "0.4.3", + "dev": true, + "requires": { + "micromark": "~2.11.0" + } + }, + "micromark-extension-gfm-tagfilter": { + "version": "0.3.0", + "dev": true + }, + "micromark-extension-gfm-task-list-item": { + "version": "0.3.3", + "dev": true, + "requires": { + "micromark": "~2.11.0" + } + }, + "micromatch": { + "version": "4.0.5", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "2.6.0", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "dev": true + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "min-document": { + "version": "2.19.0", + "dev": true, + "requires": { + "dom-walk": "^0.1.0" + } + }, + "mini-svg-data-uri": { + "version": "1.4.4", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6" + }, + "minipass": { + "version": "3.3.4", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-fetch": { + "version": "1.4.1", + "dev": true, + "requires": { + "encoding": "^0.1.12", + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-json-stream": { + "version": "1.0.1", + "dev": true, + "requires": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-sized": { + "version": "1.0.3", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mkdirp": { + "version": "0.5.6", + "requires": { + "minimist": "^1.2.6" + } + }, + "mkdirp-classic": { + "version": "0.5.3", + "dev": true + }, + "move-concurrently": { + "version": "1.0.1", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "mri": { + "version": "1.2.0", + "dev": true + }, + "ms": { + "version": "2.1.2" + }, + "multicast-dns": { + "version": "7.2.5", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "multimatch": { + "version": "4.0.0", + "dev": true, + "requires": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + } + }, + "mute-stream": { + "version": "0.0.8", + "dev": true + }, + "nanocolors": { + "version": "0.2.13", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true, + "optional": true + }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "dev": true + }, + "node-fetch": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.0.tgz", + "integrity": "sha512-BKwRP/O0UvoMKp7GNdwPlObhYGB5DQqwhEDQlNKuoqwVYSxkSZCSbHjnFFmUEtwSKRPU4kNK8PbDYYitwaE3QA==", + "dev": true, + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + }, + "node-forge": { + "version": "1.3.1", + "dev": true + }, + "node-gyp": { + "version": "7.1.2", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "node-releases": { + "version": "2.0.6" + }, + "nopt": { + "version": "5.0.0", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "normalize-path": { + "version": "3.0.0", + "dev": true + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.2", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-conf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", + "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "dev": true, + "optional": true, + "requires": { + "config-chain": "^1.1.11", + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "optional": true + } + } + }, + "npm-install-checks": { + "version": "4.0.0", + "dev": true, + "requires": { + "semver": "^7.1.1" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "dev": true + }, + "npm-package-arg": { + "version": "8.1.5", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-packlist": { + "version": "2.2.2", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "6.1.1", + "dev": true, + "requires": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "npm-registry-fetch": { + "version": "11.0.0", + "dev": true, + "requires": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + } + }, + "npm-run-path": { + "version": "4.0.1", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "2.1.1", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "dev": true + }, + "object.assign": { + "version": "4.1.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.values": { + "version": "1.1.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "objectorarray": { + "version": "1.0.5", + "dev": true + }, + "obuf": { + "version": "1.1.2", + "dev": true + }, + "omggif": { + "version": "1.0.10", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "dev": true + }, + "once": { + "version": "1.4.0", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "only": { + "version": "0.0.2", + "dev": true + }, + "open": { + "version": "8.4.0", + "dev": true, + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "opn": { + "version": "5.5.0", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "dev": true + } + } + }, + "optionator": { + "version": "0.9.1", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "os-homedir": { + "version": "1.0.2", + "dev": true + }, + "os-locale": { + "version": "1.4.0", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "outline-i18n": { + "version": "git+ssh://git@github.com/Jigsaw-Code/outline-i18n.git#4642c3657074246b8eca09486941434718f66608", + "dev": true, + "from": "outline-i18n@Jigsaw-Code/outline-i18n#v0.0.7" + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + }, + "dependencies": { + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + } + } + }, + "p-map": { + "version": "1.2.0", + "dev": true + }, + "p-retry": { + "version": "4.6.2", + "dev": true, + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "dependencies": { + "retry": { + "version": "0.13.1", + "dev": true + } + } + }, + "p-try": { + "version": "2.2.0", + "dev": true + }, + "pacote": { + "version": "11.3.5", + "dev": true, + "requires": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "dependencies": { + "cacache": { + "version": "15.3.0", + "dev": true, + "requires": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + } + }, + "chownr": { + "version": "2.0.0", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "dev": true + }, + "p-map": { + "version": "4.0.0", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ssri": { + "version": "8.0.1", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + } + } + }, + "pako": { + "version": "1.0.11", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "3.0.4", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "dev": true + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "dev": true + }, + "parse-bmfont-xml": { + "version": "1.1.4", + "dev": true, + "requires": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.4.5" + } + }, + "parse-entities": { + "version": "2.0.0", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-headers": { + "version": "2.0.5", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse5": { + "version": "6.0.1", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "path-dirname": { + "version": "1.0.2", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1" + }, + "path-is-inside": { + "version": "1.0.2", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "dev": true + }, + "pend": { + "version": "1.2.0", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "dev": true + }, + "phantomjs-prebuilt": { + "version": "2.1.16", + "dev": true, + "requires": { + "es6-promise": "^4.0.3", + "extract-zip": "^1.6.5", + "fs-extra": "^1.0.0", + "hasha": "^2.2.0", + "kew": "^0.7.0", + "progress": "^1.1.8", + "request": "^2.81.0", + "request-progress": "^2.0.1", + "which": "^1.2.10" + }, + "dependencies": { + "fs-extra": { + "version": "1.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0" + } + }, + "jsonfile": { + "version": "2.4.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "progress": { + "version": "1.1.8", + "dev": true + }, + "which": { + "version": "1.3.1", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "phin": { + "version": "2.9.3", + "dev": true + }, + "picocolors": { + "version": "0.2.1", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "dev": true + }, + "pify": { + "version": "5.0.0", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pixelmatch": { + "version": "4.0.2", + "dev": true, + "requires": { + "pngjs": "^3.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "pkginfo": { + "version": "0.4.0", + "dev": true + }, + "please-upgrade-node": { + "version": "3.2.0", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "plist": { + "version": "3.0.6", + "dev": true, + "requires": { + "base64-js": "^1.5.1", + "xmlbuilder": "^15.1.1" + } + }, + "plugins-manager": { + "version": "0.3.1", + "dev": true + }, + "pn": { + "version": "1.1.0", + "dev": true + }, + "pngjs": { + "version": "3.4.0", + "dev": true + }, + "pngjs-nozlib": { + "version": "1.0.0", + "dev": true + }, + "portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "requires": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "dependencies": { + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "postcss": { + "version": "7.0.39", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-rtl": { + "version": "1.7.3", + "dev": true, + "requires": { + "rtlcss": "2.5.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true + }, + "prettier": { + "version": "1.19.1", + "dev": true + }, + "pretty-error": { + "version": "4.0.0", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "pretty-quick": { + "version": "2.0.2", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "execa": "^2.1.0", + "find-up": "^4.1.0", + "ignore": "^5.1.4", + "mri": "^1.1.4", + "multimatch": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "execa": { + "version": "2.1.0", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^3.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "find-up": { + "version": "4.1.0", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "npm-run-path": { + "version": "3.1.0", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "p-finally": { + "version": "2.0.1", + "dev": true + }, + "p-locate": { + "version": "4.1.0", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "prismjs": { + "version": "1.28.0", + "dev": true + }, + "process": { + "version": "0.11.10", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "dev": true + }, + "progress": { + "version": "2.0.3", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "dev": true + }, + "promise-retry": { + "version": "2.0.1", + "dev": true, + "requires": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + } + }, + "promzard": { + "version": "0.3.0", + "dev": true, + "requires": { + "read": "1" + } + }, + "properties-parser": { + "version": "0.3.1", + "dev": true, + "requires": { + "string.prototype.codepointat": "^0.2.0" + } + }, + "property-information": { + "version": "5.6.0", + "dev": true, + "requires": { + "xtend": "^4.0.0" + } + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "optional": true + }, + "proxy-addr": { + "version": "2.0.7", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "dev": true + }, + "psl": { + "version": "1.9.0", + "dev": true + }, + "pump": { + "version": "3.0.0", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1" + }, + "puppeteer": { + "version": "13.7.0", + "dev": true, + "requires": { + "cross-fetch": "3.1.5", + "debug": "4.3.4", + "devtools-protocol": "0.0.981744", + "extract-zip": "2.0.1", + "https-proxy-agent": "5.0.1", + "pkg-dir": "4.2.0", + "progress": "2.0.3", + "proxy-from-env": "1.1.0", + "rimraf": "3.0.2", + "tar-fs": "2.1.1", + "unbzip2-stream": "1.4.3", + "ws": "8.5.0" + }, + "dependencies": { + "extract-zip": { + "version": "2.0.1", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + } + }, + "get-stream": { + "version": "5.2.0", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ws": { + "version": "8.5.0", + "dev": true, + "requires": {} + } + } + }, + "q": { + "version": "1.5.1", + "dev": true + }, + "qjobs": { + "version": "1.2.0", + "dev": true + }, + "qs": { + "version": "6.10.3", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystring": { + "version": "0.2.0", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + } + } + }, + "read": { + "version": "1.0.7", + "dev": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-chunk": { + "version": "3.2.0", + "dev": true, + "requires": { + "pify": "^4.0.1", + "with-open-file": "^0.1.6" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "dev": true + } + } + }, + "read-config-file": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", + "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==", + "dev": true, + "requires": { + "dotenv": "^9.0.2", + "dotenv-expand": "^5.1.0", + "js-yaml": "^4.1.0", + "json5": "^2.2.0", + "lazy-val": "^1.0.4" + } + }, + "read-package-json": { + "version": "4.1.2", + "dev": true, + "requires": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "read-package-json-fast": { + "version": "2.0.3", + "dev": true, + "requires": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "read-pkg": { + "version": "4.0.1", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "pify": { + "version": "3.0.0", + "dev": true + }, + "semver": { + "version": "5.7.1", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "1.0.1", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "path-exists": { + "version": "2.1.0", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.7.1", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "reduce-flatten": { + "version": "2.0.0", + "dev": true + }, + "regenerate": { + "version": "1.4.2", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.0.1", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.0", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "dev": true + }, + "regexpu-core": { + "version": "5.1.0", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.6.0", + "dev": true + }, + "regjsparser": { + "version": "0.8.4", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "dev": true + } + } + }, + "rehype-autolink-headings": { + "version": "5.1.0", + "dev": true, + "requires": { + "extend": "^3.0.0", + "hast-util-has-property": "^1.0.0", + "hast-util-heading-rank": "^1.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "rehype-parse": { + "version": "7.0.1", + "dev": true, + "requires": { + "hast-util-from-parse5": "^6.0.0", + "parse5": "^6.0.0" + } + }, + "rehype-prism": { + "version": "1.0.2", + "dev": true, + "requires": { + "@types/node": "^14.14.31", + "@types/prismjs": "^1.16.6", + "prismjs": "^1.24.1", + "rehype-parse": "^7.0.1", + "unist-util-is": "^4.1.0", + "unist-util-select": "^4.0.0", + "unist-util-visit": "^3.1.0" + }, + "dependencies": { + "unist-util-visit": { + "version": "3.1.0", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0", + "unist-util-visit-parents": "^4.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "5.1.1", + "dev": true + } + } + }, + "unist-util-visit-parents": { + "version": "4.1.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^5.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "5.1.1", + "dev": true + } + } + } + } + }, + "rehype-raw": { + "version": "5.1.0", + "dev": true, + "requires": { + "hast-util-raw": "^6.1.0" + }, + "dependencies": { + "hast-util-raw": { + "version": "6.1.0", + "dev": true, + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + } + } + }, + "rehype-slug": { + "version": "4.0.1", + "dev": true, + "requires": { + "github-slugger": "^1.1.1", + "hast-util-has-property": "^1.0.0", + "hast-util-heading-rank": "^1.0.0", + "hast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "rehype-stringify": { + "version": "8.0.0", + "dev": true, + "requires": { + "hast-util-to-html": "^7.1.1" + } + }, + "relateurl": { + "version": "0.2.7", + "dev": true + }, + "remark": { + "version": "13.0.0", + "dev": true, + "requires": { + "remark-parse": "^9.0.0", + "remark-stringify": "^9.0.0", + "unified": "^9.1.0" + }, + "dependencies": { + "remark-parse": { + "version": "9.0.0", + "dev": true, + "requires": { + "mdast-util-from-markdown": "^0.8.0" + } + } + } + }, + "remark-footnotes": { + "version": "2.0.0", + "dev": true + }, + "remark-gfm": { + "version": "1.0.0", + "dev": true, + "requires": { + "mdast-util-gfm": "^0.1.0", + "micromark-extension-gfm": "^0.3.0" + } + }, + "remark-html": { + "version": "13.0.2", + "dev": true, + "requires": { + "hast-util-sanitize": "^3.0.0", + "hast-util-to-html": "^7.0.0", + "mdast-util-to-hast": "^10.0.0" + } + }, + "remark-mdx": { + "version": "1.6.22", + "dev": true, + "requires": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "dev": true + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "semver": { + "version": "5.7.1", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "dev": true + } + } + }, + "remark-parse": { + "version": "8.0.3", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "remark-rehype": { + "version": "8.1.0", + "dev": true, + "requires": { + "mdast-util-to-hast": "^10.2.0" + }, + "dependencies": { + "mdast-util-to-hast": { + "version": "10.2.0", + "dev": true, + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + } + } + }, + "remark-slug": { + "version": "6.1.0", + "dev": true, + "requires": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^2.0.0" + }, + "dependencies": { + "mdast-util-to-string": { + "version": "1.1.0", + "dev": true + } + } + }, + "remark-squeeze-paragraphs": { + "version": "4.0.0", + "dev": true, + "requires": { + "mdast-squeeze-paragraphs": "^4.0.0" + } + }, + "remark-stringify": { + "version": "9.0.1", + "dev": true, + "requires": { + "mdast-util-to-markdown": "^0.6.0" + } + }, + "renderkid": { + "version": "3.0.0", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "repeat-string": { + "version": "1.6.1", + "dev": true + }, + "replace-in-file": { + "version": "6.3.5", + "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-6.3.5.tgz", + "integrity": "sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "glob": "^7.2.0", + "yargs": "^17.2.1" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "request": { + "version": "2.88.2", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.5.3", + "dev": true + } + } + }, + "request-progress": { + "version": "2.0.1", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "require-directory": { + "version": "2.1.1", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "dev": true + } + } + }, + "resolve-from": { + "version": "4.0.0", + "dev": true + }, + "resolve-path": { + "version": "1.4.0", + "dev": true, + "requires": { + "http-errors": "~1.6.2", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "1.1.2", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "retry": { + "version": "0.12.0", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "dev": true + }, + "rfdc": { + "version": "1.3.0", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rmfr": { + "version": "2.0.0", + "dev": true, + "requires": { + "assert-valid-glob-opts": "^1.0.0", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "inspect-with-kind": "^1.0.4", + "rimraf": "^2.6.2" + } + }, + "roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "dev": true, + "optional": true, + "requires": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + } + }, + "rollup": { + "version": "2.77.3", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + } + }, + "rtlcss": { + "version": "2.5.0", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "findup": "^0.1.5", + "mkdirp": "^0.5.1", + "postcss": "^6.0.23", + "strip-json-comments": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "run-node": { + "version": "1.0.0", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "run-queue": { + "version": "1.0.3", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rxjs": { + "version": "7.5.6", + "optional": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "dev": true + }, + "sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "requires": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "sax": { + "version": "1.2.4" + }, + "schema-utils": { + "version": "2.7.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "dev": true + }, + "selfsigned": { + "version": "2.0.1", + "dev": true, + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "6.3.0", + "dev": true + }, + "semver-compare": { + "version": "1.0.0", + "dev": true + }, + "send": { + "version": "0.18.0", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "dev": true + }, + "ms": { + "version": "2.1.3", + "dev": true + } + } + }, + "serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "dev": true, + "optional": true, + "requires": { + "type-fest": "^0.13.1" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "dev": true + }, + "ms": { + "version": "2.0.0", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "dev": true + }, + "ShadowsocksConfig": { + "version": "git+ssh://git@github.com/Jigsaw-Code/outline-shadowsocksconfig.git#6d01c4b1beae3a3bc2a1074e5e310dfa023be57d", + "from": "ShadowsocksConfig@github:Jigsaw-Code/outline-shadowsocksconfig#v0.2.1", + "requires": { + "ipaddr.js": "^2.0.0", + "js-base64": "^3.5.2", + "punycode": "^1.4.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "2.0.1" + } + } + }, + "shady-css-scoped-element": { + "version": "0.0.2", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "2.0.0", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "dev": true + }, + "shelljs": { + "version": "0.5.3", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "dev": true + }, + "simctl": { + "version": "2.0.3", + "dev": true, + "requires": { + "shelljs": "^0.8.5", + "tail": "^0.4.0" + }, + "dependencies": { + "interpret": { + "version": "1.4.0", + "dev": true + }, + "rechoir": { + "version": "0.6.2", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "shelljs": { + "version": "0.8.5", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + } + } + }, + "simple-plist": { + "version": "1.3.1", + "dev": true, + "requires": { + "bplist-creator": "0.1.0", + "bplist-parser": "0.3.1", + "plist": "^3.0.5" + }, + "dependencies": { + "bplist-parser": { + "version": "0.3.1", + "dev": true, + "requires": { + "big-integer": "1.6.x" + } + } + } + }, + "simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "slash": { + "version": "3.0.0", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "smart-buffer": { + "version": "4.2.0", + "dev": true + }, + "socket.io": { + "version": "4.5.1", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.2.0", + "socket.io-adapter": "~2.4.0", + "socket.io-parser": "~4.0.4" + } + }, + "socket.io-adapter": { + "version": "2.4.0", + "dev": true + }, + "socket.io-parser": { + "version": "4.0.5", + "dev": true, + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + } + }, + "sockjs": { + "version": "0.3.24", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "dev": true + } + } + }, + "socks": { + "version": "1.1.10", + "requires": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + }, + "dependencies": { + "smart-buffer": { + "version": "1.1.15" + } + } + }, + "socks-proxy-agent": { + "version": "6.2.1", + "dev": true, + "requires": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "dependencies": { + "ip": { + "version": "2.0.0", + "dev": true + }, + "socks": { + "version": "2.7.0", + "dev": true, + "requires": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "space-separated-tokens": { + "version": "1.1.5", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "sprintf-js": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", + "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", + "dev": true, + "optional": true + }, + "sshpk": { + "version": "1.17.0", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.2", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "stat-mode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", + "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", + "dev": true + }, + "state-toggle": { + "version": "1.0.3", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "dev": true + }, + "storybook-addon-markdown-docs": { + "version": "1.0.5", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/core": "^7.17.5", + "@babel/generator": "^7.17.3", + "@babel/parser": "^7.17.3", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-react-jsx": "^7.17.3", + "@mdjs/core": "^0.9.2", + "@mdx-js/mdx": "^1.6.22", + "detab": "^2.0.4", + "mdurl": "^1.0.1", + "remark-html": "^13.0.2", + "remark-parse": "^9.0.0", + "remark-slug": "^6.1.0", + "unified": "^9.2.2", + "unist-builder": "^2.0.3", + "unist-util-visit-parents": "^3.1.1" + }, + "dependencies": { + "remark-parse": { + "version": "9.0.0", + "dev": true, + "requires": { + "mdast-util-from-markdown": "^0.8.0" + } + }, + "unified": { + "version": "9.2.2", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + } + } + }, + "stream-buffers": { + "version": "2.2.0", + "dev": true + }, + "stream-each": { + "version": "1.2.3", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "dev": true + }, + "streamroller": { + "version": "3.1.2", + "dev": true, + "requires": { + "date-format": "^4.0.13", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "dependencies": { + "fs-extra": { + "version": "8.1.0", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "universalify": { + "version": "0.1.2", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.1.1", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-similarity": { + "version": "1.1.0", + "dev": true, + "requires": { + "lodash": "^4.13.1" + } + }, + "string-width": { + "version": "4.2.3", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.codepointat": { + "version": "0.2.1", + "dev": true + }, + "string.prototype.trimend": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.5", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "stringify-entities": { + "version": "3.1.0", + "dev": true, + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stringify-package": { + "version": "1.0.1", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-bom": { + "version": "4.0.0", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "dev": true + }, + "style-loader": { + "version": "2.0.0", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "style-to-object": { + "version": "0.3.0", + "dev": true, + "requires": { + "inline-style-parser": "0.1.1" + } + }, + "sudo-prompt": { + "version": "9.2.1" + }, + "sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "dev": true, + "requires": { + "debug": "^4.1.0" + } + }, + "supports-color": { + "version": "7.2.0", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "dev": true + }, + "svg2png": { + "version": "4.1.1", + "dev": true, + "requires": { + "file-url": "^2.0.0", + "phantomjs-prebuilt": "^2.1.14", + "pn": "^1.0.0", + "yargs": "^6.5.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "dev": true + }, + "camelcase": { + "version": "3.0.0", + "dev": true + }, + "cliui": { + "version": "3.2.0", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "y18n": { + "version": "3.2.2", + "dev": true + }, + "yargs": { + "version": "6.6.0", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + }, + "yargs-parser": { + "version": "4.2.1", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + } + } + }, + "synckit": { + "version": "0.8.3", + "dev": true, + "requires": { + "@pkgr/utils": "^2.3.0", + "tslib": "^2.4.0" + } + }, + "systemjs": { + "version": "6.12.2", + "dev": true + }, + "table-layout": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "dev": true + }, + "typical": { + "version": "5.2.0", + "dev": true + } + } + }, + "tail": { + "version": "0.4.0", + "dev": true + }, + "tapable": { + "version": "2.2.1", + "dev": true + }, + "tar": { + "version": "6.1.11", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "chownr": { + "version": "2.0.0", + "dev": true + }, + "mkdirp": { + "version": "1.0.4", + "dev": true + } + } + }, + "tar-fs": { + "version": "2.1.1", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "temp-file": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", + "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", + "dev": true, + "requires": { + "async-exit-hook": "^2.0.1", + "fs-extra": "^10.0.0" + }, + "dependencies": { + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, + "terser": { + "version": "5.14.2", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.3", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.7", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.7.2" + }, + "dependencies": { + "jest-worker": { + "version": "27.5.1", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "serialize-javascript": { + "version": "6.0.0", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "supports-color": { + "version": "8.1.1", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "dev": true + }, + "throttleit": { + "version": "1.0.0", + "dev": true + }, + "through": { + "version": "2.3.8", + "dev": true + }, + "through2": { + "version": "2.0.5", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "dev": true + }, + "timm": { + "version": "1.7.1", + "dev": true + }, + "tiny-glob": { + "version": "0.2.9", + "dev": true, + "requires": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "tinycolor2": { + "version": "1.4.2", + "dev": true + }, + "tmp": { + "version": "0.2.1", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "tmp-promise": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", + "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "dev": true, + "requires": { + "tmp": "^0.2.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "dev": true + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "dev": true + } + } + }, + "tr46": { + "version": "3.0.0", + "dev": true, + "requires": { + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "dev": true + } + } + }, + "trim": { + "version": "0.0.1", + "dev": true + }, + "trim-trailing-lines": { + "version": "1.1.4", + "dev": true + }, + "trough": { + "version": "1.0.5", + "dev": true + }, + "truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "dev": true, + "requires": { + "utf8-byte-length": "^1.0.1" + } + }, + "ts-dedent": { + "version": "2.2.0", + "dev": true + }, + "ts-loader": { + "version": "9.3.1", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "semver": { + "version": "7.3.7", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "tsconfig-paths": { + "version": "3.14.1", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "dev": true + } + } + }, + "tslib": { + "version": "2.4.0" + }, + "tsscmp": { + "version": "1.0.6", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "dev": true + } + } + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "optional": true + }, + "tunnel-agent": { + "version": "0.6.0", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "dev": true, + "optional": true + }, + "type-is": { + "version": "1.6.18", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typed-emitter": { + "version": "2.1.0", + "requires": { + "rxjs": "*" + } + }, + "typedarray": { + "version": "0.0.6", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.7.4", + "dev": true + }, + "typical": { + "version": "4.0.0", + "dev": true + }, + "ua-parser-js": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.33.tgz", + "integrity": "sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ==", + "dev": true + }, + "uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true + }, + "unbox-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unbzip2-stream": { + "version": "1.4.3", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "underscore": { + "version": "1.13.4", + "dev": true + }, + "unherit": { + "version": "1.1.3", + "dev": true, + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "dev": true + }, + "unified": { + "version": "9.2.0", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "unique-filename": { + "version": "1.1.1", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unist-builder": { + "version": "2.0.3", + "dev": true + }, + "unist-util-generated": { + "version": "1.1.6", + "dev": true + }, + "unist-util-is": { + "version": "4.1.0", + "dev": true + }, + "unist-util-position": { + "version": "3.1.0", + "dev": true + }, + "unist-util-remove": { + "version": "2.1.0", + "dev": true, + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-remove-position": { + "version": "2.0.1", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "unist-util-select": { + "version": "4.0.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "css-selector-parser": "^1.0.0", + "nth-check": "^2.0.0", + "unist-util-is": "^5.0.0", + "zwitch": "^2.0.0" + }, + "dependencies": { + "unist-util-is": { + "version": "5.1.1", + "dev": true + }, + "zwitch": { + "version": "2.0.2", + "dev": true + } + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.3", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0" + }, + "unorm": { + "version": "1.6.0", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "dev": true + }, + "untildify": { + "version": "3.0.3" + }, + "update-browserslist-db": { + "version": "1.0.5", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0" + } + } + }, + "uri-js": { + "version": "4.4.1", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "dev": true + } + } + }, + "url": { + "version": "0.11.0", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "dev": true + } + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "utf8-byte-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", + "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==", + "dev": true + }, + "utif": { + "version": "2.0.1", + "dev": true, + "requires": { + "pako": "^1.0.5" + } + }, + "util-deprecate": { + "version": "1.0.2", + "dev": true + }, + "utila": { + "version": "0.4.0", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "dev": true + }, + "uuidv4": { + "version": "4.0.0", + "requires": { + "uuid": "3.3.2" + }, + "dependencies": { + "uuid": { + "version": "3.3.2" + } + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "dev": true + }, + "validate-glob-opts": { + "version": "1.0.2", + "dev": true, + "requires": { + "array-to-sentence": "^1.1.0", + "indexed-filter": "^1.0.0", + "inspect-with-kind": "^1.0.4", + "is-plain-obj": "^1.1.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "dev": true + } + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "dev": true + }, + "verror": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", + "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", + "dev": true, + "optional": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "optional": true + } + } + }, + "vfile": { + "version": "4.2.1", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-location": { + "version": "3.2.0", + "dev": true + }, + "vfile-message": { + "version": "2.0.4", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "void-elements": { + "version": "2.0.1", + "dev": true + }, + "watchpack": { + "version": "2.4.0", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "web-animations-js": { + "version": "2.3.2" + }, + "web-namespaces": { + "version": "1.1.4", + "dev": true + }, + "web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "dev": true + }, + "webidl-conversions": { + "version": "7.0.0", + "dev": true + }, + "webpack": { + "version": "5.74.0", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "@types/estree": { + "version": "0.0.51", + "dev": true + }, + "es-module-lexer": { + "version": "0.9.3", + "dev": true + }, + "schema-utils": { + "version": "3.1.1", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-cli": { + "version": "4.10.0", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "5.3.3", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.10.0", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "@types/ws": { + "version": "8.5.3", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "ajv": { + "version": "8.11.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "ipaddr.js": { + "version": "2.0.1", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "schema-utils": { + "version": "4.0.0", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "ws": { + "version": "8.8.1", + "dev": true, + "requires": {} + } + } + }, + "webpack-log": { + "version": "2.0.0", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "5.8.0", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-shell-plugin-next": { + "version": "2.2.2", + "dev": true, + "requires": {} + }, + "webpack-sources": { + "version": "3.2.3", + "dev": true + }, + "websocket-driver": { + "version": "0.7.4", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "dev": true + }, + "whatwg-fetch": { + "version": "3.6.2", + "dev": true + }, + "whatwg-url": { + "version": "11.0.0", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + }, + "which": { + "version": "2.0.2", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "1.0.0", + "dev": true + }, + "wide-align": { + "version": "1.1.5", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wildcard": { + "version": "2.0.0", + "dev": true + }, + "winreg": { + "version": "1.2.4" + }, + "with-open-file": { + "version": "0.1.7", + "dev": true, + "requires": { + "p-finally": "^1.0.0", + "p-try": "^2.1.0", + "pify": "^4.0.1" + }, + "dependencies": { + "pify": { + "version": "4.0.1", + "dev": true + } + } + }, + "word-wrap": { + "version": "1.2.3", + "dev": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "wordwrapjs": { + "version": "4.0.1", + "dev": true, + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "dev": true + } + } + }, + "wrap-ansi": { + "version": "7.0.0", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.9", + "dev": true, + "requires": {} + }, + "xcode": { + "version": "3.0.1", + "dev": true, + "requires": { + "simple-plist": "^1.1.0", + "uuid": "^7.0.3" + }, + "dependencies": { + "uuid": { + "version": "7.0.3", + "dev": true + } + } + }, + "xhr": { + "version": "2.6.0", + "dev": true, + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xml-escape": { + "version": "1.1.0", + "dev": true + }, + "xml-parse-from-string": { + "version": "1.0.1", + "dev": true + }, + "xml2js": { + "version": "0.4.23", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "dependencies": { + "xmlbuilder": { + "version": "11.0.1", + "dev": true + } + } + }, + "xmlbuilder": { + "version": "15.1.1", + "dev": true + }, + "xmlbuilder2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder2/-/xmlbuilder2-3.1.1.tgz", + "integrity": "sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==", + "dev": true, + "requires": { + "@oozcitak/dom": "1.15.10", + "@oozcitak/infra": "1.0.8", + "@oozcitak/util": "8.3.8", + "js-yaml": "3.14.1" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + } + } + }, + "xtend": { + "version": "4.0.2", + "dev": true + }, + "y18n": { + "version": "4.0.3", + "dev": true + }, + "yallist": { + "version": "4.0.0" + }, + "yargs": { + "version": "17.5.1", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "dependencies": { + "y18n": { + "version": "5.0.8", + "dev": true + } + } + }, + "yargs-parser": { + "version": "21.1.1", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "ylru": { + "version": "1.3.2", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "dev": true + }, + "zwitch": { + "version": "1.0.5", + "dev": true + } + } +} diff --git a/outline_client/package.json b/outline_client/package.json new file mode 100644 index 0000000000..24205ba6a6 --- /dev/null +++ b/outline_client/package.json @@ -0,0 +1,159 @@ +{ + "name": "outline-client", + "version": "0.0.0", + "productName": "Outline", + "scripts": { + "clean": "rimraf output node_modules www platforms plugins third_party/jsign/*.jar", + "format:all": "prettier --write \"**/*.{cjs,mjs,html,js,json,md,ts}\"", + "format": "pretty-quick --staged --pattern \"**/*.{cjs,mjs,html,js,json,md,ts}\"", + "lint:ts": "eslint --ext ts,mjs src", + "lint": "npm run lint:ts", + "reset": "npm run clean && npm ci" + }, + "comments": { + "version": "The 'version' in this file is just a placeholder for 'npx generate-license-file', please do not change it.", + "codrova-osx": "Version-controlled platform config files at src/cordova/apple/xcode/osx/Outline/config.xml, src/cordova/apple/xcode/osx/osx.json, and src/cordova/apple/xcode/osx/www/cordova_plugins.js as a workaround for https://github.com/apache/cordova-osx/issues/106. Delete these files when the issue is fixed." + }, + "dependencies": { + "@material/mwc-button": "^0.25.3", + "@material/mwc-icon-button": "^0.25.3", + "@material/mwc-menu": "^0.25.3", + "@polymer/app-layout": "^3.1.0", + "@polymer/app-localize-behavior": "^3.0.1", + "@polymer/app-route": "^3.0.2", + "@polymer/decorators": "^3.0.0", + "@polymer/font-roboto": "^3.0.2", + "@polymer/iron-icons": "^3.0.1", + "@polymer/iron-iconset-svg": "^3.0.1", + "@polymer/iron-pages": "^3.0.1", + "@polymer/paper-behaviors": "^3.0.1", + "@polymer/paper-button": "^3.0.1", + "@polymer/paper-card": "^3.0.1", + "@polymer/paper-dialog": "^3.0.1", + "@polymer/paper-dropdown-menu": "^3.1.0", + "@polymer/paper-icon-button": "^3.0.2", + "@polymer/paper-input": "^3.2.1", + "@polymer/paper-item": "^3.0.1", + "@polymer/paper-listbox": "^3.0.1", + "@polymer/paper-menu-button": "^3.0.1", + "@polymer/paper-ripple": "^3.0.2", + "@polymer/paper-styles": "^3.0.1", + "@polymer/paper-toast": "^3.0.1", + "@sentry/browser": "^7.31.1", + "@sentry/electron": "^4.2.0", + "@webcomponents/webcomponentsjs": "^2.4.4", + "auto-launch": "^5.0.5", + "browserslist": "^4.20.3", + "cordova-plugin-splashscreen": "^6.0.0", + "cordova-plugin-statusbar": "^2.2.3", + "electron-updater": "^5.0.5", + "lit": "^2.2.2", + "ShadowsocksConfig": "github:Jigsaw-Code/outline-shadowsocksconfig#v0.2.1", + "socks": "^1.1.10", + "sudo-prompt": "^9.2.1", + "uuidv4": "^4.0.0", + "web-animations-js": "^2.3.2" + }, + "engines": { + "node": "^18.16.0", + "npm": "^9.5.1" + }, + "devDependencies": { + "@babel/core": "^7.12.10", + "@babel/polyfill": "^7.12.1", + "@babel/preset-env": "^7.12.11", + "@commitlint/config-conventional": "^16.2.4", + "@jsdevtools/coverage-istanbul-loader": "^3.0.5", + "@rollup/plugin-image": "^2.1.1", + "@types/auto-launch": "^5.0.0", + "@types/cordova": "^0.0.34", + "@types/jasmine": "^2.8.6", + "@types/node": "^14.14.7", + "@types/polymer": "^1.2.9", + "@types/uuidv4": "^2.0.0", + "@typescript-eslint/eslint-plugin": "^5.32.0", + "@typescript-eslint/parser": "^5.32.0", + "@web/dev-server": "^0.1.35", + "@web/dev-server-esbuild": "^0.3.3", + "@web/dev-server-storybook": "^0.5.4", + "babel-loader": "^8.2.2", + "chalk": "^5.0.1", + "copy-dir": "^1.3.0", + "copy-webpack-plugin": "^5.1.1", + "cordova-android": "^11.0.0", + "cordova-browser": "~6.0.0", + "cordova-ios": "~6.3.0", + "cordova-lib": "^11.0.0", + "cordova-osx": "github:apache/cordova-osx", + "cordova-plugin-clipboard": "github:Jigsaw-Code/outline-cordova-plugin-clipboard#v2.0.0", + "cordova-plugin-outline": "file:src/cordova/plugin", + "cordova-webintent": "github:cordova-misc/cordova-webintent#v2.0.0", + "css-loader": "^5.0.1", + "electron": "^19.1.9", + "electron-builder": "^23.6.0", + "electron-icon-maker": "^0.0.5", + "eslint": "^8.15.0", + "eslint-import-resolver-typescript": "^3.4.0", + "eslint-plugin-compat": "^4.0.2", + "eslint-plugin-import": "^2.26.0", + "esm": "^3.2.25", + "file-loader": "^6.2.0", + "html-webpack-plugin": "^5.1.0", + "husky": "^1.3.1", + "intl-messageformat": "^9.12.0", + "istanbul": "^0.4.5", + "karma": "^6.3.16", + "karma-chrome-launcher": "^3.1.0", + "karma-coverage-istanbul-reporter": "^3.0.3", + "karma-jasmine": "^4.0.1", + "karma-webpack": "^5.0.0", + "minimist": "^1.2.6", + "node-fetch": "^3.3.0", + "outline-i18n": "Jigsaw-Code/outline-i18n#v0.0.7", + "postcss": "^7.0.39", + "postcss-rtl": "^1.7.3", + "prettier": "^1.19.1", + "pretty-quick": "^2.0.1", + "puppeteer": "^13.1.2", + "replace-in-file": "^6.3.5", + "rimraf": "^2.7.1", + "rmfr": "^2.0.0", + "style-loader": "^2.0.0", + "ts-loader": "^9.3.1", + "typescript": "^4.7.4", + "url": "^0.11.0", + "webpack": "^5.16.0", + "webpack-cli": "^4.4.0", + "webpack-dev-server": "^4.5.0", + "webpack-merge": "^5.8.0", + "webpack-shell-plugin-next": "^2.1.1", + "xmlbuilder2": "^3.1.1" + }, + "optionalDependencies": { + "ios-deploy": "^1.11.4" + }, + "main": "build/electron/electron/index.js", + "husky": { + "hooks": { + "pre-commit": "npm run lint:ts -- --fix && npm run format" + } + }, + "cordova": { + "plugins": { + "cordova-plugin-outline": {}, + "cordova-plugin-splashscreen": {}, + "cordova-plugin-statusbar": {}, + "cordova-plugin-clipboard": {}, + "cordova-webintent": {} + }, + "platforms": [ + "browser", + "android", + "ios", + "osx" + ] + }, + "workspaces": [ + "src/cordova/plugin" + ] +} diff --git a/resources/electron/icon.png b/outline_client/resources/electron/icon.png similarity index 100% rename from resources/electron/icon.png rename to outline_client/resources/electron/icon.png diff --git a/resources/icons/android/icon_hdpi.png b/outline_client/resources/icons/android/icon_hdpi.png similarity index 100% rename from resources/icons/android/icon_hdpi.png rename to outline_client/resources/icons/android/icon_hdpi.png diff --git a/resources/icons/android/icon_mdpi.png b/outline_client/resources/icons/android/icon_mdpi.png similarity index 100% rename from resources/icons/android/icon_mdpi.png rename to outline_client/resources/icons/android/icon_mdpi.png diff --git a/resources/icons/android/icon_xhdpi.png b/outline_client/resources/icons/android/icon_xhdpi.png similarity index 100% rename from resources/icons/android/icon_xhdpi.png rename to outline_client/resources/icons/android/icon_xhdpi.png diff --git a/resources/icons/android/icon_xxhdpi.png b/outline_client/resources/icons/android/icon_xxhdpi.png similarity index 100% rename from resources/icons/android/icon_xxhdpi.png rename to outline_client/resources/icons/android/icon_xxhdpi.png diff --git a/resources/icons/android/icon_xxxhdpi.png b/outline_client/resources/icons/android/icon_xxxhdpi.png similarity index 100% rename from resources/icons/android/icon_xxxhdpi.png rename to outline_client/resources/icons/android/icon_xxxhdpi.png diff --git a/resources/icons/ios/Icon-20@2x.png b/outline_client/resources/icons/ios/Icon-20@2x.png similarity index 100% rename from resources/icons/ios/Icon-20@2x.png rename to outline_client/resources/icons/ios/Icon-20@2x.png diff --git a/resources/icons/ios/Icon-20@3x.png b/outline_client/resources/icons/ios/Icon-20@3x.png similarity index 100% rename from resources/icons/ios/Icon-20@3x.png rename to outline_client/resources/icons/ios/Icon-20@3x.png diff --git a/resources/icons/ios/Icon-29@1x.png b/outline_client/resources/icons/ios/Icon-29@1x.png similarity index 100% rename from resources/icons/ios/Icon-29@1x.png rename to outline_client/resources/icons/ios/Icon-29@1x.png diff --git a/resources/icons/ios/Icon-29@2x.png b/outline_client/resources/icons/ios/Icon-29@2x.png similarity index 100% rename from resources/icons/ios/Icon-29@2x.png rename to outline_client/resources/icons/ios/Icon-29@2x.png diff --git a/resources/icons/ios/Icon-29@3x.png b/outline_client/resources/icons/ios/Icon-29@3x.png similarity index 100% rename from resources/icons/ios/Icon-29@3x.png rename to outline_client/resources/icons/ios/Icon-29@3x.png diff --git a/resources/icons/ios/Icon-40@2x.png b/outline_client/resources/icons/ios/Icon-40@2x.png similarity index 100% rename from resources/icons/ios/Icon-40@2x.png rename to outline_client/resources/icons/ios/Icon-40@2x.png diff --git a/resources/icons/ios/Icon-40@3x.png b/outline_client/resources/icons/ios/Icon-40@3x.png similarity index 100% rename from resources/icons/ios/Icon-40@3x.png rename to outline_client/resources/icons/ios/Icon-40@3x.png diff --git a/resources/icons/ios/Icon-50@1x.png b/outline_client/resources/icons/ios/Icon-50@1x.png similarity index 100% rename from resources/icons/ios/Icon-50@1x.png rename to outline_client/resources/icons/ios/Icon-50@1x.png diff --git a/resources/icons/ios/Icon-50@2x.png b/outline_client/resources/icons/ios/Icon-50@2x.png similarity index 100% rename from resources/icons/ios/Icon-50@2x.png rename to outline_client/resources/icons/ios/Icon-50@2x.png diff --git a/resources/icons/ios/Icon-512@2x.png b/outline_client/resources/icons/ios/Icon-512@2x.png similarity index 100% rename from resources/icons/ios/Icon-512@2x.png rename to outline_client/resources/icons/ios/Icon-512@2x.png diff --git a/resources/icons/ios/Icon-57@1x.png b/outline_client/resources/icons/ios/Icon-57@1x.png similarity index 100% rename from resources/icons/ios/Icon-57@1x.png rename to outline_client/resources/icons/ios/Icon-57@1x.png diff --git a/resources/icons/ios/Icon-57@2x.png b/outline_client/resources/icons/ios/Icon-57@2x.png similarity index 100% rename from resources/icons/ios/Icon-57@2x.png rename to outline_client/resources/icons/ios/Icon-57@2x.png diff --git a/resources/icons/ios/Icon-60@2x.png b/outline_client/resources/icons/ios/Icon-60@2x.png similarity index 100% rename from resources/icons/ios/Icon-60@2x.png rename to outline_client/resources/icons/ios/Icon-60@2x.png diff --git a/resources/icons/ios/Icon-60@3x.png b/outline_client/resources/icons/ios/Icon-60@3x.png similarity index 100% rename from resources/icons/ios/Icon-60@3x.png rename to outline_client/resources/icons/ios/Icon-60@3x.png diff --git a/resources/icons/ios/Icon-72@1x.png b/outline_client/resources/icons/ios/Icon-72@1x.png similarity index 100% rename from resources/icons/ios/Icon-72@1x.png rename to outline_client/resources/icons/ios/Icon-72@1x.png diff --git a/resources/icons/ios/Icon-72@2x.png b/outline_client/resources/icons/ios/Icon-72@2x.png similarity index 100% rename from resources/icons/ios/Icon-72@2x.png rename to outline_client/resources/icons/ios/Icon-72@2x.png diff --git a/resources/icons/ios/Icon-76@1x.png b/outline_client/resources/icons/ios/Icon-76@1x.png similarity index 100% rename from resources/icons/ios/Icon-76@1x.png rename to outline_client/resources/icons/ios/Icon-76@1x.png diff --git a/resources/icons/ios/Icon-76@2x.png b/outline_client/resources/icons/ios/Icon-76@2x.png similarity index 100% rename from resources/icons/ios/Icon-76@2x.png rename to outline_client/resources/icons/ios/Icon-76@2x.png diff --git a/resources/icons/ios/Icon-83.5@2x.png b/outline_client/resources/icons/ios/Icon-83.5@2x.png similarity index 100% rename from resources/icons/ios/Icon-83.5@2x.png rename to outline_client/resources/icons/ios/Icon-83.5@2x.png diff --git a/resources/icons/osx/icon-1024.png b/outline_client/resources/icons/osx/icon-1024.png similarity index 100% rename from resources/icons/osx/icon-1024.png rename to outline_client/resources/icons/osx/icon-1024.png diff --git a/resources/icons/osx/icon-128.png b/outline_client/resources/icons/osx/icon-128.png similarity index 100% rename from resources/icons/osx/icon-128.png rename to outline_client/resources/icons/osx/icon-128.png diff --git a/resources/icons/osx/icon-16.png b/outline_client/resources/icons/osx/icon-16.png similarity index 100% rename from resources/icons/osx/icon-16.png rename to outline_client/resources/icons/osx/icon-16.png diff --git a/resources/icons/osx/icon-256.png b/outline_client/resources/icons/osx/icon-256.png similarity index 100% rename from resources/icons/osx/icon-256.png rename to outline_client/resources/icons/osx/icon-256.png diff --git a/resources/icons/osx/icon-32.png b/outline_client/resources/icons/osx/icon-32.png similarity index 100% rename from resources/icons/osx/icon-32.png rename to outline_client/resources/icons/osx/icon-32.png diff --git a/resources/icons/osx/icon-512.png b/outline_client/resources/icons/osx/icon-512.png similarity index 100% rename from resources/icons/osx/icon-512.png rename to outline_client/resources/icons/osx/icon-512.png diff --git a/resources/icons/osx/icon-64.png b/outline_client/resources/icons/osx/icon-64.png similarity index 100% rename from resources/icons/osx/icon-64.png rename to outline_client/resources/icons/osx/icon-64.png diff --git a/resources/original_messages.json b/outline_client/resources/original_messages.json similarity index 100% rename from resources/original_messages.json rename to outline_client/resources/original_messages.json diff --git a/resources/splashscreen/android/splashscreen_hdpi.png b/outline_client/resources/splashscreen/android/splashscreen_hdpi.png similarity index 100% rename from resources/splashscreen/android/splashscreen_hdpi.png rename to outline_client/resources/splashscreen/android/splashscreen_hdpi.png diff --git a/resources/splashscreen/android/splashscreen_xhdpi.png b/outline_client/resources/splashscreen/android/splashscreen_xhdpi.png similarity index 100% rename from resources/splashscreen/android/splashscreen_xhdpi.png rename to outline_client/resources/splashscreen/android/splashscreen_xhdpi.png diff --git a/resources/splashscreen/android/splashscreen_xxhdpi.png b/outline_client/resources/splashscreen/android/splashscreen_xxhdpi.png similarity index 100% rename from resources/splashscreen/android/splashscreen_xxhdpi.png rename to outline_client/resources/splashscreen/android/splashscreen_xxhdpi.png diff --git a/resources/splashscreen/android/splashscreen_xxxhdpi.png b/outline_client/resources/splashscreen/android/splashscreen_xxxhdpi.png similarity index 100% rename from resources/splashscreen/android/splashscreen_xxxhdpi.png rename to outline_client/resources/splashscreen/android/splashscreen_xxxhdpi.png diff --git a/resources/splashscreen/ios/splashscreen@2x~universal~anyany.png b/outline_client/resources/splashscreen/ios/splashscreen@2x~universal~anyany.png similarity index 100% rename from resources/splashscreen/ios/splashscreen@2x~universal~anyany.png rename to outline_client/resources/splashscreen/ios/splashscreen@2x~universal~anyany.png diff --git a/resources/tray/connected.png b/outline_client/resources/tray/connected.png similarity index 100% rename from resources/tray/connected.png rename to outline_client/resources/tray/connected.png diff --git a/resources/tray/disconnected.png b/outline_client/resources/tray/disconnected.png similarity index 100% rename from resources/tray/disconnected.png rename to outline_client/resources/tray/disconnected.png diff --git a/src/build/download_file.mjs b/outline_client/src/build/download_file.mjs similarity index 100% rename from src/build/download_file.mjs rename to outline_client/src/build/download_file.mjs diff --git a/src/build/get_build_parameters.mjs b/outline_client/src/build/get_build_parameters.mjs similarity index 100% rename from src/build/get_build_parameters.mjs rename to outline_client/src/build/get_build_parameters.mjs diff --git a/src/build/get_file_checksum.mjs b/outline_client/src/build/get_file_checksum.mjs similarity index 100% rename from src/build/get_file_checksum.mjs rename to outline_client/src/build/get_file_checksum.mjs diff --git a/src/build/get_root_dir.mjs b/outline_client/src/build/get_root_dir.mjs similarity index 91% rename from src/build/get_root_dir.mjs rename to outline_client/src/build/get_root_dir.mjs index 646edc8ba2..f0251c52f2 100644 --- a/src/build/get_root_dir.mjs +++ b/outline_client/src/build/get_root_dir.mjs @@ -17,7 +17,7 @@ import url from 'url'; // WARNING: if you move this file, you MUST update this file path const ROOT_DIR = path.resolve( - path.dirname(url.fileURLToPath(import.meta.url)), '..', '..'); + path.dirname(url.fileURLToPath(import.meta.url)), '..', '..', '..'); export function getRootDir() { return ROOT_DIR; diff --git a/src/build/get_webpack_build_mode.mjs b/outline_client/src/build/get_webpack_build_mode.mjs similarity index 100% rename from src/build/get_webpack_build_mode.mjs rename to outline_client/src/build/get_webpack_build_mode.mjs diff --git a/src/build/run_action.mjs b/outline_client/src/build/run_action.mjs similarity index 97% rename from src/build/run_action.mjs rename to outline_client/src/build/run_action.mjs index c775cf43c5..31cd38d562 100644 --- a/src/build/run_action.mjs +++ b/outline_client/src/build/run_action.mjs @@ -31,7 +31,7 @@ const resolveActionPath = async actionPath => { return actionPath; } - const roots = [getRootDir(), path.join(getRootDir(), 'src')]; + const roots = [path.join(getRootDir(), 'outline_client'), path.join(getRootDir(), 'outline_client', 'src')]; const extensions = ['sh', 'mjs']; for (const root of roots) { diff --git a/src/build/run_webpack.mjs b/outline_client/src/build/run_webpack.mjs similarity index 100% rename from src/build/run_webpack.mjs rename to outline_client/src/build/run_webpack.mjs diff --git a/src/build/spawn_stream.mjs b/outline_client/src/build/spawn_stream.mjs similarity index 100% rename from src/build/spawn_stream.mjs rename to outline_client/src/build/spawn_stream.mjs diff --git a/src/cordova/android/OutlineAndroidLib/.gitignore b/outline_client/src/cordova/android/OutlineAndroidLib/.gitignore similarity index 100% rename from src/cordova/android/OutlineAndroidLib/.gitignore rename to outline_client/src/cordova/android/OutlineAndroidLib/.gitignore diff --git a/src/cordova/android/OutlineAndroidLib/build.gradle b/outline_client/src/cordova/android/OutlineAndroidLib/build.gradle similarity index 100% rename from src/cordova/android/OutlineAndroidLib/build.gradle rename to outline_client/src/cordova/android/OutlineAndroidLib/build.gradle diff --git a/src/cordova/android/OutlineAndroidLib/gradle.properties b/outline_client/src/cordova/android/OutlineAndroidLib/gradle.properties similarity index 100% rename from src/cordova/android/OutlineAndroidLib/gradle.properties rename to outline_client/src/cordova/android/OutlineAndroidLib/gradle.properties diff --git a/src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.jar b/outline_client/src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.jar rename to outline_client/src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.jar diff --git a/src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.properties b/outline_client/src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.properties rename to outline_client/src/cordova/android/OutlineAndroidLib/gradle/wrapper/gradle-wrapper.properties diff --git a/src/cordova/android/OutlineAndroidLib/gradlew b/outline_client/src/cordova/android/OutlineAndroidLib/gradlew similarity index 100% rename from src/cordova/android/OutlineAndroidLib/gradlew rename to outline_client/src/cordova/android/OutlineAndroidLib/gradlew diff --git a/src/cordova/android/OutlineAndroidLib/gradlew.bat b/outline_client/src/cordova/android/OutlineAndroidLib/gradlew.bat similarity index 100% rename from src/cordova/android/OutlineAndroidLib/gradlew.bat rename to outline_client/src/cordova/android/OutlineAndroidLib/gradlew.bat diff --git a/src/cordova/android/OutlineAndroidLib/outline/.gitignore b/outline_client/src/cordova/android/OutlineAndroidLib/outline/.gitignore similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/.gitignore rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/.gitignore diff --git a/src/cordova/android/OutlineAndroidLib/outline/build.gradle b/outline_client/src/cordova/android/OutlineAndroidLib/outline/build.gradle similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/build.gradle rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/build.gradle diff --git a/src/cordova/android/OutlineAndroidLib/outline/consumer-rules.pro b/outline_client/src/cordova/android/OutlineAndroidLib/outline/consumer-rules.pro similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/consumer-rules.pro rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/consumer-rules.pro diff --git a/src/cordova/android/OutlineAndroidLib/outline/proguard-rules.pro b/outline_client/src/cordova/android/OutlineAndroidLib/outline/proguard-rules.pro similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/proguard-rules.pro rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/proguard-rules.pro diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/androidTest/java/org/outline/vpn/VpnTunnelStoreTest.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/androidTest/java/org/outline/vpn/VpnTunnelStoreTest.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/androidTest/java/org/outline/vpn/VpnTunnelStoreTest.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/androidTest/java/org/outline/vpn/VpnTunnelStoreTest.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/AndroidManifest.xml b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/AndroidManifest.xml similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/AndroidManifest.xml rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/AndroidManifest.xml diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/IVpnTunnelService.aidl b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/IVpnTunnelService.aidl similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/IVpnTunnelService.aidl rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/IVpnTunnelService.aidl diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/TunnelConfig.aidl b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/TunnelConfig.aidl similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/TunnelConfig.aidl rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/TunnelConfig.aidl diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/shadowsocks/ShadowsocksConfig.aidl b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/shadowsocks/ShadowsocksConfig.aidl similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/shadowsocks/ShadowsocksConfig.aidl rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/aidl/org/outline/shadowsocks/ShadowsocksConfig.aidl diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/OutlineLogger.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/OutlineLogger.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/OutlineLogger.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/OutlineLogger.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/SentryErrorReporter.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/SentryErrorReporter.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/SentryErrorReporter.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/log/SentryErrorReporter.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnServiceStarter.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnServiceStarter.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnServiceStarter.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnServiceStarter.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnel.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnel.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnel.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnel.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelService.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelService.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelService.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelService.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelStore.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelStore.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelStore.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/main/java/org/outline/vpn/VpnTunnelStore.java diff --git a/src/cordova/android/OutlineAndroidLib/outline/src/test/java/org/outline/vpn/VpnTunnelTest.java b/outline_client/src/cordova/android/OutlineAndroidLib/outline/src/test/java/org/outline/vpn/VpnTunnelTest.java similarity index 100% rename from src/cordova/android/OutlineAndroidLib/outline/src/test/java/org/outline/vpn/VpnTunnelTest.java rename to outline_client/src/cordova/android/OutlineAndroidLib/outline/src/test/java/org/outline/vpn/VpnTunnelTest.java diff --git a/src/cordova/android/OutlineAndroidLib/settings.gradle b/outline_client/src/cordova/android/OutlineAndroidLib/settings.gradle similarity index 100% rename from src/cordova/android/OutlineAndroidLib/settings.gradle rename to outline_client/src/cordova/android/OutlineAndroidLib/settings.gradle diff --git a/src/cordova/android/README.md b/outline_client/src/cordova/android/README.md similarity index 100% rename from src/cordova/android/README.md rename to outline_client/src/cordova/android/README.md diff --git a/src/cordova/android/get_native_locale.mjs b/outline_client/src/cordova/android/get_native_locale.mjs similarity index 100% rename from src/cordova/android/get_native_locale.mjs rename to outline_client/src/cordova/android/get_native_locale.mjs diff --git a/src/cordova/apple/OutlineAppleLib/.gitignore b/outline_client/src/cordova/apple/OutlineAppleLib/.gitignore similarity index 100% rename from src/cordova/apple/OutlineAppleLib/.gitignore rename to outline_client/src/cordova/apple/OutlineAppleLib/.gitignore diff --git a/src/cordova/apple/OutlineAppleLib/Package.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Package.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Package.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Package.swift diff --git a/src/cordova/apple/OutlineAppleLib/README.md b/outline_client/src/cordova/apple/OutlineAppleLib/README.md similarity index 100% rename from src/cordova/apple/OutlineAppleLib/README.md rename to outline_client/src/cordova/apple/OutlineAppleLib/README.md diff --git a/src/cordova/apple/OutlineAppleLib/Sources/OutlineSentryLogger/OutlineSentryLogger.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineSentryLogger/OutlineSentryLogger.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/OutlineSentryLogger/OutlineSentryLogger.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineSentryLogger/OutlineSentryLogger.swift diff --git a/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnel.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnel.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnel.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnel.swift diff --git a/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnelStore.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnelStore.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnelStore.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineTunnelStore.swift diff --git a/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/OutlineVpn.swift diff --git a/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/Subnet.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/Subnet.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/Subnet.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/OutlineTunnel/Subnet.swift diff --git a/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/PacketTunnelProvider.m b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/PacketTunnelProvider.m similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/PacketTunnelProvider.m rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/PacketTunnelProvider.m diff --git a/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/include/PacketTunnelProvider.h b/outline_client/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/include/PacketTunnelProvider.h similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/include/PacketTunnelProvider.h rename to outline_client/src/cordova/apple/OutlineAppleLib/Sources/PacketTunnelProvider/include/PacketTunnelProvider.h diff --git a/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift b/outline_client/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift similarity index 100% rename from src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift rename to outline_client/src/cordova/apple/OutlineAppleLib/Tests/OutlineTunnelTest/OutlineTunnelTest.swift diff --git a/src/cordova/apple/README.md b/outline_client/src/cordova/apple/README.md similarity index 100% rename from src/cordova/apple/README.md rename to outline_client/src/cordova/apple/README.md diff --git a/src/cordova/apple/ios.xcworkspace/contents.xcworkspacedata b/outline_client/src/cordova/apple/ios.xcworkspace/contents.xcworkspacedata similarity index 100% rename from src/cordova/apple/ios.xcworkspace/contents.xcworkspacedata rename to outline_client/src/cordova/apple/ios.xcworkspace/contents.xcworkspacedata diff --git a/src/cordova/apple/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/outline_client/src/cordova/apple/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from src/cordova/apple/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to outline_client/src/cordova/apple/ios.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/src/cordova/apple/ios.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/outline_client/src/cordova/apple/ios.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from src/cordova/apple/ios.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to outline_client/src/cordova/apple/ios.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/src/cordova/apple/ios.xcworkspace/xcshareddata/swiftpm/Package.resolved b/outline_client/src/cordova/apple/ios.xcworkspace/xcshareddata/swiftpm/Package.resolved similarity index 100% rename from src/cordova/apple/ios.xcworkspace/xcshareddata/swiftpm/Package.resolved rename to outline_client/src/cordova/apple/ios.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/src/cordova/apple/macos.xcworkspace/contents.xcworkspacedata b/outline_client/src/cordova/apple/macos.xcworkspace/contents.xcworkspacedata similarity index 100% rename from src/cordova/apple/macos.xcworkspace/contents.xcworkspacedata rename to outline_client/src/cordova/apple/macos.xcworkspace/contents.xcworkspacedata diff --git a/src/cordova/apple/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/outline_client/src/cordova/apple/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist similarity index 100% rename from src/cordova/apple/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist rename to outline_client/src/cordova/apple/macos.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/src/cordova/apple/macos.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/outline_client/src/cordova/apple/macos.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings similarity index 100% rename from src/cordova/apple/macos.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings rename to outline_client/src/cordova/apple/macos.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings diff --git a/src/cordova/apple/macos.xcworkspace/xcshareddata/swiftpm/Package.resolved b/outline_client/src/cordova/apple/macos.xcworkspace/xcshareddata/swiftpm/Package.resolved similarity index 100% rename from src/cordova/apple/macos.xcworkspace/xcshareddata/swiftpm/Package.resolved rename to outline_client/src/cordova/apple/macos.xcworkspace/xcshareddata/swiftpm/Package.resolved diff --git a/src/cordova/apple/scripts/xconfig.sh b/outline_client/src/cordova/apple/scripts/xconfig.sh similarity index 100% rename from src/cordova/apple/scripts/xconfig.sh rename to outline_client/src/cordova/apple/scripts/xconfig.sh diff --git a/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj b/outline_client/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj similarity index 100% rename from src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj rename to outline_client/src/cordova/apple/xcode/ios/Outline.xcodeproj/project.pbxproj diff --git a/src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme b/outline_client/src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme similarity index 100% rename from src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme rename to outline_client/src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme diff --git a/src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme b/outline_client/src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme similarity index 100% rename from src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme rename to outline_client/src/cordova/apple/xcode/ios/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme diff --git a/src/cordova/apple/xcode/ios/Outline/Outline-Info.plist b/outline_client/src/cordova/apple/xcode/ios/Outline/Outline-Info.plist similarity index 100% rename from src/cordova/apple/xcode/ios/Outline/Outline-Info.plist rename to outline_client/src/cordova/apple/xcode/ios/Outline/Outline-Info.plist diff --git a/src/cordova/apple/xcode/ios/Outline/Outline.entitlements b/outline_client/src/cordova/apple/xcode/ios/Outline/Outline.entitlements similarity index 100% rename from src/cordova/apple/xcode/ios/Outline/Outline.entitlements rename to outline_client/src/cordova/apple/xcode/ios/Outline/Outline.entitlements diff --git a/src/cordova/apple/xcode/ios/Outline/VpnExtension-Info.plist b/outline_client/src/cordova/apple/xcode/ios/Outline/VpnExtension-Info.plist similarity index 100% rename from src/cordova/apple/xcode/ios/Outline/VpnExtension-Info.plist rename to outline_client/src/cordova/apple/xcode/ios/Outline/VpnExtension-Info.plist diff --git a/src/cordova/apple/xcode/ios/Outline/VpnExtension.entitlements b/outline_client/src/cordova/apple/xcode/ios/Outline/VpnExtension.entitlements similarity index 100% rename from src/cordova/apple/xcode/ios/Outline/VpnExtension.entitlements rename to outline_client/src/cordova/apple/xcode/ios/Outline/VpnExtension.entitlements diff --git a/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj b/outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj similarity index 100% rename from src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj rename to outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/project.pbxproj diff --git a/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme b/outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme similarity index 100% rename from src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme rename to outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/Outline.xcscheme diff --git a/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/OutlineLauncher.xcscheme b/outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/OutlineLauncher.xcscheme similarity index 100% rename from src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/OutlineLauncher.xcscheme rename to outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/OutlineLauncher.xcscheme diff --git a/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme b/outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme similarity index 100% rename from src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme rename to outline_client/src/cordova/apple/xcode/macos/Outline.xcodeproj/xcshareddata/xcschemes/VpnExtension.xcscheme diff --git a/src/cordova/apple/xcode/macos/Outline/Classes/AppDelegate.m b/outline_client/src/cordova/apple/xcode/macos/Outline/Classes/AppDelegate.m similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Classes/AppDelegate.m rename to outline_client/src/cordova/apple/xcode/macos/Outline/Classes/AppDelegate.m diff --git a/src/cordova/apple/xcode/macos/Outline/Classes/CDVMacOsUrlHandler.swift b/outline_client/src/cordova/apple/xcode/macos/Outline/Classes/CDVMacOsUrlHandler.swift similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Classes/CDVMacOsUrlHandler.swift rename to outline_client/src/cordova/apple/xcode/macos/Outline/Classes/CDVMacOsUrlHandler.swift diff --git a/src/cordova/apple/xcode/macos/Outline/Classes/EventMonitor.swift b/outline_client/src/cordova/apple/xcode/macos/Outline/Classes/EventMonitor.swift similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Classes/EventMonitor.swift rename to outline_client/src/cordova/apple/xcode/macos/Outline/Classes/EventMonitor.swift diff --git a/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/Contents.json b/outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/Contents.json similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/Contents.json rename to outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/Contents.json diff --git a/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/outline-black-off-2x.png b/outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/outline-black-off-2x.png similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/outline-black-off-2x.png rename to outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImage.imageset/outline-black-off-2x.png diff --git a/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/Contents.json b/outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/Contents.json similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/Contents.json rename to outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/Contents.json diff --git a/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/outline-black-on-2x.png b/outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/outline-black-on-2x.png similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/outline-black-on-2x.png rename to outline_client/src/cordova/apple/xcode/macos/Outline/Images.xcassets/StatusBarButtonImageConnected.imageset/outline-black-on-2x.png diff --git a/src/cordova/apple/xcode/macos/Outline/MainViewController.xib b/outline_client/src/cordova/apple/xcode/macos/Outline/MainViewController.xib similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/MainViewController.xib rename to outline_client/src/cordova/apple/xcode/macos/Outline/MainViewController.xib diff --git a/src/cordova/apple/xcode/macos/Outline/Outline-Info.plist b/outline_client/src/cordova/apple/xcode/macos/Outline/Outline-Info.plist similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Outline-Info.plist rename to outline_client/src/cordova/apple/xcode/macos/Outline/Outline-Info.plist diff --git a/src/cordova/apple/xcode/macos/Outline/Outline.entitlements b/outline_client/src/cordova/apple/xcode/macos/Outline/Outline.entitlements similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/Outline.entitlements rename to outline_client/src/cordova/apple/xcode/macos/Outline/Outline.entitlements diff --git a/src/cordova/apple/xcode/macos/Outline/VpnExtension-Info.plist b/outline_client/src/cordova/apple/xcode/macos/Outline/VpnExtension-Info.plist similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/VpnExtension-Info.plist rename to outline_client/src/cordova/apple/xcode/macos/Outline/VpnExtension-Info.plist diff --git a/src/cordova/apple/xcode/macos/Outline/VpnExtension.entitlements b/outline_client/src/cordova/apple/xcode/macos/Outline/VpnExtension.entitlements similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/VpnExtension.entitlements rename to outline_client/src/cordova/apple/xcode/macos/Outline/VpnExtension.entitlements diff --git a/src/cordova/apple/xcode/macos/Outline/config.xml b/outline_client/src/cordova/apple/xcode/macos/Outline/config.xml similarity index 100% rename from src/cordova/apple/xcode/macos/Outline/config.xml rename to outline_client/src/cordova/apple/xcode/macos/Outline/config.xml diff --git a/src/cordova/apple/xcode/macos/OutlineLauncher/AppDelegate.swift b/outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/AppDelegate.swift similarity index 100% rename from src/cordova/apple/xcode/macos/OutlineLauncher/AppDelegate.swift rename to outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/AppDelegate.swift diff --git a/src/cordova/apple/xcode/macos/OutlineLauncher/Base.lproj/Main.storyboard b/outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/Base.lproj/Main.storyboard similarity index 100% rename from src/cordova/apple/xcode/macos/OutlineLauncher/Base.lproj/Main.storyboard rename to outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/Base.lproj/Main.storyboard diff --git a/src/cordova/apple/xcode/macos/OutlineLauncher/Info.plist b/outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/Info.plist similarity index 100% rename from src/cordova/apple/xcode/macos/OutlineLauncher/Info.plist rename to outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/Info.plist diff --git a/src/cordova/apple/xcode/macos/OutlineLauncher/OutlineLauncher.entitlements b/outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/OutlineLauncher.entitlements similarity index 100% rename from src/cordova/apple/xcode/macos/OutlineLauncher/OutlineLauncher.entitlements rename to outline_client/src/cordova/apple/xcode/macos/OutlineLauncher/OutlineLauncher.entitlements diff --git a/src/cordova/apple/xcode/macos/osx.json b/outline_client/src/cordova/apple/xcode/macos/osx.json similarity index 100% rename from src/cordova/apple/xcode/macos/osx.json rename to outline_client/src/cordova/apple/xcode/macos/osx.json diff --git a/src/cordova/apple/xcode/macos/www/cordova_plugins.js b/outline_client/src/cordova/apple/xcode/macos/www/cordova_plugins.js similarity index 100% rename from src/cordova/apple/xcode/macos/www/cordova_plugins.js rename to outline_client/src/cordova/apple/xcode/macos/www/cordova_plugins.js diff --git a/src/cordova/build.action.mjs b/outline_client/src/cordova/build.action.mjs similarity index 100% rename from src/cordova/build.action.mjs rename to outline_client/src/cordova/build.action.mjs diff --git a/src/cordova/import_messages.action.mjs b/outline_client/src/cordova/import_messages.action.mjs similarity index 100% rename from src/cordova/import_messages.action.mjs rename to outline_client/src/cordova/import_messages.action.mjs diff --git a/src/cordova/plugin/README.md b/outline_client/src/cordova/plugin/README.md similarity index 100% rename from src/cordova/plugin/README.md rename to outline_client/src/cordova/plugin/README.md diff --git a/src/cordova/plugin/android/java/build-extras.gradle b/outline_client/src/cordova/plugin/android/java/build-extras.gradle similarity index 100% rename from src/cordova/plugin/android/java/build-extras.gradle rename to outline_client/src/cordova/plugin/android/java/build-extras.gradle diff --git a/src/cordova/plugin/android/java/org/outline/OutlinePlugin.java b/outline_client/src/cordova/plugin/android/java/org/outline/OutlinePlugin.java similarity index 100% rename from src/cordova/plugin/android/java/org/outline/OutlinePlugin.java rename to outline_client/src/cordova/plugin/android/java/org/outline/OutlinePlugin.java diff --git a/src/cordova/plugin/android/resources/bypass_subnets.xml b/outline_client/src/cordova/plugin/android/resources/bypass_subnets.xml similarity index 100% rename from src/cordova/plugin/android/resources/bypass_subnets.xml rename to outline_client/src/cordova/plugin/android/resources/bypass_subnets.xml diff --git a/src/cordova/plugin/android/resources/small_icon.png b/outline_client/src/cordova/plugin/android/resources/small_icon.png similarity index 100% rename from src/cordova/plugin/android/resources/small_icon.png rename to outline_client/src/cordova/plugin/android/resources/small_icon.png diff --git a/src/cordova/plugin/android/resources/strings/values-af/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-af/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-af/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-af/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-am/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-am/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-am/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-am/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ar/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ar/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ar/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ar/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-az/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-az/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-az/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-az/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-b+sr+Latn/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-b+sr+Latn/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-b+sr+Latn/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-b+sr+Latn/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-bg/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-bg/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-bg/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-bg/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-bn/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-bn/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-bn/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-bn/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-bs/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-bs/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-bs/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-bs/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ca/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ca/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ca/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ca/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-cs/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-cs/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-cs/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-cs/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-da/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-da/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-da/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-da/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-de/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-de/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-de/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-de/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-el/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-el/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-el/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-el/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-en-rGB/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-en-rGB/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-en-rGB/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-en-rGB/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-en/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-en/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-en/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-en/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-es/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-es/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-es/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-es/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-et/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-et/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-et/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-et/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-fa/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-fa/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-fa/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-fa/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-fi/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-fi/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-fi/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-fi/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-fil/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-fil/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-fil/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-fil/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-fr/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-fr/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-fr/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-fr/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-he/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-he/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-he/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-he/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-hi/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-hi/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-hi/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-hi/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-hr/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-hr/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-hr/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-hr/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-hu/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-hu/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-hu/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-hu/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-hy/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-hy/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-hy/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-hy/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-id/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-id/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-id/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-id/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-is/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-is/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-is/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-is/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-it/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-it/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-it/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-it/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ja/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ja/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ja/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ja/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ka/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ka/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ka/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ka/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-kk/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-kk/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-kk/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-kk/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-km/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-km/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-km/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-km/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ko/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ko/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ko/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ko/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-lo/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-lo/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-lo/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-lo/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-lt/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-lt/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-lt/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-lt/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-lv/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-lv/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-lv/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-lv/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-mk/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-mk/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-mk/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-mk/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-mn/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-mn/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-mn/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-mn/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-mr/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-mr/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-mr/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-mr/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ms/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ms/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ms/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ms/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-my/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-my/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-my/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-my/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ne/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ne/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ne/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ne/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-nl/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-nl/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-nl/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-nl/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-no/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-no/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-no/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-no/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-pl/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-pl/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-pl/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-pl/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-pt-rBR/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-pt-rBR/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-pt-rBR/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-pt-rBR/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-pt-rPT/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-pt-rPT/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-pt-rPT/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-pt-rPT/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ro/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ro/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ro/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ro/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ru/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ru/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ru/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ru/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-si/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-si/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-si/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-si/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-sk/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-sk/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-sk/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-sk/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-sl/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-sl/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-sl/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-sl/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-sq/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-sq/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-sq/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-sq/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-sr/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-sr/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-sr/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-sr/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-sv/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-sv/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-sv/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-sv/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-sw/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-sw/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-sw/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-sw/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ta/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ta/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ta/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ta/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-th/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-th/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-th/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-th/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-tr/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-tr/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-tr/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-tr/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-uk/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-uk/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-uk/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-uk/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-ur/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-ur/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-ur/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-ur/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-vi/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-vi/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-vi/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-vi/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-zh-rCN/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-zh-rCN/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-zh-rCN/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-zh-rCN/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values-zh-rTW/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values-zh-rTW/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values-zh-rTW/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values-zh-rTW/strings.xml diff --git a/src/cordova/plugin/android/resources/strings/values/strings.xml b/outline_client/src/cordova/plugin/android/resources/strings/values/strings.xml similarity index 100% rename from src/cordova/plugin/android/resources/strings/values/strings.xml rename to outline_client/src/cordova/plugin/android/resources/strings/values/strings.xml diff --git a/src/cordova/plugin/android/scripts/copy_third_party.js b/outline_client/src/cordova/plugin/android/scripts/copy_third_party.js similarity index 100% rename from src/cordova/plugin/android/scripts/copy_third_party.js rename to outline_client/src/cordova/plugin/android/scripts/copy_third_party.js diff --git a/src/cordova/plugin/apple/src/OutlinePlugin.swift b/outline_client/src/cordova/plugin/apple/src/OutlinePlugin.swift similarity index 100% rename from src/cordova/plugin/apple/src/OutlinePlugin.swift rename to outline_client/src/cordova/plugin/apple/src/OutlinePlugin.swift diff --git a/src/cordova/plugin/apple/src/macos/Outline-Bridging-Header.h b/outline_client/src/cordova/plugin/apple/src/macos/Outline-Bridging-Header.h similarity index 100% rename from src/cordova/plugin/apple/src/macos/Outline-Bridging-Header.h rename to outline_client/src/cordova/plugin/apple/src/macos/Outline-Bridging-Header.h diff --git a/src/cordova/plugin/package.json b/outline_client/src/cordova/plugin/package.json similarity index 100% rename from src/cordova/plugin/package.json rename to outline_client/src/cordova/plugin/package.json diff --git a/src/cordova/plugin/plugin.xml b/outline_client/src/cordova/plugin/plugin.xml similarity index 100% rename from src/cordova/plugin/plugin.xml rename to outline_client/src/cordova/plugin/plugin.xml diff --git a/src/cordova/setup.action.mjs b/outline_client/src/cordova/setup.action.mjs similarity index 100% rename from src/cordova/setup.action.mjs rename to outline_client/src/cordova/setup.action.mjs diff --git a/src/cordova/test.action.mjs b/outline_client/src/cordova/test.action.mjs similarity index 100% rename from src/cordova/test.action.mjs rename to outline_client/src/cordova/test.action.mjs diff --git a/src/electron/README.md b/outline_client/src/electron/README.md similarity index 100% rename from src/electron/README.md rename to outline_client/src/electron/README.md diff --git a/src/electron/add_tap_device.bat b/outline_client/src/electron/add_tap_device.bat similarity index 100% rename from src/electron/add_tap_device.bat rename to outline_client/src/electron/add_tap_device.bat diff --git a/src/electron/build.action.mjs b/outline_client/src/electron/build.action.mjs similarity index 100% rename from src/electron/build.action.mjs rename to outline_client/src/electron/build.action.mjs diff --git a/src/electron/build_main.action.mjs b/outline_client/src/electron/build_main.action.mjs similarity index 100% rename from src/electron/build_main.action.mjs rename to outline_client/src/electron/build_main.action.mjs diff --git a/src/electron/custom_install_steps.nsh b/outline_client/src/electron/custom_install_steps.nsh similarity index 97% rename from src/electron/custom_install_steps.nsh rename to outline_client/src/electron/custom_install_steps.nsh index 633841e816..f831d7fc9e 100755 --- a/src/electron/custom_install_steps.nsh +++ b/outline_client/src/electron/custom_install_steps.nsh @@ -1,170 +1,170 @@ -; Copyright 2018 The Outline Authors -; -; Licensed under the Apache License, Version 2.0 (the "License"); -; you may not use this file except in compliance with the License. -; You may obtain a copy of the License at -; -; http://www.apache.org/licenses/LICENSE-2.0 -; -; Unless required by applicable law or agreed to in writing, software -; distributed under the License is distributed on an "AS IS" BASIS, -; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -; See the License for the specific language governing permissions and -; limitations under the License. - -!include StrFunc.nsh -!include WinVer.nsh -!include x64.nsh - -!include env.nsh - -; StrFunc weirdness; this fix suggested here: -; https://github.com/electron-userland/electron-builder/issues/888 -!ifndef BUILD_UNINSTALLER -${StrLoc} -${StrNSISToIO} -${StrRep} -!endif - -!macro customInstall - ; Normally, because we mark the installer binary as requiring administrator permissions, the - ; installer will be running with administrator permissions at this point. The exception is when - ; the system is running with the *lowest* (least safe) UAC setting in which case the installer - ; can progress to this point without administrator permissions. - ; - ; If that's the case, exit now so we don't waste time to trying to install the TAP device, etc. - ; Additionally, the client can detect their absence and prompt the user to reinstall. - ; - ; The returned value does *not* seem to be based on the user's current diaplay language. - UserInfo::GetAccountType - Pop $0 - StrCmp $0 "Admin" isadmin - MessageBox MB_OK "Sorry, Outline requires administrator permissions." - Quit - - isadmin: - - ; TAP device files. - SetOutPath "$INSTDIR\tap-windows6" - ${If} ${RunningX64} - File /r "${PROJECT_DIR}\third_party\tap-windows6\bin\amd64\*" - ${Else} - File /r "${PROJECT_DIR}\third_party\tap-windows6\bin\i386\*" - ${EndIf} - SetOutPath - - File "${PROJECT_DIR}\src\electron\add_tap_device.bat" - File "${PROJECT_DIR}\src\electron\find_tap_device_name.bat" - - ; OutlineService files, stopping the service first in case it's still running. - nsExec::Exec "net stop OutlineService" - File "${PROJECT_DIR}\tools\OutlineService\OutlineService\bin\OutlineService.exe" - File "${PROJECT_DIR}\tools\smartdnsblock\bin\smartdnsblock.exe" - File "${PROJECT_DIR}\third_party\newtonsoft\Newtonsoft.Json.dll" - File "${PROJECT_DIR}\src\electron\install_windows_service.bat" - - ; ExecToStack captures both stdout and stderr from the script, in the order output. - ; Set a (long) timeout in case the device never becomes visible to netsh. - ReadEnvStr $0 COMSPEC - nsExec::ExecToStack /timeout=180000 '$0 /c add_tap_device.bat' - - Pop $0 - Pop $1 - StrCmp $0 0 installservice - - ; The TAP device may have failed to install because the user did not want to - ; install the device driver. If so: - ; - tell the user that they need to install the driver - ; - skip the Sentry report - ; - quit - ; - ; When this happens, tapinstall.exe prints an error message like this: - ; UpdateDriverForPlugAndPlayDevices failed, GetLastError=-536870333 - ; - ; We can use the presence of that magic number to detect this case. - Var /GLOBAL DRIVER_FAILURE_MAGIC_NUMBER_INDEX - ${StrLoc} $DRIVER_FAILURE_MAGIC_NUMBER_INDEX $1 "536870333" ">" - - StrCmp $DRIVER_FAILURE_MAGIC_NUMBER_INDEX "" submitsentryreport - ; The term "device software" is the same as that used by the prompt, at least on Windows 7. - MessageBox MB_OK "Sorry, you must install the device software in order to use Outline. Please try \ - running the installer again." - Quit - - submitsentryreport: - MessageBox MB_OK "Sorry, we could not configure your system to connect to Outline. Please try \ - running the installer again. If you still cannot install Outline, please get in \ - touch with us and let us know that the TAP device failed to install with error code $0." - - ; Submit a Sentry error event. - ; - ; This will get bundled into an issue named "could not install TAP device" with the following - ; attributes: - ; - a single breadcrumb containing the output of add_tap_device.bat - ; - Windows version, as a tag named "os" with a value identical in most cases to what the - ; JavaScript Sentry client produces, e.g. "Windows 10.0.17134" - ; - client version - ; - ; Note: - ; - Sentry won't accept a breadcrumbs without a timestamp; fortunately, it accepts obviously - ; bogus values so we don't have to fetch the real time. - ; - Because nsExec::ExecToStack yields "NSIS strings" strings suitable for inclusion in, for - ; example, a MessageBox, e.g. "device not found$\ncommand failed", we must convert it to a - ; string that Sentry will like *and* can fit on one line, e.g. - ; "device not found\ncommand failed"; fortunately, StrFunc.nsh's StrNSISToIO does precisely - ; this. - ; - RELEASE and SENTRY_URL are defined in env.nsh which is generated at build time by - ; {package,release}_action.sh. - - ; TODO: Remove this once we figure out why/if breadcrumbs are being truncated. - Var /GLOBAL FAILURE_MESSAGE_LENGTH - StrLen $FAILURE_MESSAGE_LENGTH $1 - - ; http://nsis.sourceforge.net/Docs/StrFunc/StrFunc.txt - Var /GLOBAL FAILURE_MESSAGE - ${StrNSISToIO} $FAILURE_MESSAGE $1 - ${StrRep} $FAILURE_MESSAGE $FAILURE_MESSAGE '"' '\"' - - ${WinVerGetMajor} $R0 - ${WinVerGetMinor} $R1 - ${WinVerGetBuild} $R2 - - ; http://nsis.sourceforge.net/Inetc_plug-in#post - inetc::post '{\ - "message":"could not install TAP device ($0)",\ - "release":"${RELEASE}",\ - "tags":[\ - ["os", "Windows $R0.$R1.$R2"],\ - ["error_message_length", "$FAILURE_MESSAGE_LENGTH"]\ - ],\ - "breadcrumbs":[\ - {"timestamp":1, "message":"$FAILURE_MESSAGE"}\ - ]\ - }' /TOSTACK ${SENTRY_URL} /END - - Quit - - installservice: - - nsExec::Exec install_windows_service.bat - - nsExec::Exec "sc query OutlineService" - Pop $0 - StrCmp $0 0 success - ; TODO: Trigger a Sentry report for service installation failure, too, and revisit - ; the restart stuff in the TypeScript code. - MessageBox MB_OK "Sorry, we could not configure your system to connect to Outline. Please try \ - running the installer again. If you still cannot install Outline, please get in touch with us \ - and let us know that OutlineService failed to install." - Quit - - success: - -!macroend - -; TODO: Remove the TAP device on uninstall. This is impossible to implement safely -; with the bundled tapinstall.exe because it can only remove *all* devices -; having hwid tap0901 and these may include non-Outline devices. -!macro customUnInstall - nsExec::Exec "net stop OutlineService" - nsExec::Exec "sc delete OutlineService" +; Copyright 2018 The Outline Authors +; +; Licensed under the Apache License, Version 2.0 (the "License"); +; you may not use this file except in compliance with the License. +; You may obtain a copy of the License at +; +; http://www.apache.org/licenses/LICENSE-2.0 +; +; Unless required by applicable law or agreed to in writing, software +; distributed under the License is distributed on an "AS IS" BASIS, +; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +; See the License for the specific language governing permissions and +; limitations under the License. + +!include StrFunc.nsh +!include WinVer.nsh +!include x64.nsh + +!include env.nsh + +; StrFunc weirdness; this fix suggested here: +; https://github.com/electron-userland/electron-builder/issues/888 +!ifndef BUILD_UNINSTALLER +${StrLoc} +${StrNSISToIO} +${StrRep} +!endif + +!macro customInstall + ; Normally, because we mark the installer binary as requiring administrator permissions, the + ; installer will be running with administrator permissions at this point. The exception is when + ; the system is running with the *lowest* (least safe) UAC setting in which case the installer + ; can progress to this point without administrator permissions. + ; + ; If that's the case, exit now so we don't waste time to trying to install the TAP device, etc. + ; Additionally, the client can detect their absence and prompt the user to reinstall. + ; + ; The returned value does *not* seem to be based on the user's current diaplay language. + UserInfo::GetAccountType + Pop $0 + StrCmp $0 "Admin" isadmin + MessageBox MB_OK "Sorry, Outline requires administrator permissions." + Quit + + isadmin: + + ; TAP device files. + SetOutPath "$INSTDIR\tap-windows6" + ${If} ${RunningX64} + File /r "${PROJECT_DIR}\third_party\tap-windows6\bin\amd64\*" + ${Else} + File /r "${PROJECT_DIR}\third_party\tap-windows6\bin\i386\*" + ${EndIf} + SetOutPath - + File "${PROJECT_DIR}\src\electron\add_tap_device.bat" + File "${PROJECT_DIR}\src\electron\find_tap_device_name.bat" + + ; OutlineService files, stopping the service first in case it's still running. + nsExec::Exec "net stop OutlineService" + File "${PROJECT_DIR}\tools\OutlineService\OutlineService\bin\OutlineService.exe" + File "${PROJECT_DIR}\tools\smartdnsblock\bin\smartdnsblock.exe" + File "${PROJECT_DIR}\third_party\newtonsoft\Newtonsoft.Json.dll" + File "${PROJECT_DIR}\src\electron\install_windows_service.bat" + + ; ExecToStack captures both stdout and stderr from the script, in the order output. + ; Set a (long) timeout in case the device never becomes visible to netsh. + ReadEnvStr $0 COMSPEC + nsExec::ExecToStack /timeout=180000 '$0 /c add_tap_device.bat' + + Pop $0 + Pop $1 + StrCmp $0 0 installservice + + ; The TAP device may have failed to install because the user did not want to + ; install the device driver. If so: + ; - tell the user that they need to install the driver + ; - skip the Sentry report + ; - quit + ; + ; When this happens, tapinstall.exe prints an error message like this: + ; UpdateDriverForPlugAndPlayDevices failed, GetLastError=-536870333 + ; + ; We can use the presence of that magic number to detect this case. + Var /GLOBAL DRIVER_FAILURE_MAGIC_NUMBER_INDEX + ${StrLoc} $DRIVER_FAILURE_MAGIC_NUMBER_INDEX $1 "536870333" ">" + + StrCmp $DRIVER_FAILURE_MAGIC_NUMBER_INDEX "" submitsentryreport + ; The term "device software" is the same as that used by the prompt, at least on Windows 7. + MessageBox MB_OK "Sorry, you must install the device software in order to use Outline. Please try \ + running the installer again." + Quit + + submitsentryreport: + MessageBox MB_OK "Sorry, we could not configure your system to connect to Outline. Please try \ + running the installer again. If you still cannot install Outline, please get in \ + touch with us and let us know that the TAP device failed to install with error code $0." + + ; Submit a Sentry error event. + ; + ; This will get bundled into an issue named "could not install TAP device" with the following + ; attributes: + ; - a single breadcrumb containing the output of add_tap_device.bat + ; - Windows version, as a tag named "os" with a value identical in most cases to what the + ; JavaScript Sentry client produces, e.g. "Windows 10.0.17134" + ; - client version + ; + ; Note: + ; - Sentry won't accept a breadcrumbs without a timestamp; fortunately, it accepts obviously + ; bogus values so we don't have to fetch the real time. + ; - Because nsExec::ExecToStack yields "NSIS strings" strings suitable for inclusion in, for + ; example, a MessageBox, e.g. "device not found$\ncommand failed", we must convert it to a + ; string that Sentry will like *and* can fit on one line, e.g. + ; "device not found\ncommand failed"; fortunately, StrFunc.nsh's StrNSISToIO does precisely + ; this. + ; - RELEASE and SENTRY_URL are defined in env.nsh which is generated at build time by + ; {package,release}_action.sh. + + ; TODO: Remove this once we figure out why/if breadcrumbs are being truncated. + Var /GLOBAL FAILURE_MESSAGE_LENGTH + StrLen $FAILURE_MESSAGE_LENGTH $1 + + ; http://nsis.sourceforge.net/Docs/StrFunc/StrFunc.txt + Var /GLOBAL FAILURE_MESSAGE + ${StrNSISToIO} $FAILURE_MESSAGE $1 + ${StrRep} $FAILURE_MESSAGE $FAILURE_MESSAGE '"' '\"' + + ${WinVerGetMajor} $R0 + ${WinVerGetMinor} $R1 + ${WinVerGetBuild} $R2 + + ; http://nsis.sourceforge.net/Inetc_plug-in#post + inetc::post '{\ + "message":"could not install TAP device ($0)",\ + "release":"${RELEASE}",\ + "tags":[\ + ["os", "Windows $R0.$R1.$R2"],\ + ["error_message_length", "$FAILURE_MESSAGE_LENGTH"]\ + ],\ + "breadcrumbs":[\ + {"timestamp":1, "message":"$FAILURE_MESSAGE"}\ + ]\ + }' /TOSTACK ${SENTRY_URL} /END + + Quit + + installservice: + + nsExec::Exec install_windows_service.bat + + nsExec::Exec "sc query OutlineService" + Pop $0 + StrCmp $0 0 success + ; TODO: Trigger a Sentry report for service installation failure, too, and revisit + ; the restart stuff in the TypeScript code. + MessageBox MB_OK "Sorry, we could not configure your system to connect to Outline. Please try \ + running the installer again. If you still cannot install Outline, please get in touch with us \ + and let us know that OutlineService failed to install." + Quit + + success: + +!macroend + +; TODO: Remove the TAP device on uninstall. This is impossible to implement safely +; with the bundled tapinstall.exe because it can only remove *all* devices +; having hwid tap0901 and these may include non-Outline devices. +!macro customUnInstall + nsExec::Exec "net stop OutlineService" + nsExec::Exec "sc delete OutlineService" !macroend \ No newline at end of file diff --git a/src/electron/electron-builder.json b/outline_client/src/electron/electron-builder.json similarity index 100% rename from src/electron/electron-builder.json rename to outline_client/src/electron/electron-builder.json diff --git a/src/electron/find_tap_device_name.bat b/outline_client/src/electron/find_tap_device_name.bat similarity index 100% rename from src/electron/find_tap_device_name.bat rename to outline_client/src/electron/find_tap_device_name.bat diff --git a/src/electron/go_vpn_tunnel.ts b/outline_client/src/electron/go_vpn_tunnel.ts similarity index 100% rename from src/electron/go_vpn_tunnel.ts rename to outline_client/src/electron/go_vpn_tunnel.ts diff --git a/src/electron/icons/mac/icon.icns b/outline_client/src/electron/icons/mac/icon.icns similarity index 100% rename from src/electron/icons/mac/icon.icns rename to outline_client/src/electron/icons/mac/icon.icns diff --git a/src/electron/icons/png/1024x1024.png b/outline_client/src/electron/icons/png/1024x1024.png similarity index 100% rename from src/electron/icons/png/1024x1024.png rename to outline_client/src/electron/icons/png/1024x1024.png diff --git a/src/electron/icons/png/128x128.png b/outline_client/src/electron/icons/png/128x128.png similarity index 100% rename from src/electron/icons/png/128x128.png rename to outline_client/src/electron/icons/png/128x128.png diff --git a/src/electron/icons/png/16x16.png b/outline_client/src/electron/icons/png/16x16.png similarity index 100% rename from src/electron/icons/png/16x16.png rename to outline_client/src/electron/icons/png/16x16.png diff --git a/src/electron/icons/png/24x24.png b/outline_client/src/electron/icons/png/24x24.png similarity index 100% rename from src/electron/icons/png/24x24.png rename to outline_client/src/electron/icons/png/24x24.png diff --git a/src/electron/icons/png/256x256.png b/outline_client/src/electron/icons/png/256x256.png similarity index 100% rename from src/electron/icons/png/256x256.png rename to outline_client/src/electron/icons/png/256x256.png diff --git a/src/electron/icons/png/32x32.png b/outline_client/src/electron/icons/png/32x32.png similarity index 100% rename from src/electron/icons/png/32x32.png rename to outline_client/src/electron/icons/png/32x32.png diff --git a/src/electron/icons/png/48x48.png b/outline_client/src/electron/icons/png/48x48.png similarity index 100% rename from src/electron/icons/png/48x48.png rename to outline_client/src/electron/icons/png/48x48.png diff --git a/src/electron/icons/png/512x512.png b/outline_client/src/electron/icons/png/512x512.png similarity index 100% rename from src/electron/icons/png/512x512.png rename to outline_client/src/electron/icons/png/512x512.png diff --git a/src/electron/icons/png/64x64.png b/outline_client/src/electron/icons/png/64x64.png similarity index 100% rename from src/electron/icons/png/64x64.png rename to outline_client/src/electron/icons/png/64x64.png diff --git a/src/electron/icons/win/icon.ico b/outline_client/src/electron/icons/win/icon.ico similarity index 100% rename from src/electron/icons/win/icon.ico rename to outline_client/src/electron/icons/win/icon.ico diff --git a/src/electron/index.ts b/outline_client/src/electron/index.ts similarity index 100% rename from src/electron/index.ts rename to outline_client/src/electron/index.ts diff --git a/src/electron/install_windows_service.bat b/outline_client/src/electron/install_windows_service.bat similarity index 100% rename from src/electron/install_windows_service.bat rename to outline_client/src/electron/install_windows_service.bat diff --git a/src/electron/preload.d.ts b/outline_client/src/electron/preload.d.ts similarity index 100% rename from src/electron/preload.d.ts rename to outline_client/src/electron/preload.d.ts diff --git a/src/electron/preload.ts b/outline_client/src/electron/preload.ts similarity index 100% rename from src/electron/preload.ts rename to outline_client/src/electron/preload.ts diff --git a/src/electron/process.ts b/outline_client/src/electron/process.ts similarity index 100% rename from src/electron/process.ts rename to outline_client/src/electron/process.ts diff --git a/src/electron/routing_service.ts b/outline_client/src/electron/routing_service.ts similarity index 100% rename from src/electron/routing_service.ts rename to outline_client/src/electron/routing_service.ts diff --git a/src/electron/start.action.mjs b/outline_client/src/electron/start.action.mjs similarity index 100% rename from src/electron/start.action.mjs rename to outline_client/src/electron/start.action.mjs diff --git a/src/electron/tsconfig.json b/outline_client/src/electron/tsconfig.json similarity index 100% rename from src/electron/tsconfig.json rename to outline_client/src/electron/tsconfig.json diff --git a/src/electron/tunnel_store.ts b/outline_client/src/electron/tunnel_store.ts similarity index 100% rename from src/electron/tunnel_store.ts rename to outline_client/src/electron/tunnel_store.ts diff --git a/src/electron/types/socks/index.d.ts b/outline_client/src/electron/types/socks/index.d.ts similarity index 100% rename from src/electron/types/socks/index.d.ts rename to outline_client/src/electron/types/socks/index.d.ts diff --git a/src/electron/vpn_tunnel.ts b/outline_client/src/electron/vpn_tunnel.ts similarity index 100% rename from src/electron/vpn_tunnel.ts rename to outline_client/src/electron/vpn_tunnel.ts diff --git a/src/electron/webpack_electron_main.mjs b/outline_client/src/electron/webpack_electron_main.mjs similarity index 100% rename from src/electron/webpack_electron_main.mjs rename to outline_client/src/electron/webpack_electron_main.mjs diff --git a/src/electron/windows/digicert-usb-config/eToken-macos.cfg b/outline_client/src/electron/windows/digicert-usb-config/eToken-macos.cfg similarity index 100% rename from src/electron/windows/digicert-usb-config/eToken-macos.cfg rename to outline_client/src/electron/windows/digicert-usb-config/eToken-macos.cfg diff --git a/src/electron/windows/digicert-usb-config/eToken-windows.cfg b/outline_client/src/electron/windows/digicert-usb-config/eToken-windows.cfg similarity index 100% rename from src/electron/windows/digicert-usb-config/eToken-windows.cfg rename to outline_client/src/electron/windows/digicert-usb-config/eToken-windows.cfg diff --git a/src/electron/windows/electron_builder_signing_plugin.cjs b/outline_client/src/electron/windows/electron_builder_signing_plugin.cjs similarity index 100% rename from src/electron/windows/electron_builder_signing_plugin.cjs rename to outline_client/src/electron/windows/electron_builder_signing_plugin.cjs diff --git a/src/electron/windows/sign_windows_executable.action.mjs b/outline_client/src/electron/windows/sign_windows_executable.action.mjs similarity index 100% rename from src/electron/windows/sign_windows_executable.action.mjs rename to outline_client/src/electron/windows/sign_windows_executable.action.mjs diff --git a/src/infrastructure/custom_error.ts b/outline_client/src/infrastructure/custom_error.ts similarity index 100% rename from src/infrastructure/custom_error.ts rename to outline_client/src/infrastructure/custom_error.ts diff --git a/src/infrastructure/electron/app_paths.ts b/outline_client/src/infrastructure/electron/app_paths.ts similarity index 100% rename from src/infrastructure/electron/app_paths.ts rename to outline_client/src/infrastructure/electron/app_paths.ts diff --git a/src/infrastructure/memory_storage.ts b/outline_client/src/infrastructure/memory_storage.ts similarity index 100% rename from src/infrastructure/memory_storage.ts rename to outline_client/src/infrastructure/memory_storage.ts diff --git a/src/infrastructure/timeout_promise.ts b/outline_client/src/infrastructure/timeout_promise.ts similarity index 100% rename from src/infrastructure/timeout_promise.ts rename to outline_client/src/infrastructure/timeout_promise.ts diff --git a/src/www/.storybook/localize.ts b/outline_client/src/www/.storybook/localize.ts similarity index 100% rename from src/www/.storybook/localize.ts rename to outline_client/src/www/.storybook/localize.ts diff --git a/src/www/.storybook/main.js b/outline_client/src/www/.storybook/main.js similarity index 100% rename from src/www/.storybook/main.js rename to outline_client/src/www/.storybook/main.js diff --git a/src/www/.storybook/preview-head.html b/outline_client/src/www/.storybook/preview-head.html similarity index 100% rename from src/www/.storybook/preview-head.html rename to outline_client/src/www/.storybook/preview-head.html diff --git a/src/www/.storybook/preview.js b/outline_client/src/www/.storybook/preview.js similarity index 100% rename from src/www/.storybook/preview.js rename to outline_client/src/www/.storybook/preview.js diff --git a/src/www/TODO.spec.ts b/outline_client/src/www/TODO.spec.ts similarity index 100% rename from src/www/TODO.spec.ts rename to outline_client/src/www/TODO.spec.ts diff --git a/src/www/app/app.spec.ts b/outline_client/src/www/app/app.spec.ts similarity index 100% rename from src/www/app/app.spec.ts rename to outline_client/src/www/app/app.spec.ts diff --git a/src/www/app/app.ts b/outline_client/src/www/app/app.ts similarity index 100% rename from src/www/app/app.ts rename to outline_client/src/www/app/app.ts diff --git a/src/www/app/clipboard.ts b/outline_client/src/www/app/clipboard.ts similarity index 100% rename from src/www/app/clipboard.ts rename to outline_client/src/www/app/clipboard.ts diff --git a/src/www/app/cordova_main.ts b/outline_client/src/www/app/cordova_main.ts similarity index 100% rename from src/www/app/cordova_main.ts rename to outline_client/src/www/app/cordova_main.ts diff --git a/src/www/app/electron_main.ts b/outline_client/src/www/app/electron_main.ts similarity index 100% rename from src/www/app/electron_main.ts rename to outline_client/src/www/app/electron_main.ts diff --git a/src/www/app/electron_outline_tunnel.ts b/outline_client/src/www/app/electron_outline_tunnel.ts similarity index 100% rename from src/www/app/electron_outline_tunnel.ts rename to outline_client/src/www/app/electron_outline_tunnel.ts diff --git a/src/www/app/environment.ts b/outline_client/src/www/app/environment.ts similarity index 100% rename from src/www/app/environment.ts rename to outline_client/src/www/app/environment.ts diff --git a/src/www/app/error_reporter.ts b/outline_client/src/www/app/error_reporter.ts similarity index 100% rename from src/www/app/error_reporter.ts rename to outline_client/src/www/app/error_reporter.ts diff --git a/src/www/app/fake_tunnel.ts b/outline_client/src/www/app/fake_tunnel.ts similarity index 100% rename from src/www/app/fake_tunnel.ts rename to outline_client/src/www/app/fake_tunnel.ts diff --git a/src/www/app/main.ts b/outline_client/src/www/app/main.ts similarity index 100% rename from src/www/app/main.ts rename to outline_client/src/www/app/main.ts diff --git a/src/www/app/outline_server_repository/access_key_serialization.ts b/outline_client/src/www/app/outline_server_repository/access_key_serialization.ts similarity index 100% rename from src/www/app/outline_server_repository/access_key_serialization.ts rename to outline_client/src/www/app/outline_server_repository/access_key_serialization.ts diff --git a/src/www/app/outline_server_repository/index.ts b/outline_client/src/www/app/outline_server_repository/index.ts similarity index 100% rename from src/www/app/outline_server_repository/index.ts rename to outline_client/src/www/app/outline_server_repository/index.ts diff --git a/src/www/app/outline_server_repository/outline_server_repository.spec.ts b/outline_client/src/www/app/outline_server_repository/outline_server_repository.spec.ts similarity index 100% rename from src/www/app/outline_server_repository/outline_server_repository.spec.ts rename to outline_client/src/www/app/outline_server_repository/outline_server_repository.spec.ts diff --git a/src/www/app/outline_server_repository/server.ts b/outline_client/src/www/app/outline_server_repository/server.ts similarity index 100% rename from src/www/app/outline_server_repository/server.ts rename to outline_client/src/www/app/outline_server_repository/server.ts diff --git a/src/www/app/platform.ts b/outline_client/src/www/app/platform.ts similarity index 100% rename from src/www/app/platform.ts rename to outline_client/src/www/app/platform.ts diff --git a/src/www/app/settings.spec.ts b/outline_client/src/www/app/settings.spec.ts similarity index 100% rename from src/www/app/settings.spec.ts rename to outline_client/src/www/app/settings.spec.ts diff --git a/src/www/app/settings.ts b/outline_client/src/www/app/settings.ts similarity index 100% rename from src/www/app/settings.ts rename to outline_client/src/www/app/settings.ts diff --git a/src/www/app/tunnel.ts b/outline_client/src/www/app/tunnel.ts similarity index 100% rename from src/www/app/tunnel.ts rename to outline_client/src/www/app/tunnel.ts diff --git a/src/www/app/updater.ts b/outline_client/src/www/app/updater.ts similarity index 100% rename from src/www/app/updater.ts rename to outline_client/src/www/app/updater.ts diff --git a/src/www/app/url_interceptor.ts b/outline_client/src/www/app/url_interceptor.ts similarity index 100% rename from src/www/app/url_interceptor.ts rename to outline_client/src/www/app/url_interceptor.ts diff --git a/src/www/app/vpn_installer.ts b/outline_client/src/www/app/vpn_installer.ts similarity index 100% rename from src/www/app/vpn_installer.ts rename to outline_client/src/www/app/vpn_installer.ts diff --git a/src/www/assets/brand-logo.png b/outline_client/src/www/assets/brand-logo.png similarity index 100% rename from src/www/assets/brand-logo.png rename to outline_client/src/www/assets/brand-logo.png diff --git a/src/www/assets/circle.png b/outline_client/src/www/assets/circle.png similarity index 100% rename from src/www/assets/circle.png rename to outline_client/src/www/assets/circle.png diff --git a/src/www/assets/icons/about.png b/outline_client/src/www/assets/icons/about.png similarity index 100% rename from src/www/assets/icons/about.png rename to outline_client/src/www/assets/icons/about.png diff --git a/src/www/assets/icons/add.png b/outline_client/src/www/assets/icons/add.png similarity index 100% rename from src/www/assets/icons/add.png rename to outline_client/src/www/assets/icons/add.png diff --git a/src/www/assets/icons/back.png b/outline_client/src/www/assets/icons/back.png similarity index 100% rename from src/www/assets/icons/back.png rename to outline_client/src/www/assets/icons/back.png diff --git a/src/www/assets/icons/change_language.png b/outline_client/src/www/assets/icons/change_language.png similarity index 100% rename from src/www/assets/icons/change_language.png rename to outline_client/src/www/assets/icons/change_language.png diff --git a/src/www/assets/icons/feedback.png b/outline_client/src/www/assets/icons/feedback.png similarity index 100% rename from src/www/assets/icons/feedback.png rename to outline_client/src/www/assets/icons/feedback.png diff --git a/src/www/assets/icons/help.png b/outline_client/src/www/assets/icons/help.png similarity index 100% rename from src/www/assets/icons/help.png rename to outline_client/src/www/assets/icons/help.png diff --git a/src/www/assets/icons/menu.png b/outline_client/src/www/assets/icons/menu.png similarity index 100% rename from src/www/assets/icons/menu.png rename to outline_client/src/www/assets/icons/menu.png diff --git a/src/www/assets/icons/outline.png b/outline_client/src/www/assets/icons/outline.png similarity index 100% rename from src/www/assets/icons/outline.png rename to outline_client/src/www/assets/icons/outline.png diff --git a/src/www/assets/icons/quit.png b/outline_client/src/www/assets/icons/quit.png similarity index 100% rename from src/www/assets/icons/quit.png rename to outline_client/src/www/assets/icons/quit.png diff --git a/src/www/assets/jigsaw-logo.png b/outline_client/src/www/assets/jigsaw-logo.png similarity index 100% rename from src/www/assets/jigsaw-logo.png rename to outline_client/src/www/assets/jigsaw-logo.png diff --git a/src/www/assets/jigsaw-logo.svg b/outline_client/src/www/assets/jigsaw-logo.svg similarity index 100% rename from src/www/assets/jigsaw-logo.svg rename to outline_client/src/www/assets/jigsaw-logo.svg diff --git a/src/www/assets/logo-nav.png b/outline_client/src/www/assets/logo-nav.png similarity index 100% rename from src/www/assets/logo-nav.png rename to outline_client/src/www/assets/logo-nav.png diff --git a/src/www/assets/material_icons.woff2 b/outline_client/src/www/assets/material_icons.woff2 similarity index 100% rename from src/www/assets/material_icons.woff2 rename to outline_client/src/www/assets/material_icons.woff2 diff --git a/src/www/assets/outline-client-logo.png b/outline_client/src/www/assets/outline-client-logo.png similarity index 100% rename from src/www/assets/outline-client-logo.png rename to outline_client/src/www/assets/outline-client-logo.png diff --git a/src/www/assets/outline-client-logo.svg b/outline_client/src/www/assets/outline-client-logo.svg similarity index 100% rename from src/www/assets/outline-client-logo.svg rename to outline_client/src/www/assets/outline-client-logo.svg diff --git a/src/www/assets/privacy-lock.png b/outline_client/src/www/assets/privacy-lock.png similarity index 100% rename from src/www/assets/privacy-lock.png rename to outline_client/src/www/assets/privacy-lock.png diff --git a/src/www/build.action.mjs b/outline_client/src/www/build.action.mjs similarity index 100% rename from src/www/build.action.mjs rename to outline_client/src/www/build.action.mjs diff --git a/src/www/favicon.ico b/outline_client/src/www/favicon.ico similarity index 100% rename from src/www/favicon.ico rename to outline_client/src/www/favicon.ico diff --git a/src/www/get_browser_webpack_config.mjs b/outline_client/src/www/get_browser_webpack_config.mjs similarity index 100% rename from src/www/get_browser_webpack_config.mjs rename to outline_client/src/www/get_browser_webpack_config.mjs diff --git a/src/www/index_cordova.html b/outline_client/src/www/index_cordova.html similarity index 100% rename from src/www/index_cordova.html rename to outline_client/src/www/index_cordova.html diff --git a/src/www/index_electron.html b/outline_client/src/www/index_electron.html similarity index 100% rename from src/www/index_electron.html rename to outline_client/src/www/index_electron.html diff --git a/src/www/karma.conf.js b/outline_client/src/www/karma.conf.js similarity index 100% rename from src/www/karma.conf.js rename to outline_client/src/www/karma.conf.js diff --git a/src/www/messages/af.json b/outline_client/src/www/messages/af.json similarity index 100% rename from src/www/messages/af.json rename to outline_client/src/www/messages/af.json diff --git a/src/www/messages/am.json b/outline_client/src/www/messages/am.json similarity index 100% rename from src/www/messages/am.json rename to outline_client/src/www/messages/am.json diff --git a/src/www/messages/ar.json b/outline_client/src/www/messages/ar.json similarity index 100% rename from src/www/messages/ar.json rename to outline_client/src/www/messages/ar.json diff --git a/src/www/messages/az.json b/outline_client/src/www/messages/az.json similarity index 100% rename from src/www/messages/az.json rename to outline_client/src/www/messages/az.json diff --git a/src/www/messages/bg.json b/outline_client/src/www/messages/bg.json similarity index 100% rename from src/www/messages/bg.json rename to outline_client/src/www/messages/bg.json diff --git a/src/www/messages/bn.json b/outline_client/src/www/messages/bn.json similarity index 100% rename from src/www/messages/bn.json rename to outline_client/src/www/messages/bn.json diff --git a/src/www/messages/bs.json b/outline_client/src/www/messages/bs.json similarity index 100% rename from src/www/messages/bs.json rename to outline_client/src/www/messages/bs.json diff --git a/src/www/messages/ca.json b/outline_client/src/www/messages/ca.json similarity index 100% rename from src/www/messages/ca.json rename to outline_client/src/www/messages/ca.json diff --git a/src/www/messages/cs.json b/outline_client/src/www/messages/cs.json similarity index 100% rename from src/www/messages/cs.json rename to outline_client/src/www/messages/cs.json diff --git a/src/www/messages/da.json b/outline_client/src/www/messages/da.json similarity index 100% rename from src/www/messages/da.json rename to outline_client/src/www/messages/da.json diff --git a/src/www/messages/de.json b/outline_client/src/www/messages/de.json similarity index 100% rename from src/www/messages/de.json rename to outline_client/src/www/messages/de.json diff --git a/src/www/messages/el.json b/outline_client/src/www/messages/el.json similarity index 100% rename from src/www/messages/el.json rename to outline_client/src/www/messages/el.json diff --git a/src/www/messages/en-GB.json b/outline_client/src/www/messages/en-GB.json similarity index 100% rename from src/www/messages/en-GB.json rename to outline_client/src/www/messages/en-GB.json diff --git a/src/www/messages/en.json b/outline_client/src/www/messages/en.json similarity index 100% rename from src/www/messages/en.json rename to outline_client/src/www/messages/en.json diff --git a/src/www/messages/es-419.json b/outline_client/src/www/messages/es-419.json similarity index 100% rename from src/www/messages/es-419.json rename to outline_client/src/www/messages/es-419.json diff --git a/src/www/messages/es.json b/outline_client/src/www/messages/es.json similarity index 100% rename from src/www/messages/es.json rename to outline_client/src/www/messages/es.json diff --git a/src/www/messages/et.json b/outline_client/src/www/messages/et.json similarity index 100% rename from src/www/messages/et.json rename to outline_client/src/www/messages/et.json diff --git a/src/www/messages/fa.json b/outline_client/src/www/messages/fa.json similarity index 100% rename from src/www/messages/fa.json rename to outline_client/src/www/messages/fa.json diff --git a/src/www/messages/fi.json b/outline_client/src/www/messages/fi.json similarity index 100% rename from src/www/messages/fi.json rename to outline_client/src/www/messages/fi.json diff --git a/src/www/messages/fil.json b/outline_client/src/www/messages/fil.json similarity index 100% rename from src/www/messages/fil.json rename to outline_client/src/www/messages/fil.json diff --git a/src/www/messages/fr.json b/outline_client/src/www/messages/fr.json similarity index 100% rename from src/www/messages/fr.json rename to outline_client/src/www/messages/fr.json diff --git a/src/www/messages/he.json b/outline_client/src/www/messages/he.json similarity index 100% rename from src/www/messages/he.json rename to outline_client/src/www/messages/he.json diff --git a/src/www/messages/hi.json b/outline_client/src/www/messages/hi.json similarity index 100% rename from src/www/messages/hi.json rename to outline_client/src/www/messages/hi.json diff --git a/src/www/messages/hr.json b/outline_client/src/www/messages/hr.json similarity index 100% rename from src/www/messages/hr.json rename to outline_client/src/www/messages/hr.json diff --git a/src/www/messages/hu.json b/outline_client/src/www/messages/hu.json similarity index 100% rename from src/www/messages/hu.json rename to outline_client/src/www/messages/hu.json diff --git a/src/www/messages/hy.json b/outline_client/src/www/messages/hy.json similarity index 100% rename from src/www/messages/hy.json rename to outline_client/src/www/messages/hy.json diff --git a/src/www/messages/id.json b/outline_client/src/www/messages/id.json similarity index 100% rename from src/www/messages/id.json rename to outline_client/src/www/messages/id.json diff --git a/src/www/messages/is.json b/outline_client/src/www/messages/is.json similarity index 100% rename from src/www/messages/is.json rename to outline_client/src/www/messages/is.json diff --git a/src/www/messages/it.json b/outline_client/src/www/messages/it.json similarity index 100% rename from src/www/messages/it.json rename to outline_client/src/www/messages/it.json diff --git a/src/www/messages/ja.json b/outline_client/src/www/messages/ja.json similarity index 100% rename from src/www/messages/ja.json rename to outline_client/src/www/messages/ja.json diff --git a/src/www/messages/ka.json b/outline_client/src/www/messages/ka.json similarity index 100% rename from src/www/messages/ka.json rename to outline_client/src/www/messages/ka.json diff --git a/src/www/messages/kk.json b/outline_client/src/www/messages/kk.json similarity index 100% rename from src/www/messages/kk.json rename to outline_client/src/www/messages/kk.json diff --git a/src/www/messages/km.json b/outline_client/src/www/messages/km.json similarity index 100% rename from src/www/messages/km.json rename to outline_client/src/www/messages/km.json diff --git a/src/www/messages/ko.json b/outline_client/src/www/messages/ko.json similarity index 100% rename from src/www/messages/ko.json rename to outline_client/src/www/messages/ko.json diff --git a/src/www/messages/lo.json b/outline_client/src/www/messages/lo.json similarity index 100% rename from src/www/messages/lo.json rename to outline_client/src/www/messages/lo.json diff --git a/src/www/messages/lt.json b/outline_client/src/www/messages/lt.json similarity index 100% rename from src/www/messages/lt.json rename to outline_client/src/www/messages/lt.json diff --git a/src/www/messages/lv.json b/outline_client/src/www/messages/lv.json similarity index 100% rename from src/www/messages/lv.json rename to outline_client/src/www/messages/lv.json diff --git a/src/www/messages/mk.json b/outline_client/src/www/messages/mk.json similarity index 100% rename from src/www/messages/mk.json rename to outline_client/src/www/messages/mk.json diff --git a/src/www/messages/mn.json b/outline_client/src/www/messages/mn.json similarity index 100% rename from src/www/messages/mn.json rename to outline_client/src/www/messages/mn.json diff --git a/src/www/messages/mr.json b/outline_client/src/www/messages/mr.json similarity index 100% rename from src/www/messages/mr.json rename to outline_client/src/www/messages/mr.json diff --git a/src/www/messages/ms.json b/outline_client/src/www/messages/ms.json similarity index 100% rename from src/www/messages/ms.json rename to outline_client/src/www/messages/ms.json diff --git a/src/www/messages/my.json b/outline_client/src/www/messages/my.json similarity index 100% rename from src/www/messages/my.json rename to outline_client/src/www/messages/my.json diff --git a/src/www/messages/ne.json b/outline_client/src/www/messages/ne.json similarity index 100% rename from src/www/messages/ne.json rename to outline_client/src/www/messages/ne.json diff --git a/src/www/messages/nl.json b/outline_client/src/www/messages/nl.json similarity index 100% rename from src/www/messages/nl.json rename to outline_client/src/www/messages/nl.json diff --git a/src/www/messages/no.json b/outline_client/src/www/messages/no.json similarity index 100% rename from src/www/messages/no.json rename to outline_client/src/www/messages/no.json diff --git a/src/www/messages/pl.json b/outline_client/src/www/messages/pl.json similarity index 100% rename from src/www/messages/pl.json rename to outline_client/src/www/messages/pl.json diff --git a/src/www/messages/pt-BR.json b/outline_client/src/www/messages/pt-BR.json similarity index 100% rename from src/www/messages/pt-BR.json rename to outline_client/src/www/messages/pt-BR.json diff --git a/src/www/messages/pt-PT.json b/outline_client/src/www/messages/pt-PT.json similarity index 100% rename from src/www/messages/pt-PT.json rename to outline_client/src/www/messages/pt-PT.json diff --git a/src/www/messages/ro.json b/outline_client/src/www/messages/ro.json similarity index 100% rename from src/www/messages/ro.json rename to outline_client/src/www/messages/ro.json diff --git a/src/www/messages/ru.json b/outline_client/src/www/messages/ru.json similarity index 100% rename from src/www/messages/ru.json rename to outline_client/src/www/messages/ru.json diff --git a/src/www/messages/si.json b/outline_client/src/www/messages/si.json similarity index 100% rename from src/www/messages/si.json rename to outline_client/src/www/messages/si.json diff --git a/src/www/messages/sk.json b/outline_client/src/www/messages/sk.json similarity index 100% rename from src/www/messages/sk.json rename to outline_client/src/www/messages/sk.json diff --git a/src/www/messages/sl.json b/outline_client/src/www/messages/sl.json similarity index 100% rename from src/www/messages/sl.json rename to outline_client/src/www/messages/sl.json diff --git a/src/www/messages/sq.json b/outline_client/src/www/messages/sq.json similarity index 100% rename from src/www/messages/sq.json rename to outline_client/src/www/messages/sq.json diff --git a/src/www/messages/sr-Latn.json b/outline_client/src/www/messages/sr-Latn.json similarity index 100% rename from src/www/messages/sr-Latn.json rename to outline_client/src/www/messages/sr-Latn.json diff --git a/src/www/messages/sr.json b/outline_client/src/www/messages/sr.json similarity index 100% rename from src/www/messages/sr.json rename to outline_client/src/www/messages/sr.json diff --git a/src/www/messages/sv.json b/outline_client/src/www/messages/sv.json similarity index 100% rename from src/www/messages/sv.json rename to outline_client/src/www/messages/sv.json diff --git a/src/www/messages/sw.json b/outline_client/src/www/messages/sw.json similarity index 100% rename from src/www/messages/sw.json rename to outline_client/src/www/messages/sw.json diff --git a/src/www/messages/ta.json b/outline_client/src/www/messages/ta.json similarity index 100% rename from src/www/messages/ta.json rename to outline_client/src/www/messages/ta.json diff --git a/src/www/messages/th.json b/outline_client/src/www/messages/th.json similarity index 100% rename from src/www/messages/th.json rename to outline_client/src/www/messages/th.json diff --git a/src/www/messages/tr.json b/outline_client/src/www/messages/tr.json similarity index 100% rename from src/www/messages/tr.json rename to outline_client/src/www/messages/tr.json diff --git a/src/www/messages/uk.json b/outline_client/src/www/messages/uk.json similarity index 100% rename from src/www/messages/uk.json rename to outline_client/src/www/messages/uk.json diff --git a/src/www/messages/ur.json b/outline_client/src/www/messages/ur.json similarity index 100% rename from src/www/messages/ur.json rename to outline_client/src/www/messages/ur.json diff --git a/src/www/messages/vi.json b/outline_client/src/www/messages/vi.json similarity index 100% rename from src/www/messages/vi.json rename to outline_client/src/www/messages/vi.json diff --git a/src/www/messages/zh-CN.json b/outline_client/src/www/messages/zh-CN.json similarity index 100% rename from src/www/messages/zh-CN.json rename to outline_client/src/www/messages/zh-CN.json diff --git a/src/www/messages/zh-TW.json b/outline_client/src/www/messages/zh-TW.json similarity index 100% rename from src/www/messages/zh-TW.json rename to outline_client/src/www/messages/zh-TW.json diff --git a/src/www/model/errors.ts b/outline_client/src/www/model/errors.ts similarity index 100% rename from src/www/model/errors.ts rename to outline_client/src/www/model/errors.ts diff --git a/src/www/model/events.spec.ts b/outline_client/src/www/model/events.spec.ts similarity index 100% rename from src/www/model/events.spec.ts rename to outline_client/src/www/model/events.spec.ts diff --git a/src/www/model/events.ts b/outline_client/src/www/model/events.ts similarity index 100% rename from src/www/model/events.ts rename to outline_client/src/www/model/events.ts diff --git a/src/www/model/server.ts b/outline_client/src/www/model/server.ts similarity index 100% rename from src/www/model/server.ts rename to outline_client/src/www/model/server.ts diff --git a/src/www/start.action.mjs b/outline_client/src/www/start.action.mjs similarity index 100% rename from src/www/start.action.mjs rename to outline_client/src/www/start.action.mjs diff --git a/src/www/storybook.action.mjs b/outline_client/src/www/storybook.action.mjs similarity index 100% rename from src/www/storybook.action.mjs rename to outline_client/src/www/storybook.action.mjs diff --git a/src/www/style.css b/outline_client/src/www/style.css similarity index 100% rename from src/www/style.css rename to outline_client/src/www/style.css diff --git a/src/www/test.action.mjs b/outline_client/src/www/test.action.mjs similarity index 100% rename from src/www/test.action.mjs rename to outline_client/src/www/test.action.mjs diff --git a/src/www/tsconfig.json b/outline_client/src/www/tsconfig.json similarity index 100% rename from src/www/tsconfig.json rename to outline_client/src/www/tsconfig.json diff --git a/src/www/types/clipboard.d.ts b/outline_client/src/www/types/clipboard.d.ts similarity index 100% rename from src/www/types/clipboard.d.ts rename to outline_client/src/www/types/clipboard.d.ts diff --git a/src/www/types/shims.d.ts b/outline_client/src/www/types/shims.d.ts similarity index 100% rename from src/www/types/shims.d.ts rename to outline_client/src/www/types/shims.d.ts diff --git a/src/www/types/webintents.d.ts b/outline_client/src/www/types/webintents.d.ts similarity index 100% rename from src/www/types/webintents.d.ts rename to outline_client/src/www/types/webintents.d.ts diff --git a/src/www/ui_components/about-view.js b/outline_client/src/www/ui_components/about-view.js similarity index 100% rename from src/www/ui_components/about-view.js rename to outline_client/src/www/ui_components/about-view.js diff --git a/src/www/ui_components/add-server-view.js b/outline_client/src/www/ui_components/add-server-view.js similarity index 100% rename from src/www/ui_components/add-server-view.js rename to outline_client/src/www/ui_components/add-server-view.js diff --git a/src/www/ui_components/app-root.js b/outline_client/src/www/ui_components/app-root.js similarity index 100% rename from src/www/ui_components/app-root.js rename to outline_client/src/www/ui_components/app-root.js diff --git a/src/www/ui_components/feedback-view.js b/outline_client/src/www/ui_components/feedback-view.js similarity index 100% rename from src/www/ui_components/feedback-view.js rename to outline_client/src/www/ui_components/feedback-view.js diff --git a/src/www/ui_components/language-view.js b/outline_client/src/www/ui_components/language-view.js similarity index 100% rename from src/www/ui_components/language-view.js rename to outline_client/src/www/ui_components/language-view.js diff --git a/src/www/ui_components/licenses-view.js b/outline_client/src/www/ui_components/licenses-view.js similarity index 100% rename from src/www/ui_components/licenses-view.js rename to outline_client/src/www/ui_components/licenses-view.js diff --git a/src/www/ui_components/licenses/README.md b/outline_client/src/www/ui_components/licenses/README.md similarity index 100% rename from src/www/ui_components/licenses/README.md rename to outline_client/src/www/ui_components/licenses/README.md diff --git a/src/www/ui_components/licenses/licenses.txt b/outline_client/src/www/ui_components/licenses/licenses.txt similarity index 100% rename from src/www/ui_components/licenses/licenses.txt rename to outline_client/src/www/ui_components/licenses/licenses.txt diff --git a/src/www/ui_components/licenses/third_party.sh b/outline_client/src/www/ui_components/licenses/third_party.sh similarity index 100% rename from src/www/ui_components/licenses/third_party.sh rename to outline_client/src/www/ui_components/licenses/third_party.sh diff --git a/src/www/ui_components/outline-icons.js b/outline_client/src/www/ui_components/outline-icons.js similarity index 100% rename from src/www/ui_components/outline-icons.js rename to outline_client/src/www/ui_components/outline-icons.js diff --git a/src/www/ui_components/privacy-view.js b/outline_client/src/www/ui_components/privacy-view.js similarity index 100% rename from src/www/ui_components/privacy-view.js rename to outline_client/src/www/ui_components/privacy-view.js diff --git a/src/www/ui_components/server-rename-dialog.js b/outline_client/src/www/ui_components/server-rename-dialog.js similarity index 100% rename from src/www/ui_components/server-rename-dialog.js rename to outline_client/src/www/ui_components/server-rename-dialog.js diff --git a/src/www/ui_components/user-comms-dialog.js b/outline_client/src/www/ui_components/user-comms-dialog.js similarity index 100% rename from src/www/ui_components/user-comms-dialog.js rename to outline_client/src/www/ui_components/user-comms-dialog.js diff --git a/src/www/views/servers_view/index.ts b/outline_client/src/www/views/servers_view/index.ts similarity index 100% rename from src/www/views/servers_view/index.ts rename to outline_client/src/www/views/servers_view/index.ts diff --git a/src/www/views/servers_view/server_connection_indicator/index.ts b/outline_client/src/www/views/servers_view/server_connection_indicator/index.ts similarity index 100% rename from src/www/views/servers_view/server_connection_indicator/index.ts rename to outline_client/src/www/views/servers_view/server_connection_indicator/index.ts diff --git a/src/www/views/servers_view/server_connection_indicator/stories.ts b/outline_client/src/www/views/servers_view/server_connection_indicator/stories.ts similarity index 100% rename from src/www/views/servers_view/server_connection_indicator/stories.ts rename to outline_client/src/www/views/servers_view/server_connection_indicator/stories.ts diff --git a/src/www/views/servers_view/server_list/index.ts b/outline_client/src/www/views/servers_view/server_list/index.ts similarity index 100% rename from src/www/views/servers_view/server_list/index.ts rename to outline_client/src/www/views/servers_view/server_list/index.ts diff --git a/src/www/views/servers_view/server_list/stories.ts b/outline_client/src/www/views/servers_view/server_list/stories.ts similarity index 100% rename from src/www/views/servers_view/server_list/stories.ts rename to outline_client/src/www/views/servers_view/server_list/stories.ts diff --git a/src/www/views/servers_view/server_list_item/index.ts b/outline_client/src/www/views/servers_view/server_list_item/index.ts similarity index 100% rename from src/www/views/servers_view/server_list_item/index.ts rename to outline_client/src/www/views/servers_view/server_list_item/index.ts diff --git a/src/www/views/servers_view/server_list_item/server_card/index.ts b/outline_client/src/www/views/servers_view/server_list_item/server_card/index.ts similarity index 100% rename from src/www/views/servers_view/server_list_item/server_card/index.ts rename to outline_client/src/www/views/servers_view/server_list_item/server_card/index.ts diff --git a/src/www/views/servers_view/server_list_item/server_card/stories.ts b/outline_client/src/www/views/servers_view/server_list_item/server_card/stories.ts similarity index 100% rename from src/www/views/servers_view/server_list_item/server_card/stories.ts rename to outline_client/src/www/views/servers_view/server_list_item/server_card/stories.ts diff --git a/src/www/webpack_base.mjs b/outline_client/src/www/webpack_base.mjs similarity index 100% rename from src/www/webpack_base.mjs rename to outline_client/src/www/webpack_base.mjs diff --git a/src/www/webpack_cordova.mjs b/outline_client/src/www/webpack_cordova.mjs similarity index 100% rename from src/www/webpack_cordova.mjs rename to outline_client/src/www/webpack_cordova.mjs diff --git a/src/www/webpack_css_rtl_loader.cjs b/outline_client/src/www/webpack_css_rtl_loader.cjs similarity index 100% rename from src/www/webpack_css_rtl_loader.cjs rename to outline_client/src/www/webpack_css_rtl_loader.cjs diff --git a/src/www/webpack_electron.mjs b/outline_client/src/www/webpack_electron.mjs similarity index 100% rename from src/www/webpack_electron.mjs rename to outline_client/src/www/webpack_electron.mjs diff --git a/src/www/webpack_test.mjs b/outline_client/src/www/webpack_test.mjs similarity index 100% rename from src/www/webpack_test.mjs rename to outline_client/src/www/webpack_test.mjs diff --git a/tools/OutlineService/OutlineService.sln b/outline_client/tools/OutlineService/OutlineService.sln similarity index 97% rename from tools/OutlineService/OutlineService.sln rename to outline_client/tools/OutlineService/OutlineService.sln index 9a40a06fab..0183a70546 100755 --- a/tools/OutlineService/OutlineService.sln +++ b/outline_client/tools/OutlineService/OutlineService.sln @@ -1,31 +1,31 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27703.2018 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OutlineService", "OutlineService\OutlineService.csproj", "{F39A4491-9868-4A71-9BE1-980FADE10AC9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|Any CPU.ActiveCfg = Release|x86 - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|Any CPU.Build.0 = Release|x86 - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|x86.ActiveCfg = Release|x86 - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|x86.Build.0 = Release|x86 - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|Any CPU.Build.0 = Release|Any CPU - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|x86.ActiveCfg = Release|x86 - {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {55663288-4604-4D50-8D4A-7222B9A2B6BF} - EndGlobalSection -EndGlobal + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.2018 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OutlineService", "OutlineService\OutlineService.csproj", "{F39A4491-9868-4A71-9BE1-980FADE10AC9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|Any CPU.ActiveCfg = Release|x86 + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|Any CPU.Build.0 = Release|x86 + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|x86.ActiveCfg = Release|x86 + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Debug|x86.Build.0 = Release|x86 + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|Any CPU.Build.0 = Release|Any CPU + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|x86.ActiveCfg = Release|x86 + {F39A4491-9868-4A71-9BE1-980FADE10AC9}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {55663288-4604-4D50-8D4A-7222B9A2B6BF} + EndGlobalSection +EndGlobal diff --git a/tools/OutlineService/OutlineService/App.config b/outline_client/tools/OutlineService/OutlineService/App.config similarity index 97% rename from tools/OutlineService/OutlineService/App.config rename to outline_client/tools/OutlineService/OutlineService/App.config index 321649d338..5534e28762 100755 --- a/tools/OutlineService/OutlineService/App.config +++ b/outline_client/tools/OutlineService/OutlineService/App.config @@ -1,6 +1,6 @@ - - - - - + + + + + \ No newline at end of file diff --git a/tools/OutlineService/OutlineService/OutlineService.Designer.cs b/outline_client/tools/OutlineService/OutlineService/OutlineService.Designer.cs similarity index 96% rename from tools/OutlineService/OutlineService/OutlineService.Designer.cs rename to outline_client/tools/OutlineService/OutlineService/OutlineService.Designer.cs index 1be3f894c8..2c933d862d 100755 --- a/tools/OutlineService/OutlineService/OutlineService.Designer.cs +++ b/outline_client/tools/OutlineService/OutlineService/OutlineService.Designer.cs @@ -1,54 +1,54 @@ -// Copyright 2018 The Outline Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -namespace OutlineService -{ - partial class OutlineService - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - // - // OutlineService - // - this.ServiceName = "OutlineService"; - - } - - #endregion - } -} +// Copyright 2018 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +namespace OutlineService +{ + partial class OutlineService + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + // + // OutlineService + // + this.ServiceName = "OutlineService"; + + } + + #endregion + } +} diff --git a/tools/OutlineService/OutlineService/OutlineService.cs b/outline_client/tools/OutlineService/OutlineService/OutlineService.cs similarity index 97% rename from tools/OutlineService/OutlineService/OutlineService.cs rename to outline_client/tools/OutlineService/OutlineService/OutlineService.cs index 3f2ad5f571..71da846c61 100755 --- a/tools/OutlineService/OutlineService/OutlineService.cs +++ b/outline_client/tools/OutlineService/OutlineService/OutlineService.cs @@ -1,1093 +1,1093 @@ -// Copyright 2018 The Outline Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -using System; -using System.Collections; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.IO.Pipes; -using System.Linq; -using System.Net; -using System.Net.NetworkInformation; -using System.Net.Sockets; -using System.Runtime.InteropServices; -using System.Runtime.Serialization; -using System.Security.AccessControl; -using System.Security.Principal; -using System.ServiceProcess; -using System.Text; -using Newtonsoft.Json; - -/* - * Windows Service, part of the Outline Windows client, to configure routing. - * Modifying the system routes requires admin permissions, so this service must be installed - * and started as admin. - * - * The service listens on a named pipe and supports the following JSON API: - * - * Requests - * - * configureRouting: Modifies the system's routing table to route all traffic through the TAP device - * except that destined for proxyIp. Disables IPv6 traffic. - * { action: "configureRouting", parameters: {"proxyIp": , "isAutoConnect": "false" }} - * - * resetRouting: Restores the system's default routing. - * { action: "resetRouting"} - * - * Response - * - * { statusCode: , action: errorMessage?: } - * - * The service will send connection status updates if the pipe connection is kept - * open by the client. Such responses have the form: - * - * { statusCode: , action: "statusChanged", connectionStatus: } - * - * View logs with this PowerShell query: - * get-eventlog -logname Application -source OutlineService -newest 20 | format-table -property timegenerated,entrytype,message -autosize - */ -namespace OutlineService -{ - public partial class OutlineService : ServiceBase - { - private const string EVENT_LOG_SOURCE = "OutlineService"; - private const string EVENT_LOG_NAME = "Application"; - // Must be kept in sync with the Electron code. - private const string PIPE_NAME = "OutlineServicePipe"; - private const string TAP_DEVICE_NAME = "outline-tap0"; - private const string TAP_DEVICE_IP = "10.0.85.1"; - - private const string ACTION_CONFIGURE_ROUTING = "configureRouting"; - private const string ACTION_RESET_ROUTING = "resetRouting"; - private const string ACTION_STATUS_CHANGED = "statusChanged"; - private const string PARAM_PROXY_IP = "proxyIp"; - private const string PARAM_AUTO_CONNECT = "isAutoConnect"; - - private static string[] IPV4_SUBNETS = { "0.0.0.0/1", "128.0.0.0/1" }; - private static string[] IPV6_SUBNETS = { "fc00::/7", "2000::/4", "3000::/4" }; - private static string[] IPV4_RESERVED_SUBNETS = { - "0.0.0.0/8", - "10.0.0.0/8", - "100.64.0.0/10", - "169.254.0.0/16", - "172.16.0.0/12", - "192.0.0.0/24", - "192.0.2.0/24", - "192.31.196.0/24", - "192.52.193.0/24", - "192.88.99.0/24", - "192.168.0.0/16", - "192.175.48.0/24", - "198.18.0.0/15", - "198.51.100.0/24", - "203.0.113.0/24", - "240.0.0.0/4" - }; - private const string CMD_NETSH = "netsh"; - private const string CMD_ROUTE = "route"; - - private const uint BUFFER_SIZE_BYTES = 1024; - - private EventLog eventLog; - private NamedPipeServerStream pipe; - private string proxyIp; - private string gatewayIp; - private int gatewayInterfaceIndex; - - // Time, in ms, to wait until considering smartdnsblock.exe to have successfully launched. - private const int SMART_DNS_BLOCK_TIMEOUT_MS = 1000; - - // https://docs.microsoft.com/en-us/windows/desktop/api/ipmib/ns-ipmib-_mib_ipforwardrow - [StructLayout(LayoutKind.Sequential)] - internal class MIB_IPFORWARDROW - { - internal uint dwForwardDest; - internal uint dwForwardMask; - internal uint dwForwardPolicy; - internal uint dwForwardNextHop; - internal int dwForwardIfIndex; - internal uint dwForwardType; - internal uint dwForwardProto; - internal uint dwForwardAge; - internal uint dwForwardNextHopAS; - internal uint dwForwardMetric1; - internal uint dwForwardMetric2; - internal uint dwForwardMetric3; - internal uint dwForwardMetric4; - internal uint dwForwardMetric5; - } - - // https://docs.microsoft.com/en-us/windows/desktop/api/ipmib/ns-ipmib-_mib_ipforwardtable - // - // NOTE: Because of the variable-length array, Marshal.PtrToStructure - // will *not* populate the table field. Additionally, we have seen - // crashes following suspend/resume while trying to marshal this - // structure. See #GetSystemIpv4Gateway for more on this, as well - // as for how to traverse the table. - [StructLayout(LayoutKind.Sequential)] - internal class MIB_IPFORWARDTABLE - { - internal uint dwNumEntries; - internal MIB_IPFORWARDROW[] table; - }; - - // https://docs.microsoft.com/en-us/windows/desktop/api/iphlpapi/nf-iphlpapi-getipforwardtable - [DllImport("iphlpapi", CharSet = CharSet.Auto)] - private extern static int GetIpForwardTable(IntPtr pIpForwardTable, ref int pdwSize, bool bOrder); - - // https://docs.microsoft.com/en-us/windows/desktop/debug/system-error-codes--0-499- - private static int ERROR_INSUFFICIENT_BUFFER = 122; - - // Do as little as possible here because any error thrown will cause "net start" to fail - // without anything being added to the application log. - public OutlineService() - { - InitializeComponent(); - - eventLog = new EventLog(); - if (!EventLog.SourceExists(EVENT_LOG_SOURCE)) - { - EventLog.CreateEventSource(EVENT_LOG_SOURCE, EVENT_LOG_NAME); - } - eventLog.Source = EVENT_LOG_SOURCE; - eventLog.Log = EVENT_LOG_NAME; - } - - protected override void OnStart(string[] args) - { - eventLog.WriteEntry("OutlineService starting"); - NetworkChange.NetworkAddressChanged += - new NetworkAddressChangedEventHandler(NetworkAddressChanged); - CreatePipe(); - } - - protected override void OnStop() - { - eventLog.WriteEntry("OutlineService stopping"); - DestroyPipe(); - NetworkChange.NetworkAddressChanged -= NetworkAddressChanged; - } - - private void CreatePipe() - { - var pipeSecurity = new PipeSecurity(); - pipeSecurity.AddAccessRule(new PipeAccessRule(new SecurityIdentifier( - WellKnownSidType.CreatorOwnerSid, null), - PipeAccessRights.FullControl, AccessControlType.Allow)); - pipeSecurity.AddAccessRule(new PipeAccessRule(new SecurityIdentifier( - WellKnownSidType.AuthenticatedUserSid, null), - PipeAccessRights.ReadWrite, AccessControlType.Allow)); - - pipe = new NamedPipeServerStream(PIPE_NAME, PipeDirection.InOut, -1, PipeTransmissionMode.Message, - PipeOptions.Asynchronous, (int)BUFFER_SIZE_BYTES, (int)BUFFER_SIZE_BYTES, pipeSecurity); - pipe.BeginWaitForConnection(HandleConnection, null); - } - - private void DestroyPipe() - { - if (pipe == null) - { - return; - } - try - { - if (pipe.IsConnected) - { - pipe.Disconnect(); - } - pipe.Close(); - pipe = null; - } - catch (Exception e) - { - eventLog.WriteEntry($"Got an exception while destroying the pipe: {e.ToString()}", - EventLogEntryType.Warning); - } - } - - private void HandleConnection(IAsyncResult result) - { - eventLog.WriteEntry("Got incoming connection"); - - // Save the network config before we do anything. If the request fails - // it will be sent to the client for inclusion in Sentry reports. - var beforeNetworkInfo = GetNetworkInfo(); - - try - { - pipe.EndWaitForConnection(result); - // Keep the pipe connected to send connection status updates. - while (pipe.IsConnected) - { - ServiceResponse response = new ServiceResponse(); - var request = ReadRequest(); - if (request == null) - { - response.statusCode = (int)ErrorCode.GenericFailure; - } - else - { - response.action = request.action; - try - { - HandleRequest(request); - } - catch (Exception e) - { - response.statusCode = (int)ErrorCode.GenericFailure; - response.errorMessage = $"{e.Message} (network config: {beforeNetworkInfo})"; - eventLog.WriteEntry($"request failed: {e.Message}", EventLogEntryType.Error); - } - } - WriteResponse(response); - } - } - catch (Exception e) - { - eventLog.WriteEntry($"Failed to handle connection: {e.ToString()}", EventLogEntryType.Error); - } - finally - { - // Pipe streams are one-to-one connections. Recreate the pipe to handle subsequent requests. - DestroyPipe(); - CreatePipe(); - } - } - - private ServiceRequest ReadRequest() - { - var stringBuilder = new StringBuilder(); - var buffer = new byte[BUFFER_SIZE_BYTES]; - var memoryStream = new MemoryStream(); - do - { - var readBytes = pipe.Read(buffer, 0, buffer.Length); - memoryStream.Write(buffer, 0, readBytes); - } while (!pipe.IsMessageComplete); - var msg = Encoding.UTF8.GetString(buffer); - if (String.IsNullOrWhiteSpace(msg)) - { - eventLog.WriteEntry("Failed to read request", EventLogEntryType.Error); - return null; - } - eventLog.WriteEntry($"incoming message: {msg}"); - return ParseRequest(msg); - } - - private ServiceRequest ParseRequest(string jsonRequest) - { - try - { - return JsonConvert.DeserializeObject(jsonRequest); - } - catch (Exception e) - { - eventLog.WriteEntry($"Failed to parse request: {e.ToString()}"); - } - return null; - } - - private void WriteResponse(ServiceResponse response) - { - var jsonResponse = SerializeResponse(response); - if (jsonResponse == null) - { - eventLog.WriteEntry("Failed to serialize response.", EventLogEntryType.Error); - return; - } - eventLog.WriteEntry($"outgoing message: {jsonResponse}"); - var jsonResponseBytes = Encoding.UTF8.GetBytes(jsonResponse); - pipe.Write(jsonResponseBytes, 0, jsonResponseBytes.Length); - pipe.Flush(); - pipe.WaitForPipeDrain(); - } - - private string SerializeResponse(ServiceResponse response) - { - try - { - return JsonConvert.SerializeObject(response); - } - catch (Exception e) - { - eventLog.WriteEntry($"Failed to serialize response: {e.ToString()}"); - } - return null; - } - - private void HandleRequest(ServiceRequest request) - { - switch (request.action) - { - case ACTION_CONFIGURE_ROUTING: - ConfigureRouting(request.parameters[PARAM_PROXY_IP], Boolean.Parse(request.parameters[PARAM_AUTO_CONNECT])); - break; - case ACTION_RESET_ROUTING: - ResetRouting(proxyIp, gatewayInterfaceIndex); - break; - default: - eventLog.WriteEntry($"Received invalid request: {request.action}", EventLogEntryType.Error); - break; - } - } - - // Routes all traffic *except that destined for the proxy server* - // through the TAP device, creating the illusion of a system-wide VPN. - // - // The two key steps are: - // - Route all IPv4 traffic through the TAP device. - // - Find a gateway and route traffic *to the proxy server only* (a /32 - // mask) through it. - // - // Finding a gateway, in particular, is complex: for more on how it - // works, see #GetSystemIpv4Gateway. - // - // On top of this foundation, we take some steps to help prevent - // "leaking" traffic: - // - IPv6 traffic is "blocked", as Outline does not currently support - // servers on IPv6 addresses. - // - "Smart Multi-Homed Name Resolution" is disabled, as it can cause - // the system's "regular" - and potentially filtered - DNS servers to - // be used (particularly on Windows 10). - // - // Preventing leaks significantly complicates things. In particular, *if - // autostart is true and a gateway cannot be found then the IPv4 - // redirect and IPv6 block remain in place and no exception is thrown*. - // When a gateway re-appears following a network change (see - // #NetworkAddressChanged), we will reconnect. - // - // Lastly, a set of routes is added through the gateway *to non-routable - // ("LAN") addresses*. This allows common hardware such as Chromecast to - // function while Outline is active. - // - // Note: - // - Currently, this function does not "clean up" in the event of - // failure. Instead, we rely on the client to call ResetRouting - // following a connection failure. - // - There's limited protection against "nested connections", i.e. - // connecting to Outline while another VPN, e.g. OpenVPN, is already - // active. There's no simple API we can use to tell whether a VPN is - // already active and *given the difficulty in identifying this - // reliably* (multiple active network interfaces, for example, are - // very common, e.g. it happens - briefly - every time a user - // switches between a wired and wireless network) we err on the side - // of working. Since the user presumably knows whether another VPN is - // already active and *we make no persistent changes to the routing - // table* this seems reasonable. - // - // TODO: The client needs to handle certain autoconnect failures better, - // e.g. if IPv4 redirect fails then the client is not really in - // the reconnecting state; the system is leaking traffic. - public void ConfigureRouting(string proxyIp, bool isAutoConnect) - { - try - { - StartSmartDnsBlock(); - eventLog.WriteEntry($"started smartdnsblock"); - } - catch (Exception e) - { - throw new Exception($"could not start smartdnsblock: {e.Message}"); - } - - try - { - GetSystemIpv4Gateway(proxyIp); - - eventLog.WriteEntry($"connecting via gateway at {gatewayIp} on interface {gatewayInterfaceIndex}"); - - // Set the proxy escape route first to prevent a routing loop when capturing all IPv4 traffic. - try - { - AddOrUpdateProxyRoute(proxyIp, gatewayIp, gatewayInterfaceIndex); - eventLog.WriteEntry($"created route to proxy"); - } - catch (Exception e) - { - throw new Exception($"could not create route to proxy: {e.Message}"); - } - this.proxyIp = proxyIp; - - try - { - AddOrUpdateReservedSubnetBypass(gatewayIp, gatewayInterfaceIndex); - eventLog.WriteEntry($"created LAN bypass routes"); - } - catch (Exception e) - { - throw new Exception($"could not create LAN bypass routes: {e.Message}"); - } - } - catch (Exception e) when (isAutoConnect) - { - eventLog.WriteEntry($"could not reconnect during auto-connect: {e.Message}", EventLogEntryType.Warning); - } - - try - { - StopRoutingIpv6(); - eventLog.WriteEntry($"blocked IPv6 traffic"); - } - catch (Exception e) - { - throw new Exception($"could not block IPv6 traffic: {e.Message}"); - } - - try - { - AddIpv4TapRedirect(); - eventLog.WriteEntry($"redirected IPv4 traffic"); - } - catch (Exception e) - { - throw new Exception($"could not redirect IPv4 traffic: {e.Message}"); - } - } - - // Undoes and removes as many as possible of the routes and other - // changes to the system previously made by #ConfigureRouting. - // - // As per #ConfigureRouting, this function is largely idempodent: - // calling it multiple times in succession should be safe and result in - // the same system configuration. - // - // Notes: - // - *This function does not set any error code when any step fails*. - // It probably should, as the system may in some rare cases still be - // connected (or, worse but less likely, bricked). - // - If the service does not know the IP address of the proxy server - // then it *cannot remove that route*. This can happen if the service - // is restarted while Outline is connected *or* (more likely) if this - // function is called while Outline is not connected. This route is - // mostly harmless because it only affects traffic to the proxy and - // if/when the user reconnects to it the route will be updated. - public void ResetRouting(string proxyIp, int gatewayInterfaceIndex) - { - try - { - RemoveIpv4TapRedirect(); - eventLog.WriteEntry($"removed IPv4 redirect"); - } - catch (Exception e) - { - eventLog.WriteEntry($"failed to remove IPv4 redirect: {e.Message}", EventLogEntryType.Error); - } - - try - { - // This is only necessary when disconecting without network connectivity. - StartRoutingIpv4(); - } - catch (Exception) {} - - try - { - StartRoutingIpv6(); - eventLog.WriteEntry($"unblocked IPv6"); - } - catch (Exception e) - { - eventLog.WriteEntry($"failed to unblock IPv6: {e.Message}", EventLogEntryType.Error); - } - - if (proxyIp != null) - { - try - { - DeleteProxyRoute(proxyIp); - eventLog.WriteEntry($"deleted route to proxy"); - } - catch (Exception e) - { - eventLog.WriteEntry($"failed to delete route to proxy: {e.Message}", EventLogEntryType.Error); - } - this.proxyIp = null; - } - - try - { - RemoveReservedSubnetBypass(); - eventLog.WriteEntry($"deleted LAN bypass routes"); - } - catch (Exception e) - { - eventLog.WriteEntry($"failed to delete LAN bypass routes: {e.Message}", EventLogEntryType.Error); - } - this.gatewayIp = null; - - try - { - StopSmartDnsBlock(); - eventLog.WriteEntry($"stopped smartdnsblock"); - } - catch (Exception e) - { - eventLog.WriteEntry($"failed to stop smartdnsblock: {e.Message}", - EventLogEntryType.Warning); - } - } - - // Disable "Smart Multi-Homed Name Resolution", to ensure the system uses only the - // (non-filtered) DNS server(s) associated with the TAP device. - // - // Notes: - // - To show the current firewall rules: - // netsh wfp show filters - // - This website is an easy way to quickly verify there are no DNS leaks: - // https://ipleak.net/ - // - Because .Net provides *no way* to associate the new process with this one, the - // new process will continue to run even if this service is interrupted or crashes. - // Fortunately, since the changes it makes are *not* persistent, the system can, in - // the worst case, be fixed by rebooting. - private void StartSmartDnsBlock() - { - // smartdnsblock.exe must be a sibling of OutlineService.exe. - Process smartDnsBlock = new Process(); - smartDnsBlock.StartInfo.FileName = new DirectoryInfo(Process.GetCurrentProcess().MainModule.FileName).Parent.FullName + - Path.DirectorySeparatorChar + "smartdnsblock.exe"; - smartDnsBlock.StartInfo.UseShellExecute = false; - - smartDnsBlock.StartInfo.RedirectStandardError = true; - smartDnsBlock.StartInfo.RedirectStandardOutput = true; - - // This is for Windows 7: without it, the process exits immediately, presumably - // because stdin isn't connected to anything: - // https://github.com/Jigsaw-Code/outline-client/issues/415 - // - // This seems to make no difference on Windows 8 and 10. - smartDnsBlock.StartInfo.RedirectStandardInput = true; - - ArrayList stdout = new ArrayList(); - ArrayList stderr = new ArrayList(); - smartDnsBlock.OutputDataReceived += (object sender, DataReceivedEventArgs e) => - { - if (!String.IsNullOrEmpty(e.Data)) - { - stdout.Add(e.Data); - } - }; - smartDnsBlock.ErrorDataReceived += (object sender, DataReceivedEventArgs e) => - { - if (!String.IsNullOrEmpty(e.Data)) - { - stderr.Add(e.Data); - } - }; - - try - { - smartDnsBlock.Start(); - smartDnsBlock.BeginOutputReadLine(); - smartDnsBlock.BeginErrorReadLine(); - } - catch (Exception e) - { - throw new Exception($"could not launch smartdnsblock at {smartDnsBlock.StartInfo.FileName}: { e.Message}"); - } - - // This does *not* throw if the process is still running after Nms. - smartDnsBlock.WaitForExit(SMART_DNS_BLOCK_TIMEOUT_MS); - if (smartDnsBlock.HasExited) - { - throw new Exception($"smartdnsblock failed " + $"(stdout: {String.Join(Environment.NewLine, stdout.ToArray())}, " + - $"(stderr: {String.Join(Environment.NewLine, stderr.ToArray())})"); - } - } - - private void StopSmartDnsBlock() - { - try - { - RunCommand("powershell", "stop-process -name smartdnsblock"); - } - catch (Exception e) - { - throw new Exception($"could not stop smartdnsblock: {e.Message}"); - } - } - - private void AddOrUpdateProxyRoute(string proxyIp, string gatewayIp, int gatewayInterfaceIndex) - { - // "netsh interface ipv4 set route" does *not* work for us here - // because it can only be used to change a route's *metric*. - try - { - RunCommand(CMD_ROUTE, $"change {proxyIp} {gatewayIp} if {gatewayInterfaceIndex}"); - } - catch (Exception) - { - RunCommand(CMD_NETSH, $"interface ipv4 add route {proxyIp}/32 nexthop={gatewayIp} interface=\"{gatewayInterfaceIndex}\" metric=0 store=active"); - } - } - - private void DeleteProxyRoute(string proxyIp) - { - // "route" doesn't need to know on which interface or through which - // gateway the route was created. - RunCommand(CMD_ROUTE, $"delete {proxyIp}"); - } - - // Route IPv4 traffic through the TAP device. Instead of deleting the - // default IPv4 gateway (0.0.0.0/0), we resort to creating two more - // specific routes (see IPV4_SUBNETS) that take precedence over the - // default gateway. This way, we need not worry about the default - // gateway being recreated with a lower metric upon device sleep. - // - // This 'hack' was inspired by OpenVPN; see: - // https://github.com/OpenVPN/openvpn3/commit/d08cc059e7132a3d3aee3dcd946fce4c35b1ced3#diff-1d76f0fd7ec04c6d1398288214a879c5R358 - // - // TODO: If these routes exist on a gateway that's not our TAP device, - // it might be a good signal that OpenVPN is active? - private void AddIpv4TapRedirect() - { - foreach (string subnet in IPV4_SUBNETS) - { - try - { - RunCommand(CMD_NETSH, $"interface ipv4 add route {subnet} nexthop={TAP_DEVICE_IP} interface={TAP_DEVICE_NAME} metric=0 store=active"); - } - catch (Exception) - { - RunCommand(CMD_NETSH, $"interface ipv4 set route {subnet} nexthop={TAP_DEVICE_IP} interface={TAP_DEVICE_NAME} metric=0 store=active"); - } - } - } - - private void RemoveIpv4TapRedirect() - { - foreach (string subnet in IPV4_SUBNETS) - { - RunCommand(CMD_NETSH, $"interface ipv4 delete route {subnet} interface={TAP_DEVICE_NAME}"); - } - } - - private void StartRoutingIpv4() - { - foreach (string subnet in IPV4_SUBNETS) - { - RunCommand(CMD_NETSH, $"interface ipv4 delete route {subnet} interface={NetworkInterface.LoopbackInterfaceIndex}"); - } - } - - private void StopRoutingIpv4() - { - foreach (string subnet in IPV4_SUBNETS) - { - try - { - RunCommand(CMD_NETSH, $"interface ipv4 add route {subnet} interface={NetworkInterface.LoopbackInterfaceIndex} metric=0 store=active"); - } - catch (Exception) - { - RunCommand(CMD_NETSH, $"interface ipv4 set route {subnet} interface={NetworkInterface.LoopbackInterfaceIndex} metric=0 store=active"); - } - } - } - - private void StartRoutingIpv6() - { - foreach (string subnet in IPV6_SUBNETS) - { - RunCommand(CMD_NETSH, $"interface ipv6 delete route {subnet} interface={NetworkInterface.IPv6LoopbackInterfaceIndex}"); - } - } - - // Outline does not currently support IPv6, so we resort to disabling it while the VPN is active to - // prevent leakage. Removing the default IPv6 gateway is not enough since it gets re-created - // through router advertisements and DHCP (disabling these or IPv6 routing altogether requires a - // system reboot). Thus, we resort to creating three IPv6 routes (see IPV6_SUBNETS) to the loopback - // interface that are more specific than the default route, causing IPv6 traffic to get dropped. - private void StopRoutingIpv6() - { - foreach (string subnet in IPV6_SUBNETS) - { - try - { - RunCommand(CMD_NETSH, $"interface ipv6 add route {subnet} interface={NetworkInterface.IPv6LoopbackInterfaceIndex} metric=0 store=active"); - } - catch (Exception) - { - RunCommand(CMD_NETSH, $"interface ipv6 set route {subnet} interface={NetworkInterface.IPv6LoopbackInterfaceIndex} metric=0 store=active"); - } - } - } - - // Routes reserved and private subnets through the default gateway so they bypass the VPN. - private void AddOrUpdateReservedSubnetBypass(string gatewayIp, int gatewayInterfaceIndex) - { - foreach (string subnet in IPV4_RESERVED_SUBNETS) - { - try - { - RunCommand(CMD_ROUTE, $"change {subnet} {gatewayIp} if {gatewayInterfaceIndex}"); - } - catch (Exception) - { - RunCommand(CMD_NETSH, $"interface ipv4 add route {subnet} nexthop={gatewayIp} interface=\"{gatewayInterfaceIndex}\" metric=0 store=active"); - } - } - } - - // Removes reserved subnet routes created to bypass the VPN. - private void RemoveReservedSubnetBypass() - { - foreach (string subnet in IPV4_RESERVED_SUBNETS) - { - RunCommand(CMD_ROUTE, $"delete {subnet}"); - } - } - - // Runs a shell command synchronously. - private void RunCommand(string cmd, string args) - { - Console.WriteLine($"running command: {cmd} {args}"); - - var startInfo = new ProcessStartInfo(cmd); - startInfo.Arguments = args; - startInfo.UseShellExecute = false; - startInfo.RedirectStandardError = true; - startInfo.RedirectStandardOutput = true; - startInfo.CreateNoWindow = true; - - Process p = new Process(); - var stdout = new StringBuilder(); - var stderr = new StringBuilder(); - p.OutputDataReceived += (object sender, DataReceivedEventArgs e) => - { - if (e == null || String.IsNullOrWhiteSpace(e.Data)) - { - return; - } - stdout.Append(e.Data); - }; - p.ErrorDataReceived += (object sender, DataReceivedEventArgs e) => - { - if (e == null || String.IsNullOrWhiteSpace(e.Data)) - { - return; - } - stderr.Append(e.Data); - }; - p.StartInfo = startInfo; - p.Start(); - p.BeginOutputReadLine(); - p.BeginErrorReadLine(); - p.WaitForExit(); - - // "route" is weird and always exits with zero: we have to examine - // stderr to detect its errors. - if (p.ExitCode != 0 || stderr.ToString().Length > 0) - { - // NOTE: Do *not* add args to this error message because it's piped - // back to the client for inclusion in Sentry reports and - // effectively contain access keys. - throw new Exception($"command exited with {p.ExitCode} " + - $"(stdout: {stdout.ToString()}, stderr: {stderr.ToString()})"); - } - } - - // Searches the system's routing table for the best route to the - // specified IP address *that does not route through the TAP device*. - // - // That last requirement - ignoring the TAP device - is what prevents us - // from simply calling GetBestRoute: other than that, it does all the - // work of finding the lowest-weighted gateway to the destination IP. - // - // NOTE: This function does not *always* find the best gateway: it - // currently only considers "default" gateways (0.0.0.0) which may not - // work in some rare cases. Several re-implementations of the Windows - // API illustrate how we could more closely match GetBestRoute: - // - https://github.com/wine-mirror/wine/blob/master/dlls/iphlpapi/iphlpapi_main.c - // - https://github.com/reactos/reactos/blob/master/dll/win32/iphlpapi/iphlpapi_main.c - private void GetSystemIpv4Gateway(string proxyIp) - { - gatewayIp = null; - gatewayInterfaceIndex = -1; - - int tapInterfaceIndex; - try - { - tapInterfaceIndex = NetworkInterface.GetAllNetworkInterfaces() - .Where(i => i.Name == TAP_DEVICE_NAME) - .FirstOrDefault() - .GetIPProperties() - .GetIPv4Properties().Index; - } - catch (Exception) - { - throw new Exception("TAP device not found"); - } - - // Some marshalling craziness follows: we have to first ask - // GetIpForwardTable how much memory is required to hold the routing - // table before calling it again to actually return us the table; - // once we have the table, we have to iterate over the rows - // (thankfully, MIB_IPFORWARDROW marshalls easily). - int bufferSize = 0; - if (GetIpForwardTable(IntPtr.Zero, ref bufferSize, true) != ERROR_INSUFFICIENT_BUFFER) - { - throw new Exception("could not fetch routing table"); - } - var buffer = Marshal.AllocHGlobal(bufferSize); - if (GetIpForwardTable(buffer, ref bufferSize, true) != 0) - { - Marshal.FreeHGlobal(buffer); - throw new Exception("could not fetch routing table"); - } - - // NOTE: We deliberately *do not marshal the entire - // MIB_IPFORWARDTABLE* owing to unexplained crashes following - // suspend/resume. Fortunately, since that structure is - // logically just a DWORD followed by an array, this entails - // little extra work. - var numEntries = Marshal.ReadInt32(buffer); - MIB_IPFORWARDROW bestRow = null; - var rowPtr = buffer + Marshal.SizeOf(numEntries); - for (int i = 0; i < numEntries; i++) - { - MIB_IPFORWARDROW row = (MIB_IPFORWARDROW)Marshal.PtrToStructure(rowPtr, typeof(MIB_IPFORWARDROW)); - - // Must be a gateway (see note above on how we can improve this). - if (row.dwForwardDest != 0) - { - continue; - } - - // Must not be the TAP device. - if (row.dwForwardIfIndex == tapInterfaceIndex) - { - continue; - } - - if (bestRow == null || row.dwForwardMetric1 < bestRow.dwForwardMetric1) - { - bestRow = row; - } - - rowPtr += Marshal.SizeOf(typeof(MIB_IPFORWARDROW)); - } - - Marshal.FreeHGlobal(buffer); - - if (bestRow == null) - { - throw new Exception("no gateway found"); - } - - gatewayIp = new IPAddress(BitConverter.GetBytes(bestRow.dwForwardNextHop)).ToString(); - gatewayInterfaceIndex = bestRow.dwForwardIfIndex; - } - - // Updates, if Outline is connected, the routing table to reflect a new - // gateway. - // - // There's really just one thing to do when the gateway changes: update - // the (direct) route to the proxy server to route through the new - // gateway. If there is no gateway, e.g. because the system has lost - // network connectivity, notify the client and keep the IPv4 redirect - // and IPv6 block in place: this helps prevent leaking traffic. - // - // Notes: - // - *This function must not throw*. If it does, the handler is unset. - // - This function also updates two further sets of routes: the LAN - // bypass routes (which must route through the gateway) and the IPv4 - // redirect routes (which "fall back" to the system gateway once the - // TAP device temporarily disappears due to tun2socks' exit). - // - The NetworkChange.NetworkAddressChanged callback is *extremely - // noisy*. In particular, it seems to be called twice for every - // change to the routing table. There does not seem to be any useful - // information in the supplied EventArgs. This is partly why we don't - // touch the routing table unless the gateway has actually changed. - // - This function may be called while #ConfigureRouting is still - // running. This is partly why we exit early (at the top) if we don't - // think Outline is connected. - private void NetworkAddressChanged(object sender, EventArgs evt) - { - if (proxyIp == null) - { - eventLog.WriteEntry("network changed but Outline is not connected - doing nothing"); - return; - } - - var previousGatewayIp = gatewayIp; - var previousGatewayInterfaceIndex = gatewayInterfaceIndex; - - try - { - GetSystemIpv4Gateway(proxyIp); - } - catch (Exception e) - { - eventLog.WriteEntry($"network changed but no gateway found: {e.Message}"); - } - - if (previousGatewayIp == gatewayIp && previousGatewayInterfaceIndex == gatewayInterfaceIndex) - { - // Only send on actual change, to prevent duplicate notifications (mostly - // harmless but can make debugging harder). - eventLog.WriteEntry($"network changed but gateway and interface stayed the same"); - return; - } - else if (gatewayIp == null) - { - SendConnectionStatusChange(ConnectionStatus.Reconnecting); - - // Stop capturing IPv4 traffic in order to prevent a routing loop in the TAP device. - // Redirect IPv4 traffic to the loopback interface instead to avoid leaking traffic when - // the network becomes available. - try - { - StopRoutingIpv4(); - RemoveIpv4TapRedirect(); - eventLog.WriteEntry($"stopped routing IPv4 traffic"); - } - catch (Exception e) - { - eventLog.WriteEntry($"failed to stop routing IPv4: {e.Message}", EventLogEntryType.Error); - } - return; - } - - eventLog.WriteEntry($"network changed - gateway is now {gatewayIp} on interface {gatewayInterfaceIndex}"); - - // Add the proxy escape route before capturing IPv4 traffic to prevent a routing loop in the TAP device. - try - { - AddOrUpdateProxyRoute(proxyIp, gatewayIp, gatewayInterfaceIndex); - eventLog.WriteEntry($"updated route to proxy"); - } - catch (Exception e) - { - eventLog.WriteEntry($"could not update route to proxy: {e.Message}"); - return; - } - - try - { - AddIpv4TapRedirect(); - StartRoutingIpv4(); - eventLog.WriteEntry($"refreshed IPv4 redirect"); - } - catch (Exception e) - { - eventLog.WriteEntry($"could not refresh IPv4 redirect: {e.Message}"); - return; - } - - // Send the status update now that the full-system VPN is connected. - SendConnectionStatusChange(ConnectionStatus.Connected); - - try - { - AddOrUpdateReservedSubnetBypass(gatewayIp, gatewayInterfaceIndex); - eventLog.WriteEntry($"updated LAN bypass routes"); - } - catch (Exception e) - { - // TODO: This isn't quite right: because we successfully updated - // the route to the proxy, the client *is* connected; it's - // just not "fully" connected, in the way we like. We - // should distinguish between "cannot reconnect right now, - // because no internet" and "cannot reconnect because - // netsh commands are failing". - eventLog.WriteEntry($"could not update LAN bypass routes: {e.Message}"); - return; - } - } - - // Writes the connection status to the pipe, if it is connected. - private void SendConnectionStatusChange(ConnectionStatus status) - { - if (pipe == null || !pipe.IsConnected) - { - eventLog.WriteEntry("Cannot send connection status change, pipe not connected.", EventLogEntryType.Error); - return; - } - ServiceResponse response = new ServiceResponse(); - response.action = ACTION_STATUS_CHANGED; - response.statusCode = (int)ErrorCode.Success; - response.connectionStatus = (int)status; - try - { - WriteResponse(response); - } - catch (Exception e) - { - eventLog.WriteEntry($"Failed to send connection status change: {e.Message}"); - } - } - - public string GetNetworkInfo() - { - return String.Join(", ", NetworkInterface.GetAllNetworkInterfaces() - .Select(a => this.GetAdapterInfo(a))); - } - - private string GetAdapterInfo(NetworkInterface adapter) - { - var numIpv4Gateways = adapter.GetIPProperties().GatewayAddresses - .Select(g => g.Address) - .Where(a => a.AddressFamily == AddressFamily.InterNetwork) - .Count(); - var numIpv6Gateways = adapter.GetIPProperties().GatewayAddresses - .Select(g => g.Address) - .Where(a => a.AddressFamily == AddressFamily.InterNetworkV6) - .Count(); - - return $"{adapter.Name} ({adapter.OperationalStatus}): " + ( - adapter.Supports(NetworkInterfaceComponent.IPv4) ? - $"{numIpv4Gateways} x ipv4 gateways" : - "ipv4 disabled") + ", " + ( - adapter.Supports(NetworkInterfaceComponent.IPv6) ? - $"{numIpv6Gateways} x ipv6 gateways" : - "ipv6 disabled"); - } - } - - [DataContract] - internal class ServiceRequest - { - [DataMember] - internal string action; - [DataMember] - internal Dictionary parameters; - } - - [DataContract] - internal class ServiceResponse - { - [DataMember] - internal string action; - [DataMember] - internal int statusCode; - [DataMember] - internal string errorMessage; - [DataMember] - internal int connectionStatus; - } - - public enum ErrorCode - { - Success = 0, - GenericFailure = 1 - } - - public enum ConnectionStatus - { - Connected = 0, - Disconnected = 1, - Reconnecting = 2 - } -} +// Copyright 2018 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.IO.Pipes; +using System.Linq; +using System.Net; +using System.Net.NetworkInformation; +using System.Net.Sockets; +using System.Runtime.InteropServices; +using System.Runtime.Serialization; +using System.Security.AccessControl; +using System.Security.Principal; +using System.ServiceProcess; +using System.Text; +using Newtonsoft.Json; + +/* + * Windows Service, part of the Outline Windows client, to configure routing. + * Modifying the system routes requires admin permissions, so this service must be installed + * and started as admin. + * + * The service listens on a named pipe and supports the following JSON API: + * + * Requests + * + * configureRouting: Modifies the system's routing table to route all traffic through the TAP device + * except that destined for proxyIp. Disables IPv6 traffic. + * { action: "configureRouting", parameters: {"proxyIp": , "isAutoConnect": "false" }} + * + * resetRouting: Restores the system's default routing. + * { action: "resetRouting"} + * + * Response + * + * { statusCode: , action: errorMessage?: } + * + * The service will send connection status updates if the pipe connection is kept + * open by the client. Such responses have the form: + * + * { statusCode: , action: "statusChanged", connectionStatus: } + * + * View logs with this PowerShell query: + * get-eventlog -logname Application -source OutlineService -newest 20 | format-table -property timegenerated,entrytype,message -autosize + */ +namespace OutlineService +{ + public partial class OutlineService : ServiceBase + { + private const string EVENT_LOG_SOURCE = "OutlineService"; + private const string EVENT_LOG_NAME = "Application"; + // Must be kept in sync with the Electron code. + private const string PIPE_NAME = "OutlineServicePipe"; + private const string TAP_DEVICE_NAME = "outline-tap0"; + private const string TAP_DEVICE_IP = "10.0.85.1"; + + private const string ACTION_CONFIGURE_ROUTING = "configureRouting"; + private const string ACTION_RESET_ROUTING = "resetRouting"; + private const string ACTION_STATUS_CHANGED = "statusChanged"; + private const string PARAM_PROXY_IP = "proxyIp"; + private const string PARAM_AUTO_CONNECT = "isAutoConnect"; + + private static string[] IPV4_SUBNETS = { "0.0.0.0/1", "128.0.0.0/1" }; + private static string[] IPV6_SUBNETS = { "fc00::/7", "2000::/4", "3000::/4" }; + private static string[] IPV4_RESERVED_SUBNETS = { + "0.0.0.0/8", + "10.0.0.0/8", + "100.64.0.0/10", + "169.254.0.0/16", + "172.16.0.0/12", + "192.0.0.0/24", + "192.0.2.0/24", + "192.31.196.0/24", + "192.52.193.0/24", + "192.88.99.0/24", + "192.168.0.0/16", + "192.175.48.0/24", + "198.18.0.0/15", + "198.51.100.0/24", + "203.0.113.0/24", + "240.0.0.0/4" + }; + private const string CMD_NETSH = "netsh"; + private const string CMD_ROUTE = "route"; + + private const uint BUFFER_SIZE_BYTES = 1024; + + private EventLog eventLog; + private NamedPipeServerStream pipe; + private string proxyIp; + private string gatewayIp; + private int gatewayInterfaceIndex; + + // Time, in ms, to wait until considering smartdnsblock.exe to have successfully launched. + private const int SMART_DNS_BLOCK_TIMEOUT_MS = 1000; + + // https://docs.microsoft.com/en-us/windows/desktop/api/ipmib/ns-ipmib-_mib_ipforwardrow + [StructLayout(LayoutKind.Sequential)] + internal class MIB_IPFORWARDROW + { + internal uint dwForwardDest; + internal uint dwForwardMask; + internal uint dwForwardPolicy; + internal uint dwForwardNextHop; + internal int dwForwardIfIndex; + internal uint dwForwardType; + internal uint dwForwardProto; + internal uint dwForwardAge; + internal uint dwForwardNextHopAS; + internal uint dwForwardMetric1; + internal uint dwForwardMetric2; + internal uint dwForwardMetric3; + internal uint dwForwardMetric4; + internal uint dwForwardMetric5; + } + + // https://docs.microsoft.com/en-us/windows/desktop/api/ipmib/ns-ipmib-_mib_ipforwardtable + // + // NOTE: Because of the variable-length array, Marshal.PtrToStructure + // will *not* populate the table field. Additionally, we have seen + // crashes following suspend/resume while trying to marshal this + // structure. See #GetSystemIpv4Gateway for more on this, as well + // as for how to traverse the table. + [StructLayout(LayoutKind.Sequential)] + internal class MIB_IPFORWARDTABLE + { + internal uint dwNumEntries; + internal MIB_IPFORWARDROW[] table; + }; + + // https://docs.microsoft.com/en-us/windows/desktop/api/iphlpapi/nf-iphlpapi-getipforwardtable + [DllImport("iphlpapi", CharSet = CharSet.Auto)] + private extern static int GetIpForwardTable(IntPtr pIpForwardTable, ref int pdwSize, bool bOrder); + + // https://docs.microsoft.com/en-us/windows/desktop/debug/system-error-codes--0-499- + private static int ERROR_INSUFFICIENT_BUFFER = 122; + + // Do as little as possible here because any error thrown will cause "net start" to fail + // without anything being added to the application log. + public OutlineService() + { + InitializeComponent(); + + eventLog = new EventLog(); + if (!EventLog.SourceExists(EVENT_LOG_SOURCE)) + { + EventLog.CreateEventSource(EVENT_LOG_SOURCE, EVENT_LOG_NAME); + } + eventLog.Source = EVENT_LOG_SOURCE; + eventLog.Log = EVENT_LOG_NAME; + } + + protected override void OnStart(string[] args) + { + eventLog.WriteEntry("OutlineService starting"); + NetworkChange.NetworkAddressChanged += + new NetworkAddressChangedEventHandler(NetworkAddressChanged); + CreatePipe(); + } + + protected override void OnStop() + { + eventLog.WriteEntry("OutlineService stopping"); + DestroyPipe(); + NetworkChange.NetworkAddressChanged -= NetworkAddressChanged; + } + + private void CreatePipe() + { + var pipeSecurity = new PipeSecurity(); + pipeSecurity.AddAccessRule(new PipeAccessRule(new SecurityIdentifier( + WellKnownSidType.CreatorOwnerSid, null), + PipeAccessRights.FullControl, AccessControlType.Allow)); + pipeSecurity.AddAccessRule(new PipeAccessRule(new SecurityIdentifier( + WellKnownSidType.AuthenticatedUserSid, null), + PipeAccessRights.ReadWrite, AccessControlType.Allow)); + + pipe = new NamedPipeServerStream(PIPE_NAME, PipeDirection.InOut, -1, PipeTransmissionMode.Message, + PipeOptions.Asynchronous, (int)BUFFER_SIZE_BYTES, (int)BUFFER_SIZE_BYTES, pipeSecurity); + pipe.BeginWaitForConnection(HandleConnection, null); + } + + private void DestroyPipe() + { + if (pipe == null) + { + return; + } + try + { + if (pipe.IsConnected) + { + pipe.Disconnect(); + } + pipe.Close(); + pipe = null; + } + catch (Exception e) + { + eventLog.WriteEntry($"Got an exception while destroying the pipe: {e.ToString()}", + EventLogEntryType.Warning); + } + } + + private void HandleConnection(IAsyncResult result) + { + eventLog.WriteEntry("Got incoming connection"); + + // Save the network config before we do anything. If the request fails + // it will be sent to the client for inclusion in Sentry reports. + var beforeNetworkInfo = GetNetworkInfo(); + + try + { + pipe.EndWaitForConnection(result); + // Keep the pipe connected to send connection status updates. + while (pipe.IsConnected) + { + ServiceResponse response = new ServiceResponse(); + var request = ReadRequest(); + if (request == null) + { + response.statusCode = (int)ErrorCode.GenericFailure; + } + else + { + response.action = request.action; + try + { + HandleRequest(request); + } + catch (Exception e) + { + response.statusCode = (int)ErrorCode.GenericFailure; + response.errorMessage = $"{e.Message} (network config: {beforeNetworkInfo})"; + eventLog.WriteEntry($"request failed: {e.Message}", EventLogEntryType.Error); + } + } + WriteResponse(response); + } + } + catch (Exception e) + { + eventLog.WriteEntry($"Failed to handle connection: {e.ToString()}", EventLogEntryType.Error); + } + finally + { + // Pipe streams are one-to-one connections. Recreate the pipe to handle subsequent requests. + DestroyPipe(); + CreatePipe(); + } + } + + private ServiceRequest ReadRequest() + { + var stringBuilder = new StringBuilder(); + var buffer = new byte[BUFFER_SIZE_BYTES]; + var memoryStream = new MemoryStream(); + do + { + var readBytes = pipe.Read(buffer, 0, buffer.Length); + memoryStream.Write(buffer, 0, readBytes); + } while (!pipe.IsMessageComplete); + var msg = Encoding.UTF8.GetString(buffer); + if (String.IsNullOrWhiteSpace(msg)) + { + eventLog.WriteEntry("Failed to read request", EventLogEntryType.Error); + return null; + } + eventLog.WriteEntry($"incoming message: {msg}"); + return ParseRequest(msg); + } + + private ServiceRequest ParseRequest(string jsonRequest) + { + try + { + return JsonConvert.DeserializeObject(jsonRequest); + } + catch (Exception e) + { + eventLog.WriteEntry($"Failed to parse request: {e.ToString()}"); + } + return null; + } + + private void WriteResponse(ServiceResponse response) + { + var jsonResponse = SerializeResponse(response); + if (jsonResponse == null) + { + eventLog.WriteEntry("Failed to serialize response.", EventLogEntryType.Error); + return; + } + eventLog.WriteEntry($"outgoing message: {jsonResponse}"); + var jsonResponseBytes = Encoding.UTF8.GetBytes(jsonResponse); + pipe.Write(jsonResponseBytes, 0, jsonResponseBytes.Length); + pipe.Flush(); + pipe.WaitForPipeDrain(); + } + + private string SerializeResponse(ServiceResponse response) + { + try + { + return JsonConvert.SerializeObject(response); + } + catch (Exception e) + { + eventLog.WriteEntry($"Failed to serialize response: {e.ToString()}"); + } + return null; + } + + private void HandleRequest(ServiceRequest request) + { + switch (request.action) + { + case ACTION_CONFIGURE_ROUTING: + ConfigureRouting(request.parameters[PARAM_PROXY_IP], Boolean.Parse(request.parameters[PARAM_AUTO_CONNECT])); + break; + case ACTION_RESET_ROUTING: + ResetRouting(proxyIp, gatewayInterfaceIndex); + break; + default: + eventLog.WriteEntry($"Received invalid request: {request.action}", EventLogEntryType.Error); + break; + } + } + + // Routes all traffic *except that destined for the proxy server* + // through the TAP device, creating the illusion of a system-wide VPN. + // + // The two key steps are: + // - Route all IPv4 traffic through the TAP device. + // - Find a gateway and route traffic *to the proxy server only* (a /32 + // mask) through it. + // + // Finding a gateway, in particular, is complex: for more on how it + // works, see #GetSystemIpv4Gateway. + // + // On top of this foundation, we take some steps to help prevent + // "leaking" traffic: + // - IPv6 traffic is "blocked", as Outline does not currently support + // servers on IPv6 addresses. + // - "Smart Multi-Homed Name Resolution" is disabled, as it can cause + // the system's "regular" - and potentially filtered - DNS servers to + // be used (particularly on Windows 10). + // + // Preventing leaks significantly complicates things. In particular, *if + // autostart is true and a gateway cannot be found then the IPv4 + // redirect and IPv6 block remain in place and no exception is thrown*. + // When a gateway re-appears following a network change (see + // #NetworkAddressChanged), we will reconnect. + // + // Lastly, a set of routes is added through the gateway *to non-routable + // ("LAN") addresses*. This allows common hardware such as Chromecast to + // function while Outline is active. + // + // Note: + // - Currently, this function does not "clean up" in the event of + // failure. Instead, we rely on the client to call ResetRouting + // following a connection failure. + // - There's limited protection against "nested connections", i.e. + // connecting to Outline while another VPN, e.g. OpenVPN, is already + // active. There's no simple API we can use to tell whether a VPN is + // already active and *given the difficulty in identifying this + // reliably* (multiple active network interfaces, for example, are + // very common, e.g. it happens - briefly - every time a user + // switches between a wired and wireless network) we err on the side + // of working. Since the user presumably knows whether another VPN is + // already active and *we make no persistent changes to the routing + // table* this seems reasonable. + // + // TODO: The client needs to handle certain autoconnect failures better, + // e.g. if IPv4 redirect fails then the client is not really in + // the reconnecting state; the system is leaking traffic. + public void ConfigureRouting(string proxyIp, bool isAutoConnect) + { + try + { + StartSmartDnsBlock(); + eventLog.WriteEntry($"started smartdnsblock"); + } + catch (Exception e) + { + throw new Exception($"could not start smartdnsblock: {e.Message}"); + } + + try + { + GetSystemIpv4Gateway(proxyIp); + + eventLog.WriteEntry($"connecting via gateway at {gatewayIp} on interface {gatewayInterfaceIndex}"); + + // Set the proxy escape route first to prevent a routing loop when capturing all IPv4 traffic. + try + { + AddOrUpdateProxyRoute(proxyIp, gatewayIp, gatewayInterfaceIndex); + eventLog.WriteEntry($"created route to proxy"); + } + catch (Exception e) + { + throw new Exception($"could not create route to proxy: {e.Message}"); + } + this.proxyIp = proxyIp; + + try + { + AddOrUpdateReservedSubnetBypass(gatewayIp, gatewayInterfaceIndex); + eventLog.WriteEntry($"created LAN bypass routes"); + } + catch (Exception e) + { + throw new Exception($"could not create LAN bypass routes: {e.Message}"); + } + } + catch (Exception e) when (isAutoConnect) + { + eventLog.WriteEntry($"could not reconnect during auto-connect: {e.Message}", EventLogEntryType.Warning); + } + + try + { + StopRoutingIpv6(); + eventLog.WriteEntry($"blocked IPv6 traffic"); + } + catch (Exception e) + { + throw new Exception($"could not block IPv6 traffic: {e.Message}"); + } + + try + { + AddIpv4TapRedirect(); + eventLog.WriteEntry($"redirected IPv4 traffic"); + } + catch (Exception e) + { + throw new Exception($"could not redirect IPv4 traffic: {e.Message}"); + } + } + + // Undoes and removes as many as possible of the routes and other + // changes to the system previously made by #ConfigureRouting. + // + // As per #ConfigureRouting, this function is largely idempodent: + // calling it multiple times in succession should be safe and result in + // the same system configuration. + // + // Notes: + // - *This function does not set any error code when any step fails*. + // It probably should, as the system may in some rare cases still be + // connected (or, worse but less likely, bricked). + // - If the service does not know the IP address of the proxy server + // then it *cannot remove that route*. This can happen if the service + // is restarted while Outline is connected *or* (more likely) if this + // function is called while Outline is not connected. This route is + // mostly harmless because it only affects traffic to the proxy and + // if/when the user reconnects to it the route will be updated. + public void ResetRouting(string proxyIp, int gatewayInterfaceIndex) + { + try + { + RemoveIpv4TapRedirect(); + eventLog.WriteEntry($"removed IPv4 redirect"); + } + catch (Exception e) + { + eventLog.WriteEntry($"failed to remove IPv4 redirect: {e.Message}", EventLogEntryType.Error); + } + + try + { + // This is only necessary when disconecting without network connectivity. + StartRoutingIpv4(); + } + catch (Exception) {} + + try + { + StartRoutingIpv6(); + eventLog.WriteEntry($"unblocked IPv6"); + } + catch (Exception e) + { + eventLog.WriteEntry($"failed to unblock IPv6: {e.Message}", EventLogEntryType.Error); + } + + if (proxyIp != null) + { + try + { + DeleteProxyRoute(proxyIp); + eventLog.WriteEntry($"deleted route to proxy"); + } + catch (Exception e) + { + eventLog.WriteEntry($"failed to delete route to proxy: {e.Message}", EventLogEntryType.Error); + } + this.proxyIp = null; + } + + try + { + RemoveReservedSubnetBypass(); + eventLog.WriteEntry($"deleted LAN bypass routes"); + } + catch (Exception e) + { + eventLog.WriteEntry($"failed to delete LAN bypass routes: {e.Message}", EventLogEntryType.Error); + } + this.gatewayIp = null; + + try + { + StopSmartDnsBlock(); + eventLog.WriteEntry($"stopped smartdnsblock"); + } + catch (Exception e) + { + eventLog.WriteEntry($"failed to stop smartdnsblock: {e.Message}", + EventLogEntryType.Warning); + } + } + + // Disable "Smart Multi-Homed Name Resolution", to ensure the system uses only the + // (non-filtered) DNS server(s) associated with the TAP device. + // + // Notes: + // - To show the current firewall rules: + // netsh wfp show filters + // - This website is an easy way to quickly verify there are no DNS leaks: + // https://ipleak.net/ + // - Because .Net provides *no way* to associate the new process with this one, the + // new process will continue to run even if this service is interrupted or crashes. + // Fortunately, since the changes it makes are *not* persistent, the system can, in + // the worst case, be fixed by rebooting. + private void StartSmartDnsBlock() + { + // smartdnsblock.exe must be a sibling of OutlineService.exe. + Process smartDnsBlock = new Process(); + smartDnsBlock.StartInfo.FileName = new DirectoryInfo(Process.GetCurrentProcess().MainModule.FileName).Parent.FullName + + Path.DirectorySeparatorChar + "smartdnsblock.exe"; + smartDnsBlock.StartInfo.UseShellExecute = false; + + smartDnsBlock.StartInfo.RedirectStandardError = true; + smartDnsBlock.StartInfo.RedirectStandardOutput = true; + + // This is for Windows 7: without it, the process exits immediately, presumably + // because stdin isn't connected to anything: + // https://github.com/Jigsaw-Code/outline-client/issues/415 + // + // This seems to make no difference on Windows 8 and 10. + smartDnsBlock.StartInfo.RedirectStandardInput = true; + + ArrayList stdout = new ArrayList(); + ArrayList stderr = new ArrayList(); + smartDnsBlock.OutputDataReceived += (object sender, DataReceivedEventArgs e) => + { + if (!String.IsNullOrEmpty(e.Data)) + { + stdout.Add(e.Data); + } + }; + smartDnsBlock.ErrorDataReceived += (object sender, DataReceivedEventArgs e) => + { + if (!String.IsNullOrEmpty(e.Data)) + { + stderr.Add(e.Data); + } + }; + + try + { + smartDnsBlock.Start(); + smartDnsBlock.BeginOutputReadLine(); + smartDnsBlock.BeginErrorReadLine(); + } + catch (Exception e) + { + throw new Exception($"could not launch smartdnsblock at {smartDnsBlock.StartInfo.FileName}: { e.Message}"); + } + + // This does *not* throw if the process is still running after Nms. + smartDnsBlock.WaitForExit(SMART_DNS_BLOCK_TIMEOUT_MS); + if (smartDnsBlock.HasExited) + { + throw new Exception($"smartdnsblock failed " + $"(stdout: {String.Join(Environment.NewLine, stdout.ToArray())}, " + + $"(stderr: {String.Join(Environment.NewLine, stderr.ToArray())})"); + } + } + + private void StopSmartDnsBlock() + { + try + { + RunCommand("powershell", "stop-process -name smartdnsblock"); + } + catch (Exception e) + { + throw new Exception($"could not stop smartdnsblock: {e.Message}"); + } + } + + private void AddOrUpdateProxyRoute(string proxyIp, string gatewayIp, int gatewayInterfaceIndex) + { + // "netsh interface ipv4 set route" does *not* work for us here + // because it can only be used to change a route's *metric*. + try + { + RunCommand(CMD_ROUTE, $"change {proxyIp} {gatewayIp} if {gatewayInterfaceIndex}"); + } + catch (Exception) + { + RunCommand(CMD_NETSH, $"interface ipv4 add route {proxyIp}/32 nexthop={gatewayIp} interface=\"{gatewayInterfaceIndex}\" metric=0 store=active"); + } + } + + private void DeleteProxyRoute(string proxyIp) + { + // "route" doesn't need to know on which interface or through which + // gateway the route was created. + RunCommand(CMD_ROUTE, $"delete {proxyIp}"); + } + + // Route IPv4 traffic through the TAP device. Instead of deleting the + // default IPv4 gateway (0.0.0.0/0), we resort to creating two more + // specific routes (see IPV4_SUBNETS) that take precedence over the + // default gateway. This way, we need not worry about the default + // gateway being recreated with a lower metric upon device sleep. + // + // This 'hack' was inspired by OpenVPN; see: + // https://github.com/OpenVPN/openvpn3/commit/d08cc059e7132a3d3aee3dcd946fce4c35b1ced3#diff-1d76f0fd7ec04c6d1398288214a879c5R358 + // + // TODO: If these routes exist on a gateway that's not our TAP device, + // it might be a good signal that OpenVPN is active? + private void AddIpv4TapRedirect() + { + foreach (string subnet in IPV4_SUBNETS) + { + try + { + RunCommand(CMD_NETSH, $"interface ipv4 add route {subnet} nexthop={TAP_DEVICE_IP} interface={TAP_DEVICE_NAME} metric=0 store=active"); + } + catch (Exception) + { + RunCommand(CMD_NETSH, $"interface ipv4 set route {subnet} nexthop={TAP_DEVICE_IP} interface={TAP_DEVICE_NAME} metric=0 store=active"); + } + } + } + + private void RemoveIpv4TapRedirect() + { + foreach (string subnet in IPV4_SUBNETS) + { + RunCommand(CMD_NETSH, $"interface ipv4 delete route {subnet} interface={TAP_DEVICE_NAME}"); + } + } + + private void StartRoutingIpv4() + { + foreach (string subnet in IPV4_SUBNETS) + { + RunCommand(CMD_NETSH, $"interface ipv4 delete route {subnet} interface={NetworkInterface.LoopbackInterfaceIndex}"); + } + } + + private void StopRoutingIpv4() + { + foreach (string subnet in IPV4_SUBNETS) + { + try + { + RunCommand(CMD_NETSH, $"interface ipv4 add route {subnet} interface={NetworkInterface.LoopbackInterfaceIndex} metric=0 store=active"); + } + catch (Exception) + { + RunCommand(CMD_NETSH, $"interface ipv4 set route {subnet} interface={NetworkInterface.LoopbackInterfaceIndex} metric=0 store=active"); + } + } + } + + private void StartRoutingIpv6() + { + foreach (string subnet in IPV6_SUBNETS) + { + RunCommand(CMD_NETSH, $"interface ipv6 delete route {subnet} interface={NetworkInterface.IPv6LoopbackInterfaceIndex}"); + } + } + + // Outline does not currently support IPv6, so we resort to disabling it while the VPN is active to + // prevent leakage. Removing the default IPv6 gateway is not enough since it gets re-created + // through router advertisements and DHCP (disabling these or IPv6 routing altogether requires a + // system reboot). Thus, we resort to creating three IPv6 routes (see IPV6_SUBNETS) to the loopback + // interface that are more specific than the default route, causing IPv6 traffic to get dropped. + private void StopRoutingIpv6() + { + foreach (string subnet in IPV6_SUBNETS) + { + try + { + RunCommand(CMD_NETSH, $"interface ipv6 add route {subnet} interface={NetworkInterface.IPv6LoopbackInterfaceIndex} metric=0 store=active"); + } + catch (Exception) + { + RunCommand(CMD_NETSH, $"interface ipv6 set route {subnet} interface={NetworkInterface.IPv6LoopbackInterfaceIndex} metric=0 store=active"); + } + } + } + + // Routes reserved and private subnets through the default gateway so they bypass the VPN. + private void AddOrUpdateReservedSubnetBypass(string gatewayIp, int gatewayInterfaceIndex) + { + foreach (string subnet in IPV4_RESERVED_SUBNETS) + { + try + { + RunCommand(CMD_ROUTE, $"change {subnet} {gatewayIp} if {gatewayInterfaceIndex}"); + } + catch (Exception) + { + RunCommand(CMD_NETSH, $"interface ipv4 add route {subnet} nexthop={gatewayIp} interface=\"{gatewayInterfaceIndex}\" metric=0 store=active"); + } + } + } + + // Removes reserved subnet routes created to bypass the VPN. + private void RemoveReservedSubnetBypass() + { + foreach (string subnet in IPV4_RESERVED_SUBNETS) + { + RunCommand(CMD_ROUTE, $"delete {subnet}"); + } + } + + // Runs a shell command synchronously. + private void RunCommand(string cmd, string args) + { + Console.WriteLine($"running command: {cmd} {args}"); + + var startInfo = new ProcessStartInfo(cmd); + startInfo.Arguments = args; + startInfo.UseShellExecute = false; + startInfo.RedirectStandardError = true; + startInfo.RedirectStandardOutput = true; + startInfo.CreateNoWindow = true; + + Process p = new Process(); + var stdout = new StringBuilder(); + var stderr = new StringBuilder(); + p.OutputDataReceived += (object sender, DataReceivedEventArgs e) => + { + if (e == null || String.IsNullOrWhiteSpace(e.Data)) + { + return; + } + stdout.Append(e.Data); + }; + p.ErrorDataReceived += (object sender, DataReceivedEventArgs e) => + { + if (e == null || String.IsNullOrWhiteSpace(e.Data)) + { + return; + } + stderr.Append(e.Data); + }; + p.StartInfo = startInfo; + p.Start(); + p.BeginOutputReadLine(); + p.BeginErrorReadLine(); + p.WaitForExit(); + + // "route" is weird and always exits with zero: we have to examine + // stderr to detect its errors. + if (p.ExitCode != 0 || stderr.ToString().Length > 0) + { + // NOTE: Do *not* add args to this error message because it's piped + // back to the client for inclusion in Sentry reports and + // effectively contain access keys. + throw new Exception($"command exited with {p.ExitCode} " + + $"(stdout: {stdout.ToString()}, stderr: {stderr.ToString()})"); + } + } + + // Searches the system's routing table for the best route to the + // specified IP address *that does not route through the TAP device*. + // + // That last requirement - ignoring the TAP device - is what prevents us + // from simply calling GetBestRoute: other than that, it does all the + // work of finding the lowest-weighted gateway to the destination IP. + // + // NOTE: This function does not *always* find the best gateway: it + // currently only considers "default" gateways (0.0.0.0) which may not + // work in some rare cases. Several re-implementations of the Windows + // API illustrate how we could more closely match GetBestRoute: + // - https://github.com/wine-mirror/wine/blob/master/dlls/iphlpapi/iphlpapi_main.c + // - https://github.com/reactos/reactos/blob/master/dll/win32/iphlpapi/iphlpapi_main.c + private void GetSystemIpv4Gateway(string proxyIp) + { + gatewayIp = null; + gatewayInterfaceIndex = -1; + + int tapInterfaceIndex; + try + { + tapInterfaceIndex = NetworkInterface.GetAllNetworkInterfaces() + .Where(i => i.Name == TAP_DEVICE_NAME) + .FirstOrDefault() + .GetIPProperties() + .GetIPv4Properties().Index; + } + catch (Exception) + { + throw new Exception("TAP device not found"); + } + + // Some marshalling craziness follows: we have to first ask + // GetIpForwardTable how much memory is required to hold the routing + // table before calling it again to actually return us the table; + // once we have the table, we have to iterate over the rows + // (thankfully, MIB_IPFORWARDROW marshalls easily). + int bufferSize = 0; + if (GetIpForwardTable(IntPtr.Zero, ref bufferSize, true) != ERROR_INSUFFICIENT_BUFFER) + { + throw new Exception("could not fetch routing table"); + } + var buffer = Marshal.AllocHGlobal(bufferSize); + if (GetIpForwardTable(buffer, ref bufferSize, true) != 0) + { + Marshal.FreeHGlobal(buffer); + throw new Exception("could not fetch routing table"); + } + + // NOTE: We deliberately *do not marshal the entire + // MIB_IPFORWARDTABLE* owing to unexplained crashes following + // suspend/resume. Fortunately, since that structure is + // logically just a DWORD followed by an array, this entails + // little extra work. + var numEntries = Marshal.ReadInt32(buffer); + MIB_IPFORWARDROW bestRow = null; + var rowPtr = buffer + Marshal.SizeOf(numEntries); + for (int i = 0; i < numEntries; i++) + { + MIB_IPFORWARDROW row = (MIB_IPFORWARDROW)Marshal.PtrToStructure(rowPtr, typeof(MIB_IPFORWARDROW)); + + // Must be a gateway (see note above on how we can improve this). + if (row.dwForwardDest != 0) + { + continue; + } + + // Must not be the TAP device. + if (row.dwForwardIfIndex == tapInterfaceIndex) + { + continue; + } + + if (bestRow == null || row.dwForwardMetric1 < bestRow.dwForwardMetric1) + { + bestRow = row; + } + + rowPtr += Marshal.SizeOf(typeof(MIB_IPFORWARDROW)); + } + + Marshal.FreeHGlobal(buffer); + + if (bestRow == null) + { + throw new Exception("no gateway found"); + } + + gatewayIp = new IPAddress(BitConverter.GetBytes(bestRow.dwForwardNextHop)).ToString(); + gatewayInterfaceIndex = bestRow.dwForwardIfIndex; + } + + // Updates, if Outline is connected, the routing table to reflect a new + // gateway. + // + // There's really just one thing to do when the gateway changes: update + // the (direct) route to the proxy server to route through the new + // gateway. If there is no gateway, e.g. because the system has lost + // network connectivity, notify the client and keep the IPv4 redirect + // and IPv6 block in place: this helps prevent leaking traffic. + // + // Notes: + // - *This function must not throw*. If it does, the handler is unset. + // - This function also updates two further sets of routes: the LAN + // bypass routes (which must route through the gateway) and the IPv4 + // redirect routes (which "fall back" to the system gateway once the + // TAP device temporarily disappears due to tun2socks' exit). + // - The NetworkChange.NetworkAddressChanged callback is *extremely + // noisy*. In particular, it seems to be called twice for every + // change to the routing table. There does not seem to be any useful + // information in the supplied EventArgs. This is partly why we don't + // touch the routing table unless the gateway has actually changed. + // - This function may be called while #ConfigureRouting is still + // running. This is partly why we exit early (at the top) if we don't + // think Outline is connected. + private void NetworkAddressChanged(object sender, EventArgs evt) + { + if (proxyIp == null) + { + eventLog.WriteEntry("network changed but Outline is not connected - doing nothing"); + return; + } + + var previousGatewayIp = gatewayIp; + var previousGatewayInterfaceIndex = gatewayInterfaceIndex; + + try + { + GetSystemIpv4Gateway(proxyIp); + } + catch (Exception e) + { + eventLog.WriteEntry($"network changed but no gateway found: {e.Message}"); + } + + if (previousGatewayIp == gatewayIp && previousGatewayInterfaceIndex == gatewayInterfaceIndex) + { + // Only send on actual change, to prevent duplicate notifications (mostly + // harmless but can make debugging harder). + eventLog.WriteEntry($"network changed but gateway and interface stayed the same"); + return; + } + else if (gatewayIp == null) + { + SendConnectionStatusChange(ConnectionStatus.Reconnecting); + + // Stop capturing IPv4 traffic in order to prevent a routing loop in the TAP device. + // Redirect IPv4 traffic to the loopback interface instead to avoid leaking traffic when + // the network becomes available. + try + { + StopRoutingIpv4(); + RemoveIpv4TapRedirect(); + eventLog.WriteEntry($"stopped routing IPv4 traffic"); + } + catch (Exception e) + { + eventLog.WriteEntry($"failed to stop routing IPv4: {e.Message}", EventLogEntryType.Error); + } + return; + } + + eventLog.WriteEntry($"network changed - gateway is now {gatewayIp} on interface {gatewayInterfaceIndex}"); + + // Add the proxy escape route before capturing IPv4 traffic to prevent a routing loop in the TAP device. + try + { + AddOrUpdateProxyRoute(proxyIp, gatewayIp, gatewayInterfaceIndex); + eventLog.WriteEntry($"updated route to proxy"); + } + catch (Exception e) + { + eventLog.WriteEntry($"could not update route to proxy: {e.Message}"); + return; + } + + try + { + AddIpv4TapRedirect(); + StartRoutingIpv4(); + eventLog.WriteEntry($"refreshed IPv4 redirect"); + } + catch (Exception e) + { + eventLog.WriteEntry($"could not refresh IPv4 redirect: {e.Message}"); + return; + } + + // Send the status update now that the full-system VPN is connected. + SendConnectionStatusChange(ConnectionStatus.Connected); + + try + { + AddOrUpdateReservedSubnetBypass(gatewayIp, gatewayInterfaceIndex); + eventLog.WriteEntry($"updated LAN bypass routes"); + } + catch (Exception e) + { + // TODO: This isn't quite right: because we successfully updated + // the route to the proxy, the client *is* connected; it's + // just not "fully" connected, in the way we like. We + // should distinguish between "cannot reconnect right now, + // because no internet" and "cannot reconnect because + // netsh commands are failing". + eventLog.WriteEntry($"could not update LAN bypass routes: {e.Message}"); + return; + } + } + + // Writes the connection status to the pipe, if it is connected. + private void SendConnectionStatusChange(ConnectionStatus status) + { + if (pipe == null || !pipe.IsConnected) + { + eventLog.WriteEntry("Cannot send connection status change, pipe not connected.", EventLogEntryType.Error); + return; + } + ServiceResponse response = new ServiceResponse(); + response.action = ACTION_STATUS_CHANGED; + response.statusCode = (int)ErrorCode.Success; + response.connectionStatus = (int)status; + try + { + WriteResponse(response); + } + catch (Exception e) + { + eventLog.WriteEntry($"Failed to send connection status change: {e.Message}"); + } + } + + public string GetNetworkInfo() + { + return String.Join(", ", NetworkInterface.GetAllNetworkInterfaces() + .Select(a => this.GetAdapterInfo(a))); + } + + private string GetAdapterInfo(NetworkInterface adapter) + { + var numIpv4Gateways = adapter.GetIPProperties().GatewayAddresses + .Select(g => g.Address) + .Where(a => a.AddressFamily == AddressFamily.InterNetwork) + .Count(); + var numIpv6Gateways = adapter.GetIPProperties().GatewayAddresses + .Select(g => g.Address) + .Where(a => a.AddressFamily == AddressFamily.InterNetworkV6) + .Count(); + + return $"{adapter.Name} ({adapter.OperationalStatus}): " + ( + adapter.Supports(NetworkInterfaceComponent.IPv4) ? + $"{numIpv4Gateways} x ipv4 gateways" : + "ipv4 disabled") + ", " + ( + adapter.Supports(NetworkInterfaceComponent.IPv6) ? + $"{numIpv6Gateways} x ipv6 gateways" : + "ipv6 disabled"); + } + } + + [DataContract] + internal class ServiceRequest + { + [DataMember] + internal string action; + [DataMember] + internal Dictionary parameters; + } + + [DataContract] + internal class ServiceResponse + { + [DataMember] + internal string action; + [DataMember] + internal int statusCode; + [DataMember] + internal string errorMessage; + [DataMember] + internal int connectionStatus; + } + + public enum ErrorCode + { + Success = 0, + GenericFailure = 1 + } + + public enum ConnectionStatus + { + Connected = 0, + Disconnected = 1, + Reconnecting = 2 + } +} diff --git a/tools/OutlineService/OutlineService/OutlineService.csproj b/outline_client/tools/OutlineService/OutlineService/OutlineService.csproj similarity index 97% rename from tools/OutlineService/OutlineService/OutlineService.csproj rename to outline_client/tools/OutlineService/OutlineService/OutlineService.csproj index 7a8947f723..4fac6eb2ea 100755 --- a/tools/OutlineService/OutlineService/OutlineService.csproj +++ b/outline_client/tools/OutlineService/OutlineService/OutlineService.csproj @@ -1,92 +1,92 @@ - - - - - Debug - AnyCPU - {F39A4491-9868-4A71-9BE1-980FADE10AC9} - WinExe - OutlineService - OutlineService - v4.6.1 - 512 - true - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x86\Debug\ - DEBUG;TRACE - full - x86 - prompt - MinimumRecommendedRules.ruleset - true - - - bin\ - TRACE - true - pdbonly - x86 - prompt - MinimumRecommendedRules.ruleset - true - - - - ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - - - - - - - - - - - - - - - Component - - - OutlineService.cs - - - - - - - - - - - OutlineService.cs - - - - - - + + + + + Debug + AnyCPU + {F39A4491-9868-4A71-9BE1-980FADE10AC9} + WinExe + OutlineService + OutlineService + v4.6.1 + 512 + true + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\x86\Debug\ + DEBUG;TRACE + full + x86 + prompt + MinimumRecommendedRules.ruleset + true + + + bin\ + TRACE + true + pdbonly + x86 + prompt + MinimumRecommendedRules.ruleset + true + + + + ..\packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll + + + + + + + + + + + + + + + Component + + + OutlineService.cs + + + + + + + + + + + OutlineService.cs + + + + + + \ No newline at end of file diff --git a/tools/OutlineService/OutlineService/OutlineService.resx b/outline_client/tools/OutlineService/OutlineService/OutlineService.resx similarity index 97% rename from tools/OutlineService/OutlineService/OutlineService.resx rename to outline_client/tools/OutlineService/OutlineService/OutlineService.resx index 1a80cdd6e7..0129fa82a5 100755 --- a/tools/OutlineService/OutlineService/OutlineService.resx +++ b/outline_client/tools/OutlineService/OutlineService/OutlineService.resx @@ -1,123 +1,123 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - False - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + \ No newline at end of file diff --git a/tools/OutlineService/OutlineService/Program.cs b/outline_client/tools/OutlineService/OutlineService/Program.cs similarity index 97% rename from tools/OutlineService/OutlineService/Program.cs rename to outline_client/tools/OutlineService/OutlineService/Program.cs index bb9d7ee7dd..62d8c9b47d 100755 --- a/tools/OutlineService/OutlineService/Program.cs +++ b/outline_client/tools/OutlineService/OutlineService/Program.cs @@ -1,70 +1,70 @@ -// Copyright 2018 The Outline Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -using System; -using System.Collections.Generic; -using System.Linq; -using System.ServiceProcess; -using System.Text; -using System.Threading.Tasks; - -namespace OutlineService -{ - static class Program - { - static void Main(string[] args) - { - if (!Environment.UserInteractive) - { - ServiceBase[] ServicesToRun; - ServicesToRun = new ServiceBase[] { new OutlineService() }; - ServiceBase.Run(ServicesToRun); - } - else - { - var service = new OutlineService(); - // To run as a service from the command-line: - // service.OnStart(null); - // System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); - if (args.Length < 2) - { - ShowUsageAndExit(); - } - switch (args[0]) - { - case "on": - service.ConfigureRouting(args[1], false); - break; - case "off": - if (args.Length < 3) - { - ShowUsageAndExit(); - } - service.ResetRouting(args[1], Int32.Parse(args[2])); - break; - default: - ShowUsageAndExit(); - break; - } - Console.WriteLine($"network config: {service.GetNetworkInfo()}"); - } - } - - static void ShowUsageAndExit() - { - Console.WriteLine("usage: on |off "); - Environment.Exit(1); - } - } -} // namespace OutlineService +// Copyright 2018 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.ServiceProcess; +using System.Text; +using System.Threading.Tasks; + +namespace OutlineService +{ + static class Program + { + static void Main(string[] args) + { + if (!Environment.UserInteractive) + { + ServiceBase[] ServicesToRun; + ServicesToRun = new ServiceBase[] { new OutlineService() }; + ServiceBase.Run(ServicesToRun); + } + else + { + var service = new OutlineService(); + // To run as a service from the command-line: + // service.OnStart(null); + // System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); + if (args.Length < 2) + { + ShowUsageAndExit(); + } + switch (args[0]) + { + case "on": + service.ConfigureRouting(args[1], false); + break; + case "off": + if (args.Length < 3) + { + ShowUsageAndExit(); + } + service.ResetRouting(args[1], Int32.Parse(args[2])); + break; + default: + ShowUsageAndExit(); + break; + } + Console.WriteLine($"network config: {service.GetNetworkInfo()}"); + } + } + + static void ShowUsageAndExit() + { + Console.WriteLine("usage: on |off "); + Environment.Exit(1); + } + } +} // namespace OutlineService diff --git a/tools/OutlineService/OutlineService/Properties/AssemblyInfo.cs b/outline_client/tools/OutlineService/OutlineService/Properties/AssemblyInfo.cs similarity index 97% rename from tools/OutlineService/OutlineService/Properties/AssemblyInfo.cs rename to outline_client/tools/OutlineService/OutlineService/Properties/AssemblyInfo.cs index fc957bac77..20c3e92b6c 100755 --- a/tools/OutlineService/OutlineService/Properties/AssemblyInfo.cs +++ b/outline_client/tools/OutlineService/OutlineService/Properties/AssemblyInfo.cs @@ -1,50 +1,50 @@ -// Copyright 2018 The Outline Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("OutlineService")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("OutlineService")] -[assembly: AssemblyCopyright("Copyright © 2018")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("f39a4491-9868-4a71-9be1-980fade10ac9")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] +// Copyright 2018 The Outline Authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("OutlineService")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("OutlineService")] +[assembly: AssemblyCopyright("Copyright © 2018")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("f39a4491-9868-4a71-9be1-980fade10ac9")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/tools/OutlineService/OutlineService/bin/OutlineService.exe b/outline_client/tools/OutlineService/OutlineService/bin/OutlineService.exe similarity index 100% rename from tools/OutlineService/OutlineService/bin/OutlineService.exe rename to outline_client/tools/OutlineService/OutlineService/bin/OutlineService.exe diff --git a/tools/OutlineService/OutlineService/bin/Release/OutlineService.exe.config b/outline_client/tools/OutlineService/OutlineService/bin/Release/OutlineService.exe.config similarity index 97% rename from tools/OutlineService/OutlineService/bin/Release/OutlineService.exe.config rename to outline_client/tools/OutlineService/OutlineService/bin/Release/OutlineService.exe.config index 6a19d29ee0..c37a182b77 100755 --- a/tools/OutlineService/OutlineService/bin/Release/OutlineService.exe.config +++ b/outline_client/tools/OutlineService/OutlineService/bin/Release/OutlineService.exe.config @@ -1,21 +1,21 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/tools/OutlineService/OutlineService/packages.config b/outline_client/tools/OutlineService/OutlineService/packages.config similarity index 97% rename from tools/OutlineService/OutlineService/packages.config rename to outline_client/tools/OutlineService/OutlineService/packages.config index 27e210f08a..5762754177 100755 --- a/tools/OutlineService/OutlineService/packages.config +++ b/outline_client/tools/OutlineService/OutlineService/packages.config @@ -1,4 +1,4 @@ - - - + + + \ No newline at end of file diff --git a/tools/build/Dockerfile b/outline_client/tools/build/Dockerfile similarity index 100% rename from tools/build/Dockerfile rename to outline_client/tools/build/Dockerfile diff --git a/tools/build/README.md b/outline_client/tools/build/README.md similarity index 100% rename from tools/build/README.md rename to outline_client/tools/build/README.md diff --git a/tools/build/android_tools_versions.sh b/outline_client/tools/build/android_tools_versions.sh similarity index 100% rename from tools/build/android_tools_versions.sh rename to outline_client/tools/build/android_tools_versions.sh diff --git a/tools/build/build.action.sh b/outline_client/tools/build/build.action.sh similarity index 100% rename from tools/build/build.action.sh rename to outline_client/tools/build/build.action.sh diff --git a/tools/build/build.sh b/outline_client/tools/build/build.sh similarity index 100% rename from tools/build/build.sh rename to outline_client/tools/build/build.sh diff --git a/tools/build/setup_linux_android.sh b/outline_client/tools/build/setup_linux_android.sh similarity index 100% rename from tools/build/setup_linux_android.sh rename to outline_client/tools/build/setup_linux_android.sh diff --git a/tools/build/setup_macos_android.sh b/outline_client/tools/build/setup_macos_android.sh similarity index 100% rename from tools/build/setup_macos_android.sh rename to outline_client/tools/build/setup_macos_android.sh diff --git a/tools/find_tap_name/bin/386/find_tap_name.exe b/outline_client/tools/find_tap_name/bin/386/find_tap_name.exe similarity index 100% rename from tools/find_tap_name/bin/386/find_tap_name.exe rename to outline_client/tools/find_tap_name/bin/386/find_tap_name.exe diff --git a/tools/find_tap_name/bin/amd64/find_tap_name.exe b/outline_client/tools/find_tap_name/bin/amd64/find_tap_name.exe similarity index 100% rename from tools/find_tap_name/bin/amd64/find_tap_name.exe rename to outline_client/tools/find_tap_name/bin/amd64/find_tap_name.exe diff --git a/tools/find_tap_name/build.action.sh b/outline_client/tools/find_tap_name/build.action.sh similarity index 100% rename from tools/find_tap_name/build.action.sh rename to outline_client/tools/find_tap_name/build.action.sh diff --git a/tools/find_tap_name/main.go b/outline_client/tools/find_tap_name/main.go similarity index 100% rename from tools/find_tap_name/main.go rename to outline_client/tools/find_tap_name/main.go diff --git a/tools/outline_proxy_controller/.gitignore b/outline_client/tools/outline_proxy_controller/.gitignore similarity index 100% rename from tools/outline_proxy_controller/.gitignore rename to outline_client/tools/outline_proxy_controller/.gitignore diff --git a/tools/outline_proxy_controller/CMakeLists.txt b/outline_client/tools/outline_proxy_controller/CMakeLists.txt similarity index 100% rename from tools/outline_proxy_controller/CMakeLists.txt rename to outline_client/tools/outline_proxy_controller/CMakeLists.txt diff --git a/tools/outline_proxy_controller/Dockerfile b/outline_client/tools/outline_proxy_controller/Dockerfile similarity index 100% rename from tools/outline_proxy_controller/Dockerfile rename to outline_client/tools/outline_proxy_controller/Dockerfile diff --git a/tools/outline_proxy_controller/OutlineProxyControllerConfig.h.in b/outline_client/tools/outline_proxy_controller/OutlineProxyControllerConfig.h.in similarity index 100% rename from tools/outline_proxy_controller/OutlineProxyControllerConfig.h.in rename to outline_client/tools/outline_proxy_controller/OutlineProxyControllerConfig.h.in diff --git a/tools/outline_proxy_controller/README.md b/outline_client/tools/outline_proxy_controller/README.md similarity index 100% rename from tools/outline_proxy_controller/README.md rename to outline_client/tools/outline_proxy_controller/README.md diff --git a/tools/outline_proxy_controller/build.action.sh b/outline_client/tools/outline_proxy_controller/build.action.sh similarity index 100% rename from tools/outline_proxy_controller/build.action.sh rename to outline_client/tools/outline_proxy_controller/build.action.sh diff --git a/tools/outline_proxy_controller/dist/OutlineProxyController b/outline_client/tools/outline_proxy_controller/dist/OutlineProxyController similarity index 100% rename from tools/outline_proxy_controller/dist/OutlineProxyController rename to outline_client/tools/outline_proxy_controller/dist/OutlineProxyController diff --git a/tools/outline_proxy_controller/dist/install_linux_service.sh b/outline_client/tools/outline_proxy_controller/dist/install_linux_service.sh similarity index 100% rename from tools/outline_proxy_controller/dist/install_linux_service.sh rename to outline_client/tools/outline_proxy_controller/dist/install_linux_service.sh diff --git a/tools/outline_proxy_controller/dist/outline_proxy_controller.service b/outline_client/tools/outline_proxy_controller/dist/outline_proxy_controller.service similarity index 100% rename from tools/outline_proxy_controller/dist/outline_proxy_controller.service rename to outline_client/tools/outline_proxy_controller/dist/outline_proxy_controller.service diff --git a/tools/outline_proxy_controller/logger.cpp b/outline_client/tools/outline_proxy_controller/logger.cpp similarity index 100% rename from tools/outline_proxy_controller/logger.cpp rename to outline_client/tools/outline_proxy_controller/logger.cpp diff --git a/tools/outline_proxy_controller/logger.h b/outline_client/tools/outline_proxy_controller/logger.h similarity index 100% rename from tools/outline_proxy_controller/logger.h rename to outline_client/tools/outline_proxy_controller/logger.h diff --git a/tools/outline_proxy_controller/network_monitor.cpp b/outline_client/tools/outline_proxy_controller/network_monitor.cpp similarity index 100% rename from tools/outline_proxy_controller/network_monitor.cpp rename to outline_client/tools/outline_proxy_controller/network_monitor.cpp diff --git a/tools/outline_proxy_controller/network_monitor.h b/outline_client/tools/outline_proxy_controller/network_monitor.h similarity index 100% rename from tools/outline_proxy_controller/network_monitor.h rename to outline_client/tools/outline_proxy_controller/network_monitor.h diff --git a/tools/outline_proxy_controller/outline_controller_server.cpp b/outline_client/tools/outline_proxy_controller/outline_controller_server.cpp similarity index 100% rename from tools/outline_proxy_controller/outline_controller_server.cpp rename to outline_client/tools/outline_proxy_controller/outline_controller_server.cpp diff --git a/tools/outline_proxy_controller/outline_controller_server.h b/outline_client/tools/outline_proxy_controller/outline_controller_server.h similarity index 100% rename from tools/outline_proxy_controller/outline_controller_server.h rename to outline_client/tools/outline_proxy_controller/outline_controller_server.h diff --git a/tools/outline_proxy_controller/outline_daemon.cpp b/outline_client/tools/outline_proxy_controller/outline_daemon.cpp similarity index 100% rename from tools/outline_proxy_controller/outline_daemon.cpp rename to outline_client/tools/outline_proxy_controller/outline_daemon.cpp diff --git a/tools/outline_proxy_controller/outline_error.cpp b/outline_client/tools/outline_proxy_controller/outline_error.cpp similarity index 100% rename from tools/outline_proxy_controller/outline_error.cpp rename to outline_client/tools/outline_proxy_controller/outline_error.cpp diff --git a/tools/outline_proxy_controller/outline_error.h b/outline_client/tools/outline_proxy_controller/outline_error.h similarity index 100% rename from tools/outline_proxy_controller/outline_error.h rename to outline_client/tools/outline_proxy_controller/outline_error.h diff --git a/tools/outline_proxy_controller/outline_proxy_controller.cpp b/outline_client/tools/outline_proxy_controller/outline_proxy_controller.cpp similarity index 100% rename from tools/outline_proxy_controller/outline_proxy_controller.cpp rename to outline_client/tools/outline_proxy_controller/outline_proxy_controller.cpp diff --git a/tools/outline_proxy_controller/outline_proxy_controller.h b/outline_client/tools/outline_proxy_controller/outline_proxy_controller.h similarity index 100% rename from tools/outline_proxy_controller/outline_proxy_controller.h rename to outline_client/tools/outline_proxy_controller/outline_proxy_controller.h diff --git a/tools/smartdnsblock/README.md b/outline_client/tools/smartdnsblock/README.md similarity index 100% rename from tools/smartdnsblock/README.md rename to outline_client/tools/smartdnsblock/README.md diff --git a/tools/smartdnsblock/bin/smartdnsblock.exe b/outline_client/tools/smartdnsblock/bin/smartdnsblock.exe similarity index 100% rename from tools/smartdnsblock/bin/smartdnsblock.exe rename to outline_client/tools/smartdnsblock/bin/smartdnsblock.exe diff --git a/tools/smartdnsblock/smartdnsblock.sln b/outline_client/tools/smartdnsblock/smartdnsblock.sln similarity index 100% rename from tools/smartdnsblock/smartdnsblock.sln rename to outline_client/tools/smartdnsblock/smartdnsblock.sln diff --git a/tools/smartdnsblock/smartdnsblock/smartdnsblock.cpp b/outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.cpp similarity index 100% rename from tools/smartdnsblock/smartdnsblock/smartdnsblock.cpp rename to outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.cpp diff --git a/tools/smartdnsblock/smartdnsblock/smartdnsblock.filters b/outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.filters similarity index 100% rename from tools/smartdnsblock/smartdnsblock/smartdnsblock.filters rename to outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.filters diff --git a/tools/smartdnsblock/smartdnsblock/smartdnsblock.user b/outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.user similarity index 100% rename from tools/smartdnsblock/smartdnsblock/smartdnsblock.user rename to outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.user diff --git a/tools/smartdnsblock/smartdnsblock/smartdnsblock.vcxproj b/outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.vcxproj similarity index 100% rename from tools/smartdnsblock/smartdnsblock/smartdnsblock.vcxproj rename to outline_client/tools/smartdnsblock/smartdnsblock/smartdnsblock.vcxproj diff --git a/tsconfig.json b/outline_client/tsconfig.json similarity index 100% rename from tsconfig.json rename to outline_client/tsconfig.json diff --git a/outline_client/www/6a9a3c1460491e5495ea8899784fc0fe.png b/outline_client/www/6a9a3c1460491e5495ea8899784fc0fe.png new file mode 100644 index 0000000000..35c767c566 Binary files /dev/null and b/outline_client/www/6a9a3c1460491e5495ea8899784fc0fe.png differ diff --git a/outline_client/www/8c59cf2168143c4cc938073f1a28650e.woff2 b/outline_client/www/8c59cf2168143c4cc938073f1a28650e.woff2 new file mode 100644 index 0000000000..561f1fcbfc Binary files /dev/null and b/outline_client/www/8c59cf2168143c4cc938073f1a28650e.woff2 differ diff --git a/outline_client/www/assets/brand-logo.png b/outline_client/www/assets/brand-logo.png new file mode 100644 index 0000000000..b608bba0de Binary files /dev/null and b/outline_client/www/assets/brand-logo.png differ diff --git a/outline_client/www/assets/circle.png b/outline_client/www/assets/circle.png new file mode 100644 index 0000000000..35c767c566 Binary files /dev/null and b/outline_client/www/assets/circle.png differ diff --git a/outline_client/www/assets/icons/about.png b/outline_client/www/assets/icons/about.png new file mode 100644 index 0000000000..b5e2c38bde Binary files /dev/null and b/outline_client/www/assets/icons/about.png differ diff --git a/outline_client/www/assets/icons/add.png b/outline_client/www/assets/icons/add.png new file mode 100644 index 0000000000..1dedaf6530 Binary files /dev/null and b/outline_client/www/assets/icons/add.png differ diff --git a/outline_client/www/assets/icons/back.png b/outline_client/www/assets/icons/back.png new file mode 100644 index 0000000000..54ca096f3c Binary files /dev/null and b/outline_client/www/assets/icons/back.png differ diff --git a/outline_client/www/assets/icons/change_language.png b/outline_client/www/assets/icons/change_language.png new file mode 100644 index 0000000000..3ad885ba12 Binary files /dev/null and b/outline_client/www/assets/icons/change_language.png differ diff --git a/outline_client/www/assets/icons/feedback.png b/outline_client/www/assets/icons/feedback.png new file mode 100644 index 0000000000..3af65e90be Binary files /dev/null and b/outline_client/www/assets/icons/feedback.png differ diff --git a/outline_client/www/assets/icons/help.png b/outline_client/www/assets/icons/help.png new file mode 100644 index 0000000000..f0355df551 Binary files /dev/null and b/outline_client/www/assets/icons/help.png differ diff --git a/outline_client/www/assets/icons/menu.png b/outline_client/www/assets/icons/menu.png new file mode 100644 index 0000000000..6b01874af1 Binary files /dev/null and b/outline_client/www/assets/icons/menu.png differ diff --git a/outline_client/www/assets/icons/outline.png b/outline_client/www/assets/icons/outline.png new file mode 100644 index 0000000000..839790f2eb Binary files /dev/null and b/outline_client/www/assets/icons/outline.png differ diff --git a/outline_client/www/assets/icons/quit.png b/outline_client/www/assets/icons/quit.png new file mode 100644 index 0000000000..febfdf75be Binary files /dev/null and b/outline_client/www/assets/icons/quit.png differ diff --git a/outline_client/www/assets/jigsaw-logo.png b/outline_client/www/assets/jigsaw-logo.png new file mode 100644 index 0000000000..e6b852400c Binary files /dev/null and b/outline_client/www/assets/jigsaw-logo.png differ diff --git a/outline_client/www/assets/jigsaw-logo.svg b/outline_client/www/assets/jigsaw-logo.svg new file mode 100644 index 0000000000..b0a60a2285 --- /dev/null +++ b/outline_client/www/assets/jigsaw-logo.svg @@ -0,0 +1,30 @@ + + + + +Jigsaw +Created with Sketch. + + + + + + + + + + + + diff --git a/outline_client/www/assets/logo-nav.png b/outline_client/www/assets/logo-nav.png new file mode 100644 index 0000000000..fa59c9a510 Binary files /dev/null and b/outline_client/www/assets/logo-nav.png differ diff --git a/outline_client/www/assets/material_icons.woff2 b/outline_client/www/assets/material_icons.woff2 new file mode 100644 index 0000000000..561f1fcbfc Binary files /dev/null and b/outline_client/www/assets/material_icons.woff2 differ diff --git a/outline_client/www/assets/outline-client-logo.png b/outline_client/www/assets/outline-client-logo.png new file mode 100644 index 0000000000..82d2b39046 Binary files /dev/null and b/outline_client/www/assets/outline-client-logo.png differ diff --git a/outline_client/www/assets/outline-client-logo.svg b/outline_client/www/assets/outline-client-logo.svg new file mode 100644 index 0000000000..b211065c72 --- /dev/null +++ b/outline_client/www/assets/outline-client-logo.svg @@ -0,0 +1,34 @@ + + + + +outline-logotype +Created with Sketch. + + + + + + + + + + + + + + + + + diff --git a/outline_client/www/assets/privacy-lock.png b/outline_client/www/assets/privacy-lock.png new file mode 100644 index 0000000000..12c942ec6d Binary files /dev/null and b/outline_client/www/assets/privacy-lock.png differ diff --git a/outline_client/www/index_electron.html b/outline_client/www/index_electron.html new file mode 100644 index 0000000000..64c46e07cf --- /dev/null +++ b/outline_client/www/index_electron.html @@ -0,0 +1,33 @@ + + + + + + + Outline + + + + + + + diff --git a/outline_client/www/main.js b/outline_client/www/main.js new file mode 100644 index 0000000000..1b093541e4 --- /dev/null +++ b/outline_client/www/main.js @@ -0,0 +1,117852 @@ +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/@material/base/foundation.js": +/*!***************************************************!*\ + !*** ./node_modules/@material/base/foundation.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MDCFoundation: () => (/* binding */ MDCFoundation), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission 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: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE 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. + */ +var MDCFoundation = /** @class */ (function () { + function MDCFoundation(adapter) { + if (adapter === void 0) { adapter = {}; } + this.adapter = adapter; + } + Object.defineProperty(MDCFoundation, "cssClasses", { + get: function () { + // Classes extending MDCFoundation should implement this method to return an object which exports every + // CSS class the foundation class needs as a property. e.g. {ACTIVE: 'mdc-component--active'} + return {}; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCFoundation, "strings", { + get: function () { + // Classes extending MDCFoundation should implement this method to return an object which exports all + // semantic strings as constants. e.g. {ARIA_ROLE: 'tablist'} + return {}; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCFoundation, "numbers", { + get: function () { + // Classes extending MDCFoundation should implement this method to return an object which exports all + // of its semantic numbers as constants. e.g. {ANIMATION_DELAY_MS: 350} + return {}; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCFoundation, "defaultAdapter", { + get: function () { + // Classes extending MDCFoundation may choose to implement this getter in order to provide a convenient + // way of viewing the necessary methods of an adapter. In the future, this could also be used for adapter + // validation. + return {}; + }, + enumerable: false, + configurable: true + }); + MDCFoundation.prototype.init = function () { + // Subclasses should override this method to perform initialization routines (registering events, etc.) + }; + MDCFoundation.prototype.destroy = function () { + // Subclasses should override this method to perform de-initialization routines (de-registering events, etc.) + }; + return MDCFoundation; +}()); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MDCFoundation); +//# sourceMappingURL=foundation.js.map + +/***/ }), + +/***/ "./node_modules/@material/dom/keyboard.js": +/*!************************************************!*\ + !*** ./node_modules/@material/dom/keyboard.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ KEY: () => (/* binding */ KEY), +/* harmony export */ isNavigationEvent: () => (/* binding */ isNavigationEvent), +/* harmony export */ normalizeKey: () => (/* binding */ normalizeKey) +/* harmony export */ }); +/** + * @license + * Copyright 2020 Google Inc. + * + * Permission 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: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE 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. + */ +/** + * KEY provides normalized string values for keys. + */ +var KEY = { + UNKNOWN: 'Unknown', + BACKSPACE: 'Backspace', + ENTER: 'Enter', + SPACEBAR: 'Spacebar', + PAGE_UP: 'PageUp', + PAGE_DOWN: 'PageDown', + END: 'End', + HOME: 'Home', + ARROW_LEFT: 'ArrowLeft', + ARROW_UP: 'ArrowUp', + ARROW_RIGHT: 'ArrowRight', + ARROW_DOWN: 'ArrowDown', + DELETE: 'Delete', + ESCAPE: 'Escape', + TAB: 'Tab', +}; +var normalizedKeys = new Set(); +// IE11 has no support for new Map with iterable so we need to initialize this +// by hand. +normalizedKeys.add(KEY.BACKSPACE); +normalizedKeys.add(KEY.ENTER); +normalizedKeys.add(KEY.SPACEBAR); +normalizedKeys.add(KEY.PAGE_UP); +normalizedKeys.add(KEY.PAGE_DOWN); +normalizedKeys.add(KEY.END); +normalizedKeys.add(KEY.HOME); +normalizedKeys.add(KEY.ARROW_LEFT); +normalizedKeys.add(KEY.ARROW_UP); +normalizedKeys.add(KEY.ARROW_RIGHT); +normalizedKeys.add(KEY.ARROW_DOWN); +normalizedKeys.add(KEY.DELETE); +normalizedKeys.add(KEY.ESCAPE); +normalizedKeys.add(KEY.TAB); +var KEY_CODE = { + BACKSPACE: 8, + ENTER: 13, + SPACEBAR: 32, + PAGE_UP: 33, + PAGE_DOWN: 34, + END: 35, + HOME: 36, + ARROW_LEFT: 37, + ARROW_UP: 38, + ARROW_RIGHT: 39, + ARROW_DOWN: 40, + DELETE: 46, + ESCAPE: 27, + TAB: 9, +}; +var mappedKeyCodes = new Map(); +// IE11 has no support for new Map with iterable so we need to initialize this +// by hand. +mappedKeyCodes.set(KEY_CODE.BACKSPACE, KEY.BACKSPACE); +mappedKeyCodes.set(KEY_CODE.ENTER, KEY.ENTER); +mappedKeyCodes.set(KEY_CODE.SPACEBAR, KEY.SPACEBAR); +mappedKeyCodes.set(KEY_CODE.PAGE_UP, KEY.PAGE_UP); +mappedKeyCodes.set(KEY_CODE.PAGE_DOWN, KEY.PAGE_DOWN); +mappedKeyCodes.set(KEY_CODE.END, KEY.END); +mappedKeyCodes.set(KEY_CODE.HOME, KEY.HOME); +mappedKeyCodes.set(KEY_CODE.ARROW_LEFT, KEY.ARROW_LEFT); +mappedKeyCodes.set(KEY_CODE.ARROW_UP, KEY.ARROW_UP); +mappedKeyCodes.set(KEY_CODE.ARROW_RIGHT, KEY.ARROW_RIGHT); +mappedKeyCodes.set(KEY_CODE.ARROW_DOWN, KEY.ARROW_DOWN); +mappedKeyCodes.set(KEY_CODE.DELETE, KEY.DELETE); +mappedKeyCodes.set(KEY_CODE.ESCAPE, KEY.ESCAPE); +mappedKeyCodes.set(KEY_CODE.TAB, KEY.TAB); +var navigationKeys = new Set(); +// IE11 has no support for new Set with iterable so we need to initialize this +// by hand. +navigationKeys.add(KEY.PAGE_UP); +navigationKeys.add(KEY.PAGE_DOWN); +navigationKeys.add(KEY.END); +navigationKeys.add(KEY.HOME); +navigationKeys.add(KEY.ARROW_LEFT); +navigationKeys.add(KEY.ARROW_UP); +navigationKeys.add(KEY.ARROW_RIGHT); +navigationKeys.add(KEY.ARROW_DOWN); +/** + * normalizeKey returns the normalized string for a navigational action. + */ +function normalizeKey(evt) { + var key = evt.key; + // If the event already has a normalized key, return it + if (normalizedKeys.has(key)) { + return key; + } + // tslint:disable-next-line:deprecation + var mappedKey = mappedKeyCodes.get(evt.keyCode); + if (mappedKey) { + return mappedKey; + } + return KEY.UNKNOWN; +} +/** + * isNavigationEvent returns whether the event is a navigation event + */ +function isNavigationEvent(evt) { + return navigationKeys.has(normalizeKey(evt)); +} +//# sourceMappingURL=keyboard.js.map + +/***/ }), + +/***/ "./node_modules/@material/dom/ponyfill.js": +/*!************************************************!*\ + !*** ./node_modules/@material/dom/ponyfill.js ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ closest: () => (/* binding */ closest), +/* harmony export */ estimateScrollWidth: () => (/* binding */ estimateScrollWidth), +/* harmony export */ matches: () => (/* binding */ matches) +/* harmony export */ }); +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission 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: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE 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. + */ +/** + * @fileoverview A "ponyfill" is a polyfill that doesn't modify the global prototype chain. + * This makes ponyfills safer than traditional polyfills, especially for libraries like MDC. + */ +function closest(element, selector) { + if (element.closest) { + return element.closest(selector); + } + var el = element; + while (el) { + if (matches(el, selector)) { + return el; + } + el = el.parentElement; + } + return null; +} +function matches(element, selector) { + var nativeMatches = element.matches + || element.webkitMatchesSelector + || element.msMatchesSelector; + return nativeMatches.call(element, selector); +} +/** + * Used to compute the estimated scroll width of elements. When an element is + * hidden due to display: none; being applied to a parent element, the width is + * returned as 0. However, the element will have a true width once no longer + * inside a display: none context. This method computes an estimated width when + * the element is hidden or returns the true width when the element is visble. + * @param {Element} element the element whose width to estimate + */ +function estimateScrollWidth(element) { + // Check the offsetParent. If the element inherits display: none from any + // parent, the offsetParent property will be null (see + // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent). + // This check ensures we only clone the node when necessary. + var htmlEl = element; + if (htmlEl.offsetParent !== null) { + return htmlEl.scrollWidth; + } + var clone = htmlEl.cloneNode(true); + clone.style.setProperty('position', 'absolute'); + clone.style.setProperty('transform', 'translate(-9999px, -9999px)'); + document.documentElement.appendChild(clone); + var scrollWidth = clone.scrollWidth; + document.documentElement.removeChild(clone); + return scrollWidth; +} +//# sourceMappingURL=ponyfill.js.map + +/***/ }), + +/***/ "./node_modules/@material/list/constants.js": +/*!**************************************************!*\ + !*** ./node_modules/@material/list/constants.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ cssClasses: () => (/* binding */ cssClasses), +/* harmony export */ deprecatedClassNameMap: () => (/* binding */ deprecatedClassNameMap), +/* harmony export */ evolutionAttribute: () => (/* binding */ evolutionAttribute), +/* harmony export */ evolutionClassNameMap: () => (/* binding */ evolutionClassNameMap), +/* harmony export */ numbers: () => (/* binding */ numbers), +/* harmony export */ strings: () => (/* binding */ strings) +/* harmony export */ }); +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission 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: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE 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. + */ +var _a, _b; +var cssClasses = { + LIST_ITEM_ACTIVATED_CLASS: 'mdc-list-item--activated', + LIST_ITEM_CLASS: 'mdc-list-item', + LIST_ITEM_DISABLED_CLASS: 'mdc-list-item--disabled', + LIST_ITEM_SELECTED_CLASS: 'mdc-list-item--selected', + LIST_ITEM_TEXT_CLASS: 'mdc-list-item__text', + LIST_ITEM_PRIMARY_TEXT_CLASS: 'mdc-list-item__primary-text', + ROOT: 'mdc-list', +}; +var evolutionClassNameMap = (_a = {}, + _a["" + cssClasses.LIST_ITEM_ACTIVATED_CLASS] = 'mdc-list-item--activated', + _a["" + cssClasses.LIST_ITEM_CLASS] = 'mdc-list-item', + _a["" + cssClasses.LIST_ITEM_DISABLED_CLASS] = 'mdc-list-item--disabled', + _a["" + cssClasses.LIST_ITEM_SELECTED_CLASS] = 'mdc-list-item--selected', + _a["" + cssClasses.LIST_ITEM_PRIMARY_TEXT_CLASS] = 'mdc-list-item__primary-text', + _a["" + cssClasses.ROOT] = 'mdc-list', + _a); +var deprecatedClassNameMap = (_b = {}, + _b["" + cssClasses.LIST_ITEM_ACTIVATED_CLASS] = 'mdc-deprecated-list-item--activated', + _b["" + cssClasses.LIST_ITEM_CLASS] = 'mdc-deprecated-list-item', + _b["" + cssClasses.LIST_ITEM_DISABLED_CLASS] = 'mdc-deprecated-list-item--disabled', + _b["" + cssClasses.LIST_ITEM_SELECTED_CLASS] = 'mdc-deprecated-list-item--selected', + _b["" + cssClasses.LIST_ITEM_TEXT_CLASS] = 'mdc-deprecated-list-item__text', + _b["" + cssClasses.LIST_ITEM_PRIMARY_TEXT_CLASS] = 'mdc-deprecated-list-item__primary-text', + _b["" + cssClasses.ROOT] = 'mdc-deprecated-list', + _b); +var strings = { + ACTION_EVENT: 'MDCList:action', + ARIA_CHECKED: 'aria-checked', + ARIA_CHECKED_CHECKBOX_SELECTOR: '[role="checkbox"][aria-checked="true"]', + ARIA_CHECKED_RADIO_SELECTOR: '[role="radio"][aria-checked="true"]', + ARIA_CURRENT: 'aria-current', + ARIA_DISABLED: 'aria-disabled', + ARIA_ORIENTATION: 'aria-orientation', + ARIA_ORIENTATION_HORIZONTAL: 'horizontal', + ARIA_ROLE_CHECKBOX_SELECTOR: '[role="checkbox"]', + ARIA_SELECTED: 'aria-selected', + ARIA_INTERACTIVE_ROLES_SELECTOR: '[role="listbox"], [role="menu"]', + ARIA_MULTI_SELECTABLE_SELECTOR: '[aria-multiselectable="true"]', + CHECKBOX_RADIO_SELECTOR: 'input[type="checkbox"], input[type="radio"]', + CHECKBOX_SELECTOR: 'input[type="checkbox"]', + CHILD_ELEMENTS_TO_TOGGLE_TABINDEX: "\n ." + cssClasses.LIST_ITEM_CLASS + " button:not(:disabled),\n ." + cssClasses.LIST_ITEM_CLASS + " a,\n ." + deprecatedClassNameMap[cssClasses.LIST_ITEM_CLASS] + " button:not(:disabled),\n ." + deprecatedClassNameMap[cssClasses.LIST_ITEM_CLASS] + " a\n ", + DEPRECATED_SELECTOR: '.mdc-deprecated-list', + FOCUSABLE_CHILD_ELEMENTS: "\n ." + cssClasses.LIST_ITEM_CLASS + " button:not(:disabled),\n ." + cssClasses.LIST_ITEM_CLASS + " a,\n ." + cssClasses.LIST_ITEM_CLASS + " input[type=\"radio\"]:not(:disabled),\n ." + cssClasses.LIST_ITEM_CLASS + " input[type=\"checkbox\"]:not(:disabled),\n ." + deprecatedClassNameMap[cssClasses.LIST_ITEM_CLASS] + " button:not(:disabled),\n ." + deprecatedClassNameMap[cssClasses.LIST_ITEM_CLASS] + " a,\n ." + deprecatedClassNameMap[cssClasses.LIST_ITEM_CLASS] + " input[type=\"radio\"]:not(:disabled),\n ." + deprecatedClassNameMap[cssClasses.LIST_ITEM_CLASS] + " input[type=\"checkbox\"]:not(:disabled)\n ", + RADIO_SELECTOR: 'input[type="radio"]', + SELECTED_ITEM_SELECTOR: '[aria-selected="true"], [aria-current="true"]', +}; +var numbers = { + UNSET_INDEX: -1, + TYPEAHEAD_BUFFER_CLEAR_TIMEOUT_MS: 300 +}; +var evolutionAttribute = 'evolution'; + +//# sourceMappingURL=constants.js.map + +/***/ }), + +/***/ "./node_modules/@material/menu-surface/constants.js": +/*!**********************************************************!*\ + !*** ./node_modules/@material/menu-surface/constants.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Corner: () => (/* binding */ Corner), +/* harmony export */ CornerBit: () => (/* binding */ CornerBit), +/* harmony export */ cssClasses: () => (/* binding */ cssClasses), +/* harmony export */ numbers: () => (/* binding */ numbers), +/* harmony export */ strings: () => (/* binding */ strings) +/* harmony export */ }); +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission 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: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE 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. + */ +var cssClasses = { + ANCHOR: 'mdc-menu-surface--anchor', + ANIMATING_CLOSED: 'mdc-menu-surface--animating-closed', + ANIMATING_OPEN: 'mdc-menu-surface--animating-open', + FIXED: 'mdc-menu-surface--fixed', + IS_OPEN_BELOW: 'mdc-menu-surface--is-open-below', + OPEN: 'mdc-menu-surface--open', + ROOT: 'mdc-menu-surface', +}; +// tslint:disable:object-literal-sort-keys +var strings = { + CLOSED_EVENT: 'MDCMenuSurface:closed', + CLOSING_EVENT: 'MDCMenuSurface:closing', + OPENED_EVENT: 'MDCMenuSurface:opened', + FOCUSABLE_ELEMENTS: [ + 'button:not(:disabled)', + '[href]:not([aria-disabled="true"])', + 'input:not(:disabled)', + 'select:not(:disabled)', + 'textarea:not(:disabled)', + '[tabindex]:not([tabindex="-1"]):not([aria-disabled="true"])', + ].join(', '), +}; +// tslint:enable:object-literal-sort-keys +var numbers = { + /** Total duration of menu-surface open animation. */ + TRANSITION_OPEN_DURATION: 120, + /** Total duration of menu-surface close animation. */ + TRANSITION_CLOSE_DURATION: 75, + /** + * Margin left to the edge of the viewport when menu-surface is at maximum + * possible height. Also used as a viewport margin. + */ + MARGIN_TO_EDGE: 32, + /** + * Ratio of anchor width to menu-surface width for switching from corner + * positioning to center positioning. + */ + ANCHOR_TO_MENU_SURFACE_WIDTH_RATIO: 0.67, + /** + * Amount of time to wait before restoring focus when closing the menu + * surface. This is important because if a touch event triggered the menu + * close, and the subsequent mouse event occurs after focus is restored, then + * the restored focus would be lost. + */ + TOUCH_EVENT_WAIT_MS: 30, +}; +/** + * Enum for bits in the {@see Corner) bitmap. + */ +var CornerBit; +(function (CornerBit) { + CornerBit[CornerBit["BOTTOM"] = 1] = "BOTTOM"; + CornerBit[CornerBit["CENTER"] = 2] = "CENTER"; + CornerBit[CornerBit["RIGHT"] = 4] = "RIGHT"; + CornerBit[CornerBit["FLIP_RTL"] = 8] = "FLIP_RTL"; +})(CornerBit || (CornerBit = {})); +/** + * Enum for representing an element corner for positioning the menu-surface. + * + * The START constants map to LEFT if element directionality is left + * to right and RIGHT if the directionality is right to left. + * Likewise END maps to RIGHT or LEFT depending on the directionality. + */ +var Corner; +(function (Corner) { + Corner[Corner["TOP_LEFT"] = 0] = "TOP_LEFT"; + Corner[Corner["TOP_RIGHT"] = 4] = "TOP_RIGHT"; + Corner[Corner["BOTTOM_LEFT"] = 1] = "BOTTOM_LEFT"; + Corner[Corner["BOTTOM_RIGHT"] = 5] = "BOTTOM_RIGHT"; + Corner[Corner["TOP_START"] = 8] = "TOP_START"; + Corner[Corner["TOP_END"] = 12] = "TOP_END"; + Corner[Corner["BOTTOM_START"] = 9] = "BOTTOM_START"; + Corner[Corner["BOTTOM_END"] = 13] = "BOTTOM_END"; +})(Corner || (Corner = {})); + +//# sourceMappingURL=constants.js.map + +/***/ }), + +/***/ "./node_modules/@material/menu-surface/foundation.js": +/*!***********************************************************!*\ + !*** ./node_modules/@material/menu-surface/foundation.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MDCMenuSurfaceFoundation: () => (/* binding */ MDCMenuSurfaceFoundation), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js"); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/menu-surface/constants.js"); +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission 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: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE 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. + */ + + + +var MDCMenuSurfaceFoundation = /** @class */ (function (_super) { + (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__extends)(MDCMenuSurfaceFoundation, _super); + function MDCMenuSurfaceFoundation(adapter) { + var _this = _super.call(this, (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, MDCMenuSurfaceFoundation.defaultAdapter), adapter)) || this; + _this.isSurfaceOpen = false; + _this.isQuickOpen = false; + _this.isHoistedElement = false; + _this.isFixedPosition = false; + _this.isHorizontallyCenteredOnViewport = false; + _this.maxHeight = 0; + _this.openBottomBias = 0; + _this.openAnimationEndTimerId = 0; + _this.closeAnimationEndTimerId = 0; + _this.animationRequestId = 0; + _this.anchorCorner = _constants__WEBPACK_IMPORTED_MODULE_1__.Corner.TOP_START; + /** + * Corner of the menu surface to which menu surface is attached to anchor. + * + * Anchor corner --->+----------+ + * | ANCHOR | + * +----------+ + * Origin corner --->+--------------+ + * | | + * | | + * | MENU SURFACE | + * | | + * | | + * +--------------+ + */ + _this.originCorner = _constants__WEBPACK_IMPORTED_MODULE_1__.Corner.TOP_START; + _this.anchorMargin = { top: 0, right: 0, bottom: 0, left: 0 }; + _this.position = { x: 0, y: 0 }; + return _this; + } + Object.defineProperty(MDCMenuSurfaceFoundation, "cssClasses", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuSurfaceFoundation, "strings", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuSurfaceFoundation, "numbers", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.numbers; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuSurfaceFoundation, "Corner", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.Corner; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuSurfaceFoundation, "defaultAdapter", { + /** + * @see {@link MDCMenuSurfaceAdapter} for typing information on parameters and return types. + */ + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClass: function () { return undefined; }, + removeClass: function () { return undefined; }, + hasClass: function () { return false; }, + hasAnchor: function () { return false; }, + isElementInContainer: function () { return false; }, + isFocused: function () { return false; }, + isRtl: function () { return false; }, + getInnerDimensions: function () { return ({ height: 0, width: 0 }); }, + getAnchorDimensions: function () { return null; }, + getWindowDimensions: function () { return ({ height: 0, width: 0 }); }, + getBodyDimensions: function () { return ({ height: 0, width: 0 }); }, + getWindowScroll: function () { return ({ x: 0, y: 0 }); }, + setPosition: function () { return undefined; }, + setMaxHeight: function () { return undefined; }, + setTransformOrigin: function () { return undefined; }, + saveFocus: function () { return undefined; }, + restoreFocus: function () { return undefined; }, + notifyClose: function () { return undefined; }, + notifyOpen: function () { return undefined; }, + notifyClosing: function () { return undefined; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCMenuSurfaceFoundation.prototype.init = function () { + var _a = MDCMenuSurfaceFoundation.cssClasses, ROOT = _a.ROOT, OPEN = _a.OPEN; + if (!this.adapter.hasClass(ROOT)) { + throw new Error(ROOT + " class required in root element."); + } + if (this.adapter.hasClass(OPEN)) { + this.isSurfaceOpen = true; + } + }; + MDCMenuSurfaceFoundation.prototype.destroy = function () { + clearTimeout(this.openAnimationEndTimerId); + clearTimeout(this.closeAnimationEndTimerId); + // Cancel any currently running animations. + cancelAnimationFrame(this.animationRequestId); + }; + /** + * @param corner Default anchor corner alignment of top-left menu surface + * corner. + */ + MDCMenuSurfaceFoundation.prototype.setAnchorCorner = function (corner) { + this.anchorCorner = corner; + }; + /** + * Flip menu corner horizontally. + */ + MDCMenuSurfaceFoundation.prototype.flipCornerHorizontally = function () { + this.originCorner = this.originCorner ^ _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT; + }; + /** + * @param margin Set of margin values from anchor. + */ + MDCMenuSurfaceFoundation.prototype.setAnchorMargin = function (margin) { + this.anchorMargin.top = margin.top || 0; + this.anchorMargin.right = margin.right || 0; + this.anchorMargin.bottom = margin.bottom || 0; + this.anchorMargin.left = margin.left || 0; + }; + /** Used to indicate if the menu-surface is hoisted to the body. */ + MDCMenuSurfaceFoundation.prototype.setIsHoisted = function (isHoisted) { + this.isHoistedElement = isHoisted; + }; + /** + * Used to set the menu-surface calculations based on a fixed position menu. + */ + MDCMenuSurfaceFoundation.prototype.setFixedPosition = function (isFixedPosition) { + this.isFixedPosition = isFixedPosition; + }; + /** + * @return Returns true if menu is in fixed (`position: fixed`) position. + */ + MDCMenuSurfaceFoundation.prototype.isFixed = function () { + return this.isFixedPosition; + }; + /** Sets the menu-surface position on the page. */ + MDCMenuSurfaceFoundation.prototype.setAbsolutePosition = function (x, y) { + this.position.x = this.isFinite(x) ? x : 0; + this.position.y = this.isFinite(y) ? y : 0; + }; + /** Sets whether menu-surface should be horizontally centered to viewport. */ + MDCMenuSurfaceFoundation.prototype.setIsHorizontallyCenteredOnViewport = function (isCentered) { + this.isHorizontallyCenteredOnViewport = isCentered; + }; + MDCMenuSurfaceFoundation.prototype.setQuickOpen = function (quickOpen) { + this.isQuickOpen = quickOpen; + }; + /** + * Sets maximum menu-surface height on open. + * @param maxHeight The desired max-height. Set to 0 (default) to + * automatically calculate max height based on available viewport space. + */ + MDCMenuSurfaceFoundation.prototype.setMaxHeight = function (maxHeight) { + this.maxHeight = maxHeight; + }; + /** + * Set to a positive integer to influence the menu to preferentially open + * below the anchor instead of above. + * @param bias A value of `x` simulates an extra `x` pixels of available space + * below the menu during positioning calculations. + */ + MDCMenuSurfaceFoundation.prototype.setOpenBottomBias = function (bias) { + this.openBottomBias = bias; + }; + MDCMenuSurfaceFoundation.prototype.isOpen = function () { + return this.isSurfaceOpen; + }; + /** + * Open the menu surface. + */ + MDCMenuSurfaceFoundation.prototype.open = function () { + var _this = this; + if (this.isSurfaceOpen) { + return; + } + this.adapter.saveFocus(); + if (this.isQuickOpen) { + this.isSurfaceOpen = true; + this.adapter.addClass(MDCMenuSurfaceFoundation.cssClasses.OPEN); + this.dimensions = this.adapter.getInnerDimensions(); + this.autoposition(); + this.adapter.notifyOpen(); + } + else { + this.adapter.addClass(MDCMenuSurfaceFoundation.cssClasses.ANIMATING_OPEN); + this.animationRequestId = requestAnimationFrame(function () { + _this.dimensions = _this.adapter.getInnerDimensions(); + _this.autoposition(); + _this.adapter.addClass(MDCMenuSurfaceFoundation.cssClasses.OPEN); + _this.openAnimationEndTimerId = setTimeout(function () { + _this.openAnimationEndTimerId = 0; + _this.adapter.removeClass(MDCMenuSurfaceFoundation.cssClasses.ANIMATING_OPEN); + _this.adapter.notifyOpen(); + }, _constants__WEBPACK_IMPORTED_MODULE_1__.numbers.TRANSITION_OPEN_DURATION); + }); + this.isSurfaceOpen = true; + } + }; + /** + * Closes the menu surface. + */ + MDCMenuSurfaceFoundation.prototype.close = function (skipRestoreFocus) { + var _this = this; + if (skipRestoreFocus === void 0) { skipRestoreFocus = false; } + if (!this.isSurfaceOpen) { + return; + } + this.adapter.notifyClosing(); + if (this.isQuickOpen) { + this.isSurfaceOpen = false; + if (!skipRestoreFocus) { + this.maybeRestoreFocus(); + } + this.adapter.removeClass(MDCMenuSurfaceFoundation.cssClasses.OPEN); + this.adapter.removeClass(MDCMenuSurfaceFoundation.cssClasses.IS_OPEN_BELOW); + this.adapter.notifyClose(); + return; + } + this.adapter.addClass(MDCMenuSurfaceFoundation.cssClasses.ANIMATING_CLOSED); + requestAnimationFrame(function () { + _this.adapter.removeClass(MDCMenuSurfaceFoundation.cssClasses.OPEN); + _this.adapter.removeClass(MDCMenuSurfaceFoundation.cssClasses.IS_OPEN_BELOW); + _this.closeAnimationEndTimerId = setTimeout(function () { + _this.closeAnimationEndTimerId = 0; + _this.adapter.removeClass(MDCMenuSurfaceFoundation.cssClasses.ANIMATING_CLOSED); + _this.adapter.notifyClose(); + }, _constants__WEBPACK_IMPORTED_MODULE_1__.numbers.TRANSITION_CLOSE_DURATION); + }); + this.isSurfaceOpen = false; + if (!skipRestoreFocus) { + this.maybeRestoreFocus(); + } + }; + /** Handle clicks and close if not within menu-surface element. */ + MDCMenuSurfaceFoundation.prototype.handleBodyClick = function (evt) { + var el = evt.target; + if (this.adapter.isElementInContainer(el)) { + return; + } + this.close(); + }; + /** Handle keys that close the surface. */ + MDCMenuSurfaceFoundation.prototype.handleKeydown = function (evt) { + var keyCode = evt.keyCode, key = evt.key; + var isEscape = key === 'Escape' || keyCode === 27; + if (isEscape) { + this.close(); + } + }; + MDCMenuSurfaceFoundation.prototype.autoposition = function () { + var _a; + // Compute measurements for autoposition methods reuse. + this.measurements = this.getAutoLayoutmeasurements(); + var corner = this.getoriginCorner(); + var maxMenuSurfaceHeight = this.getMenuSurfaceMaxHeight(corner); + var verticalAlignment = this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM) ? 'bottom' : 'top'; + var horizontalAlignment = this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT) ? 'right' : 'left'; + var horizontalOffset = this.getHorizontalOriginOffset(corner); + var verticalOffset = this.getVerticalOriginOffset(corner); + var _b = this.measurements, anchorSize = _b.anchorSize, surfaceSize = _b.surfaceSize; + var position = (_a = {}, + _a[horizontalAlignment] = horizontalOffset, + _a[verticalAlignment] = verticalOffset, + _a); + // Center align when anchor width is comparable or greater than menu + // surface, otherwise keep corner. + if (anchorSize.width / surfaceSize.width > + _constants__WEBPACK_IMPORTED_MODULE_1__.numbers.ANCHOR_TO_MENU_SURFACE_WIDTH_RATIO) { + horizontalAlignment = 'center'; + } + // If the menu-surface has been hoisted to the body, it's no longer relative + // to the anchor element + if (this.isHoistedElement || this.isFixedPosition) { + this.adjustPositionForHoistedElement(position); + } + this.adapter.setTransformOrigin(horizontalAlignment + " " + verticalAlignment); + this.adapter.setPosition(position); + this.adapter.setMaxHeight(maxMenuSurfaceHeight ? maxMenuSurfaceHeight + 'px' : ''); + // If it is opened from the top then add is-open-below class + if (!this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM)) { + this.adapter.addClass(MDCMenuSurfaceFoundation.cssClasses.IS_OPEN_BELOW); + } + }; + /** + * @return Measurements used to position menu surface popup. + */ + MDCMenuSurfaceFoundation.prototype.getAutoLayoutmeasurements = function () { + var anchorRect = this.adapter.getAnchorDimensions(); + var bodySize = this.adapter.getBodyDimensions(); + var viewportSize = this.adapter.getWindowDimensions(); + var windowScroll = this.adapter.getWindowScroll(); + if (!anchorRect) { + // tslint:disable:object-literal-sort-keys Positional properties are more readable when they're grouped together + anchorRect = { + top: this.position.y, + right: this.position.x, + bottom: this.position.y, + left: this.position.x, + width: 0, + height: 0, + }; + // tslint:enable:object-literal-sort-keys + } + return { + anchorSize: anchorRect, + bodySize: bodySize, + surfaceSize: this.dimensions, + viewportDistance: { + // tslint:disable:object-literal-sort-keys Positional properties are more readable when they're grouped together + top: anchorRect.top, + right: viewportSize.width - anchorRect.right, + bottom: viewportSize.height - anchorRect.bottom, + left: anchorRect.left, + // tslint:enable:object-literal-sort-keys + }, + viewportSize: viewportSize, + windowScroll: windowScroll, + }; + }; + /** + * Computes the corner of the anchor from which to animate and position the + * menu surface. + * + * Only LEFT or RIGHT bit is used to position the menu surface ignoring RTL + * context. E.g., menu surface will be positioned from right side on TOP_END. + */ + MDCMenuSurfaceFoundation.prototype.getoriginCorner = function () { + var corner = this.originCorner; + var _a = this.measurements, viewportDistance = _a.viewportDistance, anchorSize = _a.anchorSize, surfaceSize = _a.surfaceSize; + var MARGIN_TO_EDGE = MDCMenuSurfaceFoundation.numbers.MARGIN_TO_EDGE; + var isAnchoredToBottom = this.hasBit(this.anchorCorner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM); + var availableTop; + var availableBottom; + if (isAnchoredToBottom) { + availableTop = + viewportDistance.top - MARGIN_TO_EDGE + this.anchorMargin.bottom; + availableBottom = + viewportDistance.bottom - MARGIN_TO_EDGE - this.anchorMargin.bottom; + } + else { + availableTop = + viewportDistance.top - MARGIN_TO_EDGE + this.anchorMargin.top; + availableBottom = viewportDistance.bottom - MARGIN_TO_EDGE + + anchorSize.height - this.anchorMargin.top; + } + var isAvailableBottom = availableBottom - surfaceSize.height > 0; + if (!isAvailableBottom && + availableTop > availableBottom + this.openBottomBias) { + // Attach bottom side of surface to the anchor. + corner = this.setBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM); + } + var isRtl = this.adapter.isRtl(); + var isFlipRtl = this.hasBit(this.anchorCorner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.FLIP_RTL); + var hasRightBit = this.hasBit(this.anchorCorner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT) || + this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT); + // Whether surface attached to right side of anchor element. + var isAnchoredToRight = false; + // Anchored to start + if (isRtl && isFlipRtl) { + isAnchoredToRight = !hasRightBit; + } + else { + // Anchored to right + isAnchoredToRight = hasRightBit; + } + var availableLeft; + var availableRight; + if (isAnchoredToRight) { + availableLeft = + viewportDistance.left + anchorSize.width + this.anchorMargin.right; + availableRight = viewportDistance.right - this.anchorMargin.right; + } + else { + availableLeft = viewportDistance.left + this.anchorMargin.left; + availableRight = + viewportDistance.right + anchorSize.width - this.anchorMargin.left; + } + var isAvailableLeft = availableLeft - surfaceSize.width > 0; + var isAvailableRight = availableRight - surfaceSize.width > 0; + var isOriginCornerAlignedToEnd = this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.FLIP_RTL) && + this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT); + if (isAvailableRight && isOriginCornerAlignedToEnd && isRtl || + !isAvailableLeft && isOriginCornerAlignedToEnd) { + // Attach left side of surface to the anchor. + corner = this.unsetBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT); + } + else if (isAvailableLeft && isAnchoredToRight && isRtl || + (isAvailableLeft && !isAnchoredToRight && hasRightBit) || + (!isAvailableRight && availableLeft >= availableRight)) { + // Attach right side of surface to the anchor. + corner = this.setBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT); + } + return corner; + }; + /** + * @param corner Origin corner of the menu surface. + * @return Maximum height of the menu surface, based on available space. 0 + * indicates should not be set. + */ + MDCMenuSurfaceFoundation.prototype.getMenuSurfaceMaxHeight = function (corner) { + if (this.maxHeight > 0) { + return this.maxHeight; + } + var viewportDistance = this.measurements.viewportDistance; + var maxHeight = 0; + var isBottomAligned = this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM); + var isBottomAnchored = this.hasBit(this.anchorCorner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM); + var MARGIN_TO_EDGE = MDCMenuSurfaceFoundation.numbers.MARGIN_TO_EDGE; + // When maximum height is not specified, it is handled from CSS. + if (isBottomAligned) { + maxHeight = viewportDistance.top + this.anchorMargin.top - MARGIN_TO_EDGE; + if (!isBottomAnchored) { + maxHeight += this.measurements.anchorSize.height; + } + } + else { + maxHeight = viewportDistance.bottom - this.anchorMargin.bottom + + this.measurements.anchorSize.height - MARGIN_TO_EDGE; + if (isBottomAnchored) { + maxHeight -= this.measurements.anchorSize.height; + } + } + return maxHeight; + }; + /** + * @param corner Origin corner of the menu surface. + * @return Horizontal offset of menu surface origin corner from corresponding + * anchor corner. + */ + MDCMenuSurfaceFoundation.prototype.getHorizontalOriginOffset = function (corner) { + var anchorSize = this.measurements.anchorSize; + // isRightAligned corresponds to using the 'right' property on the surface. + var isRightAligned = this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT); + var avoidHorizontalOverlap = this.hasBit(this.anchorCorner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.RIGHT); + if (isRightAligned) { + var rightOffset = avoidHorizontalOverlap ? + anchorSize.width - this.anchorMargin.left : + this.anchorMargin.right; + // For hoisted or fixed elements, adjust the offset by the difference + // between viewport width and body width so when we calculate the right + // value (`adjustPositionForHoistedElement`) based on the element + // position, the right property is correct. + if (this.isHoistedElement || this.isFixedPosition) { + return rightOffset - + (this.measurements.viewportSize.width - + this.measurements.bodySize.width); + } + return rightOffset; + } + return avoidHorizontalOverlap ? anchorSize.width - this.anchorMargin.right : + this.anchorMargin.left; + }; + /** + * @param corner Origin corner of the menu surface. + * @return Vertical offset of menu surface origin corner from corresponding + * anchor corner. + */ + MDCMenuSurfaceFoundation.prototype.getVerticalOriginOffset = function (corner) { + var anchorSize = this.measurements.anchorSize; + var isBottomAligned = this.hasBit(corner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM); + var avoidVerticalOverlap = this.hasBit(this.anchorCorner, _constants__WEBPACK_IMPORTED_MODULE_1__.CornerBit.BOTTOM); + var y = 0; + if (isBottomAligned) { + y = avoidVerticalOverlap ? anchorSize.height - this.anchorMargin.top : + -this.anchorMargin.bottom; + } + else { + y = avoidVerticalOverlap ? + (anchorSize.height + this.anchorMargin.bottom) : + this.anchorMargin.top; + } + return y; + }; + /** + * Calculates the offsets for positioning the menu-surface when the + * menu-surface has been hoisted to the body. + */ + MDCMenuSurfaceFoundation.prototype.adjustPositionForHoistedElement = function (position) { + var e_1, _a; + var _b = this.measurements, windowScroll = _b.windowScroll, viewportDistance = _b.viewportDistance, surfaceSize = _b.surfaceSize, viewportSize = _b.viewportSize; + var props = Object.keys(position); + try { + for (var props_1 = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__values)(props), props_1_1 = props_1.next(); !props_1_1.done; props_1_1 = props_1.next()) { + var prop = props_1_1.value; + var value = position[prop] || 0; + if (this.isHorizontallyCenteredOnViewport && + (prop === 'left' || prop === 'right')) { + position[prop] = (viewportSize.width - surfaceSize.width) / 2; + continue; + } + // Hoisted surfaces need to have the anchor elements location on the page + // added to the position properties for proper alignment on the body. + value += viewportDistance[prop]; + // Surfaces that are absolutely positioned need to have additional + // calculations for scroll and bottom positioning. + if (!this.isFixedPosition) { + if (prop === 'top') { + value += windowScroll.y; + } + else if (prop === 'bottom') { + value -= windowScroll.y; + } + else if (prop === 'left') { + value += windowScroll.x; + } + else { // prop === 'right' + value -= windowScroll.x; + } + } + position[prop] = value; + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (props_1_1 && !props_1_1.done && (_a = props_1.return)) _a.call(props_1); + } + finally { if (e_1) throw e_1.error; } + } + }; + /** + * The last focused element when the menu surface was opened should regain + * focus, if the user is focused on or within the menu surface when it is + * closed. + */ + MDCMenuSurfaceFoundation.prototype.maybeRestoreFocus = function () { + var _this = this; + var isRootFocused = this.adapter.isFocused(); + var childHasFocus = document.activeElement && + this.adapter.isElementInContainer(document.activeElement); + if (isRootFocused || childHasFocus) { + // Wait before restoring focus when closing the menu surface. This is + // important because if a touch event triggered the menu close, and the + // subsequent mouse event occurs after focus is restored, then the + // restored focus would be lost. + setTimeout(function () { + _this.adapter.restoreFocus(); + }, _constants__WEBPACK_IMPORTED_MODULE_1__.numbers.TOUCH_EVENT_WAIT_MS); + } + }; + MDCMenuSurfaceFoundation.prototype.hasBit = function (corner, bit) { + return Boolean(corner & bit); // tslint:disable-line:no-bitwise + }; + MDCMenuSurfaceFoundation.prototype.setBit = function (corner, bit) { + return corner | bit; // tslint:disable-line:no-bitwise + }; + MDCMenuSurfaceFoundation.prototype.unsetBit = function (corner, bit) { + return corner ^ bit; + }; + /** + * isFinite that doesn't force conversion to number type. + * Equivalent to Number.isFinite in ES2015, which is not supported in IE. + */ + MDCMenuSurfaceFoundation.prototype.isFinite = function (num) { + return typeof num === 'number' && isFinite(num); + }; + return MDCMenuSurfaceFoundation; +}(_material_base_foundation__WEBPACK_IMPORTED_MODULE_2__.MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MDCMenuSurfaceFoundation); +//# sourceMappingURL=foundation.js.map + +/***/ }), + +/***/ "./node_modules/@material/menu/constants.js": +/*!**************************************************!*\ + !*** ./node_modules/@material/menu/constants.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ DefaultFocusState: () => (/* binding */ DefaultFocusState), +/* harmony export */ cssClasses: () => (/* binding */ cssClasses), +/* harmony export */ numbers: () => (/* binding */ numbers), +/* harmony export */ strings: () => (/* binding */ strings) +/* harmony export */ }); +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission 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: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE 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. + */ +var cssClasses = { + MENU_SELECTED_LIST_ITEM: 'mdc-menu-item--selected', + MENU_SELECTION_GROUP: 'mdc-menu__selection-group', + ROOT: 'mdc-menu', +}; +var strings = { + ARIA_CHECKED_ATTR: 'aria-checked', + ARIA_DISABLED_ATTR: 'aria-disabled', + CHECKBOX_SELECTOR: 'input[type="checkbox"]', + LIST_SELECTOR: '.mdc-list,.mdc-deprecated-list', + SELECTED_EVENT: 'MDCMenu:selected', + SKIP_RESTORE_FOCUS: 'data-menu-item-skip-restore-focus', +}; +var numbers = { + FOCUS_ROOT_INDEX: -1, +}; +var DefaultFocusState; +(function (DefaultFocusState) { + DefaultFocusState[DefaultFocusState["NONE"] = 0] = "NONE"; + DefaultFocusState[DefaultFocusState["LIST_ROOT"] = 1] = "LIST_ROOT"; + DefaultFocusState[DefaultFocusState["FIRST_ITEM"] = 2] = "FIRST_ITEM"; + DefaultFocusState[DefaultFocusState["LAST_ITEM"] = 3] = "LAST_ITEM"; +})(DefaultFocusState || (DefaultFocusState = {})); + +//# sourceMappingURL=constants.js.map + +/***/ }), + +/***/ "./node_modules/@material/menu/foundation.js": +/*!***************************************************!*\ + !*** ./node_modules/@material/menu/foundation.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MDCMenuFoundation: () => (/* binding */ MDCMenuFoundation), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js"); +/* harmony import */ var _material_list_constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material/list/constants */ "./node_modules/@material/list/constants.js"); +/* harmony import */ var _material_menu_surface_foundation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/menu-surface/foundation */ "./node_modules/@material/menu-surface/foundation.js"); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/menu/constants.js"); +/** + * @license + * Copyright 2018 Google Inc. + * + * Permission 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: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE 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. + */ + + + + + +var MDCMenuFoundation = /** @class */ (function (_super) { + (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__extends)(MDCMenuFoundation, _super); + function MDCMenuFoundation(adapter) { + var _this = _super.call(this, (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, MDCMenuFoundation.defaultAdapter), adapter)) || this; + _this.closeAnimationEndTimerId = 0; + _this.defaultFocusState = _constants__WEBPACK_IMPORTED_MODULE_1__.DefaultFocusState.LIST_ROOT; + _this.selectedIndex = -1; + return _this; + } + Object.defineProperty(MDCMenuFoundation, "cssClasses", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuFoundation, "strings", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuFoundation, "numbers", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.numbers; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCMenuFoundation, "defaultAdapter", { + /** + * @see {@link MDCMenuAdapter} for typing information on parameters and return types. + */ + get: function () { + // tslint:disable:object-literal-sort-keys Methods should be in the same order as the adapter interface. + return { + addClassToElementAtIndex: function () { return undefined; }, + removeClassFromElementAtIndex: function () { return undefined; }, + addAttributeToElementAtIndex: function () { return undefined; }, + removeAttributeFromElementAtIndex: function () { return undefined; }, + getAttributeFromElementAtIndex: function () { return null; }, + elementContainsClass: function () { return false; }, + closeSurface: function () { return undefined; }, + getElementIndex: function () { return -1; }, + notifySelected: function () { return undefined; }, + getMenuItemCount: function () { return 0; }, + focusItemAtIndex: function () { return undefined; }, + focusListRoot: function () { return undefined; }, + getSelectedSiblingOfItemAtIndex: function () { return -1; }, + isSelectableItemAtIndex: function () { return false; }, + }; + // tslint:enable:object-literal-sort-keys + }, + enumerable: false, + configurable: true + }); + MDCMenuFoundation.prototype.destroy = function () { + if (this.closeAnimationEndTimerId) { + clearTimeout(this.closeAnimationEndTimerId); + } + this.adapter.closeSurface(); + }; + MDCMenuFoundation.prototype.handleKeydown = function (evt) { + var key = evt.key, keyCode = evt.keyCode; + var isTab = key === 'Tab' || keyCode === 9; + if (isTab) { + this.adapter.closeSurface(/** skipRestoreFocus */ true); + } + }; + MDCMenuFoundation.prototype.handleItemAction = function (listItem) { + var _this = this; + var index = this.adapter.getElementIndex(listItem); + if (index < 0) { + return; + } + this.adapter.notifySelected({ index: index }); + var skipRestoreFocus = this.adapter.getAttributeFromElementAtIndex(index, _constants__WEBPACK_IMPORTED_MODULE_1__.strings.SKIP_RESTORE_FOCUS) === 'true'; + this.adapter.closeSurface(skipRestoreFocus); + // Wait for the menu to close before adding/removing classes that affect styles. + this.closeAnimationEndTimerId = setTimeout(function () { + // Recompute the index in case the menu contents have changed. + var recomputedIndex = _this.adapter.getElementIndex(listItem); + if (recomputedIndex >= 0 && + _this.adapter.isSelectableItemAtIndex(recomputedIndex)) { + _this.setSelectedIndex(recomputedIndex); + } + }, _material_menu_surface_foundation__WEBPACK_IMPORTED_MODULE_2__.MDCMenuSurfaceFoundation.numbers.TRANSITION_CLOSE_DURATION); + }; + MDCMenuFoundation.prototype.handleMenuSurfaceOpened = function () { + switch (this.defaultFocusState) { + case _constants__WEBPACK_IMPORTED_MODULE_1__.DefaultFocusState.FIRST_ITEM: + this.adapter.focusItemAtIndex(0); + break; + case _constants__WEBPACK_IMPORTED_MODULE_1__.DefaultFocusState.LAST_ITEM: + this.adapter.focusItemAtIndex(this.adapter.getMenuItemCount() - 1); + break; + case _constants__WEBPACK_IMPORTED_MODULE_1__.DefaultFocusState.NONE: + // Do nothing. + break; + default: + this.adapter.focusListRoot(); + break; + } + }; + /** + * Sets default focus state where the menu should focus every time when menu + * is opened. Focuses the list root (`DefaultFocusState.LIST_ROOT`) element by + * default. + */ + MDCMenuFoundation.prototype.setDefaultFocusState = function (focusState) { + this.defaultFocusState = focusState; + }; + /** @return Index of the currently selected list item within the menu. */ + MDCMenuFoundation.prototype.getSelectedIndex = function () { + return this.selectedIndex; + }; + /** + * Selects the list item at `index` within the menu. + * @param index Index of list item within the menu. + */ + MDCMenuFoundation.prototype.setSelectedIndex = function (index) { + this.validatedIndex(index); + if (!this.adapter.isSelectableItemAtIndex(index)) { + throw new Error('MDCMenuFoundation: No selection group at specified index.'); + } + var prevSelectedIndex = this.adapter.getSelectedSiblingOfItemAtIndex(index); + if (prevSelectedIndex >= 0) { + this.adapter.removeAttributeFromElementAtIndex(prevSelectedIndex, _constants__WEBPACK_IMPORTED_MODULE_1__.strings.ARIA_CHECKED_ATTR); + this.adapter.removeClassFromElementAtIndex(prevSelectedIndex, _constants__WEBPACK_IMPORTED_MODULE_1__.cssClasses.MENU_SELECTED_LIST_ITEM); + } + this.adapter.addClassToElementAtIndex(index, _constants__WEBPACK_IMPORTED_MODULE_1__.cssClasses.MENU_SELECTED_LIST_ITEM); + this.adapter.addAttributeToElementAtIndex(index, _constants__WEBPACK_IMPORTED_MODULE_1__.strings.ARIA_CHECKED_ATTR, 'true'); + this.selectedIndex = index; + }; + /** + * Sets the enabled state to isEnabled for the menu item at the given index. + * @param index Index of the menu item + * @param isEnabled The desired enabled state of the menu item. + */ + MDCMenuFoundation.prototype.setEnabled = function (index, isEnabled) { + this.validatedIndex(index); + if (isEnabled) { + this.adapter.removeClassFromElementAtIndex(index, _material_list_constants__WEBPACK_IMPORTED_MODULE_3__.cssClasses.LIST_ITEM_DISABLED_CLASS); + this.adapter.addAttributeToElementAtIndex(index, _constants__WEBPACK_IMPORTED_MODULE_1__.strings.ARIA_DISABLED_ATTR, 'false'); + } + else { + this.adapter.addClassToElementAtIndex(index, _material_list_constants__WEBPACK_IMPORTED_MODULE_3__.cssClasses.LIST_ITEM_DISABLED_CLASS); + this.adapter.addAttributeToElementAtIndex(index, _constants__WEBPACK_IMPORTED_MODULE_1__.strings.ARIA_DISABLED_ATTR, 'true'); + } + }; + MDCMenuFoundation.prototype.validatedIndex = function (index) { + var menuSize = this.adapter.getMenuItemCount(); + var isIndexInRange = index >= 0 && index < menuSize; + if (!isIndexInRange) { + throw new Error('MDCMenuFoundation: No list item at specified index.'); + } + }; + return MDCMenuFoundation; +}(_material_base_foundation__WEBPACK_IMPORTED_MODULE_4__.MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MDCMenuFoundation); +//# sourceMappingURL=foundation.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-base/aria-property.js": +/*!**********************************************************!*\ + !*** ./node_modules/@material/mwc-base/aria-property.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ariaProperty: () => (/* binding */ ariaProperty) +/* harmony export */ }); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ +/** + * TypeScript version of the decorator + * @see https://www.typescriptlang.org/docs/handbook/decorators.html#property-decorators + */ +function tsDecorator(prototype, name, descriptor) { + const constructor = prototype.constructor; + if (!descriptor) { + /** + * lit uses internal properties with two leading underscores to + * provide storage for accessors + */ + const litInternalPropertyKey = `__${name}`; + descriptor = + constructor.getPropertyDescriptor(name, litInternalPropertyKey); + if (!descriptor) { + throw new Error('@ariaProperty must be used after a @property decorator'); + } + } + // descriptor must exist at this point, reassign so typescript understands + const propDescriptor = descriptor; + let attribute = ''; + if (!propDescriptor.set) { + throw new Error(`@ariaProperty requires a setter for ${name}`); + } + // TODO(b/202853219): Remove this check when internal tooling is + // compatible + // tslint:disable-next-line:no-any bail if applied to internal generated class + if (prototype.dispatchWizEvent) { + return descriptor; + } + const wrappedDescriptor = { + configurable: true, + enumerable: true, + set(value) { + if (attribute === '') { + const options = constructor.getPropertyOptions(name); + // if attribute is not a string, use `name` instead + attribute = + typeof options.attribute === 'string' ? options.attribute : name; + } + if (this.hasAttribute(attribute)) { + this.removeAttribute(attribute); + } + propDescriptor.set.call(this, value); + } + }; + if (propDescriptor.get) { + wrappedDescriptor.get = function () { + return propDescriptor.get.call(this); + }; + } + return wrappedDescriptor; +} +/** + * A property decorator proxies an aria attribute to an internal node + * + * This decorator is only intended for use with ARIA attributes, such as `role` + * and `aria-label` due to screenreader needs. + * + * Upon first render, `@ariaProperty` will remove the attribute from the host + * element to prevent screenreaders from reading the host instead of the + * internal node. + * + * This decorator should only be used for non-Symbol public fields decorated + * with `@property`, or on a setter with an optional getter. + * + * @example + * ```ts + * class MyElement { + * @ariaProperty + * @property({ type: String, attribute: 'aria-label' }) + * ariaLabel!: string; + * } + * ``` + * @category Decorator + * @ExportDecoratedItems + */ +function ariaProperty(protoOrDescriptor, name, +// tslint:disable-next-line:no-any any is required as a return type from decorators +descriptor) { + if (name !== undefined) { + return tsDecorator(protoOrDescriptor, name, descriptor); + } + else { + throw new Error('@ariaProperty only supports TypeScript Decorators'); + } +} +//# sourceMappingURL=aria-property.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-base/base-element.js": +/*!*********************************************************!*\ + !*** ./node_modules/@material/mwc-base/base-element.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ BaseElement: () => (/* binding */ BaseElement), +/* harmony export */ addHasRemoveClass: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_1__.addHasRemoveClass) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ "./node_modules/@material/mwc-base/utils.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + + +/** @soyCompatible */ +class BaseElement extends lit__WEBPACK_IMPORTED_MODULE_0__.LitElement { + click() { + if (this.mdcRoot) { + this.mdcRoot.focus(); + this.mdcRoot.click(); + return; + } + super.click(); + } + /** + * Create and attach the MDC Foundation to the instance + */ + createFoundation() { + if (this.mdcFoundation !== undefined) { + this.mdcFoundation.destroy(); + } + if (this.mdcFoundationClass) { + this.mdcFoundation = new this.mdcFoundationClass(this.createAdapter()); + this.mdcFoundation.init(); + } + } + firstUpdated() { + this.createFoundation(); + } +} +//# sourceMappingURL=base-element.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-base/observer.js": +/*!*****************************************************!*\ + !*** ./node_modules/@material/mwc-base/observer.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ observer: () => (/* binding */ observer) +/* harmony export */ }); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ +/** + * Specifies an observer callback that is run when the decorated property + * changes. The observer receives the current and old value as arguments. + */ +const observer = (observer) => +// eslint-disable-next-line @typescript-eslint/no-explicit-any +(proto, propName) => { + // if we haven't wrapped `updated` in this class, do so + if (!proto.constructor + ._observers) { + proto.constructor._observers = new Map(); + const userUpdated = proto.updated; + proto.updated = function (changedProperties) { + userUpdated.call(this, changedProperties); + changedProperties.forEach((v, k) => { + const observers = this.constructor + ._observers; + const observer = observers.get(k); + if (observer !== undefined) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + observer.call(this, this[k], v); + } + }); + }; + // clone any existing observers (superclasses) + // eslint-disable-next-line no-prototype-builtins + } + else if (!proto.constructor.hasOwnProperty('_observers')) { + const observers = proto.constructor._observers; + proto.constructor._observers = new Map(); + observers.forEach( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (v, k) => proto.constructor._observers.set(k, v)); + } + // set this method + proto.constructor._observers.set(propName, observer); +}; +//# sourceMappingURL=observer.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-base/utils.js": +/*!**************************************************!*\ + !*** ./node_modules/@material/mwc-base/utils.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ addHasRemoveClass: () => (/* binding */ addHasRemoveClass), +/* harmony export */ deepActiveElementPath: () => (/* binding */ deepActiveElementPath), +/* harmony export */ doesElementContainFocus: () => (/* binding */ doesElementContainFocus), +/* harmony export */ isNodeElement: () => (/* binding */ isNodeElement), +/* harmony export */ supportsPassiveEventListener: () => (/* binding */ supportsPassiveEventListener) +/* harmony export */ }); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore +/** + * Determines whether a node is an element. + * + * @param node Node to check + */ +const isNodeElement = (node) => { + return node.nodeType === Node.ELEMENT_NODE; +}; +function addHasRemoveClass(element) { + return { + addClass: (className) => { + element.classList.add(className); + }, + removeClass: (className) => { + element.classList.remove(className); + }, + hasClass: (className) => element.classList.contains(className), + }; +} +let supportsPassive = false; +const fn = () => { }; +const optionsBlock = { + get passive() { + supportsPassive = true; + return false; + } +}; +document.addEventListener('x', fn, optionsBlock); +document.removeEventListener('x', fn); +/** + * Do event listeners suport the `passive` option? + */ +const supportsPassiveEventListener = supportsPassive; +const deepActiveElementPath = (doc = window.document) => { + let activeElement = doc.activeElement; + const path = []; + if (!activeElement) { + return path; + } + while (activeElement) { + path.push(activeElement); + if (activeElement.shadowRoot) { + activeElement = activeElement.shadowRoot.activeElement; + } + else { + break; + } + } + return path; +}; +const doesElementContainFocus = (element) => { + const activePath = deepActiveElementPath(); + if (!activePath.length) { + return false; + } + const deepActiveElement = activePath[activePath.length - 1]; + const focusEv = new Event('check-if-focused', { bubbles: true, composed: true }); + let composedPath = []; + const listener = (ev) => { + composedPath = ev.composedPath(); + }; + document.body.addEventListener('check-if-focused', listener); + deepActiveElement.dispatchEvent(focusEv); + document.body.removeEventListener('check-if-focused', listener); + return composedPath.indexOf(element) !== -1; +}; +//# sourceMappingURL=utils.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-button/mwc-button-base.js": +/*!**************************************************************!*\ + !*** ./node_modules/@material/mwc-button/mwc-button-base.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ButtonBase: () => (/* binding */ ButtonBase) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_mwc_icon_mwc_icon__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/mwc-icon/mwc-icon */ "./node_modules/@material/mwc-icon/mwc-icon.js"); +/* harmony import */ var _material_mwc_ripple_mwc_ripple__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/mwc-ripple/mwc-ripple */ "./node_modules/@material/mwc-ripple/mwc-ripple.js"); +/* harmony import */ var _material_mwc_base_aria_property__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/mwc-base/aria-property */ "./node_modules/@material/mwc-base/aria-property.js"); +/* harmony import */ var _material_mwc_ripple_ripple_handlers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material/mwc-ripple/ripple-handlers */ "./node_modules/@material/mwc-ripple/ripple-handlers.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var lit_directives_class_map_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lit/directives/class-map.js */ "./node_modules/lit/directives/class-map.js"); +/* harmony import */ var lit_directives_if_defined_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! lit/directives/if-defined.js */ "./node_modules/lit/directives/if-defined.js"); +/** + * @license + * Copyright 2019 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + + + + + +/** @soyCompatible */ +class ButtonBase extends lit__WEBPACK_IMPORTED_MODULE_4__.LitElement { + constructor() { + super(...arguments); + this.raised = false; + this.unelevated = false; + this.outlined = false; + this.dense = false; + this.disabled = false; + this.trailingIcon = false; + this.fullwidth = false; + this.icon = ''; + this.label = ''; + this.expandContent = false; + this.shouldRenderRipple = false; + this.rippleHandlers = new _material_mwc_ripple_ripple_handlers__WEBPACK_IMPORTED_MODULE_3__.RippleHandlers(() => { + this.shouldRenderRipple = true; + return this.ripple; + }); + } + /** @soyTemplate */ + renderOverlay() { + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) ``; + } + /** @soyTemplate */ + renderRipple() { + const filled = this.raised || this.unelevated; + return this.shouldRenderRipple ? + (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) `` : + ''; + } + focus() { + const buttonElement = this.buttonElement; + if (buttonElement) { + this.rippleHandlers.startFocus(); + buttonElement.focus(); + } + } + blur() { + const buttonElement = this.buttonElement; + if (buttonElement) { + this.rippleHandlers.endFocus(); + buttonElement.blur(); + } + } + /** @soyTemplate */ + getRenderClasses() { + return { + 'mdc-button--raised': this.raised, + 'mdc-button--unelevated': this.unelevated, + 'mdc-button--outlined': this.outlined, + 'mdc-button--dense': this.dense, + }; + } + /** + * @soyTemplate + * @soyAttributes buttonAttributes: #button + * @soyClasses buttonClasses: #button + */ + render() { + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) ` + `; + } + /** @soyTemplate */ + renderIcon() { + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) ` + + ${this.icon} + `; + } + handleRippleActivate(evt) { + const onUp = () => { + window.removeEventListener('mouseup', onUp); + this.handleRippleDeactivate(); + }; + window.addEventListener('mouseup', onUp); + this.rippleHandlers.startPress(evt); + } + handleRippleDeactivate() { + this.rippleHandlers.endPress(); + } + handleRippleMouseEnter() { + this.rippleHandlers.startHover(); + } + handleRippleMouseLeave() { + this.rippleHandlers.endHover(); + } + handleRippleFocus() { + this.rippleHandlers.startFocus(); + } + handleRippleBlur() { + this.rippleHandlers.endFocus(); + } +} +ButtonBase.shadowRootOptions = { mode: 'open', delegatesFocus: true }; +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + _material_mwc_base_aria_property__WEBPACK_IMPORTED_MODULE_2__.ariaProperty, + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String, attribute: 'aria-haspopup' }) +], ButtonBase.prototype, "ariaHasPopup", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }) +], ButtonBase.prototype, "raised", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }) +], ButtonBase.prototype, "unelevated", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }) +], ButtonBase.prototype, "outlined", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], ButtonBase.prototype, "dense", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }) +], ButtonBase.prototype, "disabled", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, attribute: 'trailingicon' }) +], ButtonBase.prototype, "trailingIcon", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }) +], ButtonBase.prototype, "fullwidth", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], ButtonBase.prototype, "icon", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], ButtonBase.prototype, "label", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], ButtonBase.prototype, "expandContent", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.query)('#button') +], ButtonBase.prototype, "buttonElement", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.queryAsync)('mwc-ripple') +], ButtonBase.prototype, "ripple", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.state)() +], ButtonBase.prototype, "shouldRenderRipple", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.eventOptions)({ passive: true }) +], ButtonBase.prototype, "handleRippleActivate", null); +//# sourceMappingURL=mwc-button-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-button/mwc-button.js": +/*!*********************************************************!*\ + !*** ./node_modules/@material/mwc-button/mwc-button.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Button: () => (/* binding */ Button) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_button_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-button-base */ "./node_modules/@material/mwc-button/mwc-button-base.js"); +/* harmony import */ var _styles_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./styles.css */ "./node_modules/@material/mwc-button/styles.css.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +/** @soyCompatible */ +let Button = class Button extends _mwc_button_base__WEBPACK_IMPORTED_MODULE_1__.ButtonBase { +}; +Button.styles = [_styles_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +Button = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-button') +], Button); + +//# sourceMappingURL=mwc-button.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-button/styles.css.js": +/*!*********************************************************!*\ + !*** ./node_modules/@material/mwc-button/styles.css.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `.mdc-button{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-button-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-button-font-size, 0.875rem);line-height:2.25rem;line-height:var(--mdc-typography-button-line-height, 2.25rem);font-weight:500;font-weight:var(--mdc-typography-button-font-weight, 500);letter-spacing:0.0892857143em;letter-spacing:var(--mdc-typography-button-letter-spacing, 0.0892857143em);text-decoration:none;text-decoration:var(--mdc-typography-button-text-decoration, none);text-transform:uppercase;text-transform:var(--mdc-typography-button-text-transform, uppercase)}.mdc-touch-target-wrapper{display:inline}.mdc-elevation-overlay{position:absolute;border-radius:inherit;pointer-events:none;opacity:0;opacity:var(--mdc-elevation-overlay-opacity, 0);transition:opacity 280ms cubic-bezier(0.4, 0, 0.2, 1);background-color:#fff;background-color:var(--mdc-elevation-overlay-color, #fff)}.mdc-button{position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;min-width:64px;border:none;outline:none;line-height:inherit;user-select:none;-webkit-appearance:none;overflow:visible;vertical-align:middle;background:transparent}.mdc-button .mdc-elevation-overlay{width:100%;height:100%;top:0;left:0}.mdc-button::-moz-focus-inner{padding:0;border:0}.mdc-button:active{outline:none}.mdc-button:hover{cursor:pointer}.mdc-button:disabled{cursor:default;pointer-events:none}.mdc-button .mdc-button__icon{margin-left:0;margin-right:8px;display:inline-block;position:relative;vertical-align:top}[dir=rtl] .mdc-button .mdc-button__icon,.mdc-button .mdc-button__icon[dir=rtl]{margin-left:8px;margin-right:0}.mdc-button .mdc-button__label{position:relative}.mdc-button .mdc-button__touch{position:absolute;top:50%;height:48px;left:0;right:0;transform:translateY(-50%)}.mdc-button__label+.mdc-button__icon{margin-left:8px;margin-right:0}[dir=rtl] .mdc-button__label+.mdc-button__icon,.mdc-button__label+.mdc-button__icon[dir=rtl]{margin-left:0;margin-right:8px}svg.mdc-button__icon{fill:currentColor}.mdc-button--touch{margin-top:6px;margin-bottom:6px}.mdc-button{padding:0 8px 0 8px}.mdc-button--unelevated{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);padding:0 16px 0 16px}.mdc-button--unelevated.mdc-button--icon-trailing{padding:0 12px 0 16px}.mdc-button--unelevated.mdc-button--icon-leading{padding:0 16px 0 12px}.mdc-button--raised{transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1);padding:0 16px 0 16px}.mdc-button--raised.mdc-button--icon-trailing{padding:0 12px 0 16px}.mdc-button--raised.mdc-button--icon-leading{padding:0 16px 0 12px}.mdc-button--outlined{border-style:solid;transition:border 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-button--outlined .mdc-button__ripple{border-style:solid;border-color:transparent}.mdc-button{height:36px;border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button:not(:disabled){color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-button:disabled{color:rgba(0, 0, 0, 0.38)}.mdc-button .mdc-button__icon{font-size:1.125rem;width:1.125rem;height:1.125rem}.mdc-button .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--raised,.mdc-button--unelevated{height:36px;border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--raised:not(:disabled),.mdc-button--unelevated:not(:disabled){background-color:#6200ee;background-color:var(--mdc-theme-primary, #6200ee)}.mdc-button--raised:disabled,.mdc-button--unelevated:disabled{background-color:rgba(0, 0, 0, 0.12)}.mdc-button--raised:not(:disabled),.mdc-button--unelevated:not(:disabled){color:#fff;color:var(--mdc-theme-on-primary, #fff)}.mdc-button--raised:disabled,.mdc-button--unelevated:disabled{color:rgba(0, 0, 0, 0.38)}.mdc-button--raised .mdc-button__icon,.mdc-button--unelevated .mdc-button__icon{font-size:1.125rem;width:1.125rem;height:1.125rem}.mdc-button--raised .mdc-button__ripple,.mdc-button--unelevated .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--outlined{height:36px;border-radius:4px;border-radius:var(--mdc-shape-small, 4px);padding:0 15px 0 15px;border-width:1px}.mdc-button--outlined:not(:disabled){color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}.mdc-button--outlined:disabled{color:rgba(0, 0, 0, 0.38)}.mdc-button--outlined .mdc-button__icon{font-size:1.125rem;width:1.125rem;height:1.125rem}.mdc-button--outlined .mdc-button__ripple{border-radius:4px;border-radius:var(--mdc-shape-small, 4px)}.mdc-button--outlined:not(:disabled){border-color:rgba(0, 0, 0, 0.12)}.mdc-button--outlined:disabled{border-color:rgba(0, 0, 0, 0.12)}.mdc-button--outlined.mdc-button--icon-trailing{padding:0 11px 0 15px}.mdc-button--outlined.mdc-button--icon-leading{padding:0 15px 0 11px}.mdc-button--outlined .mdc-button__ripple{top:calc(-1 * 1px);left:calc(-1 * 1px);border-width:1px}.mdc-button--outlined .mdc-button__touch{left:calc(-1 * 1px);width:calc(100% + 2 * 1px)}.mdc-button--raised{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0,0,0,.12);transition:box-shadow 280ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-button--raised:hover,.mdc-button--raised:focus{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2),0px 4px 5px 0px rgba(0, 0, 0, 0.14),0px 1px 10px 0px rgba(0,0,0,.12)}.mdc-button--raised:active{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12)}.mdc-button--raised:disabled{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2),0px 0px 0px 0px rgba(0, 0, 0, 0.14),0px 0px 0px 0px rgba(0,0,0,.12)}:host{display:inline-flex;outline:none;-webkit-tap-highlight-color:transparent;vertical-align:top}:host([fullwidth]){width:100%}:host([raised]),:host([unelevated]){--mdc-ripple-color:#fff;--mdc-ripple-focus-opacity:0.24;--mdc-ripple-hover-opacity:0.08;--mdc-ripple-press-opacity:0.24}.trailing-icon ::slotted(*),.trailing-icon .mdc-button__icon,.leading-icon ::slotted(*),.leading-icon .mdc-button__icon{margin-left:0;margin-right:8px;display:inline-block;position:relative;vertical-align:top;font-size:1.125rem;height:1.125rem;width:1.125rem}[dir=rtl] .trailing-icon ::slotted(*),[dir=rtl] .trailing-icon .mdc-button__icon,[dir=rtl] .leading-icon ::slotted(*),[dir=rtl] .leading-icon .mdc-button__icon,.trailing-icon ::slotted(*[dir=rtl]),.trailing-icon .mdc-button__icon[dir=rtl],.leading-icon ::slotted(*[dir=rtl]),.leading-icon .mdc-button__icon[dir=rtl]{margin-left:8px;margin-right:0}.trailing-icon ::slotted(*),.trailing-icon .mdc-button__icon{margin-left:8px;margin-right:0}[dir=rtl] .trailing-icon ::slotted(*),[dir=rtl] .trailing-icon .mdc-button__icon,.trailing-icon ::slotted(*[dir=rtl]),.trailing-icon .mdc-button__icon[dir=rtl]{margin-left:0;margin-right:8px}.slot-container{display:inline-flex;align-items:center;justify-content:center}.slot-container.flex{flex:auto}.mdc-button{flex:auto;overflow:hidden;padding-left:8px;padding-left:var(--mdc-button-horizontal-padding, 8px);padding-right:8px;padding-right:var(--mdc-button-horizontal-padding, 8px)}.mdc-button--raised{box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12))}.mdc-button--raised:focus{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow-focus, var(--mdc-button-raised-box-shadow-hover, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12)))}.mdc-button--raised:hover{box-shadow:0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow-hover, 0px 2px 4px -1px rgba(0, 0, 0, 0.2), 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12))}.mdc-button--raised:active{box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow-active, 0px 5px 5px -3px rgba(0, 0, 0, 0.2), 0px 8px 10px 1px rgba(0, 0, 0, 0.14), 0px 3px 14px 2px rgba(0, 0, 0, 0.12))}.mdc-button--raised:disabled{box-shadow:0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12);box-shadow:var(--mdc-button-raised-box-shadow-disabled, 0px 0px 0px 0px rgba(0, 0, 0, 0.2), 0px 0px 0px 0px rgba(0, 0, 0, 0.14), 0px 0px 0px 0px rgba(0, 0, 0, 0.12))}.mdc-button--raised,.mdc-button--unelevated{padding-left:16px;padding-left:var(--mdc-button-horizontal-padding, 16px);padding-right:16px;padding-right:var(--mdc-button-horizontal-padding, 16px)}.mdc-button--outlined{border-width:1px;border-width:var(--mdc-button-outline-width, 1px);padding-left:calc(16px - 1px);padding-left:calc(var(--mdc-button-horizontal-padding, 16px) - var(--mdc-button-outline-width, 1px));padding-right:calc(16px - 1px);padding-right:calc(var(--mdc-button-horizontal-padding, 16px) - var(--mdc-button-outline-width, 1px))}.mdc-button--outlined:not(:disabled){border-color:rgba(0, 0, 0, 0.12);border-color:var(--mdc-button-outline-color, rgba(0, 0, 0, 0.12))}.mdc-button--outlined .ripple{top:calc(-1 * 1px);top:calc(-1 * var(--mdc-button-outline-width, 1px));left:calc(-1 * 1px);left:calc(-1 * var(--mdc-button-outline-width, 1px));right:initial;right:initial;border-width:1px;border-width:var(--mdc-button-outline-width, 1px);border-style:solid;border-color:transparent}[dir=rtl] .mdc-button--outlined .ripple,.mdc-button--outlined .ripple[dir=rtl]{left:initial;left:initial;right:calc(-1 * 1px);right:calc(-1 * var(--mdc-button-outline-width, 1px))}.mdc-button--dense{height:28px;margin-top:0;margin-bottom:0}.mdc-button--dense .mdc-button__touch{height:100%}:host([disabled]){pointer-events:none}:host([disabled]) .mdc-button{color:rgba(0, 0, 0, 0.38);color:var(--mdc-button-disabled-ink-color, rgba(0, 0, 0, 0.38))}:host([disabled]) .mdc-button--raised,:host([disabled]) .mdc-button--unelevated{background-color:rgba(0, 0, 0, 0.12);background-color:var(--mdc-button-disabled-fill-color, rgba(0, 0, 0, 0.12))}:host([disabled]) .mdc-button--outlined{border-color:rgba(0, 0, 0, 0.12);border-color:var(--mdc-button-disabled-outline-color, rgba(0, 0, 0, 0.12))}`; +//# sourceMappingURL=styles.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-icon-button/mwc-icon-button-base.js": +/*!************************************************************************!*\ + !*** ./node_modules/@material/mwc-icon-button/mwc-icon-button-base.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IconButtonBase: () => (/* binding */ IconButtonBase) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_mwc_ripple_mwc_ripple__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/mwc-ripple/mwc-ripple */ "./node_modules/@material/mwc-ripple/mwc-ripple.js"); +/* harmony import */ var _material_mwc_base_aria_property__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/mwc-base/aria-property */ "./node_modules/@material/mwc-base/aria-property.js"); +/* harmony import */ var _material_mwc_ripple_ripple_handlers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/mwc-ripple/ripple-handlers */ "./node_modules/@material/mwc-ripple/ripple-handlers.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var lit_directives_if_defined_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/directives/if-defined.js */ "./node_modules/lit/directives/if-defined.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + + + +/** @soyCompatible */ +class IconButtonBase extends lit__WEBPACK_IMPORTED_MODULE_3__.LitElement { + constructor() { + super(...arguments); + this.disabled = false; + this.icon = ''; + this.shouldRenderRipple = false; + this.rippleHandlers = new _material_mwc_ripple_ripple_handlers__WEBPACK_IMPORTED_MODULE_2__.RippleHandlers(() => { + this.shouldRenderRipple = true; + return this.ripple; + }); + } + /** @soyTemplate */ + renderRipple() { + return this.shouldRenderRipple ? (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + + ` : + ''; + } + focus() { + const buttonElement = this.buttonElement; + if (buttonElement) { + this.rippleHandlers.startFocus(); + buttonElement.focus(); + } + } + blur() { + const buttonElement = this.buttonElement; + if (buttonElement) { + this.rippleHandlers.endFocus(); + buttonElement.blur(); + } + } + /** @soyTemplate */ + render() { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ``; + } + handleRippleMouseDown(event) { + const onUp = () => { + window.removeEventListener('mouseup', onUp); + this.handleRippleDeactivate(); + }; + window.addEventListener('mouseup', onUp); + this.rippleHandlers.startPress(event); + } + handleRippleTouchStart(event) { + this.rippleHandlers.startPress(event); + } + handleRippleDeactivate() { + this.rippleHandlers.endPress(); + } + handleRippleMouseEnter() { + this.rippleHandlers.startHover(); + } + handleRippleMouseLeave() { + this.rippleHandlers.endHover(); + } + handleRippleFocus() { + this.rippleHandlers.startFocus(); + } + handleRippleBlur() { + this.rippleHandlers.endFocus(); + } +} +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }) +], IconButtonBase.prototype, "disabled", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String }) +], IconButtonBase.prototype, "icon", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + _material_mwc_base_aria_property__WEBPACK_IMPORTED_MODULE_1__.ariaProperty, + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String, attribute: 'aria-label' }) +], IconButtonBase.prototype, "ariaLabel", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + _material_mwc_base_aria_property__WEBPACK_IMPORTED_MODULE_1__.ariaProperty, + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String, attribute: 'aria-haspopup' }) +], IconButtonBase.prototype, "ariaHasPopup", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.query)('button') +], IconButtonBase.prototype, "buttonElement", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.queryAsync)('mwc-ripple') +], IconButtonBase.prototype, "ripple", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], IconButtonBase.prototype, "shouldRenderRipple", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.eventOptions)({ passive: true }) +], IconButtonBase.prototype, "handleRippleMouseDown", null); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.eventOptions)({ passive: true }) +], IconButtonBase.prototype, "handleRippleTouchStart", null); +//# sourceMappingURL=mwc-icon-button-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-icon-button/mwc-icon-button.css.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@material/mwc-icon-button/mwc-icon-button.css.js ***! + \***********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `.material-icons{font-family:var(--mdc-icon-font, "Material Icons");font-weight:normal;font-style:normal;font-size:var(--mdc-icon-size, 24px);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}.mdc-icon-button{font-size:24px;width:48px;height:48px;padding:12px}.mdc-icon-button.mdc-icon-button--reduced-size .mdc-icon-button__ripple{width:40px;height:40px;margin-top:4px;margin-bottom:4px;margin-right:4px;margin-left:4px}.mdc-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}.mdc-icon-button:disabled{color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-disabled-on-light, rgba(0, 0, 0, 0.38))}.mdc-icon-button svg,.mdc-icon-button img{width:24px;height:24px}.mdc-icon-button{display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:transparent;fill:currentColor;color:inherit;text-decoration:none;cursor:pointer;user-select:none;z-index:0;overflow:visible}.mdc-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}.mdc-icon-button:disabled{cursor:default;pointer-events:none}.mdc-icon-button--display-flex{align-items:center;display:inline-flex;justify-content:center}.mdc-icon-button__icon{display:inline-block}.mdc-icon-button__icon.mdc-icon-button__icon--on{display:none}.mdc-icon-button--on .mdc-icon-button__icon{display:none}.mdc-icon-button--on .mdc-icon-button__icon.mdc-icon-button__icon--on{display:inline-block}.mdc-icon-button{display:inline-block;position:relative;box-sizing:border-box;border:none;outline:none;background-color:transparent;fill:currentColor;color:inherit;text-decoration:none;cursor:pointer;user-select:none;z-index:0;overflow:visible}.mdc-icon-button .mdc-icon-button__touch{position:absolute;top:50%;height:48px;left:50%;width:48px;transform:translate(-50%, -50%)}.mdc-icon-button:disabled{cursor:default;pointer-events:none}.mdc-icon-button--display-flex{align-items:center;display:inline-flex;justify-content:center}.mdc-icon-button__icon{display:inline-block}.mdc-icon-button__icon.mdc-icon-button__icon--on{display:none}.mdc-icon-button--on .mdc-icon-button__icon{display:none}.mdc-icon-button--on .mdc-icon-button__icon.mdc-icon-button__icon--on{display:inline-block}:host{display:inline-block;outline:none}:host([disabled]){pointer-events:none}.mdc-icon-button i,.mdc-icon-button svg,.mdc-icon-button img,.mdc-icon-button ::slotted(*){display:block}:host{--mdc-ripple-color: currentcolor;-webkit-tap-highlight-color:transparent}:host,.mdc-icon-button{vertical-align:top}.mdc-icon-button{width:var(--mdc-icon-button-size, 48px);height:var(--mdc-icon-button-size, 48px);padding:calc( (var(--mdc-icon-button-size, 48px) - var(--mdc-icon-size, 24px)) / 2 )}.mdc-icon-button i,.mdc-icon-button svg,.mdc-icon-button img,.mdc-icon-button ::slotted(*){display:block;width:var(--mdc-icon-size, 24px);height:var(--mdc-icon-size, 24px)}`; +//# sourceMappingURL=mwc-icon-button.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-icon-button/mwc-icon-button.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@material/mwc-icon-button/mwc-icon-button.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IconButton: () => (/* binding */ IconButton) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_icon_button_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-icon-button-base */ "./node_modules/@material/mwc-icon-button/mwc-icon-button-base.js"); +/* harmony import */ var _mwc_icon_button_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-icon-button.css */ "./node_modules/@material/mwc-icon-button/mwc-icon-button.css.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +/** @soyCompatible */ +let IconButton = class IconButton extends _mwc_icon_button_base__WEBPACK_IMPORTED_MODULE_1__.IconButtonBase { +}; +IconButton.styles = [_mwc_icon_button_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +IconButton = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-icon-button') +], IconButton); + +//# sourceMappingURL=mwc-icon-button.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-icon/mwc-icon-host.css.js": +/*!**************************************************************!*\ + !*** ./node_modules/@material/mwc-icon/mwc-icon-host.css.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `:host{font-family:var(--mdc-icon-font, "Material Icons");font-weight:normal;font-style:normal;font-size:var(--mdc-icon-size, 24px);line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;-moz-osx-font-smoothing:grayscale;font-feature-settings:"liga"}`; +//# sourceMappingURL=mwc-icon-host.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-icon/mwc-icon.js": +/*!*****************************************************!*\ + !*** ./node_modules/@material/mwc-icon/mwc-icon.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Icon: () => (/* binding */ Icon) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_icon_host_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-icon-host.css */ "./node_modules/@material/mwc-icon/mwc-icon-host.css.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +/** @soyCompatible */ +let Icon = class Icon extends lit__WEBPACK_IMPORTED_MODULE_0__.LitElement { + /** @soyTemplate */ + render() { + return (0,lit__WEBPACK_IMPORTED_MODULE_0__.html) ``; + } +}; +Icon.styles = [_mwc_icon_host_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +Icon = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_1__.customElement)('mwc-icon') +], Icon); + +//# sourceMappingURL=mwc-icon.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list-base.js": +/*!**********************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list-base.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ListBase: () => (/* binding */ ListBase), +/* harmony export */ createSetFromIndex: () => (/* reexport safe */ _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_7__.createSetFromIndex), +/* harmony export */ isEventMulti: () => (/* reexport safe */ _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_7__.isEventMulti), +/* harmony export */ isIndexSet: () => (/* reexport safe */ _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_7__.isIndexSet) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _mwc_list_item__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mwc-list-item */ "./node_modules/@material/mwc-list/mwc-list-item.js"); +/* harmony import */ var _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/mwc-base/base-element */ "./node_modules/@material/mwc-base/base-element.js"); +/* harmony import */ var _material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/mwc-base/observer */ "./node_modules/@material/mwc-base/observer.js"); +/* harmony import */ var _material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material/mwc-base/utils */ "./node_modules/@material/mwc-base/utils.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var lit_directives_if_defined_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lit/directives/if-defined.js */ "./node_modules/lit/directives/if-defined.js"); +/* harmony import */ var _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./mwc-list-foundation */ "./node_modules/@material/mwc-list/mwc-list-foundation.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + + + + + + +function debounceLayout(callback, waitInMS = 50) { + let timeoutId; + // tslint:disable-next-line + return function (updateItems = true) { + clearTimeout(timeoutId); + timeoutId = setTimeout(() => { + callback(updateItems); + }, waitInMS); + }; +} +const isListItem = (element) => { + return element.hasAttribute('mwc-list-item'); +}; +function clearAndCreateItemsReadyPromise() { + const oldResolver = this.itemsReadyResolver; + this.itemsReady = new Promise((res) => { + // TODO(b/175626389): Type '(value: never[] | PromiseLike) => void' + // is not assignable to type '(value?: never[] | PromiseLike | + // undefined) => void'. + return this.itemsReadyResolver = res; + }); + oldResolver(); +} +/** + * @fires selected {SelectedDetail} + * @fires action {ActionDetail} + * @fires items-updated + */ +class ListBase extends _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_1__.BaseElement { + constructor() { + super(); + this.mdcAdapter = null; + this.mdcFoundationClass = _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_7__["default"]; + this.activatable = false; + this.multi = false; + this.wrapFocus = false; + this.itemRoles = null; + this.innerRole = null; + this.innerAriaLabel = null; + this.rootTabbable = false; + this.previousTabindex = null; + this.noninteractive = false; + this.itemsReadyResolver = (() => { + // + }); + this.itemsReady = Promise.resolve([]); + // tslint:enable:ban-ts-ignore + this.items_ = []; + const debouncedFunction = debounceLayout(this.layout.bind(this)); + this.debouncedLayout = (updateItems = true) => { + clearAndCreateItemsReadyPromise.call(this); + debouncedFunction(updateItems); + }; + } + // tslint:disable:ban-ts-ignore + async getUpdateComplete() { + // @ts-ignore + const result = await super.getUpdateComplete(); + await this.itemsReady; + return result; + } + get items() { + return this.items_; + } + updateItems() { + var _a; + const nodes = (_a = this.assignedElements) !== null && _a !== void 0 ? _a : []; + const listItems = []; + for (const node of nodes) { + if (isListItem(node)) { + listItems.push(node); + node._managingList = this; + } + if (node.hasAttribute('divider') && !node.hasAttribute('role')) { + node.setAttribute('role', 'separator'); + } + } + this.items_ = listItems; + const selectedIndices = new Set(); + this.items_.forEach((item, index) => { + if (this.itemRoles) { + item.setAttribute('role', this.itemRoles); + } + else { + item.removeAttribute('role'); + } + if (item.selected) { + selectedIndices.add(index); + } + }); + if (this.multi) { + this.select(selectedIndices); + } + else { + const index = selectedIndices.size ? selectedIndices.entries().next().value[1] : -1; + this.select(index); + } + const itemsUpdatedEv = new Event('items-updated', { bubbles: true, composed: true }); + this.dispatchEvent(itemsUpdatedEv); + } + get selected() { + const index = this.index; + if (!(0,_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_7__.isIndexSet)(index)) { + if (index === -1) { + return null; + } + return this.items[index]; + } + const selected = []; + for (const entry of index) { + selected.push(this.items[entry]); + } + return selected; + } + get index() { + if (this.mdcFoundation) { + return this.mdcFoundation.getSelectedIndex(); + } + return -1; + } + render() { + const role = this.innerRole === null ? undefined : this.innerRole; + const ariaLabel = this.innerAriaLabel === null ? undefined : this.innerAriaLabel; + const tabindex = this.rootTabbable ? '0' : '-1'; + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) ` + +
    + + ${this.renderPlaceholder()} +
+ `; + } + renderPlaceholder() { + var _a; + const nodes = (_a = this.assignedElements) !== null && _a !== void 0 ? _a : []; + if (this.emptyMessage !== undefined && nodes.length === 0) { + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) ` + ${this.emptyMessage} + `; + } + return null; + } + firstUpdated() { + super.firstUpdated(); + if (!this.items.length) { + // required because this is called before observers + this.mdcFoundation.setMulti(this.multi); + // for when children upgrade before list + this.layout(); + } + } + onFocusIn(evt) { + if (this.mdcFoundation && this.mdcRoot) { + const index = this.getIndexOfTarget(evt); + this.mdcFoundation.handleFocusIn(evt, index); + } + } + onFocusOut(evt) { + if (this.mdcFoundation && this.mdcRoot) { + const index = this.getIndexOfTarget(evt); + this.mdcFoundation.handleFocusOut(evt, index); + } + } + onKeydown(evt) { + if (this.mdcFoundation && this.mdcRoot) { + const index = this.getIndexOfTarget(evt); + const target = evt.target; + const isRootListItem = isListItem(target); + this.mdcFoundation.handleKeydown(evt, isRootListItem, index); + } + } + onRequestSelected(evt) { + if (this.mdcFoundation) { + let index = this.getIndexOfTarget(evt); + // might happen in shady dom slowness. Recalc children + if (index === -1) { + this.layout(); + index = this.getIndexOfTarget(evt); + // still not found; may not be mwc-list-item. Unsupported case. + if (index === -1) { + return; + } + } + const element = this.items[index]; + if (element.disabled) { + return; + } + const selected = evt.detail.selected; + const source = evt.detail.source; + this.mdcFoundation.handleSingleSelection(index, source === 'interaction', selected); + evt.stopPropagation(); + } + } + getIndexOfTarget(evt) { + const elements = this.items; + const path = evt.composedPath(); + for (const pathItem of path) { + let index = -1; + if ((0,_material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_3__.isNodeElement)(pathItem) && isListItem(pathItem)) { + index = elements.indexOf(pathItem); + } + if (index !== -1) { + return index; + } + } + return -1; + } + createAdapter() { + this.mdcAdapter = { + getListItemCount: () => { + if (this.mdcRoot) { + return this.items.length; + } + return 0; + }, + getFocusedElementIndex: this.getFocusedItemIndex, + getAttributeForElementIndex: (index, attr) => { + const listElement = this.mdcRoot; + if (!listElement) { + return ''; + } + const element = this.items[index]; + return element ? element.getAttribute(attr) : ''; + }, + setAttributeForElementIndex: (index, attr, val) => { + if (!this.mdcRoot) { + return; + } + const element = this.items[index]; + if (element) { + element.setAttribute(attr, val); + } + }, + focusItemAtIndex: (index) => { + const element = this.items[index]; + if (element) { + element.focus(); + } + }, + setTabIndexForElementIndex: (index, value) => { + const item = this.items[index]; + if (item) { + item.tabindex = value; + } + }, + notifyAction: (index) => { + const init = { bubbles: true, composed: true }; + init.detail = { index }; + const ev = new CustomEvent('action', init); + this.dispatchEvent(ev); + }, + notifySelected: (index, diff) => { + const init = { bubbles: true, composed: true }; + init.detail = { index, diff }; + const ev = new CustomEvent('selected', init); + this.dispatchEvent(ev); + }, + isFocusInsideList: () => { + return (0,_material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_3__.doesElementContainFocus)(this); + }, + isRootFocused: () => { + const mdcRoot = this.mdcRoot; + const root = mdcRoot.getRootNode(); + return root.activeElement === mdcRoot; + }, + setDisabledStateForElementIndex: (index, value) => { + const item = this.items[index]; + if (!item) { + return; + } + item.disabled = value; + }, + getDisabledStateForElementIndex: (index) => { + const item = this.items[index]; + if (!item) { + return false; + } + return item.disabled; + }, + setSelectedStateForElementIndex: (index, value) => { + const item = this.items[index]; + if (!item) { + return; + } + item.selected = value; + }, + getSelectedStateForElementIndex: (index) => { + const item = this.items[index]; + if (!item) { + return false; + } + return item.selected; + }, + setActivatedStateForElementIndex: (index, value) => { + const item = this.items[index]; + if (!item) { + return; + } + item.activated = value; + }, + }; + return this.mdcAdapter; + } + selectUi(index, activate = false) { + const item = this.items[index]; + if (item) { + item.selected = true; + item.activated = activate; + } + } + deselectUi(index) { + const item = this.items[index]; + if (item) { + item.selected = false; + item.activated = false; + } + } + select(index) { + if (!this.mdcFoundation) { + return; + } + this.mdcFoundation.setSelectedIndex(index); + } + toggle(index, force) { + if (this.multi) { + this.mdcFoundation.toggleMultiAtIndex(index, force); + } + } + onListItemConnected(e) { + const target = e.target; + this.layout(this.items.indexOf(target) === -1); + } + layout(updateItems = true) { + if (updateItems) { + this.updateItems(); + } + const first = this.items[0]; + for (const item of this.items) { + item.tabindex = -1; + } + if (first) { + if (this.noninteractive) { + if (!this.previousTabindex) { + this.previousTabindex = first; + } + } + else { + first.tabindex = 0; + } + } + this.itemsReadyResolver(); + } + getFocusedItemIndex() { + if (!this.mdcRoot) { + return -1; + } + if (!this.items.length) { + return -1; + } + const activeElementPath = (0,_material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_3__.deepActiveElementPath)(); + if (!activeElementPath.length) { + return -1; + } + for (let i = activeElementPath.length - 1; i >= 0; i--) { + const activeItem = activeElementPath[i]; + if (isListItem(activeItem)) { + return this.items.indexOf(activeItem); + } + } + return -1; + } + focusItemAtIndex(index) { + for (const item of this.items) { + if (item.tabindex === 0) { + item.tabindex = -1; + break; + } + } + this.items[index].tabindex = 0; + this.items[index].focus(); + } + focus() { + const root = this.mdcRoot; + if (root) { + root.focus(); + } + } + blur() { + const root = this.mdcRoot; + if (root) { + root.blur(); + } + } +} +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], ListBase.prototype, "emptyMessage", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.query)('.mdc-deprecated-list') +], ListBase.prototype, "mdcRoot", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.queryAssignedNodes)('', true, '*') +], ListBase.prototype, "assignedElements", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.queryAssignedNodes)('', true, '[tabindex="0"]') +], ListBase.prototype, "tabbableElements", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_2__.observer)(function (value) { + if (this.mdcFoundation) { + this.mdcFoundation.setUseActivatedClass(value); + } + }) +], ListBase.prototype, "activatable", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_2__.observer)(function (newValue, oldValue) { + if (this.mdcFoundation) { + this.mdcFoundation.setMulti(newValue); + } + if (oldValue !== undefined) { + this.layout(); + } + }) +], ListBase.prototype, "multi", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_2__.observer)(function (value) { + if (this.mdcFoundation) { + this.mdcFoundation.setWrapFocus(value); + } + }) +], ListBase.prototype, "wrapFocus", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_2__.observer)(function (_newValue, oldValue) { + if (oldValue !== undefined) { + this.updateItems(); + } + }) +], ListBase.prototype, "itemRoles", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], ListBase.prototype, "innerRole", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], ListBase.prototype, "innerAriaLabel", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], ListBase.prototype, "rootTabbable", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_2__.observer)(function (value) { + var _a, _b; + if (value) { + const tabbable = (_b = (_a = this.tabbableElements) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null; + this.previousTabindex = tabbable; + if (tabbable) { + tabbable.setAttribute('tabindex', '-1'); + } + } + else if (!value && this.previousTabindex) { + this.previousTabindex.setAttribute('tabindex', '0'); + this.previousTabindex = null; + } + }) +], ListBase.prototype, "noninteractive", void 0); +//# sourceMappingURL=mwc-list-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list-foundation.js": +/*!****************************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list-foundation.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MDCListFoundation: () => (/* binding */ MDCListFoundation), +/* harmony export */ createSetFromIndex: () => (/* binding */ createSetFromIndex), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__), +/* harmony export */ isEventMulti: () => (/* binding */ isEventMulti), +/* harmony export */ isIndexSet: () => (/* binding */ isIndexSet) +/* harmony export */ }); +/* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js"); +/* harmony import */ var _material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/dom/keyboard */ "./node_modules/@material/dom/keyboard.js"); +/* harmony import */ var _material_list_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/list/constants */ "./node_modules/@material/list/constants.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +const integerSort = (a, b) => { + return a - b; +}; +const findIndexDiff = (oldSet, newSet) => { + const oldArr = Array.from(oldSet); + const newArr = Array.from(newSet); + const diff = { added: [], removed: [] }; + const oldSorted = oldArr.sort(integerSort); + const newSorted = newArr.sort(integerSort); + let i = 0; + let j = 0; + while (i < oldSorted.length || j < newSorted.length) { + const oldVal = oldSorted[i]; + const newVal = newSorted[j]; + if (oldVal === newVal) { + i++; + j++; + continue; + } + if (oldVal !== undefined && (newVal === undefined || oldVal < newVal)) { + diff.removed.push(oldVal); + i++; + continue; + } + if (newVal !== undefined && (oldVal === undefined || newVal < oldVal)) { + diff.added.push(newVal); + j++; + continue; + } + } + return diff; +}; +const ELEMENTS_KEY_ALLOWED_IN = ['input', 'button', 'textarea', 'select']; +function isIndexSet(selectedIndex) { + return selectedIndex instanceof Set; +} +function isEventMulti(evt) { + return isIndexSet(evt.detail.index); +} +const createSetFromIndex = (index) => { + const entry = index === _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX ? new Set() : index; + return isIndexSet(entry) ? new Set(entry) : new Set([entry]); +}; +class MDCListFoundation extends _material_base_foundation__WEBPACK_IMPORTED_MODULE_1__.MDCFoundation { + constructor(adapter) { + super(Object.assign(Object.assign({}, MDCListFoundation.defaultAdapter), adapter)); + this.isMulti_ = false; + this.wrapFocus_ = false; + this.isVertical_ = true; + this.selectedIndex_ = _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX; + this.focusedItemIndex_ = _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX; + this.useActivatedClass_ = false; + this.ariaCurrentAttrValue_ = null; + } + static get strings() { + return _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.strings; + } + static get numbers() { + return _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers; + } + static get defaultAdapter() { + return { + focusItemAtIndex: () => undefined, + getFocusedElementIndex: () => 0, + getListItemCount: () => 0, + isFocusInsideList: () => false, + isRootFocused: () => false, + notifyAction: () => undefined, + notifySelected: () => undefined, + getSelectedStateForElementIndex: () => false, + setDisabledStateForElementIndex: () => undefined, + getDisabledStateForElementIndex: () => false, + setSelectedStateForElementIndex: () => undefined, + setActivatedStateForElementIndex: () => undefined, + setTabIndexForElementIndex: () => undefined, + setAttributeForElementIndex: () => undefined, + getAttributeForElementIndex: () => null, + }; + } + /** + * Sets the private wrapFocus_ variable. + */ + setWrapFocus(value) { + this.wrapFocus_ = value; + } + /** + * Sets the private wrapFocus_ variable. + */ + setMulti(value) { + this.isMulti_ = value; + const currentIndex = this.selectedIndex_; + if (value) { + // number to set + if (!isIndexSet(currentIndex)) { + const isUnset = currentIndex === _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX; + this.selectedIndex_ = isUnset ? new Set() : new Set([currentIndex]); + } + } + else { + // set to first sorted number in set + if (isIndexSet(currentIndex)) { + if (currentIndex.size) { + const vals = Array.from(currentIndex).sort(integerSort); + this.selectedIndex_ = vals[0]; + } + else { + this.selectedIndex_ = _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX; + } + } + } + } + /** + * Sets the isVertical_ private variable. + */ + setVerticalOrientation(value) { + this.isVertical_ = value; + } + /** + * Sets the useActivatedClass_ private variable. + */ + setUseActivatedClass(useActivated) { + this.useActivatedClass_ = useActivated; + } + getSelectedIndex() { + return this.selectedIndex_; + } + setSelectedIndex(index) { + if (!this.isIndexValid_(index)) { + return; + } + if (this.isMulti_) { + this.setMultiSelectionAtIndex_(createSetFromIndex(index)); + } + else { + this.setSingleSelectionAtIndex_(index); + } + } + /** + * Focus in handler for the list items. + */ + handleFocusIn(_, listItemIndex) { + if (listItemIndex >= 0) { + this.adapter.setTabIndexForElementIndex(listItemIndex, 0); + } + } + /** + * Focus out handler for the list items. + */ + handleFocusOut(_, listItemIndex) { + if (listItemIndex >= 0) { + this.adapter.setTabIndexForElementIndex(listItemIndex, -1); + } + /** + * Between Focusout & Focusin some browsers do not have focus on any + * element. Setting a delay to wait till the focus is moved to next element. + */ + setTimeout(() => { + if (!this.adapter.isFocusInsideList()) { + this.setTabindexToFirstSelectedItem_(); + } + }, 0); + } + /** + * Key handler for the list. + */ + handleKeydown(event, isRootListItem, listItemIndex) { + const isArrowLeft = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'ArrowLeft'; + const isArrowUp = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'ArrowUp'; + const isArrowRight = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'ArrowRight'; + const isArrowDown = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'ArrowDown'; + const isHome = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'Home'; + const isEnd = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'End'; + const isEnter = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'Enter'; + const isSpace = (0,_material_dom_keyboard__WEBPACK_IMPORTED_MODULE_2__.normalizeKey)(event) === 'Spacebar'; + if (this.adapter.isRootFocused()) { + if (isArrowUp || isEnd) { + event.preventDefault(); + this.focusLastElement(); + } + else if (isArrowDown || isHome) { + event.preventDefault(); + this.focusFirstElement(); + } + return; + } + let currentIndex = this.adapter.getFocusedElementIndex(); + if (currentIndex === -1) { + currentIndex = listItemIndex; + if (currentIndex < 0) { + // If this event doesn't have a mdc-deprecated-list-item ancestor from + // the current list (not from a sublist), return early. + return; + } + } + let nextIndex; + if ((this.isVertical_ && isArrowDown) || + (!this.isVertical_ && isArrowRight)) { + this.preventDefaultEvent(event); + nextIndex = this.focusNextElement(currentIndex); + } + else if ((this.isVertical_ && isArrowUp) || (!this.isVertical_ && isArrowLeft)) { + this.preventDefaultEvent(event); + nextIndex = this.focusPrevElement(currentIndex); + } + else if (isHome) { + this.preventDefaultEvent(event); + nextIndex = this.focusFirstElement(); + } + else if (isEnd) { + this.preventDefaultEvent(event); + nextIndex = this.focusLastElement(); + } + else if (isEnter || isSpace) { + if (isRootListItem) { + // Return early if enter key is pressed on anchor element which triggers + // synthetic MouseEvent event. + const target = event.target; + if (target && target.tagName === 'A' && isEnter) { + return; + } + this.preventDefaultEvent(event); + this.setSelectedIndexOnAction_(currentIndex, true); + } + } + this.focusedItemIndex_ = currentIndex; + if (nextIndex !== undefined) { + this.setTabindexAtIndex_(nextIndex); + this.focusedItemIndex_ = nextIndex; + } + } + /** + * Click handler for the list. + */ + handleSingleSelection(index, isInteraction, force) { + if (index === _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX) { + return; + } + this.setSelectedIndexOnAction_(index, isInteraction, force); + this.setTabindexAtIndex_(index); + this.focusedItemIndex_ = index; + } + /** + * Focuses the next element on the list. + */ + focusNextElement(index) { + const count = this.adapter.getListItemCount(); + let nextIndex = index + 1; + if (nextIndex >= count) { + if (this.wrapFocus_) { + nextIndex = 0; + } + else { + // Return early because last item is already focused. + return index; + } + } + this.adapter.focusItemAtIndex(nextIndex); + return nextIndex; + } + /** + * Focuses the previous element on the list. + */ + focusPrevElement(index) { + let prevIndex = index - 1; + if (prevIndex < 0) { + if (this.wrapFocus_) { + prevIndex = this.adapter.getListItemCount() - 1; + } + else { + // Return early because first item is already focused. + return index; + } + } + this.adapter.focusItemAtIndex(prevIndex); + return prevIndex; + } + focusFirstElement() { + this.adapter.focusItemAtIndex(0); + return 0; + } + focusLastElement() { + const lastIndex = this.adapter.getListItemCount() - 1; + this.adapter.focusItemAtIndex(lastIndex); + return lastIndex; + } + /** + * @param itemIndex Index of the list item + * @param isEnabled Sets the list item to enabled or disabled. + */ + setEnabled(itemIndex, isEnabled) { + if (!this.isIndexValid_(itemIndex)) { + return; + } + this.adapter.setDisabledStateForElementIndex(itemIndex, !isEnabled); + } + /** + * Ensures that preventDefault is only called if the containing element + * doesn't consume the event, and it will cause an unintended scroll. + */ + preventDefaultEvent(evt) { + const target = evt.target; + const tagName = `${target.tagName}`.toLowerCase(); + if (ELEMENTS_KEY_ALLOWED_IN.indexOf(tagName) === -1) { + evt.preventDefault(); + } + } + setSingleSelectionAtIndex_(index, isInteraction = true) { + if (this.selectedIndex_ === index) { + return; + } + // unset previous + if (this.selectedIndex_ !== _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX) { + this.adapter.setSelectedStateForElementIndex(this.selectedIndex_, false); + if (this.useActivatedClass_) { + this.adapter.setActivatedStateForElementIndex(this.selectedIndex_, false); + } + } + // set new + if (isInteraction) { + this.adapter.setSelectedStateForElementIndex(index, true); + } + if (this.useActivatedClass_) { + this.adapter.setActivatedStateForElementIndex(index, true); + } + this.setAriaForSingleSelectionAtIndex_(index); + this.selectedIndex_ = index; + this.adapter.notifySelected(index); + } + setMultiSelectionAtIndex_(newIndex, isInteraction = true) { + const oldIndex = createSetFromIndex(this.selectedIndex_); + const diff = findIndexDiff(oldIndex, newIndex); + if (!diff.removed.length && !diff.added.length) { + return; + } + for (const removed of diff.removed) { + if (isInteraction) { + this.adapter.setSelectedStateForElementIndex(removed, false); + } + if (this.useActivatedClass_) { + this.adapter.setActivatedStateForElementIndex(removed, false); + } + } + for (const added of diff.added) { + if (isInteraction) { + this.adapter.setSelectedStateForElementIndex(added, true); + } + if (this.useActivatedClass_) { + this.adapter.setActivatedStateForElementIndex(added, true); + } + } + this.selectedIndex_ = newIndex; + this.adapter.notifySelected(newIndex, diff); + } + /** + * Sets aria attribute for single selection at given index. + */ + setAriaForSingleSelectionAtIndex_(index) { + // Detect the presence of aria-current and get the value only during list + // initialization when it is in unset state. + if (this.selectedIndex_ === _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX) { + this.ariaCurrentAttrValue_ = + this.adapter.getAttributeForElementIndex(index, _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.strings.ARIA_CURRENT); + } + const isAriaCurrent = this.ariaCurrentAttrValue_ !== null; + const ariaAttribute = isAriaCurrent ? _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.strings.ARIA_CURRENT : _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.strings.ARIA_SELECTED; + if (this.selectedIndex_ !== _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX) { + this.adapter.setAttributeForElementIndex(this.selectedIndex_, ariaAttribute, 'false'); + } + const ariaAttributeValue = isAriaCurrent ? this.ariaCurrentAttrValue_ : 'true'; + this.adapter.setAttributeForElementIndex(index, ariaAttribute, ariaAttributeValue); + } + setTabindexAtIndex_(index) { + if (this.focusedItemIndex_ === _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX && index !== 0) { + // If no list item was selected set first list item's tabindex to -1. + // Generally, tabindex is set to 0 on first list item of list that has no + // preselected items. + this.adapter.setTabIndexForElementIndex(0, -1); + } + else if (this.focusedItemIndex_ >= 0 && this.focusedItemIndex_ !== index) { + this.adapter.setTabIndexForElementIndex(this.focusedItemIndex_, -1); + } + this.adapter.setTabIndexForElementIndex(index, 0); + } + setTabindexToFirstSelectedItem_() { + let targetIndex = 0; + if (typeof this.selectedIndex_ === 'number' && + this.selectedIndex_ !== _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX) { + targetIndex = this.selectedIndex_; + } + else if (isIndexSet(this.selectedIndex_) && this.selectedIndex_.size > 0) { + targetIndex = Math.min(...this.selectedIndex_); + } + this.setTabindexAtIndex_(targetIndex); + } + isIndexValid_(index) { + if (index instanceof Set) { + if (!this.isMulti_) { + throw new Error('MDCListFoundation: Array of index is only supported for checkbox based list'); + } + if (index.size === 0) { + return true; + } + else { + let isOneInRange = false; + for (const entry of index) { + isOneInRange = this.isIndexInRange_(entry); + if (isOneInRange) { + break; + } + } + return isOneInRange; + } + } + else if (typeof index === 'number') { + if (this.isMulti_) { + throw new Error('MDCListFoundation: Expected array of index for checkbox based list but got number: ' + + index); + } + return index === _material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX || this.isIndexInRange_(index); + } + else { + return false; + } + } + isIndexInRange_(index) { + const listSize = this.adapter.getListItemCount(); + return index >= 0 && index < listSize; + } + /** + * Sets selected index on user action, toggles checkbox / radio based on + * toggleCheckbox value. User interaction should not toggle list item(s) when + * disabled. + */ + setSelectedIndexOnAction_(index, isInteraction, force) { + if (this.adapter.getDisabledStateForElementIndex(index)) { + return; + } + let checkedIndex = index; + if (this.isMulti_) { + checkedIndex = new Set([index]); + } + if (!this.isIndexValid_(checkedIndex)) { + return; + } + if (this.isMulti_) { + this.toggleMultiAtIndex(index, force, isInteraction); + } + else { + if (isInteraction || force) { + this.setSingleSelectionAtIndex_(index, isInteraction); + } + else { + const isDeselection = this.selectedIndex_ === index; + if (isDeselection) { + this.setSingleSelectionAtIndex_(_material_list_constants__WEBPACK_IMPORTED_MODULE_0__.numbers.UNSET_INDEX); + } + } + } + if (isInteraction) { + this.adapter.notifyAction(index); + } + } + toggleMultiAtIndex(index, force, isInteraction = true) { + let newSelectionValue = false; + if (force === undefined) { + newSelectionValue = !this.adapter.getSelectedStateForElementIndex(index); + } + else { + newSelectionValue = force; + } + const newSet = createSetFromIndex(this.selectedIndex_); + if (newSelectionValue) { + newSet.add(index); + } + else { + newSet.delete(index); + } + this.setMultiSelectionAtIndex_(newSet, isInteraction); + } +} +// tslint:disable-next-line:no-default-export Needed for backward compatibility +// with MDC Web v0.44.0 and earlier. +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MDCListFoundation); +//# sourceMappingURL=mwc-list-foundation.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list-item-base.js": +/*!***************************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list-item-base.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ListItemBase: () => (/* binding */ ListItemBase) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_mwc_ripple_mwc_ripple__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/mwc-ripple/mwc-ripple */ "./node_modules/@material/mwc-ripple/mwc-ripple.js"); +/* harmony import */ var _material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/mwc-base/observer */ "./node_modules/@material/mwc-base/observer.js"); +/* harmony import */ var _material_mwc_ripple_ripple_handlers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/mwc-ripple/ripple-handlers */ "./node_modules/@material/mwc-ripple/ripple-handlers.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var lit_directives_class_map_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/directives/class-map.js */ "./node_modules/lit/directives/class-map.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + + + +/** + * @fires request-selected {RequestSelectedDetail} + * @fires list-item-rendered + */ +class ListItemBase extends lit__WEBPACK_IMPORTED_MODULE_3__.LitElement { + constructor() { + super(...arguments); + this.value = ''; + this.group = null; + this.tabindex = -1; + this.disabled = false; + this.twoline = false; + this.activated = false; + this.graphic = null; + this.multipleGraphics = false; + this.hasMeta = false; + this.noninteractive = false; + this.selected = false; + this.shouldRenderRipple = false; + this._managingList = null; + this.boundOnClick = this.onClick.bind(this); + this._firstChanged = true; + this._skipPropRequest = false; + this.rippleHandlers = new _material_mwc_ripple_ripple_handlers__WEBPACK_IMPORTED_MODULE_2__.RippleHandlers(() => { + this.shouldRenderRipple = true; + return this.ripple; + }); + this.listeners = [ + { + target: this, + eventNames: ['click'], + cb: () => { + this.onClick(); + }, + }, + { + target: this, + eventNames: ['mouseenter'], + cb: this.rippleHandlers.startHover, + }, + { + target: this, + eventNames: ['mouseleave'], + cb: this.rippleHandlers.endHover, + }, + { + target: this, + eventNames: ['focus'], + cb: this.rippleHandlers.startFocus, + }, + { + target: this, + eventNames: ['blur'], + cb: this.rippleHandlers.endFocus, + }, + { + target: this, + eventNames: ['mousedown', 'touchstart'], + cb: (e) => { + const name = e.type; + this.onDown(name === 'mousedown' ? 'mouseup' : 'touchend', e); + }, + }, + ]; + } + get text() { + const textContent = this.textContent; + return textContent ? textContent.trim() : ''; + } + render() { + const text = this.renderText(); + const graphic = this.graphic ? this.renderGraphic() : (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ``; + const meta = this.hasMeta ? this.renderMeta() : (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ``; + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + ${this.renderRipple()} + ${graphic} + ${text} + ${meta}`; + } + renderRipple() { + if (this.shouldRenderRipple) { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + + `; + } + else if (this.activated) { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) `
`; + } + else { + return ''; + } + } + renderGraphic() { + const graphicClasses = { + multi: this.multipleGraphics, + }; + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + + + `; + } + renderMeta() { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + + + `; + } + renderText() { + const inner = this.twoline ? this.renderTwoline() : this.renderSingleLine(); + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + + ${inner} + `; + } + renderSingleLine() { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ``; + } + renderTwoline() { + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` + + + + + + + `; + } + onClick() { + this.fireRequestSelected(!this.selected, 'interaction'); + } + onDown(upName, evt) { + const onUp = () => { + window.removeEventListener(upName, onUp); + this.rippleHandlers.endPress(); + }; + window.addEventListener(upName, onUp); + this.rippleHandlers.startPress(evt); + } + fireRequestSelected(selected, source) { + if (this.noninteractive) { + return; + } + const customEv = new CustomEvent('request-selected', { bubbles: true, composed: true, detail: { source, selected } }); + this.dispatchEvent(customEv); + } + connectedCallback() { + super.connectedCallback(); + if (!this.noninteractive) { + this.setAttribute('mwc-list-item', ''); + } + for (const listener of this.listeners) { + for (const eventName of listener.eventNames) { + listener.target.addEventListener(eventName, listener.cb, { passive: true }); + } + } + } + disconnectedCallback() { + super.disconnectedCallback(); + for (const listener of this.listeners) { + for (const eventName of listener.eventNames) { + listener.target.removeEventListener(eventName, listener.cb); + } + } + if (this._managingList) { + this._managingList.debouncedLayout ? + this._managingList.debouncedLayout(true) : + this._managingList.layout(true); + } + } + // composed flag, event fire through shadow root and up through composed tree + firstUpdated() { + const ev = new Event('list-item-rendered', { bubbles: true, composed: true }); + this.dispatchEvent(ev); + } +} +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.query)('slot') +], ListItemBase.prototype, "slotElement", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.queryAsync)('mwc-ripple') +], ListItemBase.prototype, "ripple", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String }) +], ListItemBase.prototype, "value", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String, reflect: true }) +], ListItemBase.prototype, "group", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Number, reflect: true }) +], ListItemBase.prototype, "tabindex", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (value) { + this.setAttribute('aria-disabled', 'true'); + } + else { + this.setAttribute('aria-disabled', 'false'); + } + }) +], ListItemBase.prototype, "disabled", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }) +], ListItemBase.prototype, "twoline", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }) +], ListItemBase.prototype, "activated", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String, reflect: true }) +], ListItemBase.prototype, "graphic", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }) +], ListItemBase.prototype, "multipleGraphics", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }) +], ListItemBase.prototype, "hasMeta", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (value) { + this.removeAttribute('aria-checked'); + this.removeAttribute('mwc-list-item'); + this.selected = false; + this.activated = false; + this.tabIndex = -1; + } + else { + this.setAttribute('mwc-list-item', ''); + } + }) +], ListItemBase.prototype, "noninteractive", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + const role = this.getAttribute('role'); + const isAriaSelectable = role === 'gridcell' || role === 'option' || + role === 'row' || role === 'tab'; + if (isAriaSelectable && value) { + this.setAttribute('aria-selected', 'true'); + } + else if (isAriaSelectable) { + this.setAttribute('aria-selected', 'false'); + } + if (this._firstChanged) { + this._firstChanged = false; + return; + } + if (this._skipPropRequest) { + return; + } + this.fireRequestSelected(value, 'property'); + }) +], ListItemBase.prototype, "selected", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], ListItemBase.prototype, "shouldRenderRipple", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_6__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], ListItemBase.prototype, "_managingList", void 0); +//# sourceMappingURL=mwc-list-item-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list-item.css.js": +/*!**************************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list-item.css.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `:host{cursor:pointer;user-select:none;-webkit-tap-highlight-color:transparent;height:48px;display:flex;position:relative;align-items:center;justify-content:flex-start;overflow:hidden;padding:0;padding-left:var(--mdc-list-side-padding, 16px);padding-right:var(--mdc-list-side-padding, 16px);outline:none;height:48px;color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87))}:host:focus{outline:none}:host([activated]){color:#6200ee;color:var(--mdc-theme-primary, #6200ee);--mdc-ripple-color: var( --mdc-theme-primary, #6200ee )}:host([activated]) .mdc-deprecated-list-item__graphic{color:#6200ee;color:var(--mdc-theme-primary, #6200ee)}:host([activated]) .fake-activated-ripple::before{position:absolute;display:block;top:0;bottom:0;left:0;right:0;width:100%;height:100%;pointer-events:none;z-index:1;content:"";opacity:0.12;opacity:var(--mdc-ripple-activated-opacity, 0.12);background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-deprecated-list-item__graphic{flex-shrink:0;align-items:center;justify-content:center;fill:currentColor;display:inline-flex}.mdc-deprecated-list-item__graphic ::slotted(*){flex-shrink:0;align-items:center;justify-content:center;fill:currentColor;width:100%;height:100%;text-align:center}.mdc-deprecated-list-item__meta{width:var(--mdc-list-item-meta-size, 24px);height:var(--mdc-list-item-meta-size, 24px);margin-left:auto;margin-right:0;color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-hint-on-background, rgba(0, 0, 0, 0.38))}.mdc-deprecated-list-item__meta.multi{width:auto}.mdc-deprecated-list-item__meta ::slotted(*){width:var(--mdc-list-item-meta-size, 24px);line-height:var(--mdc-list-item-meta-size, 24px)}.mdc-deprecated-list-item__meta ::slotted(.material-icons),.mdc-deprecated-list-item__meta ::slotted(mwc-icon){line-height:var(--mdc-list-item-meta-size, 24px) !important}.mdc-deprecated-list-item__meta ::slotted(:not(.material-icons):not(mwc-icon)){-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.75rem;font-size:var(--mdc-typography-caption-font-size, 0.75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight, 400);letter-spacing:0.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, 0.0333333333em);text-decoration:inherit;text-decoration:var(--mdc-typography-caption-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform, inherit)}[dir=rtl] .mdc-deprecated-list-item__meta,.mdc-deprecated-list-item__meta[dir=rtl]{margin-left:0;margin-right:auto}.mdc-deprecated-list-item__meta ::slotted(*){width:100%;height:100%}.mdc-deprecated-list-item__text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mdc-deprecated-list-item__text ::slotted([for]),.mdc-deprecated-list-item__text[for]{pointer-events:none}.mdc-deprecated-list-item__primary-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal;margin-bottom:-20px;display:block}.mdc-deprecated-list-item__primary-text::before{display:inline-block;width:0;height:32px;content:"";vertical-align:0}.mdc-deprecated-list-item__primary-text::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}.mdc-deprecated-list-item__secondary-text{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-body2-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:0.875rem;font-size:var(--mdc-typography-body2-font-size, 0.875rem);line-height:1.25rem;line-height:var(--mdc-typography-body2-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-body2-font-weight, 400);letter-spacing:0.0178571429em;letter-spacing:var(--mdc-typography-body2-letter-spacing, 0.0178571429em);text-decoration:inherit;text-decoration:var(--mdc-typography-body2-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-body2-text-transform, inherit);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;margin-top:0;line-height:normal;display:block}.mdc-deprecated-list-item__secondary-text::before{display:inline-block;width:0;height:20px;content:"";vertical-align:0}.mdc-deprecated-list--dense .mdc-deprecated-list-item__secondary-text{font-size:inherit}* ::slotted(a),a{color:inherit;text-decoration:none}:host([twoline]){height:72px}:host([twoline]) .mdc-deprecated-list-item__text{align-self:flex-start}:host([disabled]),:host([noninteractive]){cursor:default;pointer-events:none}:host([disabled]) .mdc-deprecated-list-item__text ::slotted(*){opacity:.38}:host([disabled]) .mdc-deprecated-list-item__text ::slotted(*),:host([disabled]) .mdc-deprecated-list-item__primary-text ::slotted(*),:host([disabled]) .mdc-deprecated-list-item__secondary-text ::slotted(*){color:#000;color:var(--mdc-theme-on-surface, #000)}.mdc-deprecated-list-item__secondary-text ::slotted(*){color:rgba(0, 0, 0, 0.54);color:var(--mdc-theme-text-secondary-on-background, rgba(0, 0, 0, 0.54))}.mdc-deprecated-list-item__graphic ::slotted(*){background-color:transparent;color:rgba(0, 0, 0, 0.38);color:var(--mdc-theme-text-icon-on-background, rgba(0, 0, 0, 0.38))}.mdc-deprecated-list-group__subheader ::slotted(*){color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87))}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic{width:var(--mdc-list-item-graphic-size, 40px);height:var(--mdc-list-item-graphic-size, 40px)}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic.multi{width:auto}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic ::slotted(*){width:var(--mdc-list-item-graphic-size, 40px);line-height:var(--mdc-list-item-graphic-size, 40px)}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic ::slotted(.material-icons),:host([graphic=avatar]) .mdc-deprecated-list-item__graphic ::slotted(mwc-icon){line-height:var(--mdc-list-item-graphic-size, 40px) !important}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic ::slotted(*){border-radius:50%}:host([graphic=avatar]) .mdc-deprecated-list-item__graphic,:host([graphic=medium]) .mdc-deprecated-list-item__graphic,:host([graphic=large]) .mdc-deprecated-list-item__graphic,:host([graphic=control]) .mdc-deprecated-list-item__graphic{margin-left:0;margin-right:var(--mdc-list-item-graphic-margin, 16px)}[dir=rtl] :host([graphic=avatar]) .mdc-deprecated-list-item__graphic,[dir=rtl] :host([graphic=medium]) .mdc-deprecated-list-item__graphic,[dir=rtl] :host([graphic=large]) .mdc-deprecated-list-item__graphic,[dir=rtl] :host([graphic=control]) .mdc-deprecated-list-item__graphic,:host([graphic=avatar]) .mdc-deprecated-list-item__graphic[dir=rtl],:host([graphic=medium]) .mdc-deprecated-list-item__graphic[dir=rtl],:host([graphic=large]) .mdc-deprecated-list-item__graphic[dir=rtl],:host([graphic=control]) .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:var(--mdc-list-item-graphic-margin, 16px);margin-right:0}:host([graphic=icon]) .mdc-deprecated-list-item__graphic{width:var(--mdc-list-item-graphic-size, 24px);height:var(--mdc-list-item-graphic-size, 24px);margin-left:0;margin-right:var(--mdc-list-item-graphic-margin, 32px)}:host([graphic=icon]) .mdc-deprecated-list-item__graphic.multi{width:auto}:host([graphic=icon]) .mdc-deprecated-list-item__graphic ::slotted(*){width:var(--mdc-list-item-graphic-size, 24px);line-height:var(--mdc-list-item-graphic-size, 24px)}:host([graphic=icon]) .mdc-deprecated-list-item__graphic ::slotted(.material-icons),:host([graphic=icon]) .mdc-deprecated-list-item__graphic ::slotted(mwc-icon){line-height:var(--mdc-list-item-graphic-size, 24px) !important}[dir=rtl] :host([graphic=icon]) .mdc-deprecated-list-item__graphic,:host([graphic=icon]) .mdc-deprecated-list-item__graphic[dir=rtl]{margin-left:var(--mdc-list-item-graphic-margin, 32px);margin-right:0}:host([graphic=avatar]:not([twoLine])),:host([graphic=icon]:not([twoLine])){height:56px}:host([graphic=medium]:not([twoLine])),:host([graphic=large]:not([twoLine])){height:72px}:host([graphic=medium]) .mdc-deprecated-list-item__graphic,:host([graphic=large]) .mdc-deprecated-list-item__graphic{width:var(--mdc-list-item-graphic-size, 56px);height:var(--mdc-list-item-graphic-size, 56px)}:host([graphic=medium]) .mdc-deprecated-list-item__graphic.multi,:host([graphic=large]) .mdc-deprecated-list-item__graphic.multi{width:auto}:host([graphic=medium]) .mdc-deprecated-list-item__graphic ::slotted(*),:host([graphic=large]) .mdc-deprecated-list-item__graphic ::slotted(*){width:var(--mdc-list-item-graphic-size, 56px);line-height:var(--mdc-list-item-graphic-size, 56px)}:host([graphic=medium]) .mdc-deprecated-list-item__graphic ::slotted(.material-icons),:host([graphic=medium]) .mdc-deprecated-list-item__graphic ::slotted(mwc-icon),:host([graphic=large]) .mdc-deprecated-list-item__graphic ::slotted(.material-icons),:host([graphic=large]) .mdc-deprecated-list-item__graphic ::slotted(mwc-icon){line-height:var(--mdc-list-item-graphic-size, 56px) !important}:host([graphic=large]){padding-left:0px}`; +//# sourceMappingURL=mwc-list-item.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list-item.js": +/*!**********************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list-item.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ListItem: () => (/* binding */ ListItem) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_list_item_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-list-item-base */ "./node_modules/@material/mwc-list/mwc-list-item-base.js"); +/* harmony import */ var _mwc_list_item_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-list-item.css */ "./node_modules/@material/mwc-list/mwc-list-item.css.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +let ListItem = class ListItem extends _mwc_list_item_base__WEBPACK_IMPORTED_MODULE_1__.ListItemBase { +}; +ListItem.styles = [_mwc_list_item_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +ListItem = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-list-item') +], ListItem); + +//# sourceMappingURL=mwc-list-item.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list.css.js": +/*!*********************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list.css.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `@keyframes mdc-ripple-fg-radius-in{from{animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@keyframes mdc-ripple-fg-opacity-in{from{animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-out{from{animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}:host{display:block}.mdc-deprecated-list{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto, sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight, 400);letter-spacing:0.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, 0.009375em);text-decoration:inherit;text-decoration:var(--mdc-typography-subtitle1-text-decoration, inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform, inherit);line-height:1.5rem;margin:0;padding:8px 0;list-style-type:none;color:rgba(0, 0, 0, 0.87);color:var(--mdc-theme-text-primary-on-background, rgba(0, 0, 0, 0.87));padding:var(--mdc-list-vertical-padding, 8px) 0}.mdc-deprecated-list:focus{outline:none}.mdc-deprecated-list-item{height:48px}.mdc-deprecated-list--dense{padding-top:4px;padding-bottom:4px;font-size:.812rem}.mdc-deprecated-list ::slotted([divider]){height:0;margin:0;border:none;border-bottom-width:1px;border-bottom-style:solid;border-bottom-color:rgba(0, 0, 0, 0.12)}.mdc-deprecated-list ::slotted([divider][padded]){margin:0 var(--mdc-list-side-padding, 16px)}.mdc-deprecated-list ::slotted([divider][inset]){margin-left:var(--mdc-list-inset-margin, 72px);margin-right:0;width:calc( 100% - var(--mdc-list-inset-margin, 72px) )}[dir=rtl] .mdc-deprecated-list ::slotted([divider][inset]),.mdc-deprecated-list ::slotted([divider][inset][dir=rtl]){margin-left:0;margin-right:var(--mdc-list-inset-margin, 72px)}.mdc-deprecated-list ::slotted([divider][inset][padded]){width:calc( 100% - var(--mdc-list-inset-margin, 72px) - var(--mdc-list-side-padding, 16px) )}.mdc-deprecated-list--dense ::slotted([mwc-list-item]){height:40px}.mdc-deprecated-list--dense ::slotted([mwc-list]){--mdc-list-item-graphic-size: 20px}.mdc-deprecated-list--two-line.mdc-deprecated-list--dense ::slotted([mwc-list-item]),.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense ::slotted([mwc-list-item]){height:60px}.mdc-deprecated-list--avatar-list.mdc-deprecated-list--dense ::slotted([mwc-list]){--mdc-list-item-graphic-size: 36px}:host([noninteractive]){pointer-events:none;cursor:default}.mdc-deprecated-list--dense ::slotted(.mdc-deprecated-list-item__primary-text){display:block;margin-top:0;line-height:normal;margin-bottom:-20px}.mdc-deprecated-list--dense ::slotted(.mdc-deprecated-list-item__primary-text)::before{display:inline-block;width:0;height:24px;content:"";vertical-align:0}.mdc-deprecated-list--dense ::slotted(.mdc-deprecated-list-item__primary-text)::after{display:inline-block;width:0;height:20px;content:"";vertical-align:-20px}`; +//# sourceMappingURL=mwc-list.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-list/mwc-list.js": +/*!*****************************************************!*\ + !*** ./node_modules/@material/mwc-list/mwc-list.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ List: () => (/* binding */ List), +/* harmony export */ createSetFromIndex: () => (/* reexport safe */ _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__.createSetFromIndex), +/* harmony export */ isEventMulti: () => (/* reexport safe */ _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__.isEventMulti), +/* harmony export */ isIndexSet: () => (/* reexport safe */ _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__.isIndexSet) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_list_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-list-base */ "./node_modules/@material/mwc-list/mwc-list-base.js"); +/* harmony import */ var _mwc_list_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-list.css */ "./node_modules/@material/mwc-list/mwc-list.css.js"); +/* harmony import */ var _mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./mwc-list-foundation */ "./node_modules/@material/mwc-list/mwc-list-foundation.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + +let List = class List extends _mwc_list_base__WEBPACK_IMPORTED_MODULE_1__.ListBase { +}; +List.styles = [_mwc_list_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +List = (0,tslib__WEBPACK_IMPORTED_MODULE_4__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-list') +], List); + +//# sourceMappingURL=mwc-list.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-menu/mwc-menu-base.js": +/*!**********************************************************!*\ + !*** ./node_modules/@material/mwc-menu/mwc-menu-base.js ***! + \**********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MenuBase: () => (/* binding */ MenuBase), +/* harmony export */ createSetFromIndex: () => (/* reexport safe */ _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_6__.createSetFromIndex), +/* harmony export */ isEventMulti: () => (/* reexport safe */ _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_6__.isEventMulti), +/* harmony export */ isIndexSet: () => (/* reexport safe */ _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_6__.isIndexSet) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_mwc_list__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/mwc-list */ "./node_modules/@material/mwc-list/mwc-list.js"); +/* harmony import */ var _mwc_menu_surface__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-menu-surface */ "./node_modules/@material/mwc-menu/mwc-menu-surface.js"); +/* harmony import */ var _material_menu_constants__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @material/menu/constants */ "./node_modules/@material/menu/constants.js"); +/* harmony import */ var _material_menu_foundation__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material/menu/foundation */ "./node_modules/@material/menu/foundation.js"); +/* harmony import */ var _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/mwc-base/base-element */ "./node_modules/@material/mwc-base/base-element.js"); +/* harmony import */ var _material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material/mwc-base/observer */ "./node_modules/@material/mwc-base/observer.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material/mwc-list/mwc-list-foundation */ "./node_modules/@material/mwc-list/mwc-list-foundation.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + + + + + + +/** + * @fires selected {SelectedDetail} + * @fires action {ActionDetail} + * @fires items-updated + * @fires opened + * @fires closed + */ +class MenuBase extends _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_2__.BaseElement { + constructor() { + super(...arguments); + this.mdcFoundationClass = _material_menu_foundation__WEBPACK_IMPORTED_MODULE_7__["default"]; + this.listElement_ = null; + this.anchor = null; + this.open = false; + this.quick = false; + this.wrapFocus = false; + this.innerRole = 'menu'; + this.innerAriaLabel = null; + this.corner = 'TOP_START'; + this.x = null; + this.y = null; + this.absolute = false; + this.multi = false; + this.activatable = false; + this.fixed = false; + this.forceGroupSelection = false; + this.fullwidth = false; + this.menuCorner = 'START'; + this.stayOpenOnBodyClick = false; + this.defaultFocus = 'LIST_ROOT'; + this._listUpdateComplete = null; + } + get listElement() { + if (!this.listElement_) { + this.listElement_ = this.renderRoot.querySelector('mwc-list'); + return this.listElement_; + } + return this.listElement_; + } + get items() { + const listElement = this.listElement; + if (listElement) { + return listElement.items; + } + return []; + } + get index() { + const listElement = this.listElement; + if (listElement) { + return listElement.index; + } + return -1; + } + get selected() { + const listElement = this.listElement; + if (listElement) { + return listElement.selected; + } + return null; + } + render() { + const itemRoles = this.innerRole === 'menu' ? 'menuitem' : 'option'; + return (0,lit__WEBPACK_IMPORTED_MODULE_4__.html) ` + + + + + `; + } + createAdapter() { + return { + addClassToElementAtIndex: (index, className) => { + const listElement = this.listElement; + if (!listElement) { + return; + } + const element = listElement.items[index]; + if (!element) { + return; + } + if (className === 'mdc-menu-item--selected') { + if (this.forceGroupSelection && !element.selected) { + listElement.toggle(index, true); + } + } + else { + element.classList.add(className); + } + }, + removeClassFromElementAtIndex: (index, className) => { + const listElement = this.listElement; + if (!listElement) { + return; + } + const element = listElement.items[index]; + if (!element) { + return; + } + if (className === 'mdc-menu-item--selected') { + if (element.selected) { + listElement.toggle(index, false); + } + } + else { + element.classList.remove(className); + } + }, + addAttributeToElementAtIndex: (index, attr, value) => { + const listElement = this.listElement; + if (!listElement) { + return; + } + const element = listElement.items[index]; + if (!element) { + return; + } + element.setAttribute(attr, value); + }, + removeAttributeFromElementAtIndex: (index, attr) => { + const listElement = this.listElement; + if (!listElement) { + return; + } + const element = listElement.items[index]; + if (!element) { + return; + } + element.removeAttribute(attr); + }, + getAttributeFromElementAtIndex: (index, attr) => { + const listElement = this.listElement; + if (!listElement) { + return null; + } + const element = listElement.items[index]; + if (!element) { + return null; + } + return element.getAttribute(attr); + }, + elementContainsClass: (element, className) => element.classList.contains(className), + closeSurface: () => { + this.open = false; + }, + getElementIndex: (element) => { + const listElement = this.listElement; + if (listElement) { + return listElement.items.indexOf(element); + } + return -1; + }, + notifySelected: () => { }, + getMenuItemCount: () => { + const listElement = this.listElement; + if (!listElement) { + return 0; + } + return listElement.items.length; + }, + focusItemAtIndex: (index) => { + const listElement = this.listElement; + if (!listElement) { + return; + } + const element = listElement.items[index]; + if (element) { + element.focus(); + } + }, + focusListRoot: () => { + if (this.listElement) { + this.listElement.focus(); + } + }, + getSelectedSiblingOfItemAtIndex: (index) => { + const listElement = this.listElement; + if (!listElement) { + return -1; + } + const elementAtIndex = listElement.items[index]; + if (!elementAtIndex || !elementAtIndex.group) { + return -1; + } + for (let i = 0; i < listElement.items.length; i++) { + if (i === index) { + continue; + } + const current = listElement.items[i]; + if (current.selected && current.group === elementAtIndex.group) { + return i; + } + } + return -1; + }, + isSelectableItemAtIndex: (index) => { + const listElement = this.listElement; + if (!listElement) { + return false; + } + const elementAtIndex = listElement.items[index]; + if (!elementAtIndex) { + return false; + } + return elementAtIndex.hasAttribute('group'); + }, + }; + } + onKeydown(evt) { + if (this.mdcFoundation) { + this.mdcFoundation.handleKeydown(evt); + } + } + onAction(evt) { + const listElement = this.listElement; + if (this.mdcFoundation && listElement) { + const index = evt.detail.index; + const el = listElement.items[index]; + if (el) { + this.mdcFoundation.handleItemAction(el); + } + } + } + onOpened() { + this.open = true; + if (this.mdcFoundation) { + this.mdcFoundation.handleMenuSurfaceOpened(); + } + } + onClosed() { + this.open = false; + } + // tslint:disable:ban-ts-ignore + async getUpdateComplete() { + await this._listUpdateComplete; + // @ts-ignore + const result = await super.getUpdateComplete(); + return result; + } + // tslint:enable:ban-ts-ignore + async firstUpdated() { + super.firstUpdated(); + const listElement = this.listElement; + if (listElement) { + this._listUpdateComplete = listElement.updateComplete; + await this._listUpdateComplete; + } + } + select(index) { + const listElement = this.listElement; + if (listElement) { + listElement.select(index); + } + } + close() { + this.open = false; + } + show() { + this.open = true; + } + getFocusedItemIndex() { + const listElement = this.listElement; + if (listElement) { + return listElement.getFocusedItemIndex(); + } + return -1; + } + focusItemAtIndex(index) { + const listElement = this.listElement; + if (listElement) { + listElement.focusItemAtIndex(index); + } + } + layout(updateItems = true) { + const listElement = this.listElement; + if (listElement) { + listElement.layout(updateItems); + } + } +} +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.query)('.mdc-menu') +], MenuBase.prototype, "mdcRoot", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.query)('slot') +], MenuBase.prototype, "slotElement", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Object }) +], MenuBase.prototype, "anchor", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean, reflect: true }) +], MenuBase.prototype, "open", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "quick", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "wrapFocus", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], MenuBase.prototype, "innerRole", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], MenuBase.prototype, "innerAriaLabel", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], MenuBase.prototype, "corner", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Number }) +], MenuBase.prototype, "x", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Number }) +], MenuBase.prototype, "y", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "absolute", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "multi", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "activatable", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "fixed", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "forceGroupSelection", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "fullwidth", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }) +], MenuBase.prototype, "menuCorner", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: Boolean }) +], MenuBase.prototype, "stayOpenOnBodyClick", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_8__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_5__.property)({ type: String }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_3__.observer)(function (value) { + if (this.mdcFoundation) { + this.mdcFoundation.setDefaultFocusState(_material_menu_constants__WEBPACK_IMPORTED_MODULE_9__.DefaultFocusState[value]); + } + }) +], MenuBase.prototype, "defaultFocus", void 0); +//# sourceMappingURL=mwc-menu-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-menu/mwc-menu-surface-base.js": +/*!******************************************************************!*\ + !*** ./node_modules/@material/mwc-menu/mwc-menu-surface-base.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MenuSurfaceBase: () => (/* binding */ MenuSurfaceBase) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @material/menu-surface/constants */ "./node_modules/@material/menu-surface/constants.js"); +/* harmony import */ var _material_menu_surface_foundation__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @material/menu-surface/foundation */ "./node_modules/@material/menu-surface/foundation.js"); +/* harmony import */ var _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/mwc-base/base-element */ "./node_modules/@material/mwc-base/base-element.js"); +/* harmony import */ var _material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @material/mwc-base/observer */ "./node_modules/@material/mwc-base/observer.js"); +/* harmony import */ var _material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @material/mwc-base/utils */ "./node_modules/@material/mwc-base/utils.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var lit_directives_class_map_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! lit/directives/class-map.js */ "./node_modules/lit/directives/class-map.js"); +/* harmony import */ var lit_directives_style_map_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! lit/directives/style-map.js */ "./node_modules/lit/directives/style-map.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + + + + + + + + + + +// tslint:disable:no-bitwise +// required for closure compiler +const stringToCorner = { + 'TOP_LEFT': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.TOP_LEFT, + 'TOP_RIGHT': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.TOP_RIGHT, + 'BOTTOM_LEFT': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.BOTTOM_LEFT, + 'BOTTOM_RIGHT': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.BOTTOM_RIGHT, + 'TOP_START': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.TOP_START, + 'TOP_END': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.TOP_END, + 'BOTTOM_START': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.BOTTOM_START, + 'BOTTOM_END': _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.BOTTOM_END, +}; +/** + * @fires opened + * @fires closed + */ +class MenuSurfaceBase extends _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_0__.BaseElement { + constructor() { + super(...arguments); + this.mdcFoundationClass = _material_menu_surface_foundation__WEBPACK_IMPORTED_MODULE_8__["default"]; + this.absolute = false; + this.fullwidth = false; + this.fixed = false; + this.x = null; + this.y = null; + // must be defined before open or else race condition in foundation occurs. + this.quick = false; + this.open = false; + this.stayOpenOnBodyClick = false; + this.bitwiseCorner = _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.Corner.TOP_START; + this.previousMenuCorner = null; + // must be defined before observer of anchor corner for initialization + this.menuCorner = 'START'; + this.corner = 'TOP_START'; + this.styleTop = ''; + this.styleLeft = ''; + this.styleRight = ''; + this.styleBottom = ''; + this.styleMaxHeight = ''; + this.styleTransformOrigin = ''; + this.anchor = null; + this.previouslyFocused = null; + this.previousAnchor = null; + this.onBodyClickBound = () => undefined; + } + render() { + const classes = { + 'mdc-menu-surface--fixed': this.fixed, + 'mdc-menu-surface--fullwidth': this.fullwidth, + }; + const styles = { + 'top': this.styleTop, + 'left': this.styleLeft, + 'right': this.styleRight, + 'bottom': this.styleBottom, + 'max-height': this.styleMaxHeight, + 'transform-origin': this.styleTransformOrigin, + }; + return (0,lit__WEBPACK_IMPORTED_MODULE_3__.html) ` +
+ +
`; + } + createAdapter() { + return Object.assign(Object.assign({}, (0,_material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_0__.addHasRemoveClass)(this.mdcRoot)), { hasAnchor: () => { + return !!this.anchor; + }, notifyClose: () => { + const init = { bubbles: true, composed: true }; + const ev = new CustomEvent('closed', init); + this.open = false; + this.mdcRoot.dispatchEvent(ev); + }, notifyClosing: () => { + const init = { bubbles: true, composed: true }; + const ev = new CustomEvent('closing', init); + this.mdcRoot.dispatchEvent(ev); + }, notifyOpen: () => { + const init = { bubbles: true, composed: true }; + const ev = new CustomEvent('opened', init); + this.open = true; + this.mdcRoot.dispatchEvent(ev); + }, isElementInContainer: () => false, isRtl: () => { + if (this.mdcRoot) { + return getComputedStyle(this.mdcRoot).direction === 'rtl'; + } + return false; + }, setTransformOrigin: (origin) => { + const root = this.mdcRoot; + if (!root) { + return; + } + this.styleTransformOrigin = origin; + }, isFocused: () => { + return (0,_material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_2__.doesElementContainFocus)(this); + }, saveFocus: () => { + const activeElementPath = (0,_material_mwc_base_utils__WEBPACK_IMPORTED_MODULE_2__.deepActiveElementPath)(); + const pathLength = activeElementPath.length; + if (!pathLength) { + this.previouslyFocused = null; + } + this.previouslyFocused = activeElementPath[pathLength - 1]; + }, restoreFocus: () => { + if (!this.previouslyFocused) { + return; + } + if ('focus' in this.previouslyFocused) { + this.previouslyFocused.focus(); + } + }, getInnerDimensions: () => { + const mdcRoot = this.mdcRoot; + if (!mdcRoot) { + return { width: 0, height: 0 }; + } + return { width: mdcRoot.offsetWidth, height: mdcRoot.offsetHeight }; + }, getAnchorDimensions: () => { + const anchorElement = this.anchor; + return anchorElement ? anchorElement.getBoundingClientRect() : null; + }, getBodyDimensions: () => { + return { + width: document.body.clientWidth, + height: document.body.clientHeight, + }; + }, getWindowDimensions: () => { + return { + width: window.innerWidth, + height: window.innerHeight, + }; + }, getWindowScroll: () => { + return { + x: window.pageXOffset, + y: window.pageYOffset, + }; + }, setPosition: (position) => { + const mdcRoot = this.mdcRoot; + if (!mdcRoot) { + return; + } + this.styleLeft = 'left' in position ? `${position.left}px` : ''; + this.styleRight = 'right' in position ? `${position.right}px` : ''; + this.styleTop = 'top' in position ? `${position.top}px` : ''; + this.styleBottom = 'bottom' in position ? `${position.bottom}px` : ''; + }, setMaxHeight: async (height) => { + const mdcRoot = this.mdcRoot; + if (!mdcRoot) { + return; + } + // must set both for IE support as IE will not set a var + this.styleMaxHeight = height; + await this.updateComplete; + this.styleMaxHeight = `var(--mdc-menu-max-height, ${height})`; + } }); + } + onKeydown(evt) { + if (this.mdcFoundation) { + this.mdcFoundation.handleKeydown(evt); + } + } + onBodyClick(evt) { + if (this.stayOpenOnBodyClick) { + return; + } + const path = evt.composedPath(); + if (path.indexOf(this) === -1) { + this.close(); + } + } + registerBodyClick() { + this.onBodyClickBound = this.onBodyClick.bind(this); + // capture otherwise listener closes menu after quick menu opens + document.body.addEventListener('click', this.onBodyClickBound, { passive: true, capture: true }); + } + deregisterBodyClick() { + document.body.removeEventListener('click', this.onBodyClickBound, { capture: true }); + } + close() { + this.open = false; + } + show() { + this.open = true; + } +} +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.query)('.mdc-menu-surface') +], MenuSurfaceBase.prototype, "mdcRoot", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.query)('slot') +], MenuSurfaceBase.prototype, "slotElement", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (isAbsolute) { + if (this.mdcFoundation && !this.fixed) { + this.mdcFoundation.setIsHoisted(isAbsolute); + } + }) +], MenuSurfaceBase.prototype, "absolute", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }) +], MenuSurfaceBase.prototype, "fullwidth", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (isFixed) { + if (this.mdcFoundation && !this.absolute) { + this.mdcFoundation.setFixedPosition(isFixed); + } + }) +], MenuSurfaceBase.prototype, "fixed", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Number }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (this.mdcFoundation && this.y !== null && value !== null) { + this.mdcFoundation.setAbsolutePosition(value, this.y); + this.mdcFoundation.setAnchorMargin({ left: value, top: this.y, right: -value, bottom: this.y }); + } + }) +], MenuSurfaceBase.prototype, "x", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Number }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (this.mdcFoundation && this.x !== null && value !== null) { + this.mdcFoundation.setAbsolutePosition(this.x, value); + this.mdcFoundation.setAnchorMargin({ left: this.x, top: value, right: -this.x, bottom: value }); + } + }) +], MenuSurfaceBase.prototype, "y", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (this.mdcFoundation) { + this.mdcFoundation.setQuickOpen(value); + } + }) +], MenuSurfaceBase.prototype, "quick", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean, reflect: true }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (isOpen, wasOpen) { + if (this.mdcFoundation) { + if (isOpen) { + this.mdcFoundation.open(); + // wasOpen helps with first render (when it is `undefined`) perf + } + else if (wasOpen !== undefined) { + this.mdcFoundation.close(); + } + } + }) +], MenuSurfaceBase.prototype, "open", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: Boolean }) +], MenuSurfaceBase.prototype, "stayOpenOnBodyClick", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)(), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (this.mdcFoundation) { + if (value) { + this.mdcFoundation.setAnchorCorner(value); + } + else { + this.mdcFoundation.setAnchorCorner(value); + } + } + }) +], MenuSurfaceBase.prototype, "bitwiseCorner", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (this.mdcFoundation) { + const isValidValue = value === 'START' || value === 'END'; + const isFirstTimeSet = this.previousMenuCorner === null; + const cornerChanged = !isFirstTimeSet && value !== this.previousMenuCorner; + const initiallySetToEnd = isFirstTimeSet && value === 'END'; + if (isValidValue && (cornerChanged || initiallySetToEnd)) { + this.bitwiseCorner = this.bitwiseCorner ^ _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.CornerBit.RIGHT; + this.mdcFoundation.flipCornerHorizontally(); + this.previousMenuCorner = value; + } + } + }) +], MenuSurfaceBase.prototype, "menuCorner", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.property)({ type: String }), + (0,_material_mwc_base_observer__WEBPACK_IMPORTED_MODULE_1__.observer)(function (value) { + if (this.mdcFoundation) { + if (value) { + let newCorner = stringToCorner[value]; + if (this.menuCorner === 'END') { + newCorner = newCorner ^ _material_menu_surface_constants__WEBPACK_IMPORTED_MODULE_7__.CornerBit.RIGHT; + } + this.bitwiseCorner = newCorner; + } + } + }) +], MenuSurfaceBase.prototype, "corner", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], MenuSurfaceBase.prototype, "styleTop", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], MenuSurfaceBase.prototype, "styleLeft", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], MenuSurfaceBase.prototype, "styleRight", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], MenuSurfaceBase.prototype, "styleBottom", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], MenuSurfaceBase.prototype, "styleMaxHeight", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_9__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_4__.state)() +], MenuSurfaceBase.prototype, "styleTransformOrigin", void 0); +//# sourceMappingURL=mwc-menu-surface-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-menu/mwc-menu-surface.css.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@material/mwc-menu/mwc-menu-surface.css.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `.mdc-menu-surface{display:none;position:absolute;box-sizing:border-box;max-width:calc(100vw - 32px);max-width:var(--mdc-menu-max-width, calc(100vw - 32px));max-height:calc(100vh - 32px);max-height:var(--mdc-menu-max-height, calc(100vh - 32px));margin:0;padding:0;transform:scale(1);transform-origin:top left;opacity:0;overflow:auto;will-change:transform,opacity;z-index:8;transition:opacity .03s linear,transform .12s cubic-bezier(0, 0, 0.2, 1),height 250ms cubic-bezier(0, 0, 0.2, 1);box-shadow:0px 5px 5px -3px rgba(0, 0, 0, 0.2),0px 8px 10px 1px rgba(0, 0, 0, 0.14),0px 3px 14px 2px rgba(0,0,0,.12);background-color:#fff;background-color:var(--mdc-theme-surface, #fff);color:#000;color:var(--mdc-theme-on-surface, #000);border-radius:4px;border-radius:var(--mdc-shape-medium, 4px);transform-origin-left:top left;transform-origin-right:top right}.mdc-menu-surface:focus{outline:none}.mdc-menu-surface--animating-open{display:inline-block;transform:scale(0.8);opacity:0}.mdc-menu-surface--open{display:inline-block;transform:scale(1);opacity:1}.mdc-menu-surface--animating-closed{display:inline-block;opacity:0;transition:opacity .075s linear}[dir=rtl] .mdc-menu-surface,.mdc-menu-surface[dir=rtl]{transform-origin-left:top right;transform-origin-right:top left}.mdc-menu-surface--anchor{position:relative;overflow:visible}.mdc-menu-surface--fixed{position:fixed}.mdc-menu-surface--fullwidth{width:100%}:host(:not([open])){display:none}.mdc-menu-surface{z-index:8;z-index:var(--mdc-menu-z-index, 8);min-width:112px;min-width:var(--mdc-menu-min-width, 112px)}`; +//# sourceMappingURL=mwc-menu-surface.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-menu/mwc-menu-surface.js": +/*!*************************************************************!*\ + !*** ./node_modules/@material/mwc-menu/mwc-menu-surface.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MenuSurface: () => (/* binding */ MenuSurface) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_menu_surface_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-menu-surface-base */ "./node_modules/@material/mwc-menu/mwc-menu-surface-base.js"); +/* harmony import */ var _mwc_menu_surface_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-menu-surface.css */ "./node_modules/@material/mwc-menu/mwc-menu-surface.css.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +let MenuSurface = class MenuSurface extends _mwc_menu_surface_base__WEBPACK_IMPORTED_MODULE_1__.MenuSurfaceBase { +}; +MenuSurface.styles = [_mwc_menu_surface_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +MenuSurface = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-menu-surface') +], MenuSurface); + +//# sourceMappingURL=mwc-menu-surface.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-menu/mwc-menu.css.js": +/*!*********************************************************!*\ + !*** ./node_modules/@material/mwc-menu/mwc-menu.css.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `mwc-list ::slotted([mwc-list-item]:not([twoline])),mwc-list ::slotted([noninteractive]:not([twoline])){height:var(--mdc-menu-item-height, 48px)}`; +//# sourceMappingURL=mwc-menu.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-menu/mwc-menu.js": +/*!*****************************************************!*\ + !*** ./node_modules/@material/mwc-menu/mwc-menu.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Menu: () => (/* binding */ Menu), +/* harmony export */ createSetFromIndex: () => (/* reexport safe */ _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__.createSetFromIndex), +/* harmony export */ isEventMulti: () => (/* reexport safe */ _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__.isEventMulti), +/* harmony export */ isIndexSet: () => (/* reexport safe */ _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__.isIndexSet) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_menu_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-menu-base */ "./node_modules/@material/mwc-menu/mwc-menu-base.js"); +/* harmony import */ var _mwc_menu_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-menu.css */ "./node_modules/@material/mwc-menu/mwc-menu.css.js"); +/* harmony import */ var _material_mwc_list_mwc_list_foundation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material/mwc-list/mwc-list-foundation */ "./node_modules/@material/mwc-list/mwc-list-foundation.js"); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + +let Menu = class Menu extends _mwc_menu_base__WEBPACK_IMPORTED_MODULE_1__.MenuBase { +}; +Menu.styles = [_mwc_menu_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +Menu = (0,tslib__WEBPACK_IMPORTED_MODULE_4__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-menu') +], Menu); + +//# sourceMappingURL=mwc-menu.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-ripple/mwc-ripple-base.js": +/*!**************************************************************!*\ + !*** ./node_modules/@material/mwc-ripple/mwc-ripple-base.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ RippleBase: () => (/* binding */ RippleBase) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_dom_ponyfill__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @material/dom/ponyfill */ "./node_modules/@material/dom/ponyfill.js"); +/* harmony import */ var _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @material/mwc-base/base-element */ "./node_modules/@material/mwc-base/base-element.js"); +/* harmony import */ var _material_ripple_foundation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @material/ripple/foundation */ "./node_modules/@material/ripple/foundation.js"); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var lit_directives_class_map_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lit/directives/class-map.js */ "./node_modules/lit/directives/class-map.js"); +/* harmony import */ var lit_directives_style_map_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! lit/directives/style-map.js */ "./node_modules/lit/directives/style-map.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + + + + + +/** @soyCompatible */ +class RippleBase extends _material_mwc_base_base_element__WEBPACK_IMPORTED_MODULE_0__.BaseElement { + constructor() { + super(...arguments); + this.primary = false; + this.accent = false; + this.unbounded = false; + this.disabled = false; + this.activated = false; + this.selected = false; + this.internalUseStateLayerCustomProperties = false; + this.hovering = false; + this.bgFocused = false; + this.fgActivation = false; + this.fgDeactivation = false; + this.fgScale = ''; + this.fgSize = ''; + this.translateStart = ''; + this.translateEnd = ''; + this.leftPos = ''; + this.topPos = ''; + this.mdcFoundationClass = _material_ripple_foundation__WEBPACK_IMPORTED_MODULE_5__["default"]; + } + get isActive() { + return (0,_material_dom_ponyfill__WEBPACK_IMPORTED_MODULE_6__.matches)(this.parentElement || this, ':active'); + } + createAdapter() { + return { + browserSupportsCssVars: () => true, + isUnbounded: () => this.unbounded, + isSurfaceActive: () => this.isActive, + isSurfaceDisabled: () => this.disabled, + addClass: (className) => { + switch (className) { + case 'mdc-ripple-upgraded--background-focused': + this.bgFocused = true; + break; + case 'mdc-ripple-upgraded--foreground-activation': + this.fgActivation = true; + break; + case 'mdc-ripple-upgraded--foreground-deactivation': + this.fgDeactivation = true; + break; + default: + break; + } + }, + removeClass: (className) => { + switch (className) { + case 'mdc-ripple-upgraded--background-focused': + this.bgFocused = false; + break; + case 'mdc-ripple-upgraded--foreground-activation': + this.fgActivation = false; + break; + case 'mdc-ripple-upgraded--foreground-deactivation': + this.fgDeactivation = false; + break; + default: + break; + } + }, + containsEventTarget: () => true, + registerInteractionHandler: () => undefined, + deregisterInteractionHandler: () => undefined, + registerDocumentInteractionHandler: () => undefined, + deregisterDocumentInteractionHandler: () => undefined, + registerResizeHandler: () => undefined, + deregisterResizeHandler: () => undefined, + updateCssVariable: (varName, value) => { + switch (varName) { + case '--mdc-ripple-fg-scale': + this.fgScale = value; + break; + case '--mdc-ripple-fg-size': + this.fgSize = value; + break; + case '--mdc-ripple-fg-translate-end': + this.translateEnd = value; + break; + case '--mdc-ripple-fg-translate-start': + this.translateStart = value; + break; + case '--mdc-ripple-left': + this.leftPos = value; + break; + case '--mdc-ripple-top': + this.topPos = value; + break; + default: + break; + } + }, + computeBoundingRect: () => (this.parentElement || this).getBoundingClientRect(), + getWindowPageOffset: () => ({ x: window.pageXOffset, y: window.pageYOffset }), + }; + } + startPress(ev) { + this.waitForFoundation(() => { + this.mdcFoundation.activate(ev); + }); + } + endPress() { + this.waitForFoundation(() => { + this.mdcFoundation.deactivate(); + }); + } + startFocus() { + this.waitForFoundation(() => { + this.mdcFoundation.handleFocus(); + }); + } + endFocus() { + this.waitForFoundation(() => { + this.mdcFoundation.handleBlur(); + }); + } + startHover() { + this.hovering = true; + } + endHover() { + this.hovering = false; + } + /** + * Wait for the MDCFoundation to be created by `firstUpdated` + */ + waitForFoundation(fn) { + if (this.mdcFoundation) { + fn(); + } + else { + this.updateComplete.then(fn); + } + } + update(changedProperties) { + if (changedProperties.has('disabled')) { + // stop hovering when ripple is disabled to prevent a stuck "hover" state + // When re-enabled, the outer component will get a `mouseenter` event on + // the first movement, which will call `startHover()` + if (this.disabled) { + this.endHover(); + } + } + super.update(changedProperties); + } + /** @soyTemplate */ + render() { + const shouldActivateInPrimary = this.activated && (this.primary || !this.accent); + const shouldSelectInPrimary = this.selected && (this.primary || !this.accent); + /** @classMap */ + const classes = { + 'mdc-ripple-surface--accent': this.accent, + 'mdc-ripple-surface--primary--activated': shouldActivateInPrimary, + 'mdc-ripple-surface--accent--activated': this.accent && this.activated, + 'mdc-ripple-surface--primary--selected': shouldSelectInPrimary, + 'mdc-ripple-surface--accent--selected': this.accent && this.selected, + 'mdc-ripple-surface--disabled': this.disabled, + 'mdc-ripple-surface--hover': this.hovering, + 'mdc-ripple-surface--primary': this.primary, + 'mdc-ripple-surface--selected': this.selected, + 'mdc-ripple-upgraded--background-focused': this.bgFocused, + 'mdc-ripple-upgraded--foreground-activation': this.fgActivation, + 'mdc-ripple-upgraded--foreground-deactivation': this.fgDeactivation, + 'mdc-ripple-upgraded--unbounded': this.unbounded, + 'mdc-ripple-surface--internal-use-state-layer-custom-properties': this.internalUseStateLayerCustomProperties, + }; + return (0,lit__WEBPACK_IMPORTED_MODULE_1__.html) ` +
`; + } +} +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.query)('.mdc-ripple-surface') +], RippleBase.prototype, "mdcRoot", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "primary", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "accent", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "unbounded", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "disabled", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "activated", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "selected", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.property)({ type: Boolean }) +], RippleBase.prototype, "internalUseStateLayerCustomProperties", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "hovering", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "bgFocused", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "fgActivation", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "fgDeactivation", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "fgScale", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "fgSize", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "translateStart", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "translateEnd", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "leftPos", void 0); +(0,tslib__WEBPACK_IMPORTED_MODULE_7__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_2__.state)() +], RippleBase.prototype, "topPos", void 0); +//# sourceMappingURL=mwc-ripple-base.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-ripple/mwc-ripple.css.js": +/*!*************************************************************!*\ + !*** ./node_modules/@material/mwc-ripple/mwc-ripple.css.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ styles: () => (/* binding */ styles) +/* harmony export */ }); +/* harmony import */ var lit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit */ "./node_modules/lit/index.js"); +/** + * @license + * Copyright 2021 Google LLC + * SPDX-LIcense-Identifier: Apache-2.0 + */ + +const styles = (0,lit__WEBPACK_IMPORTED_MODULE_0__.css) `.mdc-ripple-surface{--mdc-ripple-fg-size: 0;--mdc-ripple-left: 0;--mdc-ripple-top: 0;--mdc-ripple-fg-scale: 1;--mdc-ripple-fg-translate-end: 0;--mdc-ripple-fg-translate-start: 0;-webkit-tap-highlight-color:rgba(0,0,0,0);will-change:transform,opacity;position:relative;outline:none;overflow:hidden}.mdc-ripple-surface::before,.mdc-ripple-surface::after{position:absolute;border-radius:50%;opacity:0;pointer-events:none;content:""}.mdc-ripple-surface::before{transition:opacity 15ms linear,background-color 15ms linear;z-index:1;z-index:var(--mdc-ripple-z-index, 1)}.mdc-ripple-surface::after{z-index:0;z-index:var(--mdc-ripple-z-index, 0)}.mdc-ripple-surface.mdc-ripple-upgraded::before{transform:scale(var(--mdc-ripple-fg-scale, 1))}.mdc-ripple-surface.mdc-ripple-upgraded::after{top:0;left:0;transform:scale(0);transform-origin:center center}.mdc-ripple-surface.mdc-ripple-upgraded--unbounded::after{top:var(--mdc-ripple-top, 0);left:var(--mdc-ripple-left, 0)}.mdc-ripple-surface.mdc-ripple-upgraded--foreground-activation::after{animation:mdc-ripple-fg-radius-in 225ms forwards,mdc-ripple-fg-opacity-in 75ms forwards}.mdc-ripple-surface.mdc-ripple-upgraded--foreground-deactivation::after{animation:mdc-ripple-fg-opacity-out 150ms;transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}.mdc-ripple-surface::before,.mdc-ripple-surface::after{top:calc(50% - 100%);left:calc(50% - 100%);width:200%;height:200%}.mdc-ripple-surface.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface[data-mdc-ripple-is-unbounded],.mdc-ripple-upgraded--unbounded{overflow:visible}.mdc-ripple-surface[data-mdc-ripple-is-unbounded]::before,.mdc-ripple-surface[data-mdc-ripple-is-unbounded]::after,.mdc-ripple-upgraded--unbounded::before,.mdc-ripple-upgraded--unbounded::after{top:calc(50% - 50%);left:calc(50% - 50%);width:100%;height:100%}.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::before,.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::after,.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::before,.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::after{top:var(--mdc-ripple-top, calc(50% - 50%));left:var(--mdc-ripple-left, calc(50% - 50%));width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface[data-mdc-ripple-is-unbounded].mdc-ripple-upgraded::after,.mdc-ripple-upgraded--unbounded.mdc-ripple-upgraded::after{width:var(--mdc-ripple-fg-size, 100%);height:var(--mdc-ripple-fg-size, 100%)}.mdc-ripple-surface::before,.mdc-ripple-surface::after{background-color:#000;background-color:var(--mdc-ripple-color, #000)}.mdc-ripple-surface:hover::before,.mdc-ripple-surface.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-ripple-surface.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-ripple-surface:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}@keyframes mdc-ripple-fg-radius-in{from{animation-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transform:translate(var(--mdc-ripple-fg-translate-start, 0)) scale(1)}to{transform:translate(var(--mdc-ripple-fg-translate-end, 0)) scale(var(--mdc-ripple-fg-scale, 1))}}@keyframes mdc-ripple-fg-opacity-in{from{animation-timing-function:linear;opacity:0}to{opacity:var(--mdc-ripple-fg-opacity, 0)}}@keyframes mdc-ripple-fg-opacity-out{from{animation-timing-function:linear;opacity:var(--mdc-ripple-fg-opacity, 0)}to{opacity:0}}:host{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;display:block}:host .mdc-ripple-surface{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none;will-change:unset}.mdc-ripple-surface--primary::before,.mdc-ripple-surface--primary::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-ripple-surface--primary:hover::before,.mdc-ripple-surface--primary.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-ripple-surface--primary.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--primary:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-ripple-surface--primary:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--primary:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface--primary.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface--primary--activated::before{opacity:0.12;opacity:var(--mdc-ripple-activated-opacity, 0.12)}.mdc-ripple-surface--primary--activated::before,.mdc-ripple-surface--primary--activated::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-ripple-surface--primary--activated:hover::before,.mdc-ripple-surface--primary--activated.mdc-ripple-surface--hover::before{opacity:0.16;opacity:var(--mdc-ripple-hover-opacity, 0.16)}.mdc-ripple-surface--primary--activated.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--primary--activated:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-ripple-surface--primary--activated:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--primary--activated:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-ripple-surface--primary--activated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-ripple-surface--primary--selected::before{opacity:0.08;opacity:var(--mdc-ripple-selected-opacity, 0.08)}.mdc-ripple-surface--primary--selected::before,.mdc-ripple-surface--primary--selected::after{background-color:#6200ee;background-color:var(--mdc-ripple-color, var(--mdc-theme-primary, #6200ee))}.mdc-ripple-surface--primary--selected:hover::before,.mdc-ripple-surface--primary--selected.mdc-ripple-surface--hover::before{opacity:0.12;opacity:var(--mdc-ripple-hover-opacity, 0.12)}.mdc-ripple-surface--primary--selected.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--primary--selected:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-focus-opacity, 0.2)}.mdc-ripple-surface--primary--selected:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--primary--selected:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-ripple-surface--primary--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-ripple-surface--accent::before,.mdc-ripple-surface--accent::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-ripple-surface--accent:hover::before,.mdc-ripple-surface--accent.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-opacity, 0.04)}.mdc-ripple-surface--accent.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--accent:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-opacity, 0.12)}.mdc-ripple-surface--accent:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--accent:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface--accent.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.12)}.mdc-ripple-surface--accent--activated::before{opacity:0.12;opacity:var(--mdc-ripple-activated-opacity, 0.12)}.mdc-ripple-surface--accent--activated::before,.mdc-ripple-surface--accent--activated::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-ripple-surface--accent--activated:hover::before,.mdc-ripple-surface--accent--activated.mdc-ripple-surface--hover::before{opacity:0.16;opacity:var(--mdc-ripple-hover-opacity, 0.16)}.mdc-ripple-surface--accent--activated.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--accent--activated:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-focus-opacity, 0.24)}.mdc-ripple-surface--accent--activated:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--accent--activated:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.24;opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-ripple-surface--accent--activated.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.24)}.mdc-ripple-surface--accent--selected::before{opacity:0.08;opacity:var(--mdc-ripple-selected-opacity, 0.08)}.mdc-ripple-surface--accent--selected::before,.mdc-ripple-surface--accent--selected::after{background-color:#018786;background-color:var(--mdc-ripple-color, var(--mdc-theme-secondary, #018786))}.mdc-ripple-surface--accent--selected:hover::before,.mdc-ripple-surface--accent--selected.mdc-ripple-surface--hover::before{opacity:0.12;opacity:var(--mdc-ripple-hover-opacity, 0.12)}.mdc-ripple-surface--accent--selected.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--accent--selected:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-focus-opacity, 0.2)}.mdc-ripple-surface--accent--selected:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--accent--selected:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.2;opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-ripple-surface--accent--selected.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-press-opacity, 0.2)}.mdc-ripple-surface--disabled{opacity:0}.mdc-ripple-surface--internal-use-state-layer-custom-properties::before,.mdc-ripple-surface--internal-use-state-layer-custom-properties::after{background-color:#000;background-color:var(--mdc-ripple-hover-state-layer-color, #000)}.mdc-ripple-surface--internal-use-state-layer-custom-properties:hover::before,.mdc-ripple-surface--internal-use-state-layer-custom-properties.mdc-ripple-surface--hover::before{opacity:0.04;opacity:var(--mdc-ripple-hover-state-layer-opacity, 0.04)}.mdc-ripple-surface--internal-use-state-layer-custom-properties.mdc-ripple-upgraded--background-focused::before,.mdc-ripple-surface--internal-use-state-layer-custom-properties:not(.mdc-ripple-upgraded):focus::before{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-focus-state-layer-opacity, 0.12)}.mdc-ripple-surface--internal-use-state-layer-custom-properties:not(.mdc-ripple-upgraded)::after{transition:opacity 150ms linear}.mdc-ripple-surface--internal-use-state-layer-custom-properties:not(.mdc-ripple-upgraded):active::after{transition-duration:75ms;opacity:0.12;opacity:var(--mdc-ripple-pressed-state-layer-opacity, 0.12)}.mdc-ripple-surface--internal-use-state-layer-custom-properties.mdc-ripple-upgraded{--mdc-ripple-fg-opacity:var(--mdc-ripple-pressed-state-layer-opacity, 0.12)}`; +//# sourceMappingURL=mwc-ripple.css.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-ripple/mwc-ripple.js": +/*!*********************************************************!*\ + !*** ./node_modules/@material/mwc-ripple/mwc-ripple.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ Ripple: () => (/* binding */ Ripple) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! lit/decorators.js */ "./node_modules/lit/decorators.js"); +/* harmony import */ var _mwc_ripple_base__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mwc-ripple-base */ "./node_modules/@material/mwc-ripple/mwc-ripple-base.js"); +/* harmony import */ var _mwc_ripple_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./mwc-ripple.css */ "./node_modules/@material/mwc-ripple/mwc-ripple.css.js"); +/** + * @license + * Copyright 2018 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +// Style preference for leading underscores. +// tslint:disable:strip-private-property-underscore + + + +/** @soyCompatible */ +let Ripple = class Ripple extends _mwc_ripple_base__WEBPACK_IMPORTED_MODULE_1__.RippleBase { +}; +Ripple.styles = [_mwc_ripple_css__WEBPACK_IMPORTED_MODULE_2__.styles]; +Ripple = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([ + (0,lit_decorators_js__WEBPACK_IMPORTED_MODULE_0__.customElement)('mwc-ripple') +], Ripple); + +//# sourceMappingURL=mwc-ripple.js.map + +/***/ }), + +/***/ "./node_modules/@material/mwc-ripple/ripple-handlers.js": +/*!**************************************************************!*\ + !*** ./node_modules/@material/mwc-ripple/ripple-handlers.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ RippleHandlers: () => (/* binding */ RippleHandlers) +/* harmony export */ }); +/** + * @license + * Copyright 2020 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ +/** + * Class that encapsulates the events handlers for `mwc-ripple` + * + * + * Example: + * ``` + * class XFoo extends LitElement { + * async getRipple() { + * this.renderRipple = true; + * await this.updateComplete; + * return this.renderRoot.querySelector('mwc-ripple'); + * } + * rippleHandlers = new RippleHandlers(() => this.getRipple()); + * + * render() { + * return html` + *
+ * ${this.renderRipple ? html`` : ''} + * `; + * } + * } + * ``` + */ +class RippleHandlers { + constructor( + /** Function that returns a `mwc-ripple` */ + rippleFn) { + this.startPress = (ev) => { + rippleFn().then((r) => { + r && r.startPress(ev); + }); + }; + this.endPress = () => { + rippleFn().then((r) => { + r && r.endPress(); + }); + }; + this.startFocus = () => { + rippleFn().then((r) => { + r && r.startFocus(); + }); + }; + this.endFocus = () => { + rippleFn().then((r) => { + r && r.endFocus(); + }); + }; + this.startHover = () => { + rippleFn().then((r) => { + r && r.startHover(); + }); + }; + this.endHover = () => { + rippleFn().then((r) => { + r && r.endHover(); + }); + }; + } +} +//# sourceMappingURL=ripple-handlers.js.map + +/***/ }), + +/***/ "./node_modules/@material/ripple/constants.js": +/*!****************************************************!*\ + !*** ./node_modules/@material/ripple/constants.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ cssClasses: () => (/* binding */ cssClasses), +/* harmony export */ numbers: () => (/* binding */ numbers), +/* harmony export */ strings: () => (/* binding */ strings) +/* harmony export */ }); +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission 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: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE 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. + */ +var cssClasses = { + // Ripple is a special case where the "root" component is really a "mixin" of sorts, + // given that it's an 'upgrade' to an existing component. That being said it is the root + // CSS class that all other CSS classes derive from. + BG_FOCUSED: 'mdc-ripple-upgraded--background-focused', + FG_ACTIVATION: 'mdc-ripple-upgraded--foreground-activation', + FG_DEACTIVATION: 'mdc-ripple-upgraded--foreground-deactivation', + ROOT: 'mdc-ripple-upgraded', + UNBOUNDED: 'mdc-ripple-upgraded--unbounded', +}; +var strings = { + VAR_FG_SCALE: '--mdc-ripple-fg-scale', + VAR_FG_SIZE: '--mdc-ripple-fg-size', + VAR_FG_TRANSLATE_END: '--mdc-ripple-fg-translate-end', + VAR_FG_TRANSLATE_START: '--mdc-ripple-fg-translate-start', + VAR_LEFT: '--mdc-ripple-left', + VAR_TOP: '--mdc-ripple-top', +}; +var numbers = { + DEACTIVATION_TIMEOUT_MS: 225, + FG_DEACTIVATION_MS: 150, + INITIAL_ORIGIN_SCALE: 0.6, + PADDING: 10, + TAP_DELAY_MS: 300, // Delay between touch and simulated mouse events on touch devices +}; +//# sourceMappingURL=constants.js.map + +/***/ }), + +/***/ "./node_modules/@material/ripple/foundation.js": +/*!*****************************************************!*\ + !*** ./node_modules/@material/ripple/foundation.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ MDCRippleFoundation: () => (/* binding */ MDCRippleFoundation), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.mjs"); +/* harmony import */ var _material_base_foundation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @material/base/foundation */ "./node_modules/@material/base/foundation.js"); +/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ "./node_modules/@material/ripple/constants.js"); +/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ "./node_modules/@material/ripple/util.js"); +/** + * @license + * Copyright 2016 Google Inc. + * + * Permission 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: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE 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. + */ + + + + +// Activation events registered on the root element of each instance for activation +var ACTIVATION_EVENT_TYPES = [ + 'touchstart', 'pointerdown', 'mousedown', 'keydown', +]; +// Deactivation events registered on documentElement when a pointer-related down event occurs +var POINTER_DEACTIVATION_EVENT_TYPES = [ + 'touchend', 'pointerup', 'mouseup', 'contextmenu', +]; +// simultaneous nested activations +var activatedTargets = []; +var MDCRippleFoundation = /** @class */ (function (_super) { + (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__extends)(MDCRippleFoundation, _super); + function MDCRippleFoundation(adapter) { + var _this = _super.call(this, (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)((0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, MDCRippleFoundation.defaultAdapter), adapter)) || this; + _this.activationAnimationHasEnded = false; + _this.activationTimer = 0; + _this.fgDeactivationRemovalTimer = 0; + _this.fgScale = '0'; + _this.frame = { width: 0, height: 0 }; + _this.initialSize = 0; + _this.layoutFrame = 0; + _this.maxRadius = 0; + _this.unboundedCoords = { left: 0, top: 0 }; + _this.activationState = _this.defaultActivationState(); + _this.activationTimerCallback = function () { + _this.activationAnimationHasEnded = true; + _this.runDeactivationUXLogicIfReady(); + }; + _this.activateHandler = function (e) { + _this.activateImpl(e); + }; + _this.deactivateHandler = function () { + _this.deactivateImpl(); + }; + _this.focusHandler = function () { + _this.handleFocus(); + }; + _this.blurHandler = function () { + _this.handleBlur(); + }; + _this.resizeHandler = function () { + _this.layout(); + }; + return _this; + } + Object.defineProperty(MDCRippleFoundation, "cssClasses", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.cssClasses; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRippleFoundation, "strings", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.strings; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRippleFoundation, "numbers", { + get: function () { + return _constants__WEBPACK_IMPORTED_MODULE_1__.numbers; + }, + enumerable: false, + configurable: true + }); + Object.defineProperty(MDCRippleFoundation, "defaultAdapter", { + get: function () { + return { + addClass: function () { return undefined; }, + browserSupportsCssVars: function () { return true; }, + computeBoundingRect: function () { + return ({ top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 }); + }, + containsEventTarget: function () { return true; }, + deregisterDocumentInteractionHandler: function () { return undefined; }, + deregisterInteractionHandler: function () { return undefined; }, + deregisterResizeHandler: function () { return undefined; }, + getWindowPageOffset: function () { return ({ x: 0, y: 0 }); }, + isSurfaceActive: function () { return true; }, + isSurfaceDisabled: function () { return true; }, + isUnbounded: function () { return true; }, + registerDocumentInteractionHandler: function () { return undefined; }, + registerInteractionHandler: function () { return undefined; }, + registerResizeHandler: function () { return undefined; }, + removeClass: function () { return undefined; }, + updateCssVariable: function () { return undefined; }, + }; + }, + enumerable: false, + configurable: true + }); + MDCRippleFoundation.prototype.init = function () { + var _this = this; + var supportsPressRipple = this.supportsPressRipple(); + this.registerRootHandlers(supportsPressRipple); + if (supportsPressRipple) { + var _a = MDCRippleFoundation.cssClasses, ROOT_1 = _a.ROOT, UNBOUNDED_1 = _a.UNBOUNDED; + requestAnimationFrame(function () { + _this.adapter.addClass(ROOT_1); + if (_this.adapter.isUnbounded()) { + _this.adapter.addClass(UNBOUNDED_1); + // Unbounded ripples need layout logic applied immediately to set coordinates for both shade and ripple + _this.layoutInternal(); + } + }); + } + }; + MDCRippleFoundation.prototype.destroy = function () { + var _this = this; + if (this.supportsPressRipple()) { + if (this.activationTimer) { + clearTimeout(this.activationTimer); + this.activationTimer = 0; + this.adapter.removeClass(MDCRippleFoundation.cssClasses.FG_ACTIVATION); + } + if (this.fgDeactivationRemovalTimer) { + clearTimeout(this.fgDeactivationRemovalTimer); + this.fgDeactivationRemovalTimer = 0; + this.adapter.removeClass(MDCRippleFoundation.cssClasses.FG_DEACTIVATION); + } + var _a = MDCRippleFoundation.cssClasses, ROOT_2 = _a.ROOT, UNBOUNDED_2 = _a.UNBOUNDED; + requestAnimationFrame(function () { + _this.adapter.removeClass(ROOT_2); + _this.adapter.removeClass(UNBOUNDED_2); + _this.removeCssVars(); + }); + } + this.deregisterRootHandlers(); + this.deregisterDeactivationHandlers(); + }; + /** + * @param evt Optional event containing position information. + */ + MDCRippleFoundation.prototype.activate = function (evt) { + this.activateImpl(evt); + }; + MDCRippleFoundation.prototype.deactivate = function () { + this.deactivateImpl(); + }; + MDCRippleFoundation.prototype.layout = function () { + var _this = this; + if (this.layoutFrame) { + cancelAnimationFrame(this.layoutFrame); + } + this.layoutFrame = requestAnimationFrame(function () { + _this.layoutInternal(); + _this.layoutFrame = 0; + }); + }; + MDCRippleFoundation.prototype.setUnbounded = function (unbounded) { + var UNBOUNDED = MDCRippleFoundation.cssClasses.UNBOUNDED; + if (unbounded) { + this.adapter.addClass(UNBOUNDED); + } + else { + this.adapter.removeClass(UNBOUNDED); + } + }; + MDCRippleFoundation.prototype.handleFocus = function () { + var _this = this; + requestAnimationFrame(function () { return _this.adapter.addClass(MDCRippleFoundation.cssClasses.BG_FOCUSED); }); + }; + MDCRippleFoundation.prototype.handleBlur = function () { + var _this = this; + requestAnimationFrame(function () { return _this.adapter.removeClass(MDCRippleFoundation.cssClasses.BG_FOCUSED); }); + }; + /** + * We compute this property so that we are not querying information about the client + * until the point in time where the foundation requests it. This prevents scenarios where + * client-side feature-detection may happen too early, such as when components are rendered on the server + * and then initialized at mount time on the client. + */ + MDCRippleFoundation.prototype.supportsPressRipple = function () { + return this.adapter.browserSupportsCssVars(); + }; + MDCRippleFoundation.prototype.defaultActivationState = function () { + return { + activationEvent: undefined, + hasDeactivationUXRun: false, + isActivated: false, + isProgrammatic: false, + wasActivatedByPointer: false, + wasElementMadeActive: false, + }; + }; + /** + * supportsPressRipple Passed from init to save a redundant function call + */ + MDCRippleFoundation.prototype.registerRootHandlers = function (supportsPressRipple) { + var e_1, _a; + if (supportsPressRipple) { + try { + for (var ACTIVATION_EVENT_TYPES_1 = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__values)(ACTIVATION_EVENT_TYPES), ACTIVATION_EVENT_TYPES_1_1 = ACTIVATION_EVENT_TYPES_1.next(); !ACTIVATION_EVENT_TYPES_1_1.done; ACTIVATION_EVENT_TYPES_1_1 = ACTIVATION_EVENT_TYPES_1.next()) { + var evtType = ACTIVATION_EVENT_TYPES_1_1.value; + this.adapter.registerInteractionHandler(evtType, this.activateHandler); + } + } + catch (e_1_1) { e_1 = { error: e_1_1 }; } + finally { + try { + if (ACTIVATION_EVENT_TYPES_1_1 && !ACTIVATION_EVENT_TYPES_1_1.done && (_a = ACTIVATION_EVENT_TYPES_1.return)) _a.call(ACTIVATION_EVENT_TYPES_1); + } + finally { if (e_1) throw e_1.error; } + } + if (this.adapter.isUnbounded()) { + this.adapter.registerResizeHandler(this.resizeHandler); + } + } + this.adapter.registerInteractionHandler('focus', this.focusHandler); + this.adapter.registerInteractionHandler('blur', this.blurHandler); + }; + MDCRippleFoundation.prototype.registerDeactivationHandlers = function (evt) { + var e_2, _a; + if (evt.type === 'keydown') { + this.adapter.registerInteractionHandler('keyup', this.deactivateHandler); + } + else { + try { + for (var POINTER_DEACTIVATION_EVENT_TYPES_1 = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__values)(POINTER_DEACTIVATION_EVENT_TYPES), POINTER_DEACTIVATION_EVENT_TYPES_1_1 = POINTER_DEACTIVATION_EVENT_TYPES_1.next(); !POINTER_DEACTIVATION_EVENT_TYPES_1_1.done; POINTER_DEACTIVATION_EVENT_TYPES_1_1 = POINTER_DEACTIVATION_EVENT_TYPES_1.next()) { + var evtType = POINTER_DEACTIVATION_EVENT_TYPES_1_1.value; + this.adapter.registerDocumentInteractionHandler(evtType, this.deactivateHandler); + } + } + catch (e_2_1) { e_2 = { error: e_2_1 }; } + finally { + try { + if (POINTER_DEACTIVATION_EVENT_TYPES_1_1 && !POINTER_DEACTIVATION_EVENT_TYPES_1_1.done && (_a = POINTER_DEACTIVATION_EVENT_TYPES_1.return)) _a.call(POINTER_DEACTIVATION_EVENT_TYPES_1); + } + finally { if (e_2) throw e_2.error; } + } + } + }; + MDCRippleFoundation.prototype.deregisterRootHandlers = function () { + var e_3, _a; + try { + for (var ACTIVATION_EVENT_TYPES_2 = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__values)(ACTIVATION_EVENT_TYPES), ACTIVATION_EVENT_TYPES_2_1 = ACTIVATION_EVENT_TYPES_2.next(); !ACTIVATION_EVENT_TYPES_2_1.done; ACTIVATION_EVENT_TYPES_2_1 = ACTIVATION_EVENT_TYPES_2.next()) { + var evtType = ACTIVATION_EVENT_TYPES_2_1.value; + this.adapter.deregisterInteractionHandler(evtType, this.activateHandler); + } + } + catch (e_3_1) { e_3 = { error: e_3_1 }; } + finally { + try { + if (ACTIVATION_EVENT_TYPES_2_1 && !ACTIVATION_EVENT_TYPES_2_1.done && (_a = ACTIVATION_EVENT_TYPES_2.return)) _a.call(ACTIVATION_EVENT_TYPES_2); + } + finally { if (e_3) throw e_3.error; } + } + this.adapter.deregisterInteractionHandler('focus', this.focusHandler); + this.adapter.deregisterInteractionHandler('blur', this.blurHandler); + if (this.adapter.isUnbounded()) { + this.adapter.deregisterResizeHandler(this.resizeHandler); + } + }; + MDCRippleFoundation.prototype.deregisterDeactivationHandlers = function () { + var e_4, _a; + this.adapter.deregisterInteractionHandler('keyup', this.deactivateHandler); + try { + for (var POINTER_DEACTIVATION_EVENT_TYPES_2 = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__values)(POINTER_DEACTIVATION_EVENT_TYPES), POINTER_DEACTIVATION_EVENT_TYPES_2_1 = POINTER_DEACTIVATION_EVENT_TYPES_2.next(); !POINTER_DEACTIVATION_EVENT_TYPES_2_1.done; POINTER_DEACTIVATION_EVENT_TYPES_2_1 = POINTER_DEACTIVATION_EVENT_TYPES_2.next()) { + var evtType = POINTER_DEACTIVATION_EVENT_TYPES_2_1.value; + this.adapter.deregisterDocumentInteractionHandler(evtType, this.deactivateHandler); + } + } + catch (e_4_1) { e_4 = { error: e_4_1 }; } + finally { + try { + if (POINTER_DEACTIVATION_EVENT_TYPES_2_1 && !POINTER_DEACTIVATION_EVENT_TYPES_2_1.done && (_a = POINTER_DEACTIVATION_EVENT_TYPES_2.return)) _a.call(POINTER_DEACTIVATION_EVENT_TYPES_2); + } + finally { if (e_4) throw e_4.error; } + } + }; + MDCRippleFoundation.prototype.removeCssVars = function () { + var _this = this; + var rippleStrings = MDCRippleFoundation.strings; + var keys = Object.keys(rippleStrings); + keys.forEach(function (key) { + if (key.indexOf('VAR_') === 0) { + _this.adapter.updateCssVariable(rippleStrings[key], null); + } + }); + }; + MDCRippleFoundation.prototype.activateImpl = function (evt) { + var _this = this; + if (this.adapter.isSurfaceDisabled()) { + return; + } + var activationState = this.activationState; + if (activationState.isActivated) { + return; + } + // Avoid reacting to follow-on events fired by touch device after an already-processed user interaction + var previousActivationEvent = this.previousActivationEvent; + var isSameInteraction = previousActivationEvent && evt !== undefined && previousActivationEvent.type !== evt.type; + if (isSameInteraction) { + return; + } + activationState.isActivated = true; + activationState.isProgrammatic = evt === undefined; + activationState.activationEvent = evt; + activationState.wasActivatedByPointer = activationState.isProgrammatic ? false : evt !== undefined && (evt.type === 'mousedown' || evt.type === 'touchstart' || evt.type === 'pointerdown'); + var hasActivatedChild = evt !== undefined && + activatedTargets.length > 0 && + activatedTargets.some(function (target) { return _this.adapter.containsEventTarget(target); }); + if (hasActivatedChild) { + // Immediately reset activation state, while preserving logic that prevents touch follow-on events + this.resetActivationState(); + return; + } + if (evt !== undefined) { + activatedTargets.push(evt.target); + this.registerDeactivationHandlers(evt); + } + activationState.wasElementMadeActive = this.checkElementMadeActive(evt); + if (activationState.wasElementMadeActive) { + this.animateActivation(); + } + requestAnimationFrame(function () { + // Reset array on next frame after the current event has had a chance to bubble to prevent ancestor ripples + activatedTargets = []; + if (!activationState.wasElementMadeActive + && evt !== undefined + && (evt.key === ' ' || evt.keyCode === 32)) { + // If space was pressed, try again within an rAF call to detect :active, because different UAs report + // active states inconsistently when they're called within event handling code: + // - https://bugs.chromium.org/p/chromium/issues/detail?id=635971 + // - https://bugzilla.mozilla.org/show_bug.cgi?id=1293741 + // We try first outside rAF to support Edge, which does not exhibit this problem, but will crash if a CSS + // variable is set within a rAF callback for a submit button interaction (#2241). + activationState.wasElementMadeActive = _this.checkElementMadeActive(evt); + if (activationState.wasElementMadeActive) { + _this.animateActivation(); + } + } + if (!activationState.wasElementMadeActive) { + // Reset activation state immediately if element was not made active. + _this.activationState = _this.defaultActivationState(); + } + }); + }; + MDCRippleFoundation.prototype.checkElementMadeActive = function (evt) { + return (evt !== undefined && evt.type === 'keydown') ? + this.adapter.isSurfaceActive() : + true; + }; + MDCRippleFoundation.prototype.animateActivation = function () { + var _this = this; + var _a = MDCRippleFoundation.strings, VAR_FG_TRANSLATE_START = _a.VAR_FG_TRANSLATE_START, VAR_FG_TRANSLATE_END = _a.VAR_FG_TRANSLATE_END; + var _b = MDCRippleFoundation.cssClasses, FG_DEACTIVATION = _b.FG_DEACTIVATION, FG_ACTIVATION = _b.FG_ACTIVATION; + var DEACTIVATION_TIMEOUT_MS = MDCRippleFoundation.numbers.DEACTIVATION_TIMEOUT_MS; + this.layoutInternal(); + var translateStart = ''; + var translateEnd = ''; + if (!this.adapter.isUnbounded()) { + var _c = this.getFgTranslationCoordinates(), startPoint = _c.startPoint, endPoint = _c.endPoint; + translateStart = startPoint.x + "px, " + startPoint.y + "px"; + translateEnd = endPoint.x + "px, " + endPoint.y + "px"; + } + this.adapter.updateCssVariable(VAR_FG_TRANSLATE_START, translateStart); + this.adapter.updateCssVariable(VAR_FG_TRANSLATE_END, translateEnd); + // Cancel any ongoing activation/deactivation animations + clearTimeout(this.activationTimer); + clearTimeout(this.fgDeactivationRemovalTimer); + this.rmBoundedActivationClasses(); + this.adapter.removeClass(FG_DEACTIVATION); + // Force layout in order to re-trigger the animation. + this.adapter.computeBoundingRect(); + this.adapter.addClass(FG_ACTIVATION); + this.activationTimer = setTimeout(function () { + _this.activationTimerCallback(); + }, DEACTIVATION_TIMEOUT_MS); + }; + MDCRippleFoundation.prototype.getFgTranslationCoordinates = function () { + var _a = this.activationState, activationEvent = _a.activationEvent, wasActivatedByPointer = _a.wasActivatedByPointer; + var startPoint; + if (wasActivatedByPointer) { + startPoint = (0,_util__WEBPACK_IMPORTED_MODULE_2__.getNormalizedEventCoords)(activationEvent, this.adapter.getWindowPageOffset(), this.adapter.computeBoundingRect()); + } + else { + startPoint = { + x: this.frame.width / 2, + y: this.frame.height / 2, + }; + } + // Center the element around the start point. + startPoint = { + x: startPoint.x - (this.initialSize / 2), + y: startPoint.y - (this.initialSize / 2), + }; + var endPoint = { + x: (this.frame.width / 2) - (this.initialSize / 2), + y: (this.frame.height / 2) - (this.initialSize / 2), + }; + return { startPoint: startPoint, endPoint: endPoint }; + }; + MDCRippleFoundation.prototype.runDeactivationUXLogicIfReady = function () { + var _this = this; + // This method is called both when a pointing device is released, and when the activation animation ends. + // The deactivation animation should only run after both of those occur. + var FG_DEACTIVATION = MDCRippleFoundation.cssClasses.FG_DEACTIVATION; + var _a = this.activationState, hasDeactivationUXRun = _a.hasDeactivationUXRun, isActivated = _a.isActivated; + var activationHasEnded = hasDeactivationUXRun || !isActivated; + if (activationHasEnded && this.activationAnimationHasEnded) { + this.rmBoundedActivationClasses(); + this.adapter.addClass(FG_DEACTIVATION); + this.fgDeactivationRemovalTimer = setTimeout(function () { + _this.adapter.removeClass(FG_DEACTIVATION); + }, _constants__WEBPACK_IMPORTED_MODULE_1__.numbers.FG_DEACTIVATION_MS); + } + }; + MDCRippleFoundation.prototype.rmBoundedActivationClasses = function () { + var FG_ACTIVATION = MDCRippleFoundation.cssClasses.FG_ACTIVATION; + this.adapter.removeClass(FG_ACTIVATION); + this.activationAnimationHasEnded = false; + this.adapter.computeBoundingRect(); + }; + MDCRippleFoundation.prototype.resetActivationState = function () { + var _this = this; + this.previousActivationEvent = this.activationState.activationEvent; + this.activationState = this.defaultActivationState(); + // Touch devices may fire additional events for the same interaction within a short time. + // Store the previous event until it's safe to assume that subsequent events are for new interactions. + setTimeout(function () { return _this.previousActivationEvent = undefined; }, MDCRippleFoundation.numbers.TAP_DELAY_MS); + }; + MDCRippleFoundation.prototype.deactivateImpl = function () { + var _this = this; + var activationState = this.activationState; + // This can happen in scenarios such as when you have a keyup event that blurs the element. + if (!activationState.isActivated) { + return; + } + var state = (0,tslib__WEBPACK_IMPORTED_MODULE_0__.__assign)({}, activationState); + if (activationState.isProgrammatic) { + requestAnimationFrame(function () { + _this.animateDeactivation(state); + }); + this.resetActivationState(); + } + else { + this.deregisterDeactivationHandlers(); + requestAnimationFrame(function () { + _this.activationState.hasDeactivationUXRun = true; + _this.animateDeactivation(state); + _this.resetActivationState(); + }); + } + }; + MDCRippleFoundation.prototype.animateDeactivation = function (_a) { + var wasActivatedByPointer = _a.wasActivatedByPointer, wasElementMadeActive = _a.wasElementMadeActive; + if (wasActivatedByPointer || wasElementMadeActive) { + this.runDeactivationUXLogicIfReady(); + } + }; + MDCRippleFoundation.prototype.layoutInternal = function () { + var _this = this; + this.frame = this.adapter.computeBoundingRect(); + var maxDim = Math.max(this.frame.height, this.frame.width); + // Surface diameter is treated differently for unbounded vs. bounded ripples. + // Unbounded ripple diameter is calculated smaller since the surface is expected to already be padded appropriately + // to extend the hitbox, and the ripple is expected to meet the edges of the padded hitbox (which is typically + // square). Bounded ripples, on the other hand, are fully expected to expand beyond the surface's longest diameter + // (calculated based on the diagonal plus a constant padding), and are clipped at the surface's border via + // `overflow: hidden`. + var getBoundedRadius = function () { + var hypotenuse = Math.sqrt(Math.pow(_this.frame.width, 2) + Math.pow(_this.frame.height, 2)); + return hypotenuse + MDCRippleFoundation.numbers.PADDING; + }; + this.maxRadius = this.adapter.isUnbounded() ? maxDim : getBoundedRadius(); + // Ripple is sized as a fraction of the largest dimension of the surface, then scales up using a CSS scale transform + var initialSize = Math.floor(maxDim * MDCRippleFoundation.numbers.INITIAL_ORIGIN_SCALE); + // Unbounded ripple size should always be even number to equally center align. + if (this.adapter.isUnbounded() && initialSize % 2 !== 0) { + this.initialSize = initialSize - 1; + } + else { + this.initialSize = initialSize; + } + this.fgScale = "" + this.maxRadius / this.initialSize; + this.updateLayoutCssVars(); + }; + MDCRippleFoundation.prototype.updateLayoutCssVars = function () { + var _a = MDCRippleFoundation.strings, VAR_FG_SIZE = _a.VAR_FG_SIZE, VAR_LEFT = _a.VAR_LEFT, VAR_TOP = _a.VAR_TOP, VAR_FG_SCALE = _a.VAR_FG_SCALE; + this.adapter.updateCssVariable(VAR_FG_SIZE, this.initialSize + "px"); + this.adapter.updateCssVariable(VAR_FG_SCALE, this.fgScale); + if (this.adapter.isUnbounded()) { + this.unboundedCoords = { + left: Math.round((this.frame.width / 2) - (this.initialSize / 2)), + top: Math.round((this.frame.height / 2) - (this.initialSize / 2)), + }; + this.adapter.updateCssVariable(VAR_LEFT, this.unboundedCoords.left + "px"); + this.adapter.updateCssVariable(VAR_TOP, this.unboundedCoords.top + "px"); + } + }; + return MDCRippleFoundation; +}(_material_base_foundation__WEBPACK_IMPORTED_MODULE_3__.MDCFoundation)); + +// tslint:disable-next-line:no-default-export Needed for backward compatibility with MDC Web v0.44.0 and earlier. +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MDCRippleFoundation); +//# sourceMappingURL=foundation.js.map + +/***/ }), + +/***/ "./node_modules/@material/ripple/util.js": +/*!***********************************************!*\ + !*** ./node_modules/@material/ripple/util.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ getNormalizedEventCoords: () => (/* binding */ getNormalizedEventCoords), +/* harmony export */ supportsCssVariables: () => (/* binding */ supportsCssVariables) +/* harmony export */ }); +/** + * Stores result from supportsCssVariables to avoid redundant processing to + * detect CSS custom variable support. + */ +var supportsCssVariables_; +function supportsCssVariables(windowObj, forceRefresh) { + if (forceRefresh === void 0) { forceRefresh = false; } + var CSS = windowObj.CSS; + var supportsCssVars = supportsCssVariables_; + if (typeof supportsCssVariables_ === 'boolean' && !forceRefresh) { + return supportsCssVariables_; + } + var supportsFunctionPresent = CSS && typeof CSS.supports === 'function'; + if (!supportsFunctionPresent) { + return false; + } + var explicitlySupportsCssVars = CSS.supports('--css-vars', 'yes'); + // See: https://bugs.webkit.org/show_bug.cgi?id=154669 + // See: README section on Safari + var weAreFeatureDetectingSafari10plus = (CSS.supports('(--css-vars: yes)') && + CSS.supports('color', '#00000000')); + supportsCssVars = + explicitlySupportsCssVars || weAreFeatureDetectingSafari10plus; + if (!forceRefresh) { + supportsCssVariables_ = supportsCssVars; + } + return supportsCssVars; +} +function getNormalizedEventCoords(evt, pageOffset, clientRect) { + if (!evt) { + return { x: 0, y: 0 }; + } + var x = pageOffset.x, y = pageOffset.y; + var documentX = x + clientRect.left; + var documentY = y + clientRect.top; + var normalizedX; + var normalizedY; + // Determine touch point relative to the ripple container. + if (evt.type === 'touchstart') { + var touchEvent = evt; + normalizedX = touchEvent.changedTouches[0].pageX - documentX; + normalizedY = touchEvent.changedTouches[0].pageY - documentY; + } + else { + var mouseEvent = evt; + normalizedX = mouseEvent.pageX - documentX; + normalizedY = mouseEvent.pageY - documentY; + } + return { x: normalizedX, y: normalizedY }; +} +//# sourceMappingURL=util.js.map + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/app-drawer/app-drawer.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/app-drawer/app-drawer.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _polymer_polymer_lib_utils_render_status_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/utils/render-status.js */ "./node_modules/@polymer/polymer/lib/utils/render-status.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + +/** +app-drawer is a navigation drawer that can slide in from the left or right. + +Example: + +Align the drawer at the start, which is left in LTR layouts (default): + +```html + +``` + +Align the drawer at the end: + +```html + +``` + +To make the contents of the drawer scrollable, create a wrapper for the scroll +content, and apply height and overflow styles to it. + +```html + +
+
+``` + +### Styling + +Custom property | Description | Default +---------------------------------|----------------------------------------|-------------------- +`--app-drawer-width` | Width of the drawer | 256px +`--app-drawer-content-container` | Mixin for the drawer content container | {} +`--app-drawer-scrim-background` | Background for the scrim | rgba(0, 0, 0, 0.5) + +**NOTE:** If you use `` with `` and specify a +value for +`--app-drawer-width`, that value must be accessible by both elements. This can +be done by defining the value on the `:host` that contains `` +(or `html` if outside a shadow root): + +```css +:host { + --app-drawer-width: 300px; +} +``` + +@element app-drawer +@demo app-drawer/demo/left-drawer.html Simple Left Drawer +@demo app-drawer/demo/right-drawer.html Right Drawer with Icons +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__.html)` + + +
+ + +
+ +
+`, + + is: 'app-drawer', + + properties: { + /** + * The opened state of the drawer. + */ + opened: + {type: Boolean, value: false, notify: true, reflectToAttribute: true}, + + /** + * The drawer does not have a scrim and cannot be swiped close. + */ + persistent: {type: Boolean, value: false, reflectToAttribute: true}, + + /** + * The transition duration of the drawer in milliseconds. + */ + transitionDuration: {type: Number, value: 200}, + + /** + * The alignment of the drawer on the screen ('left', 'right', 'start' or + * 'end'). 'start' computes to left and 'end' to right in LTR layout and + * vice versa in RTL layout. + */ + align: {type: String, value: 'left'}, + + /** + * The computed, read-only position of the drawer on the screen ('left' or + * 'right'). + */ + position: {type: String, readOnly: true, reflectToAttribute: true}, + + /** + * Create an area at the edge of the screen to swipe open the drawer. + */ + swipeOpen: {type: Boolean, value: false, reflectToAttribute: true}, + + /** + * Trap keyboard focus when the drawer is opened and not persistent. + */ + noFocusTrap: {type: Boolean, value: false}, + + /** + * Disables swiping on the drawer. + */ + disableSwipe: {type: Boolean, value: false} + }, + + observers: [ + 'resetLayout(position, isAttached)', + '_resetPosition(align, isAttached)', + '_styleTransitionDuration(transitionDuration)', + '_openedPersistentChanged(opened, persistent)' + ], + + _translateOffset: 0, + _trackDetails: null, + _drawerState: 0, + _boundEscKeydownHandler: null, + _firstTabStop: null, + _lastTabStop: null, + + /** @override */ + attached: function() { + (0,_polymer_polymer_lib_utils_render_status_js__WEBPACK_IMPORTED_MODULE_5__.afterNextRender)(this, function() { + this._boundEscKeydownHandler = this._escKeydownHandler.bind(this); + this.addEventListener('keydown', this._tabKeydownHandler.bind(this)); + + // Only listen for horizontal track so you can vertically scroll + // inside the drawer. + this.listen(this, 'track', '_track'); + this.setScrollDirection('y'); + }); + + this.fire('app-reset-layout'); + }, + + /** @override */ + detached: function() { + document.removeEventListener('keydown', this._boundEscKeydownHandler); + }, + + /** + * Opens the drawer. + */ + open: function() { + this.opened = true; + }, + + /** + * Closes the drawer. + */ + close: function() { + this.opened = false; + }, + + /** + * Toggles the drawer open and close. + */ + toggle: function() { + this.opened = !this.opened; + }, + + /** + * Gets the width of the drawer. + * + * @return {number} The width of the drawer in pixels. + */ + getWidth: function() { + return this._savedWidth || this.$.contentContainer.offsetWidth; + }, + + _isRTL: function() { + return window.getComputedStyle(this).direction === 'rtl'; + }, + + _resetPosition: function() { + switch (this.align) { + case 'start': + this._setPosition(this._isRTL() ? 'right' : 'left'); + return; + case 'end': + this._setPosition(this._isRTL() ? 'left' : 'right'); + return; + } + this._setPosition(this.align); + }, + + _escKeydownHandler: function(event) { + var ESC_KEYCODE = 27; + if (event.keyCode === ESC_KEYCODE) { + // Prevent any side effects if app-drawer closes. + event.preventDefault(); + this.close(); + } + }, + + _track: function(event) { + if (this.persistent || this.disableSwipe) { + return; + } + + // Disable user selection on desktop. + event.preventDefault(); + + switch (event.detail.state) { + case 'start': + this._trackStart(event); + break; + case 'track': + this._trackMove(event); + break; + case 'end': + this._trackEnd(event); + break; + } + }, + + _trackStart: function(event) { + this._drawerState = this._DRAWER_STATE.TRACKING; + + var rect = this.$.contentContainer.getBoundingClientRect(); + this._savedWidth = rect.width; + if (this.position === 'left') { + this._translateOffset = rect.left; + } else { + this._translateOffset = rect.right - window.innerWidth; + } + + this._trackDetails = []; + + // Disable transitions since style attributes will reflect user track + // events. + this._styleTransitionDuration(0); + this.style.visibility = 'visible'; + }, + + _trackMove: function(event) { + this._translateDrawer(event.detail.dx + this._translateOffset); + + // Use Date.now() since event.timeStamp is inconsistent across browsers + // (e.g. most browsers use milliseconds but FF 44 uses microseconds). + this._trackDetails.push({dx: event.detail.dx, timeStamp: Date.now()}); + }, + + _trackEnd: function(event) { + var x = event.detail.dx + this._translateOffset; + var drawerWidth = this.getWidth(); + var isPositionLeft = this.position === 'left'; + var isInEndState = isPositionLeft ? (x >= 0 || x <= -drawerWidth) : + (x <= 0 || x >= drawerWidth); + + if (!isInEndState) { + // No longer need the track events after this method returns - allow them + // to be GC'd. + var trackDetails = this._trackDetails; + this._trackDetails = null; + + this._flingDrawer(event, trackDetails); + if (this._drawerState === this._DRAWER_STATE.FLINGING) { + return; + } + } + + // If the drawer is not flinging, toggle the opened state based on the + // position of the drawer. + var halfWidth = drawerWidth / 2; + if (event.detail.dx < -halfWidth) { + this.opened = this.position === 'right'; + } else if (event.detail.dx > halfWidth) { + this.opened = this.position === 'left'; + } + + if (isInEndState) { + this.debounce('_resetDrawerState', this._resetDrawerState); + } else { + this.debounce( + '_resetDrawerState', this._resetDrawerState, this.transitionDuration); + } + + this._styleTransitionDuration(this.transitionDuration); + this._resetDrawerTranslate(); + this.style.visibility = ''; + }, + + _calculateVelocity: function(event, trackDetails) { + // Find the oldest track event that is within 100ms using binary search. + var now = Date.now(); + var timeLowerBound = now - 100; + var trackDetail; + var min = 0; + var max = trackDetails.length - 1; + + while (min <= max) { + // Floor of average of min and max. + var mid = (min + max) >> 1; + var d = trackDetails[mid]; + if (d.timeStamp >= timeLowerBound) { + trackDetail = d; + max = mid - 1; + } else { + min = mid + 1; + } + } + + if (trackDetail) { + var dx = event.detail.dx - trackDetail.dx; + var dt = (now - trackDetail.timeStamp) || 1; + return dx / dt; + } + return 0; + }, + + _flingDrawer: function(event, trackDetails) { + var velocity = this._calculateVelocity(event, trackDetails); + + // Do not fling if velocity is not above a threshold. + if (Math.abs(velocity) < this._MIN_FLING_THRESHOLD) { + return; + } + + this._drawerState = this._DRAWER_STATE.FLINGING; + + var x = event.detail.dx + this._translateOffset; + var drawerWidth = this.getWidth(); + var isPositionLeft = this.position === 'left'; + var isVelocityPositive = velocity > 0; + var isClosingLeft = !isVelocityPositive && isPositionLeft; + var isClosingRight = isVelocityPositive && !isPositionLeft; + var dx; + if (isClosingLeft) { + dx = -(x + drawerWidth); + } else if (isClosingRight) { + dx = (drawerWidth - x); + } else { + dx = -x; + } + + // Enforce a minimum transition velocity to make the drawer feel snappy. + if (isVelocityPositive) { + velocity = Math.max(velocity, this._MIN_TRANSITION_VELOCITY); + this.opened = this.position === 'left'; + } else { + velocity = Math.min(velocity, -this._MIN_TRANSITION_VELOCITY); + this.opened = this.position === 'right'; + } + + // Calculate the amount of time needed to finish the transition based on the + // initial slope of the timing function. + var t = this._FLING_INITIAL_SLOPE * dx / velocity; + this._styleTransitionDuration(t); + this._styleTransitionTimingFunction(this._FLING_TIMING_FUNCTION); + + this._resetDrawerTranslate(); + this.debounce('_resetDrawerState', this._resetDrawerState, t); + }, + + _styleTransitionDuration: function(duration) { + this.style.transitionDuration = duration + 'ms'; + this.$.contentContainer.style.transitionDuration = duration + 'ms'; + this.$.scrim.style.transitionDuration = duration + 'ms'; + }, + + _styleTransitionTimingFunction: function(timingFunction) { + this.$.contentContainer.style.transitionTimingFunction = timingFunction; + this.$.scrim.style.transitionTimingFunction = timingFunction; + }, + + _translateDrawer: function(x) { + var drawerWidth = this.getWidth(); + + if (this.position === 'left') { + x = Math.max(-drawerWidth, Math.min(x, 0)); + this.$.scrim.style.opacity = 1 + x / drawerWidth; + } else { + x = Math.max(0, Math.min(x, drawerWidth)); + this.$.scrim.style.opacity = 1 - x / drawerWidth; + } + + this.translate3d(x + 'px', '0', '0', this.$.contentContainer); + }, + + _resetDrawerTranslate: function() { + this.$.scrim.style.opacity = ''; + this.transform('', this.$.contentContainer); + }, + + _resetDrawerState: function() { + var oldState = this._drawerState; + + // If the drawer was flinging, we need to reset the style attributes. + if (oldState === this._DRAWER_STATE.FLINGING) { + this._styleTransitionDuration(this.transitionDuration); + this._styleTransitionTimingFunction(''); + this.style.visibility = ''; + } + + this._savedWidth = null; + + if (this.opened) { + this._drawerState = this.persistent ? + this._DRAWER_STATE.OPENED_PERSISTENT : + this._DRAWER_STATE.OPENED; + } else { + this._drawerState = this._DRAWER_STATE.CLOSED; + } + + if (oldState !== this._drawerState) { + if (this._drawerState === this._DRAWER_STATE.OPENED) { + this._setKeyboardFocusTrap(); + document.addEventListener('keydown', this._boundEscKeydownHandler); + document.body.style.overflow = 'hidden'; + } else { + document.removeEventListener('keydown', this._boundEscKeydownHandler); + document.body.style.overflow = ''; + } + + // Don't fire the event on initial load. + if (oldState !== this._DRAWER_STATE.INIT) { + this.fire('app-drawer-transitioned'); + } + } + }, + + /** + * Resets the layout. + * + * @method resetLayout + */ + resetLayout: function() { + this.fire('app-reset-layout'); + }, + + _setKeyboardFocusTrap: function() { + if (this.noFocusTrap) { + return; + } + + // NOTE: Unless we use /deep/ (which we shouldn't since it's deprecated), + // this will not select focusable elements inside shadow roots. + var focusableElementsSelector = [ + 'a[href]:not([tabindex="-1"])', + 'area[href]:not([tabindex="-1"])', + 'input:not([disabled]):not([tabindex="-1"])', + 'select:not([disabled]):not([tabindex="-1"])', + 'textarea:not([disabled]):not([tabindex="-1"])', + 'button:not([disabled]):not([tabindex="-1"])', + 'iframe:not([tabindex="-1"])', + '[tabindex]:not([tabindex="-1"])', + '[contentEditable=true]:not([tabindex="-1"])' + ].join(','); + var focusableElements = + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).querySelectorAll(focusableElementsSelector); + + if (focusableElements.length > 0) { + this._firstTabStop = focusableElements[0]; + this._lastTabStop = focusableElements[focusableElements.length - 1]; + } else { + // Reset saved tab stops when there are no focusable elements in the + // drawer. + this._firstTabStop = null; + this._lastTabStop = null; + } + + // Focus on app-drawer if it has non-zero tabindex. Otherwise, focus the + // first focusable element in the drawer, if it exists. Use the tabindex + // attribute since the this.tabIndex property in IE/Edge returns 0 (instead + // of -1) when the attribute is not set. + var tabindex = this.getAttribute('tabindex'); + if (tabindex && parseInt(tabindex, 10) > -1) { + this.focus(); + } else if (this._firstTabStop) { + this._firstTabStop.focus(); + } + }, + + _tabKeydownHandler: function(event) { + if (this.noFocusTrap) { + return; + } + + var TAB_KEYCODE = 9; + if (this._drawerState === this._DRAWER_STATE.OPENED && + event.keyCode === TAB_KEYCODE) { + if (event.shiftKey) { + if (this._firstTabStop && + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(event).localTarget === this._firstTabStop) { + event.preventDefault(); + this._lastTabStop.focus(); + } + } else { + if (this._lastTabStop && (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(event).localTarget === this._lastTabStop) { + event.preventDefault(); + this._firstTabStop.focus(); + } + } + } + }, + + _openedPersistentChanged: function(opened, persistent) { + this.toggleClass('visible', opened && !persistent, this.$.scrim); + + // Use a debounce timer instead of transitionend since transitionend won't + // fire when app-drawer is display: none. + this.debounce( + '_resetDrawerState', this._resetDrawerState, this.transitionDuration); + }, + + _MIN_FLING_THRESHOLD: 0.2, + _MIN_TRANSITION_VELOCITY: 1.2, + _FLING_TIMING_FUNCTION: 'cubic-bezier(0.667, 1, 0.667, 1)', + _FLING_INITIAL_SLOPE: 1.5, + + _DRAWER_STATE: { + INIT: 0, + OPENED: 1, + OPENED_PERSISTENT: 2, + CLOSED: 3, + TRACKING: 4, + FLINGING: 5 + } + + /** + * Fired when the layout of app-drawer has changed. + * + * @event app-reset-layout + */ + + /** + * Fired when app-drawer has finished transitioning. + * + * @event app-drawer-transitioned + */ +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/app-header-layout/app-header-layout.js": +/*!*********************************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/app-header-layout/app-header-layout.js ***! + \*********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _app_layout_behavior_app_layout_behavior_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../app-layout-behavior/app-layout-behavior.js */ "./node_modules/@polymer/app-layout/app-layout-behavior/app-layout-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + +/** +app-header-layout is a wrapper element that positions an app-header and other +content. This element uses the document scroll by default, but it can also +define its own scrolling region. + +Using the document scroll: + +```html + + + +
App name
+
+
+
+ main content +
+
+``` + +Using an own scrolling region: + +```html + + + +
App name
+
+
+
+ main content +
+
+``` + +Add the `fullbleed` attribute to app-header-layout to make it fit the size of +its container: + +```html + + ... + +``` + +@element app-header-layout +@demo app-header-layout/demo/simple.html Simple Demo +@demo app-header-layout/demo/scrolling-region.html Scrolling Region +@demo app-header-layout/demo/music.html Music Demo +@demo app-header-layout/demo/footer.html Footer Demo +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__.html)` + + +
+ + +
+ +
+
+`, + + is: 'app-header-layout', + behaviors: [_app_layout_behavior_app_layout_behavior_js__WEBPACK_IMPORTED_MODULE_5__.AppLayoutBehavior], + + properties: { + /** + * If true, the current element will have its own scrolling region. + * Otherwise, it will use the document scroll to control the header. + */ + hasScrollingRegion: {type: Boolean, value: false, reflectToAttribute: true} + }, + + observers: ['resetLayout(isAttached, hasScrollingRegion)'], + + /** + * A reference to the app-header element. + * + * @property header + */ + get header() { + return (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this.$.headerSlot).getDistributedNodes()[0]; + }, + + _updateLayoutStates: function() { + var header = this.header; + if (!this.isAttached || !header) { + return; + } + // Remove the initializing class, which staticly positions the header and + // the content until the height of the header can be read. + this.$.wrapper.classList.remove('initializing'); + // Update scroll target. + header.scrollTarget = this.hasScrollingRegion ? + this.$.contentContainer : + this.ownerDocument.documentElement; + // Get header height here so that style reads are batched together before + // style writes (i.e. getBoundingClientRect() below). + var headerHeight = header.offsetHeight; + // Update the header position. + if (!this.hasScrollingRegion) { + requestAnimationFrame(function() { + var rect = this.getBoundingClientRect(); + var rightOffset = document.documentElement.clientWidth - rect.right; + header.style.left = rect.left + 'px'; + header.style.right = rightOffset + 'px'; + }.bind(this)); + } else { + header.style.left = ''; + header.style.right = ''; + } + // Update the content container position. + var containerStyle = this.$.contentContainer.style; + if (header.fixed && !header.condenses && this.hasScrollingRegion) { + // If the header size does not change and we're using a scrolling region, + // exclude the header area from the scrolling region so that the header + // doesn't overlap the scrollbar. + containerStyle.marginTop = headerHeight + 'px'; + containerStyle.paddingTop = ''; + } else { + containerStyle.paddingTop = headerHeight + 'px'; + containerStyle.marginTop = ''; + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/app-header/app-header.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/app-header/app-header.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _app_layout_behavior_app_layout_behavior_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../app-layout-behavior/app-layout-behavior.js */ "./node_modules/@polymer/app-layout/app-layout-behavior/app-layout-behavior.js"); +/* harmony import */ var _app_scroll_effects_app_scroll_effects_behavior_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../app-scroll-effects/app-scroll-effects-behavior.js */ "./node_modules/@polymer/app-layout/app-scroll-effects/app-scroll-effects-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + + +/** +app-header is container element for app-toolbars at the top of the screen that +can have scroll effects. By default, an app-header moves away from the viewport +when scrolling down and if using `reveals`, the header slides back when +scrolling back up. For example: + +```html + + +
App name
+
+
+``` + +app-header can also condense when scrolling down. To achieve this behavior, the +header must have a larger height than the `sticky` element in the light DOM. For +example: + +```html + + +
App name
+
+
+``` + +In this case the header is initially `96px` tall, and it shrinks to `64px` when +scrolling down. That is what is meant by "condensing". + +### Sticky element + +The element that is positioned fixed to top of the header's `scrollTarget` when +a threshold is reached, similar to `position: sticky` in CSS. This element +**must** be an immediate child of app-header. By default, the `sticky` element +is the first `app-toolbar that is an immediate child of app-header. + +```html + + Sticky element + + +``` + +#### Customizing the sticky element + +```html + + + Sticky element + +``` + +### Scroll target + +The app-header's `scrollTarget` property allows to customize the scrollable +element to which the header responds when the user scrolls. By default, +app-header uses the document as the scroll target, but you can customize this +property by setting the id of the element, e.g. + +```html +
+ + +
+``` + +In this case, the `scrollTarget` property points to the outer div element. +Alternatively, you can set this property programmatically: + +```js +appHeader.scrollTarget = document.querySelector("#scrollingRegion"); +``` + +## Backgrounds +app-header has two background layers that can be used for styling when the +header is condensed or when the scrollable element is scrolled to the top. + +## Scroll effects + +Scroll effects are _optional_ visual effects applied in app-header based on +scroll position. For example, The [Material Design scrolling +techniques](https://www.google.com/design/spec/patterns/scrolling-techniques.html) +recommends effects that can be installed via the `effects` property. e.g. + +```html + + App name + +``` + +#### Importing the effects + +To use the scroll effects, you must explicitly import them in addition to +`app-header`: + +```js +import '@polymer/app-layout/app-scroll-effects/app-scroll-effects.js'; +``` + +#### List of effects + +* **blend-background** +Fades in/out two background elements by applying CSS opacity based on scroll +position. You can use this effect to smoothly change the background color or +image of the header. For example, using the mixin +`--app-header-background-rear-layer` lets you assign a different background when +the header is condensed: + +```css +app-header { + background-color: red; + --app-header-background-rear-layer: { + /* The header is blue when condensed *\/ + background-color: blue; + }; +} +``` + +* **fade-background** +Upon scrolling past a threshold, this effect will trigger an opacity transition +to fade in/out the backgrounds. Compared to the `blend-background` effect, this +effect doesn't interpolate the opacity based on scroll position. + + +* **parallax-background** +A simple parallax effect that vertically translates the backgrounds based on a +fraction of the scroll position. For example: + +```css +app-header { + --app-header-background-front-layer: { + background-image: url(...); + }; +} +``` +```html + + App name + +``` + +The fraction determines how far the background moves relative to the scroll +position. This value can be assigned via the `scalar` config value and it is +typically a value between 0 and 1 inclusive. If `scalar=0`, the background +doesn't move away from the header. + +* **resize-title** +Progressively interpolates the size of the title from the element with the +`main-title` attribute to the element with the `condensed-title` attribute as +the header condenses. For example: + +```html + + +

App name

+
+ +

App name

+
+
+``` + +* **resize-snapped-title** +Upon scrolling past a threshold, this effect fades in/out the titles using +opacity transitions. Similarly to `resize-title`, the `main-title` and +`condensed-title` elements must be placed in the light DOM. + +* **waterfall** +Toggles the shadow property in app-header to create a sense of depth (as +recommended in the MD spec) between the header and the underneath content. You +can change the shadow by customizing the `--app-header-shadow` mixin. For +example: + +```css +app-header { + --app-header-shadow: { + box-shadow: inset 0px 5px 2px -3px rgba(0, 0, 0, 0.2); + }; +} +``` + +```html + + +

App name

+
+
+``` + +* **material** +Installs the waterfall, resize-title, blend-background and parallax-background +effects. + +### Content attributes + +Attribute | Description | Default +----------|---------------------|---------------------------------------- +`sticky` | Element that remains at the top when the header condenses. | The first app-toolbar in the light DOM. + + +## Styling + +Mixin | Description | Default +------|-------------|---------- +`--app-header-background-front-layer` | Applies to the front layer of the background. | {} +`--app-header-background-rear-layer` | Applies to the rear layer of the background. | {} +`--app-header-shadow` | Applies to the shadow. | {} + +@element app-header +@demo app-header/demo/blend-background-1.html Blend Background Image +@demo app-header/demo/blend-background-2.html Blend 2 Background Images +@demo app-header/demo/blend-background-3.html Blend Background Colors +@demo app-header/demo/contacts.html Contacts Demo +@demo app-header/demo/give.html Resize Snapped Title Demo +@demo app-header/demo/music.html Reveals Demo +@demo app-header/demo/no-effects.html Condenses and Reveals Demo +@demo app-header/demo/notes.html Fixed with Dynamic Shadow Demo +@demo app-header/demo/custom-sticky-element-1.html Custom Sticky Element Demo 1 +@demo app-header/demo/custom-sticky-element-2.html Custom Sticky Element Demo 2 + +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__.html)` + +
+ +
+`, + + is: 'app-header', + behaviors: [_app_scroll_effects_app_scroll_effects_behavior_js__WEBPACK_IMPORTED_MODULE_6__.AppScrollEffectsBehavior, _app_layout_behavior_app_layout_behavior_js__WEBPACK_IMPORTED_MODULE_5__.AppLayoutBehavior], + + properties: { + /** + * If true, the header will automatically collapse when scrolling down. + * That is, the `sticky` element remains visible when the header is fully + *condensed whereas the rest of the elements will collapse below `sticky` + *element. + * + * By default, the `sticky` element is the first toolbar in the light DOM: + * + *```html + * + * This toolbar remains on top + * + * + * + * ``` + * + * Additionally, you can specify which toolbar or element remains visible in + *condensed mode by adding the `sticky` attribute to that element. For + *example: if we want the last toolbar to remain visible, we can add the + *`sticky` attribute to it. + * + *```html + * + * + * + * This toolbar remains on top + * + * ``` + * + * Note the `sticky` element must be a direct child of `app-header`. + */ + condenses: {type: Boolean, value: false}, + + /** + * Mantains the header fixed at the top so it never moves away. + */ + fixed: {type: Boolean, value: false}, + + /** + * Slides back the header when scrolling back up. + */ + reveals: {type: Boolean, value: false}, + + /** + * Displays a shadow below the header. + */ + shadow: {type: Boolean, reflectToAttribute: true, value: false} + }, + + observers: ['_configChanged(isAttached, condenses, fixed)'], + + /** + * A cached offsetHeight of the current element. + * + * @type {number} + */ + _height: 0, + + /** + * The distance in pixels the header will be translated to when scrolling. + * + * @type {number} + */ + _dHeight: 0, + + /** + * The offsetTop of `_stickyEl` + * + * @type {number} + */ + _stickyElTop: 0, + + /** + * A reference to the element that remains visible when the header condenses. + * + * @type {HTMLElement} + */ + _stickyElRef: null, + + /** + * The header's top value used for the `transformY` + * + * @type {number} + */ + _top: 0, + + /** + * The current scroll progress. + * + * @type {number} + */ + _progress: 0, + + _wasScrollingDown: false, + _initScrollTop: 0, + _initTimestamp: 0, + _lastTimestamp: 0, + _lastScrollTop: 0, + + /** + * The distance the header is allowed to move away. + * + * @type {number} + */ + get _maxHeaderTop() { + return this.fixed ? this._dHeight : this._height + 5; + }, + + /** + * Returns a reference to the sticky element. + * + * @return {HTMLElement}? + */ + get _stickyEl() { + if (this._stickyElRef) { + return this._stickyElRef; + } + var nodes = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this.$.slot).getDistributedNodes(); + // Get the element with the sticky attribute on it or the first element in + // the light DOM. + for (var i = 0, node; node = /** @type {!HTMLElement} */ (nodes[i]); i++) { + if (node.nodeType === Node.ELEMENT_NODE) { + if (node.hasAttribute('sticky')) { + this._stickyElRef = node; + break; + } else if (!this._stickyElRef) { + this._stickyElRef = node; + } + } + } + return this._stickyElRef; + }, + + _configChanged: function() { + this.resetLayout(); + this._notifyLayoutChanged(); + }, + + _updateLayoutStates: function() { + if (this.offsetWidth === 0 && this.offsetHeight === 0) { + return; + } + var scrollTop = this._clampedScrollTop; + var firstSetup = this._height === 0 || scrollTop === 0; + var currentDisabled = this.disabled; + this._height = this.offsetHeight; + this._stickyElRef = null; + this.disabled = true; + // prepare for measurement + if (!firstSetup) { + this._updateScrollState(0, true); + } + if (this._mayMove()) { + this._dHeight = + this._stickyEl ? this._height - this._stickyEl.offsetHeight : 0; + } else { + this._dHeight = 0; + } + this._stickyElTop = this._stickyEl ? this._stickyEl.offsetTop : 0; + this._setUpEffect(); + if (firstSetup) { + this._updateScrollState(scrollTop, true); + } else { + this._updateScrollState(this._lastScrollTop, true); + this._layoutIfDirty(); + } + // restore no transition + this.disabled = currentDisabled; + }, + + /** + * Updates the scroll state. + * + * @param {number} scrollTop + * @param {boolean=} forceUpdate (default: false) + */ + _updateScrollState: function(scrollTop, forceUpdate) { + if (this._height === 0) { + return; + } + var progress = 0; + var top = 0; + var lastTop = this._top; + var lastScrollTop = this._lastScrollTop; + var maxHeaderTop = this._maxHeaderTop; + var dScrollTop = scrollTop - this._lastScrollTop; + var absDScrollTop = Math.abs(dScrollTop); + var isScrollingDown = scrollTop > this._lastScrollTop; + var now = performance.now(); + + if (this._mayMove()) { + top = this._clamp( + this.reveals ? lastTop + dScrollTop : scrollTop, 0, maxHeaderTop); + } + if (scrollTop >= this._dHeight) { + top = this.condenses && !this.fixed ? Math.max(this._dHeight, top) : top; + this.style.transitionDuration = '0ms'; + } + if (this.reveals && !this.disabled && absDScrollTop < 100) { + // set the initial scroll position + if (now - this._initTimestamp > 300 || + this._wasScrollingDown !== isScrollingDown) { + this._initScrollTop = scrollTop; + this._initTimestamp = now; + } + if (scrollTop >= maxHeaderTop) { + // check if the header is allowed to snap + if (Math.abs(this._initScrollTop - scrollTop) > 30 || + absDScrollTop > 10) { + if (isScrollingDown && scrollTop >= maxHeaderTop) { + top = maxHeaderTop; + } else if (!isScrollingDown && scrollTop >= this._dHeight) { + top = this.condenses && !this.fixed ? this._dHeight : 0; + } + var scrollVelocity = dScrollTop / (now - this._lastTimestamp); + this.style.transitionDuration = + this._clamp((top - lastTop) / scrollVelocity, 0, 300) + 'ms'; + } else { + top = this._top; + } + } + } + if (this._dHeight === 0) { + progress = scrollTop > 0 ? 1 : 0; + } else { + progress = top / this._dHeight; + } + if (!forceUpdate) { + this._lastScrollTop = scrollTop; + this._top = top; + this._wasScrollingDown = isScrollingDown; + this._lastTimestamp = now; + } + if (forceUpdate || progress !== this._progress || lastTop !== top || + scrollTop === 0) { + this._progress = progress; + this._runEffects(progress, top); + this._transformHeader(top); + } + }, + + /** + * Returns true if the current header is allowed to move as the user scrolls. + * + * @return {boolean} + */ + _mayMove: function() { + return this.condenses || !this.fixed; + }, + + /** + * Returns true if the current header will condense based on the size of the + * header and the `consenses` property. + * + * @return {boolean} + */ + willCondense: function() { + return this._dHeight > 0 && this.condenses; + }, + + /** + * Returns true if the current element is on the screen. + * That is, visible in the current viewport. + * + * @method isOnScreen + * @return {boolean} + */ + isOnScreen: function() { + return this._height !== 0 && this._top < this._height; + }, + + /** + * Returns true if there's content below the current element. + * + * @method isContentBelow + * @return {boolean} + */ + isContentBelow: function() { + return this._top === 0 ? this._clampedScrollTop > 0 : + this._clampedScrollTop - this._maxHeaderTop >= 0; + }, + + /** + * Transforms the header. + * + * @param {number} y + */ + _transformHeader: function(y) { + this.translate3d(0, (-y) + 'px', 0); + if (this._stickyEl) { + this.translate3d( + 0, + this.condenses && y >= this._stickyElTop ? + (Math.min(y, this._dHeight) - this._stickyElTop) + 'px' : + 0, + 0, + this._stickyEl); + } + }, + + _clamp: function(v, min, max) { + return Math.min(max, Math.max(min, v)); + }, + + _ensureBgContainers: function() { + if (!this._bgContainer) { + this._bgContainer = document.createElement('div'); + this._bgContainer.id = 'background'; + this._bgRear = document.createElement('div'); + this._bgRear.id = 'backgroundRearLayer'; + this._bgContainer.appendChild(this._bgRear); + this._bgFront = document.createElement('div'); + this._bgFront.id = 'backgroundFrontLayer'; + this._bgContainer.appendChild(this._bgFront); + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this.root).insertBefore(this._bgContainer, this.$.contentContainer); + } + }, + + _getDOMRef: function(id) { + switch (id) { + case 'backgroundFrontLayer': + this._ensureBgContainers(); + return this._bgFront; + case 'backgroundRearLayer': + this._ensureBgContainers(); + return this._bgRear; + case 'background': + this._ensureBgContainers(); + return this._bgContainer; + case 'mainTitle': + return (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).querySelector('[main-title]'); + case 'condensedTitle': + return (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).querySelector('[condensed-title]'); + } + return null; + }, + + /** + * Returns an object containing the progress value of the scroll effects + * and the top position of the header. + * + * @method getScrollState + * @return {Object} + */ + getScrollState: function() { + return {progress: this._progress, top: this._top}; + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/app-layout-behavior/app-layout-behavior.js": +/*!*************************************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/app-layout-behavior/app-layout-behavior.js ***! + \*************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AppLayoutBehavior: () => (/* binding */ AppLayoutBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_resizable_behavior_iron_resizable_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-resizable-behavior/iron-resizable-behavior.js */ "./node_modules/@polymer/iron-resizable-behavior/iron-resizable-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_async_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/utils/async.js */ "./node_modules/@polymer/polymer/lib/utils/async.js"); +/* harmony import */ var _polymer_polymer_lib_utils_debounce_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/debounce.js */ "./node_modules/@polymer/polymer/lib/utils/debounce.js"); +/* harmony import */ var _polymer_polymer_lib_utils_flush_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/utils/flush.js */ "./node_modules/@polymer/polymer/lib/utils/flush.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + +/** + * @polymerBehavior + */ +const AppLayoutBehavior = [ + _polymer_iron_resizable_behavior_iron_resizable_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronResizableBehavior, + { + + listeners: { + 'app-reset-layout': '_appResetLayoutHandler', + 'iron-resize': 'resetLayout' + }, + + attached: function() { + this.fire('app-reset-layout'); + }, + + _appResetLayoutHandler: function(e) { + if ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__.dom)(e).path[0] === this) { + return; + } + this.resetLayout(); + e.stopPropagation(); + }, + + _updateLayoutStates: function() { + console.error('unimplemented'); + }, + + /** + * Resets the layout. If you changed the size of this element via CSS + * you can notify the changes by either firing the `iron-resize` event + * or calling `resetLayout` directly. + * + * @method resetLayout + */ + resetLayout: function() { + var self = this; + var cb = this._updateLayoutStates.bind(this); + this._layoutDebouncer = + _polymer_polymer_lib_utils_debounce_js__WEBPACK_IMPORTED_MODULE_4__.Debouncer.debounce(this._layoutDebouncer, _polymer_polymer_lib_utils_async_js__WEBPACK_IMPORTED_MODULE_3__.animationFrame, cb); + (0,_polymer_polymer_lib_utils_flush_js__WEBPACK_IMPORTED_MODULE_5__.enqueueDebouncer)(this._layoutDebouncer); + this._notifyDescendantResize(); + }, + + _notifyLayoutChanged: function() { + var self = this; + // TODO: the event `app-reset-layout` can be fired synchronously + // as long as `_updateLayoutStates` waits for all the microtasks after + // rAF. E.g. requestAnimationFrame(setTimeOut()) + requestAnimationFrame(function() { + self.fire('app-reset-layout'); + }); + }, + + _notifyDescendantResize: function() { + if (!this.isAttached) { + return; + } + this._interestedResizables.forEach(function(resizable) { + if (this.resizerShouldNotify(resizable)) { + this._notifyDescendant(resizable); + } + }, this); + } + } +]; + + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/app-scroll-effects/app-scroll-effects-behavior.js": +/*!********************************************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/app-scroll-effects/app-scroll-effects-behavior.js ***! + \********************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AppScrollEffectsBehavior: () => (/* binding */ AppScrollEffectsBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_scroll_target_behavior_iron_scroll_target_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-scroll-target-behavior/iron-scroll-target-behavior.js */ "./node_modules/@polymer/iron-scroll-target-behavior/iron-scroll-target-behavior.js"); +/* harmony import */ var _helpers_helpers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../helpers/helpers.js */ "./node_modules/@polymer/app-layout/helpers/helpers.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +/** + * `Polymer.AppScrollEffectsBehavior` provides an interface that allows an + * element to use scrolls effects. + * + * ### Importing the app-layout effects + * + * app-layout provides a set of scroll effects that can be used by explicitly + * importing `app-scroll-effects.js`: + * + * ```js + * import '@polymer/app-layout/app-scroll-effects/app-scroll-effects.js'; + * ``` + * + * The scroll effects can also be used by individually importing + * `@polymer/app-layout/app-scroll-effects/effects/[effectName].js`. For + * example: + * + * ```js + * import '@polymer/app-layout/app-scroll-effects/effects/waterfall.js'; + * ``` + * + * ### Consuming effects + * + * Effects can be consumed via the `effects` property. For example: + * + * ```html + * + * ``` + * + * ### Creating scroll effects + * + * You may want to create a custom scroll effect if you need to modify the CSS + * of an element based on the scroll position. + * + * A scroll effect definition is an object with `setUp()`, `tearDown()` and + * `run()` functions. + * + * To register the effect, you can use + * `Polymer.AppLayout.registerEffect(effectName, effectDef)` For example, let's + * define an effect that resizes the header's logo: + * + * ```js + * Polymer.AppLayout.registerEffect('resizable-logo', { + * setUp: function(config) { + * // the effect's config is passed to the setUp. + * this._fxResizeLogo = { logo: Polymer.dom(this).querySelector('[logo]') }; + * }, + * + * run: function(progress) { + * // the progress of the effect + * this.transform('scale3d(' + progress + ', '+ progress +', 1)', + * this._fxResizeLogo.logo); + * }, + * + * tearDown: function() { + * // clean up and reset of states + * delete this._fxResizeLogo; + * } + * }); + * ``` + * Now, you can consume the effect: + * + * ```html + * + * + * + * ``` + * + * ### Imperative API + * + * ```js + * var logoEffect = appHeader.createEffect('resizable-logo', effectConfig); + * // run the effect: logoEffect.run(progress); + * // tear down the effect: logoEffect.tearDown(); + * ``` + * + * ### Configuring effects + * + * For effects installed via the `effects` property, their configuration can be + * set via the `effectsConfig` property. For example: + * + * ```html + * + * + * ``` + * + * All effects have a `startsAt` and `endsAt` config property. They specify at + * what point the effect should start and end. This value goes from 0 to 1 + * inclusive. + * + * @polymerBehavior + */ +const AppScrollEffectsBehavior = [ + _polymer_iron_scroll_target_behavior_iron_scroll_target_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronScrollTargetBehavior, + { + + properties: { + + /** + * A space-separated list of the effects names that will be triggered when + * the user scrolls. e.g. `waterfall parallax-background` installs the + * `waterfall` and `parallax-background`. + */ + effects: {type: String}, + + /** + * An object that configurates the effects installed via the `effects` + * property. e.g. + * ```js + * element.effectsConfig = { + * "blend-background": { + * "startsAt": 0.5 + * } + * }; + * ``` + * Every effect has at least two config properties: `startsAt` and + * `endsAt`. These properties indicate when the event should start and end + * respectively and relative to the overall element progress. So for + * example, if `blend-background` starts at `0.5`, the effect will only + * start once the current element reaches 0.5 of its progress. In this + * context, the progress is a value in the range of `[0, 1]` that + * indicates where this element is on the screen relative to the viewport. + */ + effectsConfig: { + type: Object, + value: function() { + return {}; + } + }, + + /** + * Disables CSS transitions and scroll effects on the element. + */ + disabled: {type: Boolean, reflectToAttribute: true, value: false}, + + /** + * Allows to set a `scrollTop` threshold. When greater than 0, + * `thresholdTriggered` is true only when the scroll target's `scrollTop` + * has reached this value. + * + * For example, if `threshold = 100`, `thresholdTriggered` is true when + * the `scrollTop` is at least `100`. + */ + threshold: {type: Number, value: 0}, + + /** + * True if the `scrollTop` threshold (set in `scrollTopThreshold`) has + * been reached. + */ + thresholdTriggered: { + type: Boolean, + notify: true, + readOnly: true, + reflectToAttribute: true + } + }, + + observers: ['_effectsChanged(effects, effectsConfig, isAttached)'], + + /** + * Updates the scroll state. This method should be overridden + * by the consumer of this behavior. + * + * @method _updateScrollState + * @param {number} scrollTop + */ + _updateScrollState: function(scrollTop) {}, + + /** + * Returns true if the current element is on the screen. + * That is, visible in the current viewport. This method should be + * overridden by the consumer of this behavior. + * + * @method isOnScreen + * @return {boolean} + */ + isOnScreen: function() { + return false; + }, + + /** + * Returns true if there's content below the current element. This method + * should be overridden by the consumer of this behavior. + * + * @method isContentBelow + * @return {boolean} + */ + isContentBelow: function() { + return false; + }, + + /** + * List of effects handlers that will take place during scroll. + * + * @type {Array} + */ + _effectsRunFn: null, + + /** + * List of the effects definitions installed via the `effects` property. + * + * @type {Array} + */ + _effects: null, + + /** + * The clamped value of `_scrollTop`. + * @type number + */ + get _clampedScrollTop() { + return Math.max(0, this._scrollTop); + }, + + attached: function() { + this._scrollStateChanged(); + }, + + detached: function() { + this._tearDownEffects(); + }, + + /** + * Creates an effect object from an effect's name that can be used to run + * effects programmatically. + * + * @method createEffect + * @param {string} effectName The effect's name registered via `Polymer.AppLayout.registerEffect`. + * @param {Object=} effectConfig The effect config object. (Optional) + * @return {Object} An effect object with the following functions: + * + * * `effect.setUp()`, Sets up the requirements for the effect. + * This function is called automatically before the `effect` function + * returns. + * * `effect.run(progress, y)`, Runs the effect given a `progress`. + * * `effect.tearDown()`, Cleans up any DOM nodes or element references + * used by the effect. + * + * Example: + * ```js + * var parallax = element.createEffect('parallax-background'); + * // runs the effect + * parallax.run(0.5, 0); + * ``` + */ + createEffect: function(effectName, effectConfig) { + var effectDef = _helpers_helpers_js__WEBPACK_IMPORTED_MODULE_2__._scrollEffects[effectName]; + if (!effectDef) { + throw new ReferenceError(this._getUndefinedMsg(effectName)); + } + var prop = this._boundEffect(effectDef, effectConfig || {}); + prop.setUp(); + return prop; + }, + + /** + * Called when `effects` or `effectsConfig` changes. + */ + _effectsChanged: function(effects, effectsConfig, isAttached) { + this._tearDownEffects(); + + if (!effects || !isAttached) { + return; + } + effects.split(' ').forEach(function(effectName) { + var effectDef; + if (effectName !== '') { + if ((effectDef = _helpers_helpers_js__WEBPACK_IMPORTED_MODULE_2__._scrollEffects[effectName])) { + this._effects.push( + this._boundEffect(effectDef, effectsConfig[effectName])); + } else { + console.warn(this._getUndefinedMsg(effectName)); + } + } + }, this); + + this._setUpEffect(); + }, + + /** + * Forces layout + */ + _layoutIfDirty: function() { + return this.offsetWidth; + }, + + /** + * Returns an effect object bound to the current context. + * + * @param {Object} effectDef + * @param {Object=} effectsConfig The effect config object if the effect accepts config values. (Optional) + */ + _boundEffect: function(effectDef, effectsConfig) { + effectsConfig = effectsConfig || {}; + var startsAt = parseFloat(effectsConfig.startsAt || 0); + var endsAt = parseFloat(effectsConfig.endsAt || 1); + var deltaS = endsAt - startsAt; + var noop = function() {}; + // fast path if possible + var runFn = (startsAt === 0 && endsAt === 1) ? + effectDef.run : + function(progress, y) { + effectDef.run.call( + this, Math.max(0, (progress - startsAt) / deltaS), y); + }; + return { + setUp: effectDef.setUp ? effectDef.setUp.bind(this, effectsConfig) : + noop, + run: effectDef.run ? runFn.bind(this) : noop, + tearDown: effectDef.tearDown ? effectDef.tearDown.bind(this) : noop + }; + }, + + /** + * Sets up the effects. + */ + _setUpEffect: function() { + if (this.isAttached && this._effects) { + this._effectsRunFn = []; + this._effects.forEach(function(effectDef) { + // install the effect only if no error was reported + if (effectDef.setUp() !== false) { + this._effectsRunFn.push(effectDef.run); + } + }, this); + } + }, + + /** + * Tears down the effects. + */ + _tearDownEffects: function() { + if (this._effects) { + this._effects.forEach(function(effectDef) { + effectDef.tearDown(); + }); + } + this._effectsRunFn = []; + this._effects = []; + }, + + /** + * Runs the effects. + * + * @param {number} p The progress + * @param {number} y The top position of the current element relative to the viewport. + */ + _runEffects: function(p, y) { + if (this._effectsRunFn) { + this._effectsRunFn.forEach(function(run) { + run(p, y); + }); + } + }, + + /** + * Overrides the `_scrollHandler`. + */ + _scrollHandler: function() { + this._scrollStateChanged(); + }, + + _scrollStateChanged: function() { + if (!this.disabled) { + var scrollTop = this._clampedScrollTop; + this._updateScrollState(scrollTop); + if (this.threshold > 0) { + this._setThresholdTriggered(scrollTop >= this.threshold); + } + } + }, + + /** + * Override this method to return a reference to a node in the local DOM. + * The node is consumed by a scroll effect. + * + * @param {string} id The id for the node. + */ + _getDOMRef: function(id) { + console.warn('_getDOMRef', '`' + id + '` is undefined'); + }, + + _getUndefinedMsg: function(effectName) { + return 'Scroll effect `' + effectName + '` is undefined. ' + + 'Did you forget to import app-layout/app-scroll-effects/effects/' + + effectName + '.html ?'; + } + + } +]; + + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/app-toolbar/app-toolbar.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/app-toolbar/app-toolbar.js ***! + \*********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + +/** +app-toolbar is a horizontal toolbar containing items that can be used for +label, navigation, search and actions. + +### Example + +Add a title to the toolbar. + +```html + +
App name
+
+``` + +Add a button to the left and right side of the toolbar. + +```html + + +
App name
+ +
+``` + +You can use the attributes `top-item` or `bottom-item` to completely fit an +element to the top or bottom of the toolbar respectively. + +### Content attributes + +Attribute | Description +---------------------|--------------------------------------------------------- +`main-title` | The main title element. +`condensed-title` | The title element if used inside a condensed app-header. +`spacer` | Adds a left margin of `64px`. +`bottom-item` | Sticks the element to the bottom of the toolbar. +`top-item` | Sticks the element to the top of the toolbar. + +### Styling + +Custom property | Description | Default +-----------------------------|------------------------------|----------------------- +`--app-toolbar-font-size` | Toolbar font size | 20px + +@element app-toolbar +@demo app-toolbar/demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_3__.html)` + + + +`, + + is: 'app-toolbar' +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-layout/helpers/helpers.js": +/*!*************************************************************!*\ + !*** ./node_modules/@polymer/app-layout/helpers/helpers.js ***! + \*************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ ElementWithBackground: () => (/* binding */ ElementWithBackground), +/* harmony export */ _scrollEffects: () => (/* binding */ _scrollEffects), +/* harmony export */ _scrollTimer: () => (/* binding */ _scrollTimer), +/* harmony export */ queryAllRoot: () => (/* binding */ queryAllRoot), +/* harmony export */ registerEffect: () => (/* binding */ registerEffect), +/* harmony export */ scroll: () => (/* binding */ scroll), +/* harmony export */ scrollTimingFunction: () => (/* binding */ scrollTimingFunction) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +const _scrollEffects = {}; +let _scrollTimer = null; + +const scrollTimingFunction = function easeOutQuad(t, b, c, d) { + t /= d; + return -c * t * (t - 2) + b; +}; + +/** + * Registers a scroll effect to be used in elements that implement the + * `Polymer.AppScrollEffectsBehavior` behavior. + * + * @param {string} effectName The effect name. + * @param {Object} effectDef The effect definition. + */ +const registerEffect = function registerEffect(effectName, effectDef) { + if (_scrollEffects[effectName] != null) { + throw new Error('effect `' + effectName + '` is already registered.'); + } + _scrollEffects[effectName] = effectDef; +}; + +const queryAllRoot = function(selector, root) { + var queue = [root]; + var matches = []; + + while (queue.length > 0) { + var node = queue.shift(); + matches.push.apply(matches, node.querySelectorAll(selector)); + for (var i = 0; node.children[i]; i++) { + if (node.children[i].shadowRoot) { + queue.push(node.children[i].shadowRoot); + } + } + } + return matches; +}; + +/** + * Scrolls to a particular set of coordinates in a scroll target. + * If the scroll target is not defined, then it would use the main document as + * the target. + * + * To scroll in a smooth fashion, you can set the option `behavior: 'smooth'`. + * e.g. + * + * ```js + * Polymer.AppLayout.scroll({top: 0, behavior: 'smooth'}); + * ``` + * + * To scroll in a silent mode, without notifying scroll changes to any + * app-layout elements, you can set the option `behavior: 'silent'`. This is + * particularly useful we you are using `app-header` and you desire to scroll to + * the top of a scrolling region without running scroll effects. e.g. + * + * ```js + * Polymer.AppLayout.scroll({top: 0, behavior: 'silent'}); + * ``` + * + * @param {Object} options {top: Number, left: Number, behavior: String(smooth | silent)} + */ +const scroll = function scroll(options) { + options = options || {}; + + var docEl = document.documentElement; + var target = options.target || docEl; + var hasNativeScrollBehavior = + 'scrollBehavior' in target.style && target.scroll; + var scrollClassName = 'app-layout-silent-scroll'; + var scrollTop = options.top || 0; + var scrollLeft = options.left || 0; + var scrollTo = target === docEl ? window.scrollTo : + function scrollTo(scrollLeft, scrollTop) { + target.scrollLeft = scrollLeft; + target.scrollTop = scrollTop; + }; + + if (options.behavior === 'smooth') { + if (hasNativeScrollBehavior) { + target.scroll(options); + + } else { + var timingFn = scrollTimingFunction; + var startTime = Date.now(); + var currentScrollTop = + target === docEl ? window.pageYOffset : target.scrollTop; + var currentScrollLeft = + target === docEl ? window.pageXOffset : target.scrollLeft; + var deltaScrollTop = scrollTop - currentScrollTop; + var deltaScrollLeft = scrollLeft - currentScrollLeft; + var duration = 300; + var updateFrame = + (function updateFrame() { + var now = Date.now(); + var elapsedTime = now - startTime; + + if (elapsedTime < duration) { + scrollTo( + timingFn( + elapsedTime, + currentScrollLeft, + deltaScrollLeft, + duration), + timingFn( + elapsedTime, currentScrollTop, deltaScrollTop, duration)); + requestAnimationFrame(updateFrame); + } else { + scrollTo(scrollLeft, scrollTop); + } + }).bind(this); + + updateFrame(); + } + + } else if (options.behavior === 'silent') { + var headers = queryAllRoot('app-header', document.body); + + headers.forEach(function(header) { + header.setAttribute('silent-scroll', ''); + }); + + // Browsers keep the scroll momentum even if the bottom of the scrolling + // content was reached. This means that calling scroll({top: 0, behavior: + // 'silent'}) when the momentum is still going will result in more scroll + // events and thus scroll effects. This seems to only apply when using + // document scrolling. Therefore, when should we remove the class from the + // document element? + + if (_scrollTimer) { + window.cancelAnimationFrame(_scrollTimer); + } + + _scrollTimer = window.requestAnimationFrame(function() { + headers.forEach(function(header) { + header.removeAttribute('silent-scroll'); + }); + _scrollTimer = null; + }); + + scrollTo(scrollLeft, scrollTop); + + } else { + scrollTo(scrollLeft, scrollTop); + } +}; + +/** + * @interface + * @extends {Polymer_LegacyElementMixin} + */ +class ElementWithBackground { + /** @return {boolean} True if there's content below the current element */ + isContentBelow() { + } + + + /** @return {boolean} true if the element is on screen */ + isOnScreen() { + } + + /** + * @param {string} title + * @return {?Element} Element in local dom by id. + */ + _getDOMRef(title) { + } +} + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/app-localize-behavior.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/app-localize-behavior.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AppLocalizeBehavior: () => (/* binding */ AppLocalizeBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_ajax_iron_ajax_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-ajax/iron-ajax.js */ "./node_modules/@polymer/iron-ajax/iron-ajax.js"); +/* harmony import */ var intl_messageformat_src_main_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! intl-messageformat/src/main.js */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/main.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + +window.IntlMessageFormat = intl_messageformat_src_main_js__WEBPACK_IMPORTED_MODULE_2__["default"]; + +// This isn't a complete `Object.assign` polyfill, but this element expects +// JSON and doesn't provide more than one source object. +var assign = + Object.assign ? Object.assign.bind(Object) : function(destination, source) { + for (var prop in source) { + if (source.hasOwnProperty(prop)) { + destination[prop] = source[prop]; + } + } + + return destination; + }; + +/** + `AppLocalizeBehavior` wraps the [format.js](http://formatjs.io/) + library to help you internationalize your application. Note that if you're on + a browser that does not natively support the + [Intl](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl) + object, you must load the polyfill yourself. An example polyfill can + be found [here](https://github.com/andyearnshaw/Intl.js/). + + `AppLocalizeBehavior` supports the same + [message-syntax](http://formatjs.io/guides/message-syntax/) of format.js, in + its entirety; use the library docs as reference for the available message + formats and options. + + Sample application loading resources from an external file: + + import {PolymerElement, html} from '@polymer/polymer'; + import {mixinBehaviors} from '@polymer/polymer/lib/legacy/class.js'; + import {AppLocalizeBehavior} from + '@polymer/app-localize-behavior/app-localize-behavior.js'; + + class SampleElement extends extends mixinBehaviors( + [AppLocalizeBehavior], PolymerElement) { + static get template() { + return html` +
{{localize('hello', 'name', 'Batman')}}
+ `; + } + static get properties() { + return { + language: { value: 'en' }, + } + } + + function attached() { + this.loadResources(this.resolveUrl('locales.json')); + } + } + customElements.define('sample-element', SampleElement); + + If the resources stored in your external file are for a single language and + so are not nested inside any language keys, you can pass an optional + `language` parameter to store the fetched resources inside that key. + + This complements the optional third parameter, `merge`, nicely: If you pass + `merge = true`, the fetched resources will be merged into any existing + resources rather than clobbering them. + + This is also useful for storing resources for different parts of a page that + the user might or might not see at the same time in different files, so that + the user can fetch only the needed resources on-demand, and doesn't have to + load any resources they'll never see anyway. For example, you could store + your resources for your global nav, homepage, and FAQ page in 3 different + files. When a user requests the homepage, both the global nav and the + homepage resources are fetched and merged together, since they both appear + on the page at the same time, but you spare the user from fetching the + unneeded FAQ resources. + + + Example: + + attached: function() { + this.loadResources( + // Only contains the flattened "es" translations: + 'locales/es.json', // {"hi": "hola"} + 'es', // unflatten -> {"es": {"hi": "hola"}} + true // merge so existing resources won't be clobbered + ); + } + + Alternatively, you can also inline your resources inside the app itself: + + import {PolymerElement, html} from '@polymer/polymer'; + import {mixinBehaviors} from '@polymer/polymer/lib/legacy/class.js'; + import {AppLocalizeBehavior} from + '@polymer/app-localize-behavior/app-localize-behavior.js'; + + class SampleElement extends extends mixinBehaviors( + [AppLocalizeBehavior], PolymerElement) { + static get template() { + return html` +
{{localize('hello', 'name', 'Batman')}}
+ `; + } + + static get properties() { + return { + language: { value: 'en' }, + resources: { + value: function() { + return { + 'en': { 'hello': 'My name is {name}.' }, + 'fr': { 'hello': 'Je m\'appelle {name}.' } + } + }, + } + } + + function attached() { + this.loadResources(this.resolveUrl('locales.json')); + } + } + customElements.define('sample-element', SampleElement); + + @demo demo/index.html + @polymerBehavior AppLocalizeBehavior + */ +const AppLocalizeBehavior = { + /** + Internal singleton cache. This is the private implementation of the + behaviour; don't interact with it directly. + */ + __localizationCache: { + requests: {}, /* One iron-request per unique resources path. */ + messages: {}, /* Unique localized strings. Invalidated when the language, + formats or resources change. */ + ajax: null /* Global iron-ajax object used to request resource files. */ + }, + + /** + Fired after the resources have been loaded. + @event app-localize-resources-loaded + */ + + /** + Fired when the resources cannot be loaded due to an error. + @event app-localize-resources-error + */ + + properties: { + /** + The language used for translation. + */ + language: {type: String}, + + /** + The dictionary of localized messages, for each of the languages that + are going to be used. See http://formatjs.io/guides/message-syntax/ for + more information on the message syntax. + * + For example, a valid dictionary would be: + this.resources = { + 'en': { 'greeting': 'Hello!' }, 'fr' : { 'greeting': 'Bonjour!' } + } + */ + resources: {type: Object}, + + /** + Optional dictionary of user defined formats, as explained here: + http://formatjs.io/guides/message-syntax/#custom-formats + * + For example, a valid dictionary of formats would be: + this.formats = { + number: { USD: { style: 'currency', currency: 'USD' } } + } + */ + formats: { + type: Object, + value: function() { + return { + } + } + }, + + /** + If true, will use the provided key when + the translation does not exist for that key. + */ + useKeyIfMissing: {type: Boolean, value: false}, + + /** + Translates a string to the current `language`. Any parameters to the + string should be passed in order, as follows: + `localize(stringKey, param1Name, param1Value, param2Name, param2Value)` + */ + localize: { + type: Function, + computed: '__computeLocalize(language, resources, formats)' + }, + + /** + If true, will bubble up the event to the parents + */ + bubbleEvent: {type: Boolean, value: false} + }, + + loadResources: function(path, language, merge) { + var proto = this.constructor.prototype; + + // Check if localCache exist just in case. + this.__checkLocalizationCache(proto); + + // If the global ajax object has not been initialized, initialize and cache + // it. + var ajax = proto.__localizationCache.ajax; + if (!ajax) { + ajax = proto.__localizationCache.ajax = + document.createElement('iron-ajax'); + } + + var request = proto.__localizationCache.requests[path]; + + function onRequestResponse(event) { + this.__onRequestResponse(event, language, merge); + } + + if (!request) { + ajax.url = path; + var request = ajax.generateRequest(); + + request.completes.then( + onRequestResponse.bind(this), this.__onRequestError.bind(this)); + + // Cache the instance so that it can be reused if the same path is loaded. + proto.__localizationCache.requests[path] = request; + } else { + request.completes.then( + onRequestResponse.bind(this), this.__onRequestError.bind(this)); + } + }, + + /** + Returns a computed `localize` method, based on the current `language`. + */ + __computeLocalize: function(language, resources, formats) { + var proto = this.constructor.prototype; + + // Check if localCache exist just in case. + this.__checkLocalizationCache(proto); + + // Everytime any of the parameters change, invalidate the strings cache. + if (!proto.__localizationCache) { + proto['__localizationCache'] = {requests: {}, messages: {}, ajax: null}; + } + proto.__localizationCache.messages = {}; + + return function() { + var key = arguments[0]; + if (!key || !resources || !language || !resources[language]) + return; + + // Cache the key/value pairs for the same language, so that we don't + // do extra work if we're just reusing strings across an application. + var translatedValue = resources[language][key]; + + if (!translatedValue) { + return this.useKeyIfMissing ? key : ''; + } + + var messageKey = key + translatedValue; + var translatedMessage = proto.__localizationCache.messages[messageKey]; + + if (!translatedMessage) { + translatedMessage = + new intl_messageformat_src_main_js__WEBPACK_IMPORTED_MODULE_2__["default"](translatedValue, language, formats); + proto.__localizationCache.messages[messageKey] = translatedMessage; + } + + var args = {}; + for (var i = 1; i < arguments.length; i += 2) { + args[arguments[i]] = arguments[i + 1]; + } + + return translatedMessage.format(args); + }.bind(this); + }, + + __onRequestResponse: function(event, language, merge) { + var propertyUpdates = {}; + var newResources = event.response; + if (merge) { + if (language) { + propertyUpdates.resources = assign({}, this.resources || {}); + propertyUpdates['resources.' + language] = + assign(propertyUpdates.resources[language] || {}, newResources); + } else { + propertyUpdates.resources = assign(this.resources, newResources); + } + } else { + if (language) { + propertyUpdates.resources = {}; + propertyUpdates.resources[language] = newResources; + propertyUpdates['resources.' + language] = newResources; + } else { + propertyUpdates.resources = newResources; + } + } + if (this.setProperties) { + this.setProperties(propertyUpdates); + } else { + for (var key in propertyUpdates) { + this.set(key, propertyUpdates[key]); + } + } + this.fire( + 'app-localize-resources-loaded', event, {bubbles: this.bubbleEvent}); + }, + + __onRequestError: function(event) { + this.fire('app-localize-resources-error'); + }, + + __checkLocalizationCache: function(proto) { + // do nothing if proto is undefined. + if (proto === undefined) + return; + + // In the event proto not have __localizationCache object, create it. + if (proto['__localizationCache'] === undefined) { + proto['__localizationCache'] = {requests: {}, messages: {}, ajax: null}; + } + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/compiler.js": +/*!*****************************************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/compiler.js ***! + \*****************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* +Copyright (c) 2014, Yahoo! Inc. All rights reserved. +Copyrights licensed under the New BSD License. +See the accompanying LICENSE file for terms. +*/ + +/* jslint esnext: true */ + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Compiler); + +function Compiler(locales, formats, pluralFn) { + this.locales = locales; + this.formats = formats; + this.pluralFn = pluralFn; +} + +Compiler.prototype.compile = function (ast) { + this.pluralStack = []; + this.currentPlural = null; + this.pluralNumberFormat = null; + + return this.compileMessage(ast); +}; + +Compiler.prototype.compileMessage = function (ast) { + if (!(ast && ast.type === 'messageFormatPattern')) { + throw new Error('Message AST is not of type: "messageFormatPattern"'); + } + + var elements = ast.elements, + pattern = []; + + var i, len, element; + + for (i = 0, len = elements.length; i < len; i += 1) { + element = elements[i]; + + switch (element.type) { + case 'messageTextElement': + pattern.push(this.compileMessageText(element)); + break; + + case 'argumentElement': + pattern.push(this.compileArgument(element)); + break; + + default: + throw new Error('Message element does not have a valid type'); + } + } + + return pattern; +}; + +Compiler.prototype.compileMessageText = function (element) { + // When this `element` is part of plural sub-pattern and its value contains + // an unescaped '#', use a `PluralOffsetString` helper to properly output + // the number with the correct offset in the string. + if (this.currentPlural && /(^|[^\\])#/g.test(element.value)) { + // Create a cache a NumberFormat instance that can be reused for any + // PluralOffsetString instance in this message. + if (!this.pluralNumberFormat) { + this.pluralNumberFormat = new Intl.NumberFormat(this.locales); + } + + return new PluralOffsetString( + this.currentPlural.id, + this.currentPlural.format.offset, + this.pluralNumberFormat, + element.value); + } + + // Unescape the escaped '#'s in the message text. + return element.value.replace(/\\#/g, '#'); +}; + +Compiler.prototype.compileArgument = function (element) { + var format = element.format; + + if (!format) { + return new StringFormat(element.id); + } + + var formats = this.formats, + locales = this.locales, + pluralFn = this.pluralFn, + options; + + switch (format.type) { + case 'numberFormat': + options = formats.number[format.style]; + return { + id : element.id, + format: new Intl.NumberFormat(locales, options).format + }; + + case 'dateFormat': + options = formats.date[format.style]; + return { + id : element.id, + format: new Intl.DateTimeFormat(locales, options).format + }; + + case 'timeFormat': + options = formats.time[format.style]; + return { + id : element.id, + format: new Intl.DateTimeFormat(locales, options).format + }; + + case 'pluralFormat': + options = this.compileOptions(element); + return new PluralFormat( + element.id, format.ordinal, format.offset, options, pluralFn + ); + + case 'selectFormat': + options = this.compileOptions(element); + return new SelectFormat(element.id, options); + + default: + throw new Error('Message element does not have a valid format type'); + } +}; + +Compiler.prototype.compileOptions = function (element) { + var format = element.format, + options = format.options, + optionsHash = {}; + + // Save the current plural element, if any, then set it to a new value when + // compiling the options sub-patterns. This conforms the spec's algorithm + // for handling `"#"` syntax in message text. + this.pluralStack.push(this.currentPlural); + this.currentPlural = format.type === 'pluralFormat' ? element : null; + + var i, len, option; + + for (i = 0, len = options.length; i < len; i += 1) { + option = options[i]; + + // Compile the sub-pattern and save it under the options's selector. + optionsHash[option.selector] = this.compileMessage(option.value); + } + + // Pop the plural stack to put back the original current plural value. + this.currentPlural = this.pluralStack.pop(); + + return optionsHash; +}; + +// -- Compiler Helper Classes -------------------------------------------------- + +function StringFormat(id) { + this.id = id; +} + +StringFormat.prototype.format = function (value) { + if (!value && typeof value !== 'number') { + return ''; + } + + return typeof value === 'string' ? value : String(value); +}; + +function PluralFormat(id, useOrdinal, offset, options, pluralFn) { + this.id = id; + this.useOrdinal = useOrdinal; + this.offset = offset; + this.options = options; + this.pluralFn = pluralFn; +} + +PluralFormat.prototype.getOption = function (value) { + var options = this.options; + + var option = options['=' + value] || + options[this.pluralFn(value - this.offset, this.useOrdinal)]; + + return option || options.other; +}; + +function PluralOffsetString(id, offset, numberFormat, string) { + this.id = id; + this.offset = offset; + this.numberFormat = numberFormat; + this.string = string; +} + +PluralOffsetString.prototype.format = function (value) { + var number = this.numberFormat.format(value - this.offset); + + return this.string + .replace(/(^|[^\\])#/g, '$1' + number) + .replace(/\\#/g, '#'); +}; + +function SelectFormat(id, options) { + this.id = id; + this.options = options; +} + +SelectFormat.prototype.getOption = function (value) { + var options = this.options; + return options[value] || options.other; +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/core.js": +/*!*************************************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/core.js ***! + \*************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/utils.js"); +/* harmony import */ var _es5__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./es5 */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/es5.js"); +/* harmony import */ var _compiler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./compiler */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/compiler.js"); +/* harmony import */ var intl_messageformat_parser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! intl-messageformat-parser */ "./node_modules/intl-messageformat-parser/index.js"); +/* harmony import */ var intl_messageformat_parser__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(intl_messageformat_parser__WEBPACK_IMPORTED_MODULE_3__); +/* +Copyright (c) 2014, Yahoo! Inc. All rights reserved. +Copyrights licensed under the New BSD License. +See the accompanying LICENSE file for terms. +*/ + +/* jslint esnext: true */ + + + + + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MessageFormat); + +// -- MessageFormat -------------------------------------------------------- + +function MessageFormat(message, locales, formats) { + // Parse string messages into an AST. + var ast = typeof message === 'string' ? + MessageFormat.__parse(message) : message; + + if (!(ast && ast.type === 'messageFormatPattern')) { + throw new TypeError('A message must be provided as a String or AST.'); + } + + // Creates a new object with the specified `formats` merged with the default + // formats. + formats = this._mergeFormats(MessageFormat.formats, formats); + + // Defined first because it's used to build the format pattern. + (0,_es5__WEBPACK_IMPORTED_MODULE_1__.defineProperty)(this, '_locale', {value: this._resolveLocale(locales)}); + + // Compile the `ast` to a pattern that is highly optimized for repeated + // `format()` invocations. **Note:** This passes the `locales` set provided + // to the constructor instead of just the resolved locale. + var pluralFn = this._findPluralRuleFunction(this._locale); + var pattern = this._compilePattern(ast, locales, formats, pluralFn); + + // "Bind" `format()` method to `this` so it can be passed by reference like + // the other `Intl` APIs. + var messageFormat = this; + this.format = function (values) { + try { + return messageFormat._format(pattern, values); + } catch (e) { + if (e.variableId) { + throw new Error( + 'The intl string context variable \'' + e.variableId + '\'' + + ' was not provided to the string \'' + message + '\'' + ); + } else { + throw e; + } + } + }; +} + +// Default format options used as the prototype of the `formats` provided to the +// constructor. These are used when constructing the internal Intl.NumberFormat +// and Intl.DateTimeFormat instances. +(0,_es5__WEBPACK_IMPORTED_MODULE_1__.defineProperty)(MessageFormat, 'formats', { + enumerable: true, + + value: { + number: { + 'currency': { + style: 'currency' + }, + + 'percent': { + style: 'percent' + } + }, + + date: { + 'short': { + month: 'numeric', + day : 'numeric', + year : '2-digit' + }, + + 'medium': { + month: 'short', + day : 'numeric', + year : 'numeric' + }, + + 'long': { + month: 'long', + day : 'numeric', + year : 'numeric' + }, + + 'full': { + weekday: 'long', + month : 'long', + day : 'numeric', + year : 'numeric' + } + }, + + time: { + 'short': { + hour : 'numeric', + minute: 'numeric' + }, + + 'medium': { + hour : 'numeric', + minute: 'numeric', + second: 'numeric' + }, + + 'long': { + hour : 'numeric', + minute : 'numeric', + second : 'numeric', + timeZoneName: 'short' + }, + + 'full': { + hour : 'numeric', + minute : 'numeric', + second : 'numeric', + timeZoneName: 'short' + } + } + } +}); + +// Define internal private properties for dealing with locale data. +(0,_es5__WEBPACK_IMPORTED_MODULE_1__.defineProperty)(MessageFormat, '__localeData__', {value: (0,_es5__WEBPACK_IMPORTED_MODULE_1__.objCreate)(null)}); +(0,_es5__WEBPACK_IMPORTED_MODULE_1__.defineProperty)(MessageFormat, '__addLocaleData', {value: function (data) { + if (!(data && data.locale)) { + throw new Error( + 'Locale data provided to IntlMessageFormat is missing a ' + + '`locale` property' + ); + } + + MessageFormat.__localeData__[data.locale.toLowerCase()] = data; +}}); + +// Defines `__parse()` static method as an exposed private. +(0,_es5__WEBPACK_IMPORTED_MODULE_1__.defineProperty)(MessageFormat, '__parse', {value: (intl_messageformat_parser__WEBPACK_IMPORTED_MODULE_3___default().parse)}); + +// Define public `defaultLocale` property which defaults to English, but can be +// set by the developer. +(0,_es5__WEBPACK_IMPORTED_MODULE_1__.defineProperty)(MessageFormat, 'defaultLocale', { + enumerable: true, + writable : true, + value : undefined +}); + +MessageFormat.prototype.resolvedOptions = function () { + // TODO: Provide anything else? + return { + locale: this._locale + }; +}; + +MessageFormat.prototype._compilePattern = function (ast, locales, formats, pluralFn) { + var compiler = new _compiler__WEBPACK_IMPORTED_MODULE_2__["default"](locales, formats, pluralFn); + return compiler.compile(ast); +}; + +MessageFormat.prototype._findPluralRuleFunction = function (locale) { + var localeData = MessageFormat.__localeData__; + var data = localeData[locale.toLowerCase()]; + + // The locale data is de-duplicated, so we have to traverse the locale's + // hierarchy until we find a `pluralRuleFunction` to return. + while (data) { + if (data.pluralRuleFunction) { + return data.pluralRuleFunction; + } + + data = data.parentLocale && localeData[data.parentLocale.toLowerCase()]; + } + + throw new Error( + 'Locale data added to IntlMessageFormat is missing a ' + + '`pluralRuleFunction` for :' + locale + ); +}; + +MessageFormat.prototype._format = function (pattern, values) { + var result = '', + i, len, part, id, value, err; + + for (i = 0, len = pattern.length; i < len; i += 1) { + part = pattern[i]; + + // Exist early for string parts. + if (typeof part === 'string') { + result += part; + continue; + } + + id = part.id; + + // Enforce that all required values are provided by the caller. + if (!(values && _utils__WEBPACK_IMPORTED_MODULE_0__.hop.call(values, id))) { + err = new Error('A value must be provided for: ' + id); + err.variableId = id; + throw err; + } + + value = values[id]; + + // Recursively format plural and select parts' option — which can be a + // nested pattern structure. The choosing of the option to use is + // abstracted-by and delegated-to the part helper object. + if (part.options) { + result += this._format(part.getOption(value), values); + } else { + result += part.format(value); + } + } + + return result; +}; + +MessageFormat.prototype._mergeFormats = function (defaults, formats) { + var mergedFormats = {}, + type, mergedType; + + for (type in defaults) { + if (!_utils__WEBPACK_IMPORTED_MODULE_0__.hop.call(defaults, type)) { continue; } + + mergedFormats[type] = mergedType = (0,_es5__WEBPACK_IMPORTED_MODULE_1__.objCreate)(defaults[type]); + + if (formats && _utils__WEBPACK_IMPORTED_MODULE_0__.hop.call(formats, type)) { + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.extend)(mergedType, formats[type]); + } + } + + return mergedFormats; +}; + +MessageFormat.prototype._resolveLocale = function (locales) { + if (typeof locales === 'string') { + locales = [locales]; + } + + // Create a copy of the array so we can push on the default locale. + locales = (locales || []).concat(MessageFormat.defaultLocale); + + var localeData = MessageFormat.__localeData__; + var i, len, localeParts, data; + + // Using the set of locales + the default locale, we look for the first one + // which that has been registered. When data does not exist for a locale, we + // traverse its ancestors to find something that's been registered within + // its hierarchy of locales. Since we lack the proper `parentLocale` data + // here, we must take a naive approach to traversal. + for (i = 0, len = locales.length; i < len; i += 1) { + localeParts = locales[i].toLowerCase().split('-'); + + while (localeParts.length) { + data = localeData[localeParts.join('-')]; + if (data) { + // Return the normalized locale string; e.g., we return "en-US", + // instead of "en-us". + return data.locale; + } + + localeParts.pop(); + } + } + + var defaultLocale = locales.pop(); + throw new Error( + 'No locale data has been added to IntlMessageFormat for: ' + + locales.join(', ') + ', or the default locale: ' + defaultLocale + ); +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/en.js": +/*!***********************************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/en.js ***! + \***********************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +// GENERATED FILE +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({"locale":"en","pluralRuleFunction":function (n,ord){var s=String(n).split("."),v0=!s[1],t0=Number(s[0])==n,n10=t0&&s[0].slice(-1),n100=t0&&s[0].slice(-2);if(ord)return n10==1&&n100!=11?"one":n10==2&&n100!=12?"two":n10==3&&n100!=13?"few":"other";return n==1&&v0?"one":"other"}}); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/es5.js": +/*!************************************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/es5.js ***! + \************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ defineProperty: () => (/* binding */ defineProperty), +/* harmony export */ objCreate: () => (/* binding */ objCreate) +/* harmony export */ }); +/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/utils.js"); +/* +Copyright (c) 2014, Yahoo! Inc. All rights reserved. +Copyrights licensed under the New BSD License. +See the accompanying LICENSE file for terms. +*/ + +/* jslint esnext: true */ + + + +// Purposely using the same implementation as the Intl.js `Intl` polyfill. +// Copyright 2013 Andy Earnshaw, MIT License + +var realDefineProp = (function () { + try { return !!Object.defineProperty({}, 'a', {}); } + catch (e) { return false; } +})(); + +var es3 = !realDefineProp && !Object.prototype.__defineGetter__; + +var defineProperty = realDefineProp ? Object.defineProperty : + function (obj, name, desc) { + + if ('get' in desc && obj.__defineGetter__) { + obj.__defineGetter__(name, desc.get); + } else if (!_utils__WEBPACK_IMPORTED_MODULE_0__.hop.call(obj, name) || 'value' in desc) { + obj[name] = desc.value; + } +}; + +var objCreate = Object.create || function (proto, props) { + var obj, k; + + function F() {} + F.prototype = proto; + obj = new F(); + + for (k in props) { + if (_utils__WEBPACK_IMPORTED_MODULE_0__.hop.call(props, k)) { + defineProperty(obj, k, props[k]); + } + } + + return obj; +}; + + + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/main.js": +/*!*************************************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/main.js ***! + \*************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/core.js"); +/* harmony import */ var _en__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./en */ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/en.js"); +/* jslint esnext: true */ + + + + +_core__WEBPACK_IMPORTED_MODULE_0__["default"].__addLocaleData(_en__WEBPACK_IMPORTED_MODULE_1__["default"]); +_core__WEBPACK_IMPORTED_MODULE_0__["default"].defaultLocale = 'en'; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_core__WEBPACK_IMPORTED_MODULE_0__["default"]); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/utils.js": +/*!**************************************************************************************************!*\ + !*** ./node_modules/@polymer/app-localize-behavior/node_modules/intl-messageformat/src/utils.js ***! + \**************************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ extend: () => (/* binding */ extend), +/* harmony export */ hop: () => (/* binding */ hop) +/* harmony export */ }); +/* +Copyright (c) 2014, Yahoo! Inc. All rights reserved. +Copyrights licensed under the New BSD License. +See the accompanying LICENSE file for terms. +*/ + +/* jslint esnext: true */ + +var hop = Object.prototype.hasOwnProperty; + +function extend(obj) { + var sources = Array.prototype.slice.call(arguments, 1), + i, len, source, key; + + for (i = 0, len = sources.length; i < len; i += 1) { + source = sources[i]; + if (!source) { continue; } + + for (key in source) { + if (hop.call(source, key)) { + obj[key] = source[key]; + } + } + } + + return obj; +} + + +/***/ }), + +/***/ "./node_modules/@polymer/app-route/app-location.js": +/*!*********************************************************!*\ + !*** ./node_modules/@polymer/app-route/app-location.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_location_iron_location_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-location/iron-location.js */ "./node_modules/@polymer/iron-location/iron-location.js"); +/* harmony import */ var _polymer_iron_location_iron_query_params_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-location/iron-query-params.js */ "./node_modules/@polymer/iron-location/iron-query-params.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _app_route_converter_behavior_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./app-route-converter-behavior.js */ "./node_modules/@polymer/app-route/app-route-converter-behavior.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + +/** +`app-location` is an element that provides synchronization between the +browser location bar and the state of an app. When created, `app-location` +elements will automatically watch the global location for changes. As changes +occur, `app-location` produces and updates an object called `route`. This +`route` object is suitable for passing into a `app-route`, and other similar +elements. + +An example of the public API of a route object that describes the URL +`https://elements.polymer-project.org/elements/app-location`: + + { + prefix: '', + path: '/elements/app-location' + } + +Example Usage: + + + + +As you can see above, the `app-location` element produces a `route` and that +property is then bound into the `app-route` element. The bindings are two- +directional, so when changes to the `route` object occur within `app-route`, +they automatically reflect back to the global location. + +### Hashes vs Paths + +By default `app-location` routes using the pathname portion of the URL. This has +broad browser support but it does require cooperation of the backend server. An +`app-location` can be configured to use the hash part of a URL instead using +the `use-hash-as-path` attribute, like so: + + + +### Integrating with other routing code + +There is no standard event that is fired when window.location is modified. +`app-location` fires a `location-changed` event on `window` when it updates the +location. It also listens for that same event, and re-reads the URL when it's +fired. This makes it very easy to interop with other routing code. + +So for example if you want to navigate to `/new_path` imperatively you could +call `window.location.pushState` or `window.location.replaceState` followed by +firing a `location-changed` event on `window`. i.e. + + window.history.pushState({}, null, '/new_path'); + window.dispatchEvent(new CustomEvent('location-changed')); + +@element app-location +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__.html)` + + + + + `, + + is: 'app-location', + + properties: { + /** + * A model representing the deserialized path through the route tree, as + * well as the current queryParams. + */ + route: { + type: Object, + notify: true, + }, + + /** + * In many scenarios, it is convenient to treat the `hash` as a stand-in + * alternative to the `path`. For example, if deploying an app to a static + * web server (e.g., Github Pages) - where one does not have control over + * server-side routing - it is usually a better experience to use the hash + * to represent paths through one's app. + * + * When this property is set to true, the `hash` will be used in place of + + * the `path` for generating a `route`. + */ + useHashAsPath: { + type: Boolean, + value: false, + }, + + /** + * A regexp that defines the set of URLs that should be considered part + * of this web app. + * + * Clicking on a link that matches this regex won't result in a full page + * navigation, but will instead just update the URL state in place. + * + * This regexp is given everything after the origin in an absolute + * URL. So to match just URLs that start with /search/ do: + * url-space-regex="^/search/" + * + * @type {string|RegExp} + */ + urlSpaceRegex: { + type: String, + notify: true, + }, + + /** + * A set of key/value pairs that are universally accessible to branches + * of the route tree. + */ + __queryParams: { + type: Object, + }, + + /** + * The pathname component of the current URL. + */ + __path: { + type: String, + }, + + /** + * The query string portion of the current URL. + */ + __query: { + type: String, + }, + + /** + * The hash portion of the current URL. + */ + __hash: { + type: String, + }, + + /** + * The route path, which will be either the hash or the path, depending + * on useHashAsPath. + */ + path: { + type: String, + observer: '__onPathChanged', + }, + + /** + * Whether or not the ready function has been called. + */ + _isReady: { + type: Boolean, + }, + + /** + * If the user was on a URL for less than `dwellTime` milliseconds, it + * won't be added to the browser's history, but instead will be + * replaced by the next entry. + * + * This is to prevent large numbers of entries from clogging up the + * user's browser history. Disable by setting to a negative number. + * + * See `iron-location` for more information. + */ + dwellTime: { + type: Number, + } + }, + + behaviors: [_app_route_converter_behavior_js__WEBPACK_IMPORTED_MODULE_5__.AppRouteConverterBehavior], + observers: ['__computeRoutePath(useHashAsPath, __hash, __path)'], + + ready: function() { + this._isReady = true; + }, + + __computeRoutePath: function() { + this.path = this.useHashAsPath ? this.__hash : this.__path; + }, + + __onPathChanged: function() { + if (!this._isReady) { + return; + } + + if (this.useHashAsPath) { + this.__hash = this.path; + } else { + this.__path = this.path; + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/app-route/app-route-converter-behavior.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@polymer/app-route/app-route-converter-behavior.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ AppRouteConverterBehavior: () => (/* binding */ AppRouteConverterBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +/** + * Provides bidirectional mapping between `path` and `queryParams` and a + * app-route compatible `route` object. + * + * For more information, see the docs for `app-route-converter`. + * + * @polymerBehavior + */ +const AppRouteConverterBehavior = { + properties: { + /** + * A model representing the deserialized path through the route tree, as + * well as the current queryParams. + * + * A route object is the kernel of the routing system. It is intended to + * be fed into consuming elements such as `app-route`. + * + * @type {?Object|undefined} + */ + route: { + type: Object, + notify: true, + }, + + /** + * A set of key/value pairs that are universally accessible to branches of + * the route tree. + * + * @type {?Object} + */ + queryParams: { + type: Object, + notify: true, + }, + + /** + * The serialized path through the route tree. This corresponds to the + * `window.location.pathname` value, and will update to reflect changes + * to that value. + */ + path: { + type: String, + notify: true, + } + }, + + observers: [ + '_locationChanged(path, queryParams)', + '_routeChanged(route.prefix, route.path)', + '_routeQueryParamsChanged(route.__queryParams)' + ], + + created: function() { + this.linkPaths('route.__queryParams', 'queryParams'); + this.linkPaths('queryParams', 'route.__queryParams'); + }, + + /** + * Handler called when the path or queryParams change. + */ + _locationChanged: function() { + if (this.route && this.route.path === this.path && + this.queryParams === this.route.__queryParams) { + return; + } + this.route = {prefix: '', path: this.path, __queryParams: this.queryParams}; + }, + + /** + * Handler called when the route prefix and route path change. + */ + _routeChanged: function() { + if (!this.route) { + return; + } + + this.path = this.route.prefix + this.route.path; + }, + + /** + * Handler called when the route queryParams change. + * + * @param {Object} queryParams A set of key/value pairs that are + * universally accessible to branches of the route tree. + */ + _routeQueryParamsChanged: function(queryParams) { + if (!this.route) { + return; + } + this.queryParams = queryParams; + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/app-route/app-route.js": +/*!******************************************************!*\ + !*** ./node_modules/@polymer/app-route/app-route.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** +`app-route` is an element that enables declarative, self-describing routing +for a web app. + +In its typical usage, a `app-route` element consumes an object that describes +some state about the current route, via the `route` property. It then parses +that state using the `pattern` property, and produces two artifacts: some `data` +related to the `route`, and a `tail` that contains the rest of the `route` that +did not match. + +Here is a basic example, when used with `app-location`: + + + + + +In the above example, the `app-location` produces a `route` value. Then, the +`route.path` property is matched by comparing it to the `pattern` property. If +the `pattern` property matches `route.path`, the `app-route` will set or update +its `data` property with an object whose properties correspond to the parameters +in `pattern`. So, in the above example, if `route.path` was `'/about'`, the +value of `data` would be `{"page": "about"}`. + +The `tail` property represents the remaining part of the route state after the +`pattern` has been applied to a matching `route`. + +Here is another example, where `tail` is used: + + + + + + + +In the above example, there are two `app-route` elements. The first +`app-route` consumes a `route`. When the `route` is matched, the first +`app-route` also produces `routeData` from its `data`, and `subroute` from +its `tail`. The second `app-route` consumes the `subroute`, and when it +matches, it produces an object called `subrouteData` from its `data`. + +So, when `route.path` is `'/about'`, the `routeData` object will look like +this: `{ page: 'about' }` + +And `subrouteData` will be null. However, if `route.path` changes to +`'/article/123'`, the `routeData` object will look like this: +`{ page: 'article' }` + +And the `subrouteData` will look like this: `{ id: '123' }` + +`app-route` is responsive to bi-directional changes to the `data` objects +they produce. So, if `routeData.page` changed from `'article'` to `'about'`, +the `app-route` will update `route.path`. This in-turn will update the +`app-location`, and cause the global location bar to change its value. + +@element app-route +@demo demo/index.html +@demo demo/data-loading-demo.html +@demo demo/simple-demo.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + is: 'app-route', + + properties: { + /** + * The URL component managed by this element. + */ + route: { + type: Object, + notify: true, + }, + + /** + * The pattern of slash-separated segments to match `route.path` against. + * + * For example the pattern "/foo" will match "/foo" or "/foo/bar" + * but not "/foobar". + * + * Path segments like `/:named` are mapped to properties on the `data` + * object. + */ + pattern: { + type: String, + }, + + /** + * The parameterized values that are extracted from the route as + * described by `pattern`. + */ + data: { + type: Object, + value: function() { + return {}; + }, + notify: true, + }, + + /** + * Auto activate route if path empty + */ + autoActivate: { + type: Boolean, + value: false, + }, + + _queryParamsUpdating: { + type: Boolean, + value: false, + }, + + /** + * @type {?Object} + */ + queryParams: { + type: Object, + value: function() { + return {}; + }, + notify: true, + }, + + /** + * The part of `route.path` NOT consumed by `pattern`. + */ + tail: { + type: Object, + value: function() { + return { + path: null, + prefix: null, + __queryParams: null, + }; + }, + notify: true, + }, + + /** + * Whether the current route is active. True if `route.path` matches the + * `pattern`, false otherwise. + */ + active: { + type: Boolean, + notify: true, + readOnly: true, + }, + + /** + * @type {?string} + */ + _matched: { + type: String, + value: '', + } + }, + + observers: [ + '__tryToMatch(route.path, pattern)', + '__updatePathOnDataChange(data.*)', + '__tailPathChanged(tail.path)', + '__routeQueryParamsChanged(route.__queryParams)', + '__tailQueryParamsChanged(tail.__queryParams)', + '__queryParamsChanged(queryParams.*)' + ], + + created: function() { + this.linkPaths('route.__queryParams', 'tail.__queryParams'); + this.linkPaths('tail.__queryParams', 'route.__queryParams'); + }, + + /** + * Deal with the query params object being assigned to wholesale. + */ + __routeQueryParamsChanged: function(queryParams) { + if (queryParams && this.tail) { + if (this.tail.__queryParams !== queryParams) { + this.set('tail.__queryParams', queryParams); + } + + if (!this.active || this._queryParamsUpdating) { + return; + } + + // Copy queryParams and track whether there are any differences compared + // to the existing query params. + var copyOfQueryParams = {}; + var anythingChanged = false; + for (var key in queryParams) { + copyOfQueryParams[key] = queryParams[key]; + if (anythingChanged || !this.queryParams || + queryParams[key] !== this.queryParams[key]) { + anythingChanged = true; + } + } + // Need to check whether any keys were deleted + for (var key in this.queryParams) { + if (anythingChanged || !(key in queryParams)) { + anythingChanged = true; + break; + } + } + + if (!anythingChanged) { + return; + } + this._queryParamsUpdating = true; + this.set('queryParams', copyOfQueryParams); + this._queryParamsUpdating = false; + } + }, + + __tailQueryParamsChanged: function(queryParams) { + if (queryParams && this.route && this.route.__queryParams != queryParams) { + this.set('route.__queryParams', queryParams); + } + }, + + __queryParamsChanged: function(changes) { + if (!this.active || this._queryParamsUpdating) { + return; + } + + this.set('route.__' + changes.path, changes.value); + }, + + __resetProperties: function() { + this._setActive(false); + this._matched = null; + }, + + __tryToMatch: function() { + if (!this.route) { + return; + } + + var path = this.route.path; + var pattern = this.pattern; + + if (this.autoActivate && path === '') { + path = '/'; + } + + if (!pattern) { + return; + } + + if (!path) { + this.__resetProperties(); + return; + } + + var remainingPieces = path.split('/'); + var patternPieces = pattern.split('/'); + + var matched = []; + var namedMatches = {}; + + for (var i = 0; i < patternPieces.length; i++) { + var patternPiece = patternPieces[i]; + if (!patternPiece && patternPiece !== '') { + break; + } + var pathPiece = remainingPieces.shift(); + + // We don't match this path. + if (!pathPiece && pathPiece !== '') { + this.__resetProperties(); + return; + } + matched.push(pathPiece); + + if (patternPiece.charAt(0) == ':') { + namedMatches[patternPiece.slice(1)] = pathPiece; + } else if (patternPiece !== pathPiece) { + this.__resetProperties(); + return; + } + } + + this._matched = matched.join('/'); + + // Properties that must be updated atomically. + var propertyUpdates = {}; + + // this.active + if (!this.active) { + propertyUpdates.active = true; + } + + // this.tail + var tailPrefix = this.route.prefix + this._matched; + var tailPath = remainingPieces.join('/'); + if (remainingPieces.length > 0) { + tailPath = '/' + tailPath; + } + if (!this.tail || this.tail.prefix !== tailPrefix || + this.tail.path !== tailPath) { + propertyUpdates.tail = { + prefix: tailPrefix, + path: tailPath, + __queryParams: this.route.__queryParams + }; + } + + // this.data + propertyUpdates.data = namedMatches; + this._dataInUrl = {}; + for (var key in namedMatches) { + this._dataInUrl[key] = namedMatches[key]; + } + + if (this.setProperties) { + // atomic update + this.setProperties(propertyUpdates, true); + } else { + this.__setMulti(propertyUpdates); + } + }, + + __tailPathChanged: function(path) { + if (!this.active) { + return; + } + var tailPath = path; + var newPath = this._matched; + if (tailPath) { + if (tailPath.charAt(0) !== '/') { + tailPath = '/' + tailPath; + } + newPath += tailPath; + } + this.set('route.path', newPath); + }, + + __updatePathOnDataChange: function() { + if (!this.route || !this.active) { + return; + } + var newPath = this.__getLink({}); + var oldPath = this.__getLink(this._dataInUrl); + if (newPath === oldPath) { + return; + } + this.set('route.path', newPath); + }, + + __getLink: function(overrideValues) { + var values = {tail: null}; + for (var key in this.data) { + values[key] = this.data[key]; + } + for (var key in overrideValues) { + values[key] = overrideValues[key]; + } + var patternPieces = this.pattern.split('/'); + var interp = patternPieces.map(function(value) { + if (value[0] == ':') { + value = values[value.slice(1)]; + } + return value; + }, this); + if (values.tail && values.tail.path) { + if (interp.length > 0 && values.tail.path.charAt(0) === '/') { + interp.push(values.tail.path.slice(1)); + } else { + interp.push(values.tail.path); + } + } + return interp.join('/'); + }, + + __setMulti: function(setObj) { + // HACK(rictic): skirting around 1.0's lack of a setMulti by poking at + // internal data structures. I would not advise that you copy this + // example. + // + // In the future this will be a feature of Polymer itself. + // See: https://github.com/Polymer/polymer/issues/3640 + // + // Hacking around with private methods like this is juggling footguns, + // and is likely to have unexpected and unsupported rough edges. + // + // Be ye so warned. + for (var property in setObj) { + this._propertySetter(property, setObj[property]); + } + // notify in a specific order + if (setObj.data !== undefined) { + this._pathEffector('data', this.data); + this._notifyChange('data'); + } + if (setObj.active !== undefined) { + this._pathEffector('active', this.active); + this._notifyChange('active'); + } + if (setObj.tail !== undefined) { + this._pathEffector('tail', this.tail); + this._notifyChange('tail'); + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/decorators/lib/decorators.js": +/*!************************************************************!*\ + !*** ./node_modules/@polymer/decorators/lib/decorators.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ computed: () => (/* binding */ computed), +/* harmony export */ customElement: () => (/* binding */ customElement), +/* harmony export */ listen: () => (/* binding */ listen), +/* harmony export */ observe: () => (/* binding */ observe), +/* harmony export */ property: () => (/* binding */ property), +/* harmony export */ query: () => (/* binding */ query), +/* harmony export */ queryAll: () => (/* binding */ queryAll) +/* harmony export */ }); +/** + * @license + * Copyright (c) 2016 The Polymer Project Authors. All rights reserved. + * This code may only be used under the BSD style license found at + * http://polymer.github.io/LICENSE.txt The complete set of authors may be found + * at http://polymer.github.io/AUTHORS.txt The complete set of contributors may + * be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by + * Google as part of the polymer project is also subject to an additional IP + * rights grant found at http://polymer.github.io/PATENTS.txt + */ +/** + * A TypeScript class decorator factory that registers the class as a custom + * element. + * + * If `tagname` is provided, it will be used as the custom element name, and + * will be assigned to the class static `is` property. If `tagname` is omitted, + * the static `is` property of the class will be used instead. If neither exist, + * or if both exist but have different values (except in the case that the `is` + * property is not an own-property of the class), an exception is thrown. + */ +function customElement(tagname) { + return (class_) => { + if (tagname) { + // Only check that tag names match when `is` is our own property. It might + // be inherited from a superclass, in which case it's ok if they're + // different, and we'll override it with our own property below. + if (class_.hasOwnProperty('is')) { + if (tagname !== class_.is) { + throw new Error(`custom element tag names do not match: ` + + `(${tagname} !== ${class_.is})`); + } + } + else { + Object.defineProperty(class_, 'is', { value: tagname }); + } + } + // Throws if tag name is missing or invalid. + window.customElements.define(class_.is, class_); + }; +} +function createProperty(proto, name, options) { + if (!proto.constructor.hasOwnProperty('properties')) { + Object.defineProperty(proto.constructor, 'properties', { value: {} }); + } + proto.constructor.properties[name] = Object.assign({}, proto.constructor.properties[name], options); +} +/** + * A TypeScript property decorator factory that defines this as a Polymer + * property. + * + * This function must be invoked to return a decorator. + * + * @ExportDecoratedItems + */ +function property(options) { + return (proto, propName) => { + createProperty(proto, propName, options); + }; +} +/** + * A TypeScript property decorator factory that causes the decorated method to + * be called when a property changes. + * + * This function must be invoked to return a decorator. + * + * @ExportDecoratedItems + */ +function observe(...targets) { + return (proto, propName) => { + if (!proto.constructor.hasOwnProperty('observers')) { + Object.defineProperty(proto.constructor, 'observers', { value: [] }); + } + proto.constructor.observers.push(`${propName}(${targets.join(',')})`); + }; +} +/** + * A TypeScript accessor decorator factory that causes the decorated getter to + * be called when a set of dependencies change. The arguments of this decorator + * should be paths of the data dependencies as described + * [here](https://www.polymer-project.org/2.0/docs/devguide/observers#define-a-computed-property) + * The decorated getter should not have an associated setter. + * + * This function must be invoked to return a decorator. + * + * @ExportDecoratedItems + */ +function computed(firstTarget, ...moreTargets) { + return (proto, propName, descriptor) => { + const fnName = `__compute${propName}`; + Object.defineProperty(proto, fnName, { value: descriptor.get }); + descriptor.get = undefined; + const targets = [firstTarget, ...moreTargets].join(','); + createProperty(proto, propName, { computed: `${fnName}(${targets})` }); + }; +} +/** + * A TypeScript property decorator factory that converts a class property into + * a getter that executes a querySelector on the element's shadow root. + * + * By annotating the property with the correct type, elements can have + * type-checked access to internal elements. + * + * This function must be invoked to return a decorator. + */ +const query = _query((target, selector) => target.querySelector(selector)); +/** + * A TypeScript property decorator factory that converts a class property into + * a getter that executes a querySelectorAll on the element's shadow root. + * + * By annotating the property with the correct type, elements can have + * type-checked access to internal elements. The type should be NodeList + * with the correct type argument. + * + * This function must be invoked to return a decorator. + */ +const queryAll = _query((target, selector) => target.querySelectorAll(selector)); +/** + * Creates a decorator function that accepts a selector, and replaces a + * property with a getter than executes the selector with the given queryFn + * + * @param queryFn A function that executes a query with a selector + */ +function _query(queryFn) { + return (selector) => (proto, propName) => { + Object.defineProperty(proto, propName, { + get() { + return queryFn(this.shadowRoot, selector); + }, + enumerable: true, + configurable: true, + }); + }; +} +/** + * A TypeScript property decorator factory that causes the decorated method to + * be called when a imperative event is fired on the targeted element. `target` + * can be either a single element by id or element. + * + * You must apply the supplied DeclarativeEventListeners mixin to your element + * class for this decorator to function. + * + * https://www.polymer-project.org/2.0/docs/devguide/events#imperative-listeners + * + * @param eventName A string representing the event type to listen for + * @param target A single element by id or EventTarget to target + * + * @ExportDecoratedItems + */ +function listen(eventName, target) { + return (proto, methodName) => { + if (!proto.constructor._addDeclarativeEventListener) { + throw new Error(`Cannot add listener for ${eventName} because ` + + `DeclarativeEventListeners mixin was not applied to element.`); + } + proto.constructor._addDeclarativeEventListener(target, eventName, proto[methodName]); + }; +} +//# sourceMappingURL=decorators.js.map + +/***/ }), + +/***/ "./node_modules/@polymer/font-roboto/roboto.js": +/*!*****************************************************!*\ + !*** ./node_modules/@polymer/font-roboto/roboto.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + // ensure this file can only be parsed as a module. + +// Give the user the choice to opt out of font loading. +if (false) {} + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-a11y-announcer/iron-a11y-announcer.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@polymer/iron-a11y-announcer/iron-a11y-announcer.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronA11yAnnouncer: () => (/* binding */ IronA11yAnnouncer) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +/** +`iron-a11y-announcer` is a singleton element that is intended to add a11y +to features that require on-demand announcement from screen readers. In +order to make use of the announcer, it is best to request its availability +in the announcing element. + +Example: + + Polymer({ + + is: 'x-chatty', + + attached: function() { + // This will create the singleton element if it has not + // been created yet: + Polymer.IronA11yAnnouncer.requestAvailability(); + } + }); + +After the `iron-a11y-announcer` has been made available, elements can +make announces by firing bubbling `iron-announce` events. + +Example: + + this.fire('iron-announce', { + text: 'This is an announcement!' + }, { bubbles: true }); + +Note: announcements are only audible if you have a screen reader enabled. + +@demo demo/index.html +*/ +const IronA11yAnnouncer = (0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__.html)` + +
[[_text]]
+`, + + is: 'iron-a11y-announcer', + + properties: { + + /** + * The value of mode is used to set the `aria-live` attribute + * for the element that will be announced. Valid values are: `off`, + * `polite` and `assertive`. + */ + mode: {type: String, value: 'polite'}, + + /** + * The timeout on refreshing the announcement text. Larger timeouts are + * needed for certain screen readers to re-announce the same message. + */ + timeout: {type: Number, value: 150}, + + _text: {type: String, value: ''}, + }, + + /** @override */ + created: function() { + if (!IronA11yAnnouncer.instance) { + IronA11yAnnouncer.instance = this; + } + + document.addEventListener('iron-announce', this._onIronAnnounce.bind(this)); + }, + + /** + * Cause a text string to be announced by screen readers. + * + * @param {string} text The text that should be announced. + */ + announce: function(text) { + this._text = ''; + this.async(function() { + this._text = text; + }, this.timeout); + }, + + _onIronAnnounce: function(event) { + if (event.detail && event.detail.text) { + this.announce(event.detail.text); + } + } +}); + +IronA11yAnnouncer.instance = null; + +IronA11yAnnouncer.requestAvailability = function() { + if (!IronA11yAnnouncer.instance) { + IronA11yAnnouncer.instance = document.createElement('iron-a11y-announcer'); + } + + if (document.body) { + document.body.appendChild(IronA11yAnnouncer.instance); + } else { + document.addEventListener('load', function() { + document.body.appendChild(IronA11yAnnouncer.instance); + }); + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronA11yKeysBehavior: () => (/* binding */ IronA11yKeysBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +/** + * Chrome uses an older version of DOM Level 3 Keyboard Events + * + * Most keys are labeled as text, but some are Unicode codepoints. + * Values taken from: + * http://www.w3.org/TR/2007/WD-DOM-Level-3-Events-20071221/keyset.html#KeySet-Set + */ +var KEY_IDENTIFIER = { + 'U+0008': 'backspace', + 'U+0009': 'tab', + 'U+001B': 'esc', + 'U+0020': 'space', + 'U+007F': 'del' +}; + +/** + * Special table for KeyboardEvent.keyCode. + * KeyboardEvent.keyIdentifier is better, and KeyBoardEvent.key is even better + * than that. + * + * Values from: + * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.keyCode#Value_of_keyCode + */ +var KEY_CODE = { + 8: 'backspace', + 9: 'tab', + 13: 'enter', + 27: 'esc', + 33: 'pageup', + 34: 'pagedown', + 35: 'end', + 36: 'home', + 32: 'space', + 37: 'left', + 38: 'up', + 39: 'right', + 40: 'down', + 46: 'del', + 106: '*' +}; + +/** + * MODIFIER_KEYS maps the short name for modifier keys used in a key + * combo string to the property name that references those same keys + * in a KeyboardEvent instance. + */ +var MODIFIER_KEYS = { + 'shift': 'shiftKey', + 'ctrl': 'ctrlKey', + 'alt': 'altKey', + 'meta': 'metaKey' +}; + +/** + * KeyboardEvent.key is mostly represented by printable character made by + * the keyboard, with unprintable keys labeled nicely. + * + * However, on OS X, Alt+char can make a Unicode character that follows an + * Apple-specific mapping. In this case, we fall back to .keyCode. + */ +var KEY_CHAR = /[a-z0-9*]/; + +/** + * Matches a keyIdentifier string. + */ +var IDENT_CHAR = /U\+/; + +/** + * Matches arrow keys in Gecko 27.0+ + */ +var ARROW_KEY = /^arrow/; + +/** + * Matches space keys everywhere (notably including IE10's exceptional name + * `spacebar`). + */ +var SPACE_KEY = /^space(bar)?/; + +/** + * Matches ESC key. + * + * Value from: http://w3c.github.io/uievents-key/#key-Escape + */ +var ESC_KEY = /^escape$/; + +/** + * Transforms the key. + * @param {string} key The KeyBoardEvent.key + * @param {Boolean} [noSpecialChars] Limits the transformation to + * alpha-numeric characters. + */ +function transformKey(key, noSpecialChars) { + var validKey = ''; + if (key) { + var lKey = key.toLowerCase(); + if (lKey === ' ' || SPACE_KEY.test(lKey)) { + validKey = 'space'; + } else if (ESC_KEY.test(lKey)) { + validKey = 'esc'; + } else if (lKey.length == 1) { + if (!noSpecialChars || KEY_CHAR.test(lKey)) { + validKey = lKey; + } + } else if (ARROW_KEY.test(lKey)) { + validKey = lKey.replace('arrow', ''); + } else if (lKey == 'multiply') { + // numpad '*' can map to Multiply on IE/Windows + validKey = '*'; + } else { + validKey = lKey; + } + } + return validKey; +} + +function transformKeyIdentifier(keyIdent) { + var validKey = ''; + if (keyIdent) { + if (keyIdent in KEY_IDENTIFIER) { + validKey = KEY_IDENTIFIER[keyIdent]; + } else if (IDENT_CHAR.test(keyIdent)) { + keyIdent = parseInt(keyIdent.replace('U+', '0x'), 16); + validKey = String.fromCharCode(keyIdent).toLowerCase(); + } else { + validKey = keyIdent.toLowerCase(); + } + } + return validKey; +} + +function transformKeyCode(keyCode) { + var validKey = ''; + if (Number(keyCode)) { + if (keyCode >= 65 && keyCode <= 90) { + // ascii a-z + // lowercase is 32 offset from uppercase + validKey = String.fromCharCode(32 + keyCode); + } else if (keyCode >= 112 && keyCode <= 123) { + // function keys f1-f12 + validKey = 'f' + (keyCode - 112 + 1); + } else if (keyCode >= 48 && keyCode <= 57) { + // top 0-9 keys + validKey = String(keyCode - 48); + } else if (keyCode >= 96 && keyCode <= 105) { + // num pad 0-9 + validKey = String(keyCode - 96); + } else { + validKey = KEY_CODE[keyCode]; + } + } + return validKey; +} + +/** + * Calculates the normalized key for a KeyboardEvent. + * @param {KeyboardEvent} keyEvent + * @param {Boolean} [noSpecialChars] Set to true to limit keyEvent.key + * transformation to alpha-numeric chars. This is useful with key + * combinations like shift + 2, which on FF for MacOS produces + * keyEvent.key = @ + * To get 2 returned, set noSpecialChars = true + * To get @ returned, set noSpecialChars = false + */ +function normalizedKeyForEvent(keyEvent, noSpecialChars) { + // Fall back from .key, to .detail.key for artifical keyboard events, + // and then to deprecated .keyIdentifier and .keyCode. + if (keyEvent.key) { + return transformKey(keyEvent.key, noSpecialChars); + } + if (keyEvent.detail && keyEvent.detail.key) { + return transformKey(keyEvent.detail.key, noSpecialChars); + } + return transformKeyIdentifier(keyEvent.keyIdentifier) || + transformKeyCode(keyEvent.keyCode) || ''; +} + +function keyComboMatchesEvent(keyCombo, event) { + // For combos with modifiers we support only alpha-numeric keys + var keyEvent = normalizedKeyForEvent(event, keyCombo.hasModifiers); + return keyEvent === keyCombo.key && + (!keyCombo.hasModifiers || + (!!event.shiftKey === !!keyCombo.shiftKey && + !!event.ctrlKey === !!keyCombo.ctrlKey && + !!event.altKey === !!keyCombo.altKey && + !!event.metaKey === !!keyCombo.metaKey)); +} + +function parseKeyComboString(keyComboString) { + if (keyComboString.length === 1) { + return {combo: keyComboString, key: keyComboString, event: 'keydown'}; + } + return keyComboString.split('+') + .reduce(function(parsedKeyCombo, keyComboPart) { + var eventParts = keyComboPart.split(':'); + var keyName = eventParts[0]; + var event = eventParts[1]; + + if (keyName in MODIFIER_KEYS) { + parsedKeyCombo[MODIFIER_KEYS[keyName]] = true; + parsedKeyCombo.hasModifiers = true; + } else { + parsedKeyCombo.key = keyName; + parsedKeyCombo.event = event || 'keydown'; + } + + return parsedKeyCombo; + }, {combo: keyComboString.split(':').shift()}); +} + +function parseEventString(eventString) { + return eventString.trim().split(' ').map(function(keyComboString) { + return parseKeyComboString(keyComboString); + }); +} + +/** + * `Polymer.IronA11yKeysBehavior` provides a normalized interface for processing + * keyboard commands that pertain to [WAI-ARIA best + * practices](http://www.w3.org/TR/wai-aria-practices/#kbd_general_binding). The + * element takes care of browser differences with respect to Keyboard events and + * uses an expressive syntax to filter key presses. + * + * Use the `keyBindings` prototype property to express what combination of keys + * will trigger the callback. A key binding has the format + * `"KEY+MODIFIER:EVENT": "callback"` (`"KEY": "callback"` or + * `"KEY:EVENT": "callback"` are valid as well). Some examples: + * + * keyBindings: { + * 'space': '_onKeydown', // same as 'space:keydown' + * 'shift+tab': '_onKeydown', + * 'enter:keypress': '_onKeypress', + * 'esc:keyup': '_onKeyup' + * } + * + * The callback will receive with an event containing the following information + * in `event.detail`: + * + * _onKeydown: function(event) { + * console.log(event.detail.combo); // KEY+MODIFIER, e.g. "shift+tab" + * console.log(event.detail.key); // KEY only, e.g. "tab" + * console.log(event.detail.event); // EVENT, e.g. "keydown" + * console.log(event.detail.keyboardEvent); // the original KeyboardEvent + * } + * + * Use the `keyEventTarget` attribute to set up event handlers on a specific + * node. + * + * See the [demo source + * code](https://github.com/PolymerElements/iron-a11y-keys-behavior/blob/master/demo/x-key-aware.html) + * for an example. + * + * @demo demo/index.html + * @polymerBehavior + */ +const IronA11yKeysBehavior = { + properties: { + /** + * The EventTarget that will be firing relevant KeyboardEvents. Set it to + * `null` to disable the listeners. + * @type {?EventTarget} + */ + keyEventTarget: { + type: Object, + value: function() { + return this; + } + }, + + /** + * If true, this property will cause the implementing element to + * automatically stop propagation on any handled KeyboardEvents. + */ + stopKeyboardEventPropagation: {type: Boolean, value: false}, + + _boundKeyHandlers: { + type: Array, + value: function() { + return []; + } + }, + + // We use this due to a limitation in IE10 where instances will have + // own properties of everything on the "prototype". + _imperativeKeyBindings: { + type: Object, + value: function() { + return {}; + } + } + }, + + observers: ['_resetKeyEventListeners(keyEventTarget, _boundKeyHandlers)'], + + + /** + * To be used to express what combination of keys will trigger the relative + * callback. e.g. `keyBindings: { 'esc': '_onEscPressed'}` + * @type {!Object} + */ + keyBindings: {}, + + registered: function() { + this._prepKeyBindings(); + }, + + attached: function() { + this._listenKeyEventListeners(); + }, + + detached: function() { + this._unlistenKeyEventListeners(); + }, + + /** + * Can be used to imperatively add a key binding to the implementing + * element. This is the imperative equivalent of declaring a keybinding + * in the `keyBindings` prototype property. + * + * @param {string} eventString + * @param {string} handlerName + */ + addOwnKeyBinding: function(eventString, handlerName) { + this._imperativeKeyBindings[eventString] = handlerName; + this._prepKeyBindings(); + this._resetKeyEventListeners(); + }, + + /** + * When called, will remove all imperatively-added key bindings. + */ + removeOwnKeyBindings: function() { + this._imperativeKeyBindings = {}; + this._prepKeyBindings(); + this._resetKeyEventListeners(); + }, + + /** + * Returns true if a keyboard event matches `eventString`. + * + * @param {KeyboardEvent} event + * @param {string} eventString + * @return {boolean} + */ + keyboardEventMatchesKeys: function(event, eventString) { + var keyCombos = parseEventString(eventString); + for (var i = 0; i < keyCombos.length; ++i) { + if (keyComboMatchesEvent(keyCombos[i], event)) { + return true; + } + } + return false; + }, + + _collectKeyBindings: function() { + var keyBindings = this.behaviors.map(function(behavior) { + return behavior.keyBindings; + }); + + if (keyBindings.indexOf(this.keyBindings) === -1) { + keyBindings.push(this.keyBindings); + } + + return keyBindings; + }, + + _prepKeyBindings: function() { + this._keyBindings = {}; + + this._collectKeyBindings().forEach(function(keyBindings) { + for (var eventString in keyBindings) { + this._addKeyBinding(eventString, keyBindings[eventString]); + } + }, this); + + for (var eventString in this._imperativeKeyBindings) { + this._addKeyBinding( + eventString, this._imperativeKeyBindings[eventString]); + } + + // Give precedence to combos with modifiers to be checked first. + for (var eventName in this._keyBindings) { + this._keyBindings[eventName].sort(function(kb1, kb2) { + var b1 = kb1[0].hasModifiers; + var b2 = kb2[0].hasModifiers; + return (b1 === b2) ? 0 : b1 ? -1 : 1; + }) + } + }, + + _addKeyBinding: function(eventString, handlerName) { + parseEventString(eventString).forEach(function(keyCombo) { + this._keyBindings[keyCombo.event] = + this._keyBindings[keyCombo.event] || []; + + this._keyBindings[keyCombo.event].push([keyCombo, handlerName]); + }, this); + }, + + _resetKeyEventListeners: function() { + this._unlistenKeyEventListeners(); + + if (this.isAttached) { + this._listenKeyEventListeners(); + } + }, + + _listenKeyEventListeners: function() { + if (!this.keyEventTarget) { + return; + } + Object.keys(this._keyBindings).forEach(function(eventName) { + var keyBindings = this._keyBindings[eventName]; + var boundKeyHandler = this._onKeyBindingEvent.bind(this, keyBindings); + + this._boundKeyHandlers.push( + [this.keyEventTarget, eventName, boundKeyHandler]); + + this.keyEventTarget.addEventListener(eventName, boundKeyHandler); + }, this); + }, + + _unlistenKeyEventListeners: function() { + var keyHandlerTuple; + var keyEventTarget; + var eventName; + var boundKeyHandler; + + while (this._boundKeyHandlers.length) { + // My kingdom for block-scope binding and destructuring assignment.. + keyHandlerTuple = this._boundKeyHandlers.pop(); + keyEventTarget = keyHandlerTuple[0]; + eventName = keyHandlerTuple[1]; + boundKeyHandler = keyHandlerTuple[2]; + + keyEventTarget.removeEventListener(eventName, boundKeyHandler); + } + }, + + _onKeyBindingEvent: function(keyBindings, event) { + if (this.stopKeyboardEventPropagation) { + event.stopPropagation(); + } + + // if event has been already prevented, don't do anything + if (event.defaultPrevented) { + return; + } + + for (var i = 0; i < keyBindings.length; i++) { + var keyCombo = keyBindings[i][0]; + var handlerName = keyBindings[i][1]; + if (keyComboMatchesEvent(keyCombo, event)) { + this._triggerKeyHandler(keyCombo, handlerName, event); + // exit the loop if eventDefault was prevented + if (event.defaultPrevented) { + return; + } + } + } + }, + + _triggerKeyHandler: function(keyCombo, handlerName, keyboardEvent) { + var detail = Object.create(keyCombo); + detail.keyboardEvent = keyboardEvent; + var event = + new CustomEvent(keyCombo.event, {detail: detail, cancelable: true}); + this[handlerName].call(this, event); + if (event.defaultPrevented) { + keyboardEvent.preventDefault(); + } + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-ajax/iron-ajax.js": +/*!******************************************************!*\ + !*** ./node_modules/@polymer/iron-ajax/iron-ajax.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _iron_request_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./iron-request.js */ "./node_modules/@polymer/iron-ajax/iron-request.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +/** +The `iron-ajax` element exposes network request functionality. + + + +With `auto` set to `true`, the element performs a request whenever +its `url`, `params` or `body` properties are changed. Automatically generated +requests will be debounced in the case that multiple attributes are changed +sequentially. + +Note: The `params` attribute must be double quoted JSON. + +You can trigger a request explicitly by calling `generateRequest` on the +element. + +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + + is: 'iron-ajax', + + /** + * Fired before a request is sent. + * + * @event iron-ajax-presend + */ + + /** + * Fired when a request is sent. + * + * @event request + */ + + /** + * Fired when a request is sent. + * + * @event iron-ajax-request + */ + + /** + * Fired when a response is received. + * + * @event response + */ + + /** + * Fired when a response is received. + * + * @event iron-ajax-response + */ + + /** + * Fired when an error is received. + * + * @event error + */ + + /** + * Fired when an error is received. + * + * @event iron-ajax-error + */ + + hostAttributes: {hidden: true}, + + properties: { + /** + * The URL target of the request. + */ + url: {type: String}, + + /** + * An object that contains query parameters to be appended to the + * specified `url` when generating a request. If you wish to set the body + * content when making a POST request, you should use the `body` property + * instead. + */ + params: { + type: Object, + value: function() { + return {}; + } + }, + + /** + * The HTTP method to use such as 'GET', 'POST', 'PUT', or 'DELETE'. + * Default is 'GET'. + */ + method: {type: String, value: 'GET'}, + + /** + * HTTP request headers to send. + * + * Example: + * + * + * + * Note: setting a `Content-Type` header here will override the value + * specified by the `contentType` property of this element. + */ + headers: { + type: Object, + value: function() { + return {}; + } + }, + + /** + * Content type to use when sending data. If the `contentType` property + * is set and a `Content-Type` header is specified in the `headers` + * property, the `headers` property value will take precedence. + * + * Varies the handling of the `body` param. + */ + contentType: {type: String, value: null}, + + /** + * Body content to send with the request, typically used with "POST" + * requests. + * + * If body is a string it will be sent unmodified. + * + * If Content-Type is set to a value listed below, then + * the body will be encoded accordingly. + * + * * `content-type="application/json"` + * * body is encoded like `{"foo":"bar baz","x":1}` + * * `content-type="application/x-www-form-urlencoded"` + * * body is encoded like `foo=bar+baz&x=1` + * + * Otherwise the body will be passed to the browser unmodified, and it + * will handle any encoding (e.g. for FormData, Blob, ArrayBuffer). + * + * @type + * (ArrayBuffer|ArrayBufferView|Blob|Document|FormData|null|string|undefined|Object) + */ + body: {type: Object, value: null}, + + /** + * Toggle whether XHR is synchronous or asynchronous. Don't change this + * to true unless You Know What You Are Doing™. + */ + sync: {type: Boolean, value: false}, + + /** + * Specifies what data to store in the `response` property, and + * to deliver as `event.detail.response` in `response` events. + * + * One of: + * + * `text`: uses `XHR.responseText`. + * + * `xml`: uses `XHR.responseXML`. + * + * `json`: uses `XHR.responseText` parsed as JSON. + * + * `arraybuffer`: uses `XHR.response`. + * + * `blob`: uses `XHR.response`. + * + * `document`: uses `XHR.response`. + */ + handleAs: {type: String, value: 'json'}, + + /** + * Set the withCredentials flag on the request. + */ + withCredentials: {type: Boolean, value: false}, + + /** + * Set the timeout flag on the request. + */ + timeout: {type: Number, value: 0}, + + /** + * If true, automatically performs an Ajax request when either `url` or + * `params` changes. + */ + auto: {type: Boolean, value: false}, + + /** + * If true, error messages will automatically be logged to the console. + */ + verbose: {type: Boolean, value: false}, + + /** + * The most recent request made by this iron-ajax element. + * + * @type {Object|undefined} + */ + lastRequest: {type: Object, notify: true, readOnly: true}, + + /** + * The `progress` property of this element's `lastRequest`. + * + * @type {Object|undefined} + */ + lastProgress: {type: Object, notify: true, readOnly: true}, + + /** + * True while lastRequest is in flight. + */ + loading: {type: Boolean, notify: true, readOnly: true}, + + /** + * lastRequest's response. + * + * Note that lastResponse and lastError are set when lastRequest finishes, + * so if loading is true, then lastResponse and lastError will correspond + * to the result of the previous request. + * + * The type of the response is determined by the value of `handleAs` at + * the time that the request was generated. + * + * @type {Object} + */ + lastResponse: {type: Object, notify: true, readOnly: true}, + + /** + * lastRequest's error, if any. + * + * @type {Object} + */ + lastError: {type: Object, notify: true, readOnly: true}, + + /** + * An Array of all in-flight requests originating from this iron-ajax + * element. + */ + activeRequests: { + type: Array, + notify: true, + readOnly: true, + value: function() { + return []; + } + }, + + /** + * Length of time in milliseconds to debounce multiple automatically + * generated requests. + */ + debounceDuration: {type: Number, value: 0, notify: true}, + + /** + * Prefix to be stripped from a JSON response before parsing it. + * + * In order to prevent an attack using CSRF with Array responses + * (http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx/) + * many backends will mitigate this by prefixing all JSON response bodies + * with a string that would be nonsensical to a JavaScript parser. + * + */ + jsonPrefix: {type: String, value: ''}, + + /** + * By default, iron-ajax's events do not bubble. Setting this attribute will + * cause its request and response events as well as its iron-ajax-request, + * -response, and -error events to bubble to the window object. The vanilla + * error event never bubbles when using shadow dom even if this.bubbles is + * true because a scoped flag is not passed with it (first link) and because + * the shadow dom spec did not used to allow certain events, including + * events named error, to leak outside of shadow trees (second link). + * https://www.w3.org/TR/shadow-dom/#scoped-flag + * https://www.w3.org/TR/2015/WD-shadow-dom-20151215/#events-that-are-not-leaked-into-ancestor-trees + */ + bubbles: {type: Boolean, value: false}, + + /** + * Changes the [`completes`](iron-request#property-completes) promise chain + * from `generateRequest` to reject with an object + * containing the original request, as well an error message. + * If false (default), the promise rejects with an error message only. + */ + rejectWithRequest: {type: Boolean, value: false}, + + _boundHandleResponse: { + type: Function, + value: function() { + return this._handleResponse.bind(this); + } + } + }, + + observers: + ['_requestOptionsChanged(url, method, params.*, headers, contentType, ' + + 'body, sync, handleAs, jsonPrefix, withCredentials, timeout, auto)'], + + created: function() { + this._boundOnProgressChanged = this._onProgressChanged.bind(this); + }, + + /** + * The query string that should be appended to the `url`, serialized from + * the current value of `params`. + * + * @return {string} + */ + get queryString() { + var queryParts = []; + var param; + var value; + + for (param in this.params) { + value = this.params[param]; + param = window.encodeURIComponent(param); + + if (Array.isArray(value)) { + for (var i = 0; i < value.length; i++) { + queryParts.push(param + '=' + window.encodeURIComponent(value[i])); + } + } else if (value !== null) { + queryParts.push(param + '=' + window.encodeURIComponent(value)); + } else { + queryParts.push(param); + } + } + + return queryParts.join('&'); + }, + + /** + * The `url` with query string (if `params` are specified), suitable for + * providing to an `iron-request` instance. + * + * @return {string} + */ + get requestUrl() { + var queryString = this.queryString; + var url = this.url || ''; + + if (queryString) { + var bindingChar = url.indexOf('?') >= 0 ? '&' : '?'; + return url + bindingChar + queryString; + } + + return url; + }, + + /** + * An object that maps header names to header values, first applying the + * the value of `Content-Type` and then overlaying the headers specified + * in the `headers` property. + * + * @return {Object} + */ + get requestHeaders() { + var headers = {}; + var contentType = this.contentType; + if (contentType == null && (typeof this.body === 'string')) { + contentType = 'application/x-www-form-urlencoded'; + } + if (contentType) { + headers['content-type'] = contentType; + } + var header; + + if (typeof this.headers === 'object') { + for (header in this.headers) { + headers[header] = this.headers[header].toString(); + } + } + + return headers; + }, + + _onProgressChanged: function(event) { + this._setLastProgress(event.detail.value); + }, + + /** + * Request options suitable for generating an `iron-request` instance based + * on the current state of the `iron-ajax` instance's properties. + * + * @return {{ + * url: string, + * method: (string|undefined), + * async: (boolean|undefined), + * body: + * (ArrayBuffer|ArrayBufferView|Blob|Document|FormData|null|string|undefined|Object), + * headers: (Object|undefined), + * handleAs: (string|undefined), + * jsonPrefix: (string|undefined), + * withCredentials: (boolean|undefined)}} + */ + toRequestOptions: function() { + return { + url: this.requestUrl || '', + method: this.method, + headers: this.requestHeaders, + body: this.body, + async: !this.sync, + handleAs: this.handleAs, + jsonPrefix: this.jsonPrefix, + withCredentials: this.withCredentials, + timeout: this.timeout, + rejectWithRequest: this.rejectWithRequest, + }; + }, + + /** + * Performs an AJAX request to the specified URL. + * + * @return {!IronRequestElement} + */ + generateRequest: function() { + var request = /** @type {!IronRequestElement} */ ( + document.createElement('iron-request')); + var requestOptions = this.toRequestOptions(); + + this.push('activeRequests', request); + + request.completes.then(this._boundHandleResponse) + .catch(this._handleError.bind(this, request)) + .then(this._discardRequest.bind(this, request)); + + var evt = this.fire( + 'iron-ajax-presend', + {request: request, options: requestOptions}, + {bubbles: this.bubbles, cancelable: true}); + + if (evt.defaultPrevented) { + request.abort(); + request.rejectCompletes(request); + return request; + } + + if (this.lastRequest) { + this.lastRequest.removeEventListener( + 'iron-request-progress-changed', this._boundOnProgressChanged); + } + + request.addEventListener( + 'iron-request-progress-changed', this._boundOnProgressChanged); + + request.send(requestOptions); + this._setLastProgress(null); + this._setLastRequest(request); + this._setLoading(true); + + this.fire( + 'request', + {request: request, options: requestOptions}, + {bubbles: this.bubbles, composed: true}); + + this.fire( + 'iron-ajax-request', + {request: request, options: requestOptions}, + {bubbles: this.bubbles, composed: true}); + + return request; + }, + + _handleResponse: function(request) { + if (request === this.lastRequest) { + this._setLastResponse(request.response); + this._setLastError(null); + this._setLoading(false); + } + this.fire('response', request, {bubbles: this.bubbles, composed: true}); + this.fire( + 'iron-ajax-response', request, {bubbles: this.bubbles, composed: true}); + }, + + _handleError: function(request, error) { + if (this.verbose) { + _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_2__.Base._error(error); + } + + if (request === this.lastRequest) { + this._setLastError({ + request: request, + error: error, + status: request.xhr.status, + statusText: request.xhr.statusText, + response: request.xhr.response + }); + this._setLastResponse(null); + this._setLoading(false); + } + + // Tests fail if this goes after the normal this.fire('error', ...) + this.fire( + 'iron-ajax-error', + {request: request, error: error}, + {bubbles: this.bubbles, composed: true}); + + this.fire( + 'error', + {request: request, error: error}, + {bubbles: this.bubbles, composed: true}); + }, + + _discardRequest: function(request) { + var requestIndex = this.activeRequests.indexOf(request); + + if (requestIndex > -1) { + this.splice('activeRequests', requestIndex, 1); + } + }, + + _requestOptionsChanged: function() { + this.debounce('generate-request', function() { + if (this.url == null) { + return; + } + + if (this.auto) { + this.generateRequest(); + } + }, this.debounceDuration); + }, + +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-ajax/iron-request.js": +/*!*********************************************************!*\ + !*** ./node_modules/@polymer/iron-ajax/iron-request.js ***! + \*********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + +/* +iron-request can be used to perform XMLHttpRequests. + + + ... + this.$.xhr.send({url: url, body: params}); +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_0__.Polymer)({ + is: 'iron-request', + + hostAttributes: {hidden: true}, + + properties: { + + /** + * A reference to the XMLHttpRequest instance used to generate the + * network request. + * + * @type {XMLHttpRequest} + */ + xhr: { + type: Object, + notify: true, + readOnly: true, + value: function() { + return new XMLHttpRequest(); + } + }, + + /** + * A reference to the parsed response body, if the `xhr` has completely + * resolved. + * + * @type {*} + * @default null + */ + response: { + type: Object, + notify: true, + readOnly: true, + value: function() { + return null; + } + }, + + /** + * A reference to the status code, if the `xhr` has completely resolved. + */ + status: {type: Number, notify: true, readOnly: true, value: 0}, + + /** + * A reference to the status text, if the `xhr` has completely resolved. + */ + statusText: {type: String, notify: true, readOnly: true, value: ''}, + + /** + * A promise that resolves when the `xhr` response comes back, or rejects + * if there is an error before the `xhr` completes. + * The resolve callback is called with the original request as an argument. + * By default, the reject callback is called with an `Error` as an argument. + * If `rejectWithRequest` is true, the reject callback is called with an + * object with two keys: `request`, the original request, and `error`, the + * error object. + * + * @type {Promise} + */ + completes: { + type: Object, + readOnly: true, + notify: true, + value: function() { + return new Promise(function(resolve, reject) { + this.resolveCompletes = resolve; + this.rejectCompletes = reject; + }.bind(this)); + } + }, + + /** + * An object that contains progress information emitted by the XHR if + * available. + * + * @default {} + */ + progress: { + type: Object, + notify: true, + readOnly: true, + value: function() { + return {}; + } + }, + + /** + * Aborted will be true if an abort of the request is attempted. + */ + aborted: { + type: Boolean, + notify: true, + readOnly: true, + value: false, + }, + + /** + * Errored will be true if the browser fired an error event from the + * XHR object (mainly network errors). + */ + errored: {type: Boolean, notify: true, readOnly: true, value: false}, + + /** + * TimedOut will be true if the XHR threw a timeout event. + */ + timedOut: {type: Boolean, notify: true, readOnly: true, value: false} + }, + + /** + * Succeeded is true if the request succeeded. The request succeeded if it + * loaded without error, wasn't aborted, and the status code is ≥ 200, and + * < 300, or if the status code is 0. + * + * The status code 0 is accepted as a success because some schemes - e.g. + * file:// - don't provide status codes. + * + * @return {boolean} + */ + get succeeded() { + if (this.errored || this.aborted || this.timedOut) { + return false; + } + var status = this.xhr.status || 0; + + // Note: if we are using the file:// protocol, the status code will be 0 + // for all outcomes (successful or otherwise). + return status === 0 || (status >= 200 && status < 300); + }, + + /** + * Sends an HTTP request to the server and returns a promise (see the + * `completes` property for details). + * + * The handling of the `body` parameter will vary based on the Content-Type + * header. See the docs for iron-ajax's `body` property for details. + * + * @param {{ + * url: string, + * method: (string|undefined), + * async: (boolean|undefined), + * body: + * (ArrayBuffer|ArrayBufferView|Blob|Document|FormData|null|string|undefined|Object), + * headers: (Object|undefined), + * handleAs: (string|undefined), + * jsonPrefix: (string|undefined), + * withCredentials: (boolean|undefined), + * timeout: (number|undefined), + * rejectWithRequest: (boolean|undefined)}} options - + * - url The url to which the request is sent. + * - method The HTTP method to use, default is GET. + * - async By default, all requests are sent asynchronously. To send + * synchronous requests, set to false. + * - body The content for the request body for POST method. + * - headers HTTP request headers. + * - handleAs The response type. Default is 'text'. + * - withCredentials Whether or not to send credentials on the request. + * Default is false. + * - timeout - Timeout for request, in milliseconds. + * - rejectWithRequest Set to true to include the request object with + * promise rejections. + * @return {Promise} + */ + send: function(options) { + var xhr = this.xhr; + + if (xhr.readyState > 0) { + return null; + } + + xhr.addEventListener('progress', function(progress) { + this._setProgress({ + lengthComputable: progress.lengthComputable, + loaded: progress.loaded, + total: progress.total + }); + + // Webcomponents v1 spec does not fire *-changed events when not connected + this.fire('iron-request-progress-changed', {value: this.progress}); + }.bind(this)) + + xhr.addEventListener('error', function(error) { + this._setErrored(true); + this._updateStatus(); + var response = + options.rejectWithRequest ? {error: error, request: this} : error; + this.rejectCompletes(response); + }.bind(this)); + + xhr.addEventListener('timeout', function(error) { + this._setTimedOut(true); + this._updateStatus(); + var response = + options.rejectWithRequest ? {error: error, request: this} : error; + this.rejectCompletes(response); + }.bind(this)); + + xhr.addEventListener('abort', function() { + this._setAborted(true); + this._updateStatus(); + var error = new Error('Request aborted.'); + var response = + options.rejectWithRequest ? {error: error, request: this} : error; + this.rejectCompletes(response); + }.bind(this)); + + // Called after all of the above. + xhr.addEventListener('loadend', function() { + this._updateStatus(); + this._setResponse(this.parseResponse()); + + if (!this.succeeded) { + var error = new Error( + 'The request failed with status code: ' + this.xhr.status); + var response = + options.rejectWithRequest ? {error: error, request: this} : error; + this.rejectCompletes(response); + return; + } + + this.resolveCompletes(this); + }.bind(this)); + + this.url = options.url; + var isXHRAsync = options.async !== false; + xhr.open(options.method || 'GET', options.url, isXHRAsync); + + var acceptType = { + 'json': 'application/json', + 'text': 'text/plain', + 'html': 'text/html', + 'xml': 'application/xml', + 'arraybuffer': 'application/octet-stream' + }[options.handleAs]; + var headers = options.headers || Object.create(null); + var newHeaders = Object.create(null); + for (var key in headers) { + newHeaders[key.toLowerCase()] = headers[key]; + } + headers = newHeaders; + + if (acceptType && !headers['accept']) { + headers['accept'] = acceptType; + } + Object.keys(headers).forEach(function(requestHeader) { + if (/[A-Z]/.test(requestHeader)) { + _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_1__.Base._error('Headers must be lower case, got', requestHeader); + } + xhr.setRequestHeader(requestHeader, headers[requestHeader]); + }, this); + + if (isXHRAsync) { + xhr.timeout = options.timeout; + + var handleAs = options.handleAs; + + // If a JSON prefix is present, the responseType must be 'text' or the + // browser won’t be able to parse the response. + if (!!options.jsonPrefix || !handleAs) { + handleAs = 'text'; + } + + // In IE, `xhr.responseType` is an empty string when the response + // returns. Hence, caching it as `xhr._responseType`. + xhr.responseType = xhr._responseType = handleAs; + + // Cache the JSON prefix, if it exists. + if (!!options.jsonPrefix) { + xhr._jsonPrefix = options.jsonPrefix; + } + } + + xhr.withCredentials = !!options.withCredentials; + + + var body = this._encodeBodyObject(options.body, headers['content-type']); + + xhr.send( + /** + @type {ArrayBuffer|ArrayBufferView|Blob|Document|FormData| + null|string|undefined} + */ + (body)); + + return this.completes; + }, + + /** + * Attempts to parse the response body of the XHR. If parsing succeeds, + * the value returned will be deserialized based on the `responseType` + * set on the XHR. + * + * @return {*} The parsed response, + * or undefined if there was an empty response or parsing failed. + */ + parseResponse: function() { + var xhr = this.xhr; + var responseType = xhr.responseType || xhr._responseType; + var preferResponseText = !this.xhr.responseType; + var prefixLen = (xhr._jsonPrefix && xhr._jsonPrefix.length) || 0; + + try { + switch (responseType) { + case 'json': + // If the xhr object doesn't have a natural `xhr.responseType`, + // we can assume that the browser hasn't parsed the response for us, + // and so parsing is our responsibility. Likewise if response is + // undefined, as there's no way to encode undefined in JSON. + if (preferResponseText || xhr.response === undefined) { + // Try to emulate the JSON section of the response body section of + // the spec: https://xhr.spec.whatwg.org/#response-body + // That is to say, we try to parse as JSON, but if anything goes + // wrong return null. + try { + return JSON.parse(xhr.responseText); + } catch (_) { + console.warn('Failed to parse JSON sent from ' + xhr.responseURL); + return null; + } + } + + return xhr.response; + case 'xml': + return xhr.responseXML; + case 'blob': + case 'document': + case 'arraybuffer': + return xhr.response; + case 'text': + default: { + // If `prefixLen` is set, it implies the response should be parsed + // as JSON once the prefix of length `prefixLen` is stripped from + // it. Emulate the behavior above where null is returned on failure + // to parse. + if (prefixLen) { + try { + return JSON.parse(xhr.responseText.substring(prefixLen)); + } catch (_) { + console.warn('Failed to parse JSON sent from ' + xhr.responseURL); + return null; + } + } + return xhr.responseText; + } + } + } catch (e) { + this.rejectCompletes(new Error('Could not parse response. ' + e.message)); + } + }, + + /** + * Aborts the request. + */ + abort: function() { + this._setAborted(true); + this.xhr.abort(); + }, + + /** + * @param {*} body The given body of the request to try and encode. + * @param {?string} contentType The given content type, to infer an encoding + * from. + * @return {*} Either the encoded body as a string, if successful, + * or the unaltered body object if no encoding could be inferred. + */ + _encodeBodyObject: function(body, contentType) { + if (typeof body == 'string') { + return body; // Already encoded. + } + var bodyObj = /** @type {Object} */ (body); + switch (contentType) { + case ('application/json'): + return JSON.stringify(bodyObj); + case ('application/x-www-form-urlencoded'): + return this._wwwFormUrlEncode(bodyObj); + } + return body; + }, + + /** + * @param {Object} object The object to encode as x-www-form-urlencoded. + * @return {string} . + */ + _wwwFormUrlEncode: function(object) { + if (!object) { + return ''; + } + var pieces = []; + Object.keys(object).forEach(function(key) { + // TODO(rictic): handle array values here, in a consistent way with + // iron-ajax params. + pieces.push( + this._wwwFormUrlEncodePiece(key) + '=' + + this._wwwFormUrlEncodePiece(object[key])); + }, this); + return pieces.join('&'); + }, + + /** + * @param {*} str A key or value to encode as x-www-form-urlencoded. + * @return {string} . + */ + _wwwFormUrlEncodePiece: function(str) { + // Spec says to normalize newlines to \r\n and replace %20 spaces with +. + // jQuery does this as well, so this is likely to be widely compatible. + if (str === null || str === undefined || !str.toString) { + return ''; + } + + return encodeURIComponent(str.toString().replace(/\r?\n/g, '\r\n')) + .replace(/%20/g, '+'); + }, + + /** + * Updates the status code and status text. + */ + _updateStatus: function() { + this._setStatus(this.xhr.status); + this._setStatusText( + (this.xhr.statusText === undefined) ? '' : this.xhr.statusText); + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-autogrow-textarea/iron-autogrow-textarea.js": +/*!********************************************************************************!*\ + !*** ./node_modules/@polymer/iron-autogrow-textarea/iron-autogrow-textarea.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/iron-validatable-behavior/iron-validatable-behavior.js */ "./node_modules/@polymer/iron-validatable-behavior/iron-validatable-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + +/** +`iron-autogrow-textarea` is an element containing a textarea that grows in +height as more lines of input are entered. Unless an explicit height or the +`maxRows` property is set, it will never scroll. + +Example: + + + +### Styling + +The following custom properties and mixins are available for styling: + +Custom property | Description | Default +----------------|-------------|---------- +`--iron-autogrow-textarea` | Mixin applied to the textarea | `{}` +`--iron-autogrow-textarea-placeholder` | Mixin applied to the textarea placeholder | `{}` + +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_4__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_6__.html)` + + + + + + + +
+ +
+`, + + is: 'iron-autogrow-textarea', + behaviors: [_polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronValidatableBehavior, _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__.IronControlState], + + properties: { + /** + * Use this property instead of `bind-value` for two-way data binding. + * @type {string|number} + */ + value: {observer: '_valueChanged', type: String, notify: true}, + + /** + * This property is deprecated, and just mirrors `value`. Use `value` + * instead. + * @type {string|number} + */ + bindValue: {observer: '_bindValueChanged', type: String, notify: true}, + + /** + * The initial number of rows. + * + * @attribute rows + * @type number + * @default 1 + */ + rows: {type: Number, value: 1, observer: '_updateCached'}, + + /** + * The maximum number of rows this element can grow to until it + * scrolls. 0 means no maximum. + * + * @attribute maxRows + * @type number + * @default 0 + */ + maxRows: {type: Number, value: 0, observer: '_updateCached'}, + + /** + * Bound to the textarea's `autocomplete` attribute. + */ + autocomplete: {type: String, value: 'off'}, + + /** + * Bound to the textarea's `autofocus` attribute. + * + * @type {!boolean} + */ + autofocus: {type: Boolean, value: false}, + + /** + * Bound to the textarea's `autocapitalize` attribute. + */ + autocapitalize: {type: String, value: 'none'}, + + /** + * Bound to the textarea's `inputmode` attribute. + */ + inputmode: {type: String}, + + /** + * Bound to the textarea's `placeholder` attribute. + */ + placeholder: {type: String}, + + /** + * Bound to the textarea's `readonly` attribute. + */ + readonly: {type: String}, + + /** + * Set to true to mark the textarea as required. + */ + required: {type: Boolean}, + + /** + * The minimum length of the input value. + */ + minlength: {type: Number}, + + /** + * The maximum length of the input value. + */ + maxlength: {type: Number}, + + /** + * Bound to the textarea's `aria-label` attribute. + */ + label: {type: String} + + }, + + listeners: {'input': '_onInput'}, + + /** + * Returns the underlying textarea. + * @return {!HTMLTextAreaElement} + */ + get textarea() { + return /** @type {!HTMLTextAreaElement} */ (this.$.textarea); + }, + + /** + * Returns textarea's selection start. + * @return {number} + */ + get selectionStart() { + return this.$.textarea.selectionStart; + }, + + /** + * Returns textarea's selection end. + * @return {number} + */ + get selectionEnd() { + return this.$.textarea.selectionEnd; + }, + + /** + * Sets the textarea's selection start. + */ + set selectionStart(value) { + this.$.textarea.selectionStart = value; + }, + + /** + * Sets the textarea's selection end. + */ + set selectionEnd(value) { + this.$.textarea.selectionEnd = value; + }, + + /** @override */ + attached: function() { + /* iOS has an arbitrary left margin of 3px that isn't present + * in any other browser, and means that the paper-textarea's cursor + * overlaps the label. + * See https://github.com/PolymerElements/paper-input/issues/468. + */ + var IS_IOS = navigator.userAgent.match(/iP(?:[oa]d|hone)/) && + !navigator.userAgent.match(/OS 1[3456789]/); + if (IS_IOS) { + this.$.textarea.style.marginLeft = '-3px'; + } + }, + + /** + * Returns true if `value` is valid. The validator provided in `validator` + * will be used first, if it exists; otherwise, the `textarea`'s validity + * is used. + * @return {boolean} True if the value is valid. + */ + validate: function() { + // Use the nested input's native validity. + var valid = this.$.textarea.validity.valid; + + // Only do extra checking if the browser thought this was valid. + if (valid) { + // Empty, required input is invalid + if (this.required && this.value === '') { + valid = false; + } else if (this.hasValidator()) { + valid = _polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronValidatableBehavior.validate.call(this, this.value); + } + } + + this.invalid = !valid; + this.fire('iron-input-validate'); + return valid; + }, + + _bindValueChanged: function(bindValue) { + this.value = bindValue; + }, + + _valueChanged: function(value) { + var textarea = this.textarea; + if (!textarea) { + return; + } + + // If the bindValue changed manually, then we need to also update + // the underlying textarea's value. Otherwise this change was probably + // generated from the _onInput handler, and the two values are already + // the same. + if (textarea.value !== value) { + textarea.value = !(value || value === 0) ? '' : value; + } + + this.bindValue = value; + this.$.mirror.innerHTML = this._valueForMirror(); + + // Manually notify because we don't want to notify until after setting + // value. + this.fire('bind-value-changed', {value: this.bindValue}); + }, + + _onInput: function(event) { + var eventPath = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_5__.dom)(event).path; + this.value = eventPath ? eventPath[0].value : event.target.value; + }, + + _constrain: function(tokens) { + var _tokens; + tokens = tokens || ['']; + // Enforce the min and max heights for a multiline input to avoid + // measurement + if (this.maxRows > 0 && tokens.length > this.maxRows) { + _tokens = tokens.slice(0, this.maxRows); + } else { + _tokens = tokens.slice(0); + } + while (this.rows > 0 && _tokens.length < this.rows) { + _tokens.push(''); + } + // Use   instead   of to allow this element to be used in XHTML. + return _tokens.join('
') + ' '; + }, + + _valueForMirror: function() { + var input = this.textarea; + if (!input) { + return; + } + this.tokens = (input && input.value) ? input.value.replace(/&/gm, '&') + .replace(/"/gm, '"') + .replace(/'/gm, ''') + .replace(//gm, '>') + .split('\n') : + ['']; + return this._constrain(this.tokens); + }, + + _updateCached: function() { + this.$.mirror.innerHTML = this._constrain(this.tokens); + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-behaviors/iron-button-state.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@polymer/iron-behaviors/iron-button-state.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronButtonState: () => (/* binding */ IronButtonState), +/* harmony export */ IronButtonStateImpl: () => (/* binding */ IronButtonStateImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _iron_control_state_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js */ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + +/** + * @demo demo/index.html + * @polymerBehavior IronButtonState + */ +const IronButtonStateImpl = { + + properties: { + + /** + * If true, the user is currently holding down the button. + */ + pressed: { + type: Boolean, + readOnly: true, + value: false, + reflectToAttribute: true, + observer: '_pressedChanged' + }, + + /** + * If true, the button toggles the active state with each tap or press + * of the spacebar. + */ + toggles: {type: Boolean, value: false, reflectToAttribute: true}, + + /** + * If true, the button is a toggle and is currently in the active state. + */ + active: + {type: Boolean, value: false, notify: true, reflectToAttribute: true}, + + /** + * True if the element is currently being pressed by a "pointer," which + * is loosely defined as mouse or touch input (but specifically excluding + * keyboard input). + */ + pointerDown: {type: Boolean, readOnly: true, value: false}, + + /** + * True if the input device that caused the element to receive focus + * was a keyboard. + */ + receivedFocusFromKeyboard: {type: Boolean, readOnly: true}, + + /** + * The aria attribute to be set if the button is a toggle and in the + * active state. + */ + ariaActiveAttribute: { + type: String, + value: 'aria-pressed', + observer: '_ariaActiveAttributeChanged' + } + }, + + listeners: {down: '_downHandler', up: '_upHandler', tap: '_tapHandler'}, + + observers: + ['_focusChanged(focused)', '_activeChanged(active, ariaActiveAttribute)'], + + /** + * @type {!Object} + */ + keyBindings: { + 'enter:keydown': '_asyncClick', + 'space:keydown': '_spaceKeyDownHandler', + 'space:keyup': '_spaceKeyUpHandler', + }, + + _mouseEventRe: /^mouse/, + + _tapHandler: function() { + if (this.toggles) { + // a tap is needed to toggle the active state + this._userActivate(!this.active); + } else { + this.active = false; + } + }, + + _focusChanged: function(focused) { + this._detectKeyboardFocus(focused); + + if (!focused) { + this._setPressed(false); + } + }, + + _detectKeyboardFocus: function(focused) { + this._setReceivedFocusFromKeyboard(!this.pointerDown && focused); + }, + + // to emulate native checkbox, (de-)activations from a user interaction fire + // 'change' events + _userActivate: function(active) { + if (this.active !== active) { + this.active = active; + this.fire('change'); + } + }, + + _downHandler: function(event) { + this._setPointerDown(true); + this._setPressed(true); + this._setReceivedFocusFromKeyboard(false); + }, + + _upHandler: function() { + this._setPointerDown(false); + this._setPressed(false); + }, + + /** + * @param {!KeyboardEvent} event . + */ + _spaceKeyDownHandler: function(event) { + var keyboardEvent = event.detail.keyboardEvent; + var target = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(keyboardEvent).localTarget; + + // Ignore the event if this is coming from a focused light child, since that + // element will deal with it. + if (this.isLightDescendant(/** @type {Node} */ (target))) + return; + + keyboardEvent.preventDefault(); + keyboardEvent.stopImmediatePropagation(); + this._setPressed(true); + }, + + /** + * @param {!KeyboardEvent} event . + */ + _spaceKeyUpHandler: function(event) { + var keyboardEvent = event.detail.keyboardEvent; + var target = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(keyboardEvent).localTarget; + + // Ignore the event if this is coming from a focused light child, since that + // element will deal with it. + if (this.isLightDescendant(/** @type {Node} */ (target))) + return; + + if (this.pressed) { + this._asyncClick(); + } + this._setPressed(false); + }, + + // trigger click asynchronously, the asynchrony is useful to allow one + // event handler to unwind before triggering another event + _asyncClick: function() { + this.async(function() { + this.click(); + }, 1); + }, + + // any of these changes are considered a change to button state + + _pressedChanged: function(pressed) { + this._changedButtonState(); + }, + + _ariaActiveAttributeChanged: function(value, oldValue) { + if (oldValue && oldValue != value && this.hasAttribute(oldValue)) { + this.removeAttribute(oldValue); + } + }, + + _activeChanged: function(active, ariaActiveAttribute) { + if (this.toggles) { + this.setAttribute(this.ariaActiveAttribute, active ? 'true' : 'false'); + } else { + this.removeAttribute(this.ariaActiveAttribute); + } + this._changedButtonState(); + }, + + _controlStateChanged: function() { + if (this.disabled) { + this._setPressed(false); + } else { + this._changedButtonState(); + } + }, + + // provide hook for follow-on behaviors to react to button-state + + _changedButtonState: function() { + if (this._buttonStateChanged) { + this._buttonStateChanged(); // abstract + } + } + +}; + +/** @polymerBehavior */ +const IronButtonState = [_polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_2__.IronA11yKeysBehavior, IronButtonStateImpl]; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-behaviors/iron-control-state.js": +/*!********************************************************************!*\ + !*** ./node_modules/@polymer/iron-behaviors/iron-control-state.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronControlState: () => (/* binding */ IronControlState) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** + * @demo demo/index.html + * @polymerBehavior + */ +const IronControlState = { + + properties: { + + /** + * If true, the element currently has focus. + */ + focused: { + type: Boolean, + value: false, + notify: true, + readOnly: true, + reflectToAttribute: true + }, + + /** + * If true, the user cannot interact with this element. + */ + disabled: { + type: Boolean, + value: false, + notify: true, + observer: '_disabledChanged', + reflectToAttribute: true + }, + + /** + * Value of the `tabindex` attribute before `disabled` was activated. + * `null` means the attribute was not present. + * @type {?string|undefined} + */ + _oldTabIndex: {type: String}, + + _boundFocusBlurHandler: { + type: Function, + value: function() { + return this._focusBlurHandler.bind(this); + } + } + }, + + observers: ['_changedControlState(focused, disabled)'], + + /** + * @return {void} + */ + ready: function() { + this.addEventListener('focus', this._boundFocusBlurHandler, true); + this.addEventListener('blur', this._boundFocusBlurHandler, true); + }, + + _focusBlurHandler: function(event) { + // Polymer takes care of retargeting events. + this._setFocused(event.type === 'focus'); + return; + }, + + _disabledChanged: function(disabled, old) { + this.setAttribute('aria-disabled', disabled ? 'true' : 'false'); + this.style.pointerEvents = disabled ? 'none' : ''; + if (disabled) { + // Read the `tabindex` attribute instead of the `tabIndex` property. + // The property returns `-1` if there is no `tabindex` attribute. + // This distinction is important when restoring the value because + // leaving `-1` hides shadow root children from the tab order. + this._oldTabIndex = this.getAttribute('tabindex'); + this._setFocused(false); + this.tabIndex = -1; + this.blur(); + } else if (this._oldTabIndex !== undefined) { + if (this._oldTabIndex === null) { + this.removeAttribute('tabindex'); + } else { + this.setAttribute('tabindex', this._oldTabIndex); + } + } + }, + + _changedControlState: function() { + // _controlStateChanged is abstract, follow-on behaviors may implement it + if (this._controlStateChanged) { + this._controlStateChanged(); + } + } + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-dropdown/iron-dropdown.js": +/*!**************************************************************!*\ + !*** ./node_modules/@polymer/iron-dropdown/iron-dropdown.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js */ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/iron-overlay-behavior/iron-overlay-behavior.js */ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-behavior.js"); +/* harmony import */ var _polymer_neon_animation_neon_animation_runner_behavior_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/neon-animation/neon-animation-runner-behavior.js */ "./node_modules/@polymer/neon-animation/neon-animation-runner-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + + +/** +`` is a generalized element that is useful when you have +hidden content (`dropdown-content`) that is revealed due to some change in +state that should cause it to do so. + +Note that this is a low-level element intended to be used as part of other +composite elements that cause dropdowns to be revealed. + +Examples of elements that might be implemented using an `iron-dropdown` +include comboboxes, menubuttons, selects. The list goes on. + +The `` element exposes attributes that allow the position +of the `dropdown-content` relative to the `dropdown-trigger` to be +configured. + + +
Hello!
+
+ +In the above example, the `
` assigned to the `dropdown-content` slot will +be hidden until the dropdown element has `opened` set to true, or when the +`open` method is called on the element. + +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_5__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_7__.html)` + + +
+ +
+`, + + is: 'iron-dropdown', + + behaviors: [ + _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__.IronControlState, + _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronA11yKeysBehavior, + _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronOverlayBehavior, + _polymer_neon_animation_neon_animation_runner_behavior_js__WEBPACK_IMPORTED_MODULE_4__.NeonAnimationRunnerBehavior + ], + + properties: { + /** + * The orientation against which to align the dropdown content + * horizontally relative to the dropdown trigger. + * Overridden from `Polymer.IronFitBehavior`. + */ + horizontalAlign: {type: String, value: 'left', reflectToAttribute: true}, + + /** + * The orientation against which to align the dropdown content + * vertically relative to the dropdown trigger. + * Overridden from `Polymer.IronFitBehavior`. + */ + verticalAlign: {type: String, value: 'top', reflectToAttribute: true}, + + /** + * An animation config. If provided, this will be used to animate the + * opening of the dropdown. Pass an Array for multiple animations. + * See `neon-animation` documentation for more animation configuration + * details. + */ + openAnimationConfig: {type: Object}, + + /** + * An animation config. If provided, this will be used to animate the + * closing of the dropdown. Pass an Array for multiple animations. + * See `neon-animation` documentation for more animation configuration + * details. + */ + closeAnimationConfig: {type: Object}, + + /** + * If provided, this will be the element that will be focused when + * the dropdown opens. + */ + focusTarget: {type: Object}, + + /** + * Set to true to disable animations when opening and closing the + * dropdown. + */ + noAnimations: {type: Boolean, value: false}, + + /** + * By default, the dropdown will constrain scrolling on the page + * to itself when opened. + * Set to true in order to prevent scroll from being constrained + * to the dropdown when it opens. + * This property is a shortcut to set `scrollAction` to lock or refit. + * Prefer directly setting the `scrollAction` property. + */ + allowOutsideScroll: + {type: Boolean, value: false, observer: '_allowOutsideScrollChanged'} + }, + + listeners: {'neon-animation-finish': '_onNeonAnimationFinish'}, + + observers: [ + '_updateOverlayPosition(positionTarget, verticalAlign, horizontalAlign, verticalOffset, horizontalOffset)' + ], + + /** + * The element that is contained by the dropdown, if any. + */ + get containedElement() { + // Polymer 2.x returns slot.assignedNodes which can contain text nodes. + var nodes = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_6__.dom)(this.$.content).getDistributedNodes(); + for (var i = 0, l = nodes.length; i < l; i++) { + if (nodes[i].nodeType === Node.ELEMENT_NODE) { + return nodes[i]; + } + } + }, + + ready: function() { + // Ensure scrollAction is set. + if (!this.scrollAction) { + this.scrollAction = this.allowOutsideScroll ? 'refit' : 'lock'; + } + this._readied = true; + }, + + attached: function() { + if (!this.sizingTarget || this.sizingTarget === this) { + this.sizingTarget = this.containedElement || this; + } + }, + + detached: function() { + this.cancelAnimation(); + }, + + /** + * Called when the value of `opened` changes. + * Overridden from `IronOverlayBehavior` + */ + _openedChanged: function() { + if (this.opened && this.disabled) { + this.cancel(); + } else { + this.cancelAnimation(); + this._updateAnimationConfig(); + _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronOverlayBehaviorImpl._openedChanged.apply(this, arguments); + } + }, + + /** + * Overridden from `IronOverlayBehavior`. + */ + _renderOpened: function() { + if (!this.noAnimations && this.animationConfig.open) { + this.$.contentWrapper.classList.add('animating'); + this.playAnimation('open'); + } else { + _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronOverlayBehaviorImpl._renderOpened.apply(this, arguments); + } + }, + + /** + * Overridden from `IronOverlayBehavior`. + */ + _renderClosed: function() { + if (!this.noAnimations && this.animationConfig.close) { + this.$.contentWrapper.classList.add('animating'); + this.playAnimation('close'); + } else { + _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronOverlayBehaviorImpl._renderClosed.apply(this, arguments); + } + }, + + /** + * Called when animation finishes on the dropdown (when opening or + * closing). Responsible for "completing" the process of opening or + * closing the dropdown by positioning it or setting its display to + * none. + */ + _onNeonAnimationFinish: function() { + this.$.contentWrapper.classList.remove('animating'); + if (this.opened) { + this._finishRenderOpened(); + } else { + this._finishRenderClosed(); + } + }, + + /** + * Constructs the final animation config from different properties used + * to configure specific parts of the opening and closing animations. + */ + _updateAnimationConfig: function() { + // Update the animation node to be the containedElement. + var animationNode = this.containedElement; + var animations = [].concat(this.openAnimationConfig || []) + .concat(this.closeAnimationConfig || []); + for (var i = 0; i < animations.length; i++) { + animations[i].node = animationNode; + } + this.animationConfig = { + open: this.openAnimationConfig, + close: this.closeAnimationConfig + }; + }, + + /** + * Updates the overlay position based on configured horizontal + * and vertical alignment. + */ + _updateOverlayPosition: function() { + if (this.isAttached) { + // This triggers iron-resize, and iron-overlay-behavior will call refit if + // needed. + this.notifyResize(); + } + }, + + /** + * Sets scrollAction according to the value of allowOutsideScroll. + * Prefer setting directly scrollAction. + */ + _allowOutsideScrollChanged: function(allowOutsideScroll) { + // Wait until initial values are all set. + if (!this._readied) { + return; + } + if (!allowOutsideScroll) { + this.scrollAction = 'lock'; + } else if (!this.scrollAction || this.scrollAction === 'lock') { + this.scrollAction = 'refit'; + } + }, + + /** + * Apply focus to focusTarget or containedElement + */ + _applyFocus: function() { + var focusTarget = this.focusTarget || this.containedElement; + if (focusTarget && this.opened && !this.noAutoFocus) { + focusTarget.focus(); + } else { + _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_3__.IronOverlayBehaviorImpl._applyFocus.apply(this, arguments); + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-fit-behavior/iron-fit-behavior.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@polymer/iron-fit-behavior/iron-fit-behavior.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronFitBehavior: () => (/* binding */ IronFitBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +// IE11 has a bug where an element with (1) `overflow: auto;`, (2) size based on +// its content's natural size, (3) absolute positioning (either `absolute` or +// `fixed`), and (4) use `max-width` to constrain its width will place its +// vertical scrollbar outside the area constrained by `max-width`. +// +// Unlike other browsers, IE11 doesn't support changing the size of scrollbars +// with CSS, so we don't need to read this value live from the element in +// question when trying to work around the bug. +let verticalScrollbarMaxWidthBugOffset = undefined; +const getVerticalScrollbarMaxWidthBugOffset = () => { + if (verticalScrollbarMaxWidthBugOffset !== undefined) { + return verticalScrollbarMaxWidthBugOffset; + } + + const container = document.createElement('div'); + Object.assign(container.style, { + overflow: 'auto', + position: 'fixed', + left: '0px', + top: '0px', + maxWidth: '100px', + maxHeight: '100px', + }); + + const content = document.createElement('div'); + content.style.width = '200px'; + content.style.height = '200px'; + container.appendChild(content); + + document.body.appendChild(container); + verticalScrollbarMaxWidthBugOffset = + Math.abs(container.offsetWidth - 100) > 1 ? + container.offsetWidth - container.clientWidth : + 0; + document.body.removeChild(container); + + return verticalScrollbarMaxWidthBugOffset; +}; + +/** +`Polymer.IronFitBehavior` fits an element in another element using `max-height` +and `max-width`, and optionally centers it in the window or another element. + +The element will only be sized and/or positioned if it has not already been +sized and/or positioned by CSS. + +CSS properties | Action +--------------------------|------------------------------------------- +`position` set | Element is not centered horizontally or vertically +`top` or `bottom` set | Element is not vertically centered +`left` or `right` set | Element is not horizontally centered +`max-height` set | Element respects `max-height` +`max-width` set | Element respects `max-width` + +`Polymer.IronFitBehavior` can position an element into another element using +`verticalAlign` and `horizontalAlign`. This will override the element's css +position. + +
+ + Positioned into the container + +
+ +Use `noOverlap` to position the element around another element without +overlapping it. + +
+ + Positioned around the container + +
+ +Use `horizontalOffset, verticalOffset` to offset the element from its +`positionTarget`; `Polymer.IronFitBehavior` will collapse these in order to +keep the element within `fitInto` boundaries, while preserving the element's +CSS margin values. + +
+ + With vertical offset + +
+ +@demo demo/index.html +@polymerBehavior +*/ +const IronFitBehavior = { + + properties: { + + /** + * The element that will receive a `max-height`/`width`. By default it is + * the same as `this`, but it can be set to a child element. This is useful, + * for example, for implementing a scrolling region inside the element. + * @type {!Element} + */ + sizingTarget: { + type: Object, + value: function() { + return this; + } + }, + + /** + * The element to fit `this` into. + */ + fitInto: {type: Object, value: window}, + + /** + * Will position the element around the positionTarget without overlapping + * it. + */ + noOverlap: {type: Boolean}, + + /** + * The element that should be used to position the element. If not set, it + * will default to the parent node. + * @type {!Element} + */ + positionTarget: {type: Element}, + + /** + * The orientation against which to align the element horizontally + * relative to the `positionTarget`. Possible values are "left", "right", + * "center", "auto". + */ + horizontalAlign: {type: String}, + + /** + * The orientation against which to align the element vertically + * relative to the `positionTarget`. Possible values are "top", "bottom", + * "middle", "auto". + */ + verticalAlign: {type: String}, + + /** + * If true, it will use `horizontalAlign` and `verticalAlign` values as + * preferred alignment and if there's not enough space, it will pick the + * values which minimize the cropping. + */ + dynamicAlign: {type: Boolean}, + + /** + * A pixel value that will be added to the position calculated for the + * given `horizontalAlign`, in the direction of alignment. You can think + * of it as increasing or decreasing the distance to the side of the + * screen given by `horizontalAlign`. + * + * If `horizontalAlign` is "left" or "center", this offset will increase or + * decrease the distance to the left side of the screen: a negative offset + * will move the dropdown to the left; a positive one, to the right. + * + * Conversely if `horizontalAlign` is "right", this offset will increase + * or decrease the distance to the right side of the screen: a negative + * offset will move the dropdown to the right; a positive one, to the left. + */ + horizontalOffset: {type: Number, value: 0, notify: true}, + + /** + * A pixel value that will be added to the position calculated for the + * given `verticalAlign`, in the direction of alignment. You can think + * of it as increasing or decreasing the distance to the side of the + * screen given by `verticalAlign`. + * + * If `verticalAlign` is "top" or "middle", this offset will increase or + * decrease the distance to the top side of the screen: a negative offset + * will move the dropdown upwards; a positive one, downwards. + * + * Conversely if `verticalAlign` is "bottom", this offset will increase + * or decrease the distance to the bottom side of the screen: a negative + * offset will move the dropdown downwards; a positive one, upwards. + */ + verticalOffset: {type: Number, value: 0, notify: true}, + + /** + * Set to true to auto-fit on attach. + */ + autoFitOnAttach: {type: Boolean, value: false}, + + /** + * If true and scrollbars are added to `sizingTarget` after it is + * positioned, the size of the added scrollbars will be added to its + * `maxWidth` and `maxHeight`. + */ + expandSizingTargetForScrollbars: {type: Boolean, value: false}, + + /** @type {?Object} */ + _fitInfo: {type: Object} + }, + + get _fitWidth() { + var fitWidth; + if (this.fitInto === window) { + fitWidth = this.fitInto.innerWidth; + } else { + fitWidth = this.fitInto.getBoundingClientRect().width; + } + return fitWidth; + }, + + get _fitHeight() { + var fitHeight; + if (this.fitInto === window) { + fitHeight = this.fitInto.innerHeight; + } else { + fitHeight = this.fitInto.getBoundingClientRect().height; + } + return fitHeight; + }, + + get _fitLeft() { + var fitLeft; + if (this.fitInto === window) { + fitLeft = 0; + } else { + fitLeft = this.fitInto.getBoundingClientRect().left; + } + return fitLeft; + }, + + get _fitTop() { + var fitTop; + if (this.fitInto === window) { + fitTop = 0; + } else { + fitTop = this.fitInto.getBoundingClientRect().top; + } + return fitTop; + }, + + /** + * The element that should be used to position the element, + * if no position target is configured. + */ + get _defaultPositionTarget() { + var parent = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(this).parentNode; + + if (parent && parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { + parent = parent.host; + } + + return parent; + }, + + /** + * The horizontal align value, accounting for the RTL/LTR text direction. + */ + get _localeHorizontalAlign() { + if (this._isRTL) { + // In RTL, "left" becomes "right". + if (this.horizontalAlign === 'right') { + return 'left'; + } + if (this.horizontalAlign === 'left') { + return 'right'; + } + } + return this.horizontalAlign; + }, + + /** + * True if the element should be positioned instead of centered. + * @private + */ + get __shouldPosition() { + return (this.horizontalAlign || this.verticalAlign) && this.positionTarget; + }, + + /** + * True if the component is RTL. + * @private + */ + get _isRTL() { + // Memoize this to avoid expensive calculations & relayouts. + // Make sure we do it only once + if (typeof this._memoizedIsRTL === 'undefined') { + this._memoizedIsRTL = window.getComputedStyle(this).direction == 'rtl'; + } + return this._memoizedIsRTL; + }, + + /** @override */ + attached: function() { + this.positionTarget = this.positionTarget || this._defaultPositionTarget; + if (this.autoFitOnAttach) { + if (window.getComputedStyle(this).display === 'none') { + setTimeout(function() { + this.fit(); + }.bind(this)); + } else { + // NOTE: shadydom applies distribution asynchronously + // for performance reasons webcomponents/shadydom#120 + // Flush to get correct layout info. + window.ShadyDOM && ShadyDOM.flush(); + this.fit(); + } + } + }, + + /** @override */ + detached: function() { + if (this.__deferredFit) { + clearTimeout(this.__deferredFit); + this.__deferredFit = null; + } + }, + + /** + * Positions and fits the element into the `fitInto` element. + */ + fit: function() { + this.position(); + this.constrain(); + this.center(); + }, + + /** + * Memoize information needed to position and size the target element. + * @suppress {deprecated} + */ + _discoverInfo: function() { + if (this._fitInfo) { + return; + } + var target = window.getComputedStyle(this); + var sizer = window.getComputedStyle(this.sizingTarget); + + this._fitInfo = { + inlineStyle: { + top: this.style.top || '', + left: this.style.left || '', + position: this.style.position || '' + }, + sizerInlineStyle: { + maxWidth: this.sizingTarget.style.maxWidth || '', + maxHeight: this.sizingTarget.style.maxHeight || '', + boxSizing: this.sizingTarget.style.boxSizing || '' + }, + positionedBy: { + vertically: target.top !== 'auto' ? + 'top' : + (target.bottom !== 'auto' ? 'bottom' : null), + horizontally: target.left !== 'auto' ? + 'left' : + (target.right !== 'auto' ? 'right' : null) + }, + sizedBy: { + height: sizer.maxHeight !== 'none', + width: sizer.maxWidth !== 'none', + minWidth: parseInt(sizer.minWidth, 10) || 0, + minHeight: parseInt(sizer.minHeight, 10) || 0 + }, + margin: { + top: parseInt(target.marginTop, 10) || 0, + right: parseInt(target.marginRight, 10) || 0, + bottom: parseInt(target.marginBottom, 10) || 0, + left: parseInt(target.marginLeft, 10) || 0 + } + }; + }, + + /** + * Resets the target element's position and size constraints, and clear + * the memoized data. + */ + resetFit: function() { + var info = this._fitInfo || {}; + for (var property in info.sizerInlineStyle) { + this.sizingTarget.style[property] = info.sizerInlineStyle[property]; + } + for (var property in info.inlineStyle) { + this.style[property] = info.inlineStyle[property]; + } + + this._fitInfo = null; + }, + + /** + * Equivalent to calling `resetFit()` and `fit()`. Useful to call this after + * the element or the `fitInto` element has been resized, or if any of the + * positioning properties (e.g. `horizontalAlign, verticalAlign`) is updated. + * It preserves the scroll position of the sizingTarget. + */ + refit: function() { + var scrollLeft = this.sizingTarget.scrollLeft; + var scrollTop = this.sizingTarget.scrollTop; + this.resetFit(); + this.fit(); + this.sizingTarget.scrollLeft = scrollLeft; + this.sizingTarget.scrollTop = scrollTop; + }, + + /** + * Positions the element according to `horizontalAlign, verticalAlign`. + */ + position: function() { + if (!this.__shouldPosition) { + // needs to be centered, and it is done after constrain. + return; + } + this._discoverInfo(); + + window.ShadyDOM && window.ShadyDOM.flush(); + + this.style.position = 'fixed'; + // Need border-box for margin/padding. + this.sizingTarget.style.boxSizing = 'border-box'; + // Set to 0, 0 in order to discover any offset caused by parent stacking + // contexts. + this.style.left = '0px'; + this.style.top = '0px'; + + var rect = this.getBoundingClientRect(); + var positionRect = this.__getNormalizedRect(this.positionTarget); + var fitRect = this.__getNormalizedRect(this.fitInto); + + let unpositionedOffsetWidth; + let unpositionedOffsetHeight; + let unpositionedClientWidth; + let unpositionedClientHeight; + if (this.expandSizingTargetForScrollbars) { + unpositionedOffsetWidth = this.sizingTarget.offsetWidth; + unpositionedOffsetHeight = this.sizingTarget.offsetHeight; + unpositionedClientWidth = this.sizingTarget.clientWidth; + unpositionedClientHeight = this.sizingTarget.clientHeight; + } + + var margin = this._fitInfo.margin; + + // Consider the margin as part of the size for position calculations. + var size = { + width: rect.width + margin.left + margin.right, + height: rect.height + margin.top + margin.bottom + }; + + var position = this.__getPosition( + this._localeHorizontalAlign, + this.verticalAlign, + size, + rect, + positionRect, + fitRect); + + var left = position.left + margin.left; + var top = position.top + margin.top; + + // We first limit right/bottom within fitInto respecting the margin, + // then use those values to limit top/left. + var right = Math.min(fitRect.right - margin.right, left + rect.width); + var bottom = Math.min(fitRect.bottom - margin.bottom, top + rect.height); + + // Keep left/top within fitInto respecting the margin. + left = Math.max( + fitRect.left + margin.left, + Math.min(left, right - this._fitInfo.sizedBy.minWidth)); + top = Math.max( + fitRect.top + margin.top, + Math.min(top, bottom - this._fitInfo.sizedBy.minHeight)); + + // Use right/bottom to set maxWidth/maxHeight, and respect + // minWidth/minHeight. + const maxWidth = Math.max(right - left, this._fitInfo.sizedBy.minWidth); + const maxHeight = Math.max(bottom - top, this._fitInfo.sizedBy.minHeight); + this.sizingTarget.style.maxWidth = maxWidth + 'px'; + this.sizingTarget.style.maxHeight = maxHeight + 'px'; + + // Remove the offset caused by any stacking context. + const leftPosition = left - rect.left; + const topPosition = top - rect.top; + this.style.left = `${leftPosition}px`; + this.style.top = `${topPosition}px`; + + if (this.expandSizingTargetForScrollbars) { + // Expand the height first - i.e. in the typical block direction - in case + // this expands the element enough to remove the vertical scrollbar. + + const positionedOffsetHeight = this.sizingTarget.offsetHeight; + const positionedClientHeight = this.sizingTarget.clientHeight; + const unpositionedHeightDelta = + unpositionedOffsetHeight - unpositionedClientHeight; + const positionedHeightDelta = + positionedOffsetHeight - positionedClientHeight; + + const sizingTargetScrollbarHeight = + positionedHeightDelta - unpositionedHeightDelta; + if (sizingTargetScrollbarHeight > 0) { + // Expand `maxHeight` by `sizingTargetScrollbarHeight` up to the overall + // allowed height within `fitRect`. + const fitRectMaxHeight = fitRect.height - margin.top - margin.bottom; + const newMaxHeight = + Math.min(fitRectMaxHeight, maxHeight + sizingTargetScrollbarHeight); + this.sizingTarget.style.maxHeight = `${newMaxHeight}px`; + + // Measure the element's real change in height. This may not equal + // `sizingTargetScrollbarHeight` if the overflow amount is less than the + // scrollbar size. + const offsetHeight = this.sizingTarget.offsetHeight; + const addedHeight = offsetHeight - positionedOffsetHeight; + + // Adjust the top position if the alignment requires it. + let newTopPosition; + if (position.verticalAlign === 'top') { + newTopPosition = topPosition; + } else if (position.verticalAlign === 'middle') { + newTopPosition = topPosition - addedHeight / 2; + } else if (position.verticalAlign === 'bottom') { + newTopPosition = topPosition - addedHeight; + } + + // Constrain the new top position based on `fitRect` again. + newTopPosition = Math.max( + fitRect.top + margin.top, + Math.min( + newTopPosition, fitRect.bottom - margin.bottom - offsetHeight)); + this.style.top = `${newTopPosition}px`; + } + + const positionedOffsetWidth = this.sizingTarget.offsetWidth; + const positionedClientWidth = this.sizingTarget.clientWidth; + const unpositionedWidthDelta = + unpositionedOffsetWidth - unpositionedClientWidth; + const positionedWidthDelta = + positionedOffsetWidth - positionedClientWidth; + + const sizingTargetScrollbarWidth = + positionedWidthDelta - unpositionedWidthDelta; + if (sizingTargetScrollbarWidth > 0) { + const maxWidthBugOffset = getVerticalScrollbarMaxWidthBugOffset(); + + // Expand `maxWidth` by `sizingTargetScrollbarWidth` up to the overall + // allowed width within `fitRect`. + const fitRectMaxWidth = fitRect.width - margin.left - margin.right; + const newMaxWidth = Math.min( + fitRectMaxWidth, + maxWidth + sizingTargetScrollbarWidth - maxWidthBugOffset); + this.sizingTarget.style.maxWidth = `${newMaxWidth}px`; + + // Measure the element's real change in width. This may not equal + // `sizingTargetScrollbarWidth` if the overflow amount is less than the + // scrollbar size. + const offsetWidth = this.sizingTarget.offsetWidth + maxWidthBugOffset; + const addedWidth = offsetWidth - positionedOffsetWidth; + + // Adjust the left position if the alignment requires it. + let newLeftPosition; + if (position.horizontalAlign === 'left') { + newLeftPosition = leftPosition; + } else if (position.horizontalAlign === 'center') { + newLeftPosition = leftPosition - addedWidth / 2; + } else if (position.horizontalAlign === 'right') { + newLeftPosition = leftPosition - addedWidth; + } + + // Constrain the new left position based on `fitRect` again. + newLeftPosition = Math.max( + fitRect.left + margin.left, + Math.min( + newLeftPosition, fitRect.right - margin.right - offsetWidth)); + this.style.left = `${newLeftPosition}px`; + } + } + }, + + /** + * Constrains the size of the element to `fitInto` by setting `max-height` + * and/or `max-width`. + */ + constrain: function() { + if (this.__shouldPosition) { + return; + } + this._discoverInfo(); + + var info = this._fitInfo; + // position at (0px, 0px) if not already positioned, so we can measure the + // natural size. + if (!info.positionedBy.vertically) { + this.style.position = 'fixed'; + this.style.top = '0px'; + } + if (!info.positionedBy.horizontally) { + this.style.position = 'fixed'; + this.style.left = '0px'; + } + + // need border-box for margin/padding + this.sizingTarget.style.boxSizing = 'border-box'; + // constrain the width and height if not already set + var rect = this.getBoundingClientRect(); + if (!info.sizedBy.height) { + this.__sizeDimension( + rect, info.positionedBy.vertically, 'top', 'bottom', 'Height'); + } + if (!info.sizedBy.width) { + this.__sizeDimension( + rect, info.positionedBy.horizontally, 'left', 'right', 'Width'); + } + }, + + /** + * @protected + * @deprecated + */ + _sizeDimension: function(rect, positionedBy, start, end, extent) { + this.__sizeDimension(rect, positionedBy, start, end, extent); + }, + + /** + * @private + */ + __sizeDimension: function(rect, positionedBy, start, end, extent) { + var info = this._fitInfo; + var fitRect = this.__getNormalizedRect(this.fitInto); + var max = extent === 'Width' ? fitRect.width : fitRect.height; + var flip = (positionedBy === end); + var offset = flip ? max - rect[end] : rect[start]; + var margin = info.margin[flip ? start : end]; + var offsetExtent = 'offset' + extent; + var sizingOffset = this[offsetExtent] - this.sizingTarget[offsetExtent]; + this.sizingTarget.style['max' + extent] = + (max - margin - offset - sizingOffset) + 'px'; + }, + + /** + * Centers horizontally and vertically if not already positioned. This also + * sets `position:fixed`. + */ + center: function() { + if (this.__shouldPosition) { + return; + } + this._discoverInfo(); + + var positionedBy = this._fitInfo.positionedBy; + if (positionedBy.vertically && positionedBy.horizontally) { + // Already positioned. + return; + } + // Need position:fixed to center + this.style.position = 'fixed'; + // Take into account the offset caused by parents that create stacking + // contexts (e.g. with transform: translate3d). Translate to 0,0 and + // measure the bounding rect. + if (!positionedBy.vertically) { + this.style.top = '0px'; + } + if (!positionedBy.horizontally) { + this.style.left = '0px'; + } + // It will take in consideration margins and transforms + var rect = this.getBoundingClientRect(); + var fitRect = this.__getNormalizedRect(this.fitInto); + if (!positionedBy.vertically) { + var top = fitRect.top - rect.top + (fitRect.height - rect.height) / 2; + this.style.top = top + 'px'; + } + if (!positionedBy.horizontally) { + var left = fitRect.left - rect.left + (fitRect.width - rect.width) / 2; + this.style.left = left + 'px'; + } + }, + + __getNormalizedRect: function(target) { + if (target === document.documentElement || target === window) { + return { + top: 0, + left: 0, + width: window.innerWidth, + height: window.innerHeight, + right: window.innerWidth, + bottom: window.innerHeight + }; + } + return target.getBoundingClientRect(); + }, + + __getOffscreenArea: function(position, size, fitRect) { + var verticalCrop = Math.min(0, position.top) + + Math.min(0, fitRect.bottom - (position.top + size.height)); + var horizontalCrop = Math.min(0, position.left) + + Math.min(0, fitRect.right - (position.left + size.width)); + return Math.abs(verticalCrop) * size.width + + Math.abs(horizontalCrop) * size.height; + }, + + + __getPosition: function( + hAlign, vAlign, size, sizeNoMargins, positionRect, fitRect) { + // All the possible configurations. + // Ordered as top-left, top-right, bottom-left, bottom-right. + var positions = [ + { + verticalAlign: 'top', + horizontalAlign: 'left', + top: positionRect.top + this.verticalOffset, + left: positionRect.left + this.horizontalOffset + }, + { + verticalAlign: 'top', + horizontalAlign: 'right', + top: positionRect.top + this.verticalOffset, + left: positionRect.right - size.width - this.horizontalOffset + }, + { + verticalAlign: 'bottom', + horizontalAlign: 'left', + top: positionRect.bottom - size.height - this.verticalOffset, + left: positionRect.left + this.horizontalOffset + }, + { + verticalAlign: 'bottom', + horizontalAlign: 'right', + top: positionRect.bottom - size.height - this.verticalOffset, + left: positionRect.right - size.width - this.horizontalOffset + } + ]; + + if (this.noOverlap) { + // Duplicate. + for (var i = 0, l = positions.length; i < l; i++) { + var copy = {}; + for (var key in positions[i]) { + copy[key] = positions[i][key]; + } + positions.push(copy); + } + // Horizontal overlap only. + positions[0].top = positions[1].top += positionRect.height; + positions[2].top = positions[3].top -= positionRect.height; + // Vertical overlap only. + positions[4].left = positions[6].left += positionRect.width; + positions[5].left = positions[7].left -= positionRect.width; + } + + // Consider auto as null for coding convenience. + vAlign = vAlign === 'auto' ? null : vAlign; + hAlign = hAlign === 'auto' ? null : hAlign; + + if (!hAlign || hAlign === 'center') { + positions.push({ + verticalAlign: 'top', + horizontalAlign: 'center', + top: positionRect.top + this.verticalOffset + + (this.noOverlap ? positionRect.height : 0), + left: positionRect.left - sizeNoMargins.width / 2 + + positionRect.width / 2 + this.horizontalOffset + }); + positions.push({ + verticalAlign: 'bottom', + horizontalAlign: 'center', + top: positionRect.bottom - size.height - this.verticalOffset - + (this.noOverlap ? positionRect.height : 0), + left: positionRect.left - sizeNoMargins.width / 2 + + positionRect.width / 2 + this.horizontalOffset + }); + } + + if (!vAlign || vAlign === 'middle') { + positions.push({ + verticalAlign: 'middle', + horizontalAlign: 'left', + top: positionRect.top - sizeNoMargins.height / 2 + + positionRect.height / 2 + this.verticalOffset, + left: positionRect.left + this.horizontalOffset + + (this.noOverlap ? positionRect.width : 0) + }); + positions.push({ + verticalAlign: 'middle', + horizontalAlign: 'right', + top: positionRect.top - sizeNoMargins.height / 2 + + positionRect.height / 2 + this.verticalOffset, + left: positionRect.right - size.width - this.horizontalOffset - + (this.noOverlap ? positionRect.width : 0) + }); + } + + if (vAlign === 'middle' && hAlign === 'center') { + positions.push({ + verticalAlign: 'middle', + horizontalAlign: 'center', + top: positionRect.top - sizeNoMargins.height / 2 + + positionRect.height / 2 + this.verticalOffset, + left: positionRect.left - sizeNoMargins.width / 2 + + positionRect.width / 2 + this.horizontalOffset + }); + } + + var position; + for (var i = 0; i < positions.length; i++) { + var candidate = positions[i]; + var vAlignOk = candidate.verticalAlign === vAlign; + var hAlignOk = candidate.horizontalAlign === hAlign; + + // If both vAlign and hAlign are defined, return exact match. + // For dynamicAlign and noOverlap we'll have more than one candidate, so + // we'll have to check the offscreenArea to make the best choice. + if (!this.dynamicAlign && !this.noOverlap && vAlignOk && hAlignOk) { + position = candidate; + break; + } + + // Align is ok if alignment preferences are respected. If no preferences, + // it is considered ok. + var alignOk = (!vAlign || vAlignOk) && (!hAlign || hAlignOk); + + // Filter out elements that don't match the alignment (if defined). + // With dynamicAlign, we need to consider all the positions to find the + // one that minimizes the cropped area. + if (!this.dynamicAlign && !alignOk) { + continue; + } + + candidate.offscreenArea = + this.__getOffscreenArea(candidate, size, fitRect); + // If not cropped and respects the align requirements, keep it. + // This allows to prefer positions overlapping horizontally over the + // ones overlapping vertically. + if (candidate.offscreenArea === 0 && alignOk) { + position = candidate; + break; + } + position = position || candidate; + var diff = candidate.offscreenArea - position.offscreenArea; + // Check which crops less. If it crops equally, check if at least one + // align setting is ok. + if (diff < 0 || (diff === 0 && (vAlignOk || hAlignOk))) { + position = candidate; + } + } + + return position; + } + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js": +/*!********************************************************************!*\ + !*** ./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + +/** +The `` component provides simple ways to use +[CSS flexible box +layout](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Flexible_boxes), +also known as flexbox. Note that this is an old element, that was written +before all modern browsers had non-prefixed flex styles. As such, nowadays you +don't really need to use this element anymore, and can use CSS flex styles +directly in your code. + +This component provides two different ways to use flexbox: + +1. [Layout +classes](https://github.com/PolymerElements/iron-flex-layout/tree/master/iron-flex-layout-classes.html). +The layout class stylesheet provides a simple set of class-based flexbox rules, +that let you specify layout properties directly in markup. You must include this +file in every element that needs to use them. + + Sample use: + + ``` + + + + ``` + + ```js + import {html} from '@polymer/polymer/lib/utils/html-tag.js'; + import '@polymer/iron-flex-layout/iron-flex-layout-classes.js'; + + const template = html` + + +
+
horizontal layout center alignment
+
+ `; + document.body.appendChild(template.content); + ``` + +2. [Custom CSS +mixins](https://github.com/PolymerElements/iron-flex-layout/blob/master/iron-flex-layout.html). +The mixin stylesheet includes custom CSS mixins that can be applied inside a CSS +rule using the `@apply` function. + +Please note that the old [/deep/ layout +classes](https://github.com/PolymerElements/iron-flex-layout/tree/master/classes) +are deprecated, and should not be used. To continue using layout properties +directly in markup, please switch to using the new `dom-module`-based +[layout +classes](https://github.com/PolymerElements/iron-flex-layout/tree/master/iron-flex-layout-classes.html). +Please note that the new version does not use `/deep/`, and therefore requires +you to import the `dom-modules` in every element that needs to use them. + +@group Iron Elements +@pseudoElement iron-flex-layout +@demo demo/index.html +*/ +const template = (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_1__.html)` + + + + + +`; + +template.setAttribute('style', 'display: none;'); +document.head.appendChild(template.content); + +var style = document.createElement('style'); +style.textContent = '[hidden] { display: none !important; }'; +document.head.appendChild(style); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-form-element-behavior/iron-form-element-behavior.js": +/*!****************************************************************************************!*\ + !*** ./node_modules/@polymer/iron-form-element-behavior/iron-form-element-behavior.js ***! + \****************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronFormElementBehavior: () => (/* binding */ IronFormElementBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +/** + IronFormElementBehavior adds a `name`, `value` and `required` properties to + a custom element. It mostly exists for backcompatibility with Polymer 1.x, and + is probably not something you want to use. + + @demo demo/index.html + @polymerBehavior + */ +const IronFormElementBehavior = { + + properties: { + /** + * The name of this element. + */ + name: {type: String}, + + /** + * The value for this element. + * @type {*} + */ + value: {notify: true, type: String}, + + /** + * Set to true to mark the input as required. If used in a form, a + * custom element that uses this behavior should also use + * IronValidatableBehavior and define a custom validation method. + * Otherwise, a `required` element will always be considered valid. + * It's also strongly recommended to provide a visual style for the element + * when its value is invalid. + */ + required: {type: Boolean, value: false}, + }, + + // Empty implementations for backcompatibility. + attached: function() {}, + detached: function() {} +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-icon/iron-icon.js": +/*!******************************************************!*\ + !*** ./node_modules/@polymer/iron-icon/iron-icon.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_iron_meta_iron_meta_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-meta/iron-meta.js */ "./node_modules/@polymer/iron-meta/iron-meta.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + +/** + +The `iron-icon` element displays an icon. By default an icon renders as a 24px +square. + +Example using src: + + + +Example setting size to 32px x 32px: + + + + + +The iron elements include several sets of icons. To use the default set of +icons, import `iron-icons.js` and use the `icon` attribute to specify an icon: + + + + + +To use a different built-in set of icons, import the specific +`iron-icons/-icons.js`, and specify the icon as `:`. +For example, to use a communication icon, you would use: + + + + + +You can also create custom icon sets of bitmap or SVG icons. + +Example of using an icon named `cherry` from a custom iconset with the ID +`fruit`: + + + +See `` and `` for more information about how to +create a custom iconset. + +See the `iron-icons` demo to see the icons available in the various iconsets. + +### Styling + +The following custom properties are available for styling: + +Custom property | Description | Default +----------------|-------------|---------- +`--iron-icon` | Mixin applied to the icon | {} +`--iron-icon-width` | Width of the icon | `24px` +`--iron-icon-height` | Height of the icon | `24px` +`--iron-icon-fill-color` | Fill color of the svg icon | `currentcolor` +`--iron-icon-stroke-color` | Stroke color of the svg icon | none + +@group Iron Elements +@element iron-icon +@demo demo/index.html +@hero hero.svg +@homepage polymer.github.io +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__.html)` + +`, + + is: 'iron-icon', + + properties: { + + /** + * The name of the icon to use. The name should be of the form: + * `iconset_name:icon_name`. + */ + icon: {type: String}, + + /** + * The name of the theme to used, if one is specified by the + * iconset. + */ + theme: {type: String}, + + /** + * If using iron-icon without an iconset, you can set the src to be + * the URL of an individual icon image file. Note that this will take + * precedence over a given icon attribute. + */ + src: {type: String}, + + /** + * @type {!IronMeta} + */ + _meta: {value: _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_5__.Base.create('iron-meta', {type: 'iconset'})} + + }, + + observers: [ + '_updateIcon(_meta, isAttached)', + '_updateIcon(theme, isAttached)', + '_srcChanged(src, isAttached)', + '_iconChanged(icon, isAttached)' + ], + + _DEFAULT_ICONSET: 'icons', + + _iconChanged: function(icon) { + var parts = (icon || '').split(':'); + this._iconName = parts.pop(); + this._iconsetName = parts.pop() || this._DEFAULT_ICONSET; + this._updateIcon(); + }, + + _srcChanged: function(src) { + this._updateIcon(); + }, + + _usesIconset: function() { + return this.icon || !this.src; + }, + + /** @suppress {visibility} */ + _updateIcon: function() { + if (this._usesIconset()) { + if (this._img && this._img.parentNode) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this.root).removeChild(this._img); + } + if (this._iconName === '') { + if (this._iconset) { + this._iconset.removeIcon(this); + } + } else if (this._iconsetName && this._meta) { + this._iconset = /** @type {?Polymer.Iconset} */ ( + this._meta.byKey(this._iconsetName)); + if (this._iconset) { + this._iconset.applyIcon(this, this._iconName, this.theme); + this.unlisten(window, 'iron-iconset-added', '_updateIcon'); + } else { + this.listen(window, 'iron-iconset-added', '_updateIcon'); + } + } + } else { + if (this._iconset) { + this._iconset.removeIcon(this); + } + if (!this._img) { + this._img = document.createElement('img'); + this._img.style.width = '100%'; + this._img.style.height = '100%'; + this._img.draggable = false; + } + this._img.src = this.src; + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this.root).appendChild(this._img); + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-icons/communication-icons.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@polymer/iron-icons/communication-icons.js ***! + \*****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_iron_icon_iron_icon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/iron-icon/iron-icon.js */ "./node_modules/@polymer/iron-icon/iron-icon.js"); +/* harmony import */ var _polymer_iron_iconset_svg_iron_iconset_svg_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-iconset-svg/iron-iconset-svg.js */ "./node_modules/@polymer/iron-iconset-svg/iron-iconset-svg.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2014 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +const template = (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__.html)` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`; + +document.head.appendChild(template.content); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-icons/iron-icons.js": +/*!********************************************************!*\ + !*** ./node_modules/@polymer/iron-icons/iron-icons.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_iron_icon_iron_icon_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/iron-icon/iron-icon.js */ "./node_modules/@polymer/iron-icon/iron-icon.js"); +/* harmony import */ var _polymer_iron_iconset_svg_iron_iconset_svg_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-iconset-svg/iron-iconset-svg.js */ "./node_modules/@polymer/iron-iconset-svg/iron-iconset-svg.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2014 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +/** + +`iron-icons` is a utility import that includes the definition for the +`iron-icon` element, `iron-iconset-svg` element, as well as an import for the +default icon set. + +The `iron-icons` directory also includes imports for additional icon sets that +can be loaded into your project. + +Example loading icon set: + + + +To use an icon from one of these sets, first prefix your `iron-icon` with the +icon set name, followed by a colon, ":", and then the icon id. + +Example using the directions-bus icon from the maps icon set: + + + +See [iron-icon](https://www.webcomponents.org/element/@polymer/iron-icon) for +more information about working with icons. + +See [iron-iconset](https://www.webcomponents.org/element/@polymer/iron-iconset) +and +[iron-iconset-svg](https://www.webcomponents.org/element/@polymer/iron-iconset-svg) +for more information about how to create a custom iconset. + +@group Iron Elements +@pseudoElement iron-icons +@demo demo/index.html +*/ + +const template = (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__.html)` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`; + +document.head.appendChild(template.content); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-iconset-svg/iron-iconset-svg.js": +/*!********************************************************************!*\ + !*** ./node_modules/@polymer/iron-iconset-svg/iron-iconset-svg.js ***! + \********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_meta_iron_meta_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-meta/iron-meta.js */ "./node_modules/@polymer/iron-meta/iron-meta.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +/** + * The `iron-iconset-svg` element allows users to define their own icon sets + * that contain svg icons. The svg icon elements should be children of the + * `iron-iconset-svg` element. Multiple icons should be given distinct id's. + * + * Using svg elements to create icons has a few advantages over traditional + * bitmap graphics like jpg or png. Icons that use svg are vector based so + * they are resolution independent and should look good on any device. They + * are stylable via css. Icons can be themed, colorized, and even animated. + * + * Example: + * + * + * + * + * + * + * + * + * + * + * + * + * This will automatically register the icon set "my-svg-icons" to the iconset + * database. To use these icons from within another element, make a + * `iron-iconset` element and call the `byId` method + * to retrieve a given iconset. To apply a particular icon inside an + * element use the `applyIcon` method. For example: + * + * iconset.applyIcon(iconNode, 'car'); + * + * @element iron-iconset-svg + * @demo demo/index.html + * @implements {Polymer.Iconset} + */ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_2__.Polymer)({ + is: 'iron-iconset-svg', + + properties: { + + /** + * The name of the iconset. + */ + name: {type: String, observer: '_nameChanged'}, + + /** + * The size of an individual icon. Note that icons must be square. + */ + size: {type: Number, value: 24}, + + /** + * Set to true to enable mirroring of icons where specified when they are + * stamped. Icons that should be mirrored should be decorated with a + * `mirror-in-rtl` attribute. + * + * NOTE: For performance reasons, direction will be resolved once per + * document per iconset, so moving icons in and out of RTL subtrees will + * not cause their mirrored state to change. + */ + rtlMirroring: {type: Boolean, value: false}, + + /** + * Set to true to measure RTL based on the dir attribute on the body or + * html elements (measured on document.body or document.documentElement as + * available). + */ + useGlobalRtlAttribute: {type: Boolean, value: false} + }, + + created: function() { + this._meta = new _polymer_iron_meta_iron_meta_js__WEBPACK_IMPORTED_MODULE_1__.IronMeta({type: 'iconset', key: null, value: null}); + }, + + attached: function() { + this.style.display = 'none'; + }, + + /** + * Construct an array of all icon names in this iconset. + * + * @return {!Array} Array of icon names. + */ + getIconNames: function() { + this._icons = this._createIconMap(); + return Object.keys(this._icons).map(function(n) { + return this.name + ':' + n; + }, this); + }, + + /** + * Applies an icon to the given element. + * + * An svg icon is prepended to the element's shadowRoot if it exists, + * otherwise to the element itself. + * + * If RTL mirroring is enabled, and the icon is marked to be mirrored in + * RTL, the element will be tested (once and only once ever for each + * iconset) to determine the direction of the subtree the element is in. + * This direction will apply to all future icon applications, although only + * icons marked to be mirrored will be affected. + * + * @method applyIcon + * @param {Element} element Element to which the icon is applied. + * @param {string} iconName Name of the icon to apply. + * @return {?Element} The svg element which renders the icon. + */ + applyIcon: function(element, iconName) { + // Remove old svg element + this.removeIcon(element); + // install new svg element + var svg = this._cloneIcon( + iconName, this.rtlMirroring && this._targetIsRTL(element)); + if (svg) { + // insert svg element into shadow root, if it exists + var pde = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(element.root || element); + pde.insertBefore(svg, pde.childNodes[0]); + return element._svgIcon = svg; + } + return null; + }, + + /** + * Remove an icon from the given element by undoing the changes effected + * by `applyIcon`. + * + * @param {Element} element The element from which the icon is removed. + */ + removeIcon: function(element) { + // Remove old svg element + if (element._svgIcon) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(element.root || element).removeChild(element._svgIcon); + element._svgIcon = null; + } + }, + + /** + * Measures and memoizes the direction of the element. Note that this + * measurement is only done once and the result is memoized for future + * invocations. + */ + _targetIsRTL: function(target) { + if (this.__targetIsRTL == null) { + if (this.useGlobalRtlAttribute) { + var globalElement = + (document.body && document.body.hasAttribute('dir')) ? + document.body : + document.documentElement; + + this.__targetIsRTL = globalElement.getAttribute('dir') === 'rtl'; + } else { + if (target && target.nodeType !== Node.ELEMENT_NODE) { + target = target.host; + } + + this.__targetIsRTL = + target && window.getComputedStyle(target)['direction'] === 'rtl'; + } + } + + return this.__targetIsRTL; + }, + + /** + * + * When name is changed, register iconset metadata + * + */ + _nameChanged: function() { + this._meta.value = null; + this._meta.key = this.name; + this._meta.value = this; + + this.async(function() { + this.fire('iron-iconset-added', this, {node: window}); + }); + }, + + /** + * Create a map of child SVG elements by id. + * + * @return {!Object} Map of id's to SVG elements. + */ + _createIconMap: function() { + // Objects chained to Object.prototype (`{}`) have members. Specifically, + // on FF there is a `watch` method that confuses the icon map, so we + // need to use a null-based object here. + var icons = Object.create(null); + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).querySelectorAll('[id]').forEach(function(icon) { + icons[icon.id] = icon; + }); + return icons; + }, + + /** + * Produce installable clone of the SVG element matching `id` in this + * iconset, or `undefined` if there is no matching element. + * + * @return {Element} Returns an installable clone of the SVG element + * matching `id`. + */ + _cloneIcon: function(id, mirrorAllowed) { + // create the icon map on-demand, since the iconset itself has no discrete + // signal to know when it's children are fully parsed + this._icons = this._icons || this._createIconMap(); + return this._prepareSvgClone(this._icons[id], this.size, mirrorAllowed); + }, + + /** + * @param {Element} sourceSvg + * @param {number} size + * @param {Boolean} mirrorAllowed + * @return {Element} + */ + _prepareSvgClone: function(sourceSvg, size, mirrorAllowed) { + if (sourceSvg) { + var content = sourceSvg.cloneNode(true), + svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'), + viewBox = + content.getAttribute('viewBox') || '0 0 ' + size + ' ' + size, + cssText = + 'pointer-events: none; display: block; width: 100%; height: 100%;'; + + if (mirrorAllowed && content.hasAttribute('mirror-in-rtl')) { + cssText += + '-webkit-transform:scale(-1,1);transform:scale(-1,1);transform-origin:center;'; + } + + svg.setAttribute('viewBox', viewBox); + svg.setAttribute('preserveAspectRatio', 'xMidYMid meet'); + svg.setAttribute('focusable', 'false'); + // TODO(dfreedm): `pointer-events: none` works around + // https://crbug.com/370136 + // TODO(sjmiles): inline style may not be ideal, but avoids requiring a + // shadow-root + svg.style.cssText = cssText; + svg.appendChild(content).removeAttribute('id'); + return svg; + } + return null; + } + +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-image/iron-image.js": +/*!********************************************************!*\ + !*** ./node_modules/@polymer/iron-image/iron-image.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _polymer_polymer_lib_utils_resolve_url_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/utils/resolve-url.js */ "./node_modules/@polymer/polymer/lib/utils/resolve-url.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt +The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt +The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt +Code distributed by Google as part of the polymer project is also +subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + +/** +`iron-image` is an element for displaying an image that provides useful sizing and +preloading options not found on the standard `` tag. + +The `sizing` option allows the image to be either cropped (`cover`) or +letterboxed (`contain`) to fill a fixed user-size placed on the element. + +The `preload` option prevents the browser from rendering the image until the +image is fully loaded. In the interim, either the element's CSS `background-color` +can be be used as the placeholder, or the `placeholder` property can be +set to a URL (preferably a data-URI, for instant rendering) for an +placeholder image. + +The `fade` option (only valid when `preload` is set) will cause the placeholder +image/color to be faded out once the image is rendered. + +Examples: + + Basically identical to `` tag: + + + + Will letterbox the image to fit: + + + + Will crop the image to fit: + + + + Will show light-gray background until the image loads: + + + + Will show a base-64 encoded placeholder image until the image loads: + + + + Will fade the light-gray background out once the image is loaded: + + + +Custom property | Description | Default +----------------|-------------|---------- +`--iron-image-placeholder` | Mixin applied to #placeholder | `{}` +`--iron-image-width` | Sets the width of the wrapped image | `auto` +`--iron-image-height` | Sets the height of the wrapped image | `auto` + +@group Iron Elements +@element iron-image +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_2__.html)` + + + + + +
+`, + + is: 'iron-image', + + properties: { + /** + * The URL of an image. + */ + src: {type: String, value: ''}, + + /** + * A short text alternative for the image. + */ + alt: {type: String, value: null}, + + /** + * CORS enabled images support: + * https://developer.mozilla.org/en-US/docs/Web/HTML/CORS_enabled_image + */ + crossorigin: {type: String, value: null}, + + /** + * When true, the image is prevented from loading and any placeholder is + * shown. This may be useful when a binding to the src property is known to + * be invalid, to prevent 404 requests. + */ + preventLoad: {type: Boolean, value: false}, + + /** + * Sets a sizing option for the image. Valid values are `contain` (full + * aspect ratio of the image is contained within the element and + * letterboxed) or `cover` (image is cropped in order to fully cover the + * bounds of the element), or `null` (default: image takes natural size). + */ + sizing: {type: String, value: null, reflectToAttribute: true}, + + /** + * When a sizing option is used (`cover` or `contain`), this determines + * how the image is aligned within the element bounds. + */ + position: {type: String, value: 'center'}, + + /** + * When `true`, any change to the `src` property will cause the + * `placeholder` image to be shown until the new image has loaded. + */ + preload: {type: Boolean, value: false}, + + /** + * This image will be used as a background/placeholder until the src image + * has loaded. Use of a data-URI for placeholder is encouraged for instant + * rendering. + */ + placeholder: {type: String, value: null, observer: '_placeholderChanged'}, + + /** + * When `preload` is true, setting `fade` to true will cause the image to + * fade into place. + */ + fade: {type: Boolean, value: false}, + + /** + * Read-only value that is true when the image is loaded. + */ + loaded: {notify: true, readOnly: true, type: Boolean, value: false}, + + /** + * Read-only value that tracks the loading state of the image when the + * `preload` option is used. + */ + loading: {notify: true, readOnly: true, type: Boolean, value: false}, + + /** + * Read-only value that indicates that the last set `src` failed to load. + */ + error: {notify: true, readOnly: true, type: Boolean, value: false}, + + /** + * Can be used to set the width of image (e.g. via binding); size may also + * be set via CSS. + */ + width: {observer: '_widthChanged', type: Number, value: null}, + + /** + * Can be used to set the height of image (e.g. via binding); size may also + * be set via CSS. + * + * @attribute height + * @type number + * @default null + */ + height: {observer: '_heightChanged', type: Number, value: null}, + }, + + observers: [ + '_transformChanged(sizing, position)', + '_loadStateObserver(src, preventLoad)' + ], + + created: function() { + this._resolvedSrc = ''; + }, + + _imgOnLoad: function() { + if (this.$.img.src !== this._resolveSrc(this.src)) { + return; + } + + this._setLoading(false); + this._setLoaded(true); + this._setError(false); + }, + + _imgOnError: function() { + if (this.$.img.src !== this._resolveSrc(this.src)) { + return; + } + + this.$.img.removeAttribute('src'); + this.$.sizedImgDiv.style.backgroundImage = ''; + + this._setLoading(false); + this._setLoaded(false); + this._setError(true); + }, + + _computePlaceholderHidden: function() { + return !this.preload || (!this.fade && !this.loading && this.loaded); + }, + + _computePlaceholderClassName: function() { + return (this.preload && this.fade && !this.loading && this.loaded) ? + 'faded-out' : + ''; + }, + + _computeImgDivHidden: function() { + return !this.sizing; + }, + + _computeImgDivARIAHidden: function() { + return this.alt === '' ? 'true' : undefined; + }, + + _computeImgDivARIALabel: function() { + if (this.alt !== null) { + return this.alt; + } + + // Polymer.ResolveUrl.resolveUrl will resolve '' relative to a URL x to + // that URL x, but '' is the default for src. + if (this.src === '') { + return ''; + } + + // NOTE: Use of `URL` was removed here because IE11 doesn't support + // constructing it. If this ends up being problematic, we should + // consider reverting and adding the URL polyfill as a dev dependency. + var resolved = this._resolveSrc(this.src); + // Remove query parts, get file name. + return resolved.replace(/[?|#].*/g, '').split('/').pop(); + }, + + _computeImgHidden: function() { + return !!this.sizing; + }, + + _widthChanged: function() { + this.style.width = isNaN(this.width) ? this.width : this.width + 'px'; + }, + + _heightChanged: function() { + this.style.height = isNaN(this.height) ? this.height : this.height + 'px'; + }, + + _loadStateObserver: function(src, preventLoad) { + var newResolvedSrc = this._resolveSrc(src); + if (newResolvedSrc === this._resolvedSrc) { + return; + } + + this._resolvedSrc = ''; + this.$.img.removeAttribute('src'); + this.$.sizedImgDiv.style.backgroundImage = ''; + + if (src === '' || preventLoad) { + this._setLoading(false); + this._setLoaded(false); + this._setError(false); + } else { + this._resolvedSrc = newResolvedSrc; + this.$.img.src = this._resolvedSrc; + this.$.sizedImgDiv.style.backgroundImage = + 'url("' + this._resolvedSrc + '")'; + + this._setLoading(true); + this._setLoaded(false); + this._setError(false); + } + }, + + _placeholderChanged: function() { + this.$.placeholder.style.backgroundImage = + this.placeholder ? 'url("' + this.placeholder + '")' : ''; + }, + + _transformChanged: function() { + var sizedImgDivStyle = this.$.sizedImgDiv.style; + var placeholderStyle = this.$.placeholder.style; + + sizedImgDivStyle.backgroundSize = placeholderStyle.backgroundSize = + this.sizing; + + sizedImgDivStyle.backgroundPosition = placeholderStyle.backgroundPosition = + this.sizing ? this.position : ''; + + sizedImgDivStyle.backgroundRepeat = placeholderStyle.backgroundRepeat = + this.sizing ? 'no-repeat' : ''; + }, + + _resolveSrc: function(testSrc) { + var resolved = (0,_polymer_polymer_lib_utils_resolve_url_js__WEBPACK_IMPORTED_MODULE_3__.resolveUrl)(testSrc, this.$.baseURIAnchor.href); + // NOTE: Use of `URL` was removed here because IE11 doesn't support + // constructing it. If this ends up being problematic, we should + // consider reverting and adding the URL polyfill as a dev dependency. + if (resolved.length >= 2 && resolved[0] === '/' && resolved[1] !== '/') { + // In IE location.origin might not work + // https://connect.microsoft.com/IE/feedback/details/1763802/location-origin-is-undefined-in-ie-11-on-windows-10-but-works-on-windows-7 + resolved = (location.origin || location.protocol + '//' + location.host) + + resolved; + } + return resolved; + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-input/iron-input.js": +/*!********************************************************!*\ + !*** ./node_modules/@polymer/iron-input/iron-input.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_a11y_announcer_iron_a11y_announcer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-a11y-announcer/iron-a11y-announcer.js */ "./node_modules/@polymer/iron-a11y-announcer/iron-a11y-announcer.js"); +/* harmony import */ var _polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-validatable-behavior/iron-validatable-behavior.js */ "./node_modules/@polymer/iron-validatable-behavior/iron-validatable-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + +/** +`` is a wrapper to a native `` element, that adds two-way +binding and prevention of invalid input. To use it, you must distribute a native +`` yourself. You can continue to use the native `input` as you would +normally: + + + + + + + + + +### Two-way binding + +By default you can only get notified of changes to a native ``'s `value` +due to user input: + + + +This means that if you imperatively set the value (i.e. `someNativeInput.value = +'foo'`), no events will be fired and this change cannot be observed. + +`iron-input` adds the `bind-value` property that mirrors the native `input`'s +'`value` property; this property can be used for two-way data binding. +`bind-value` will notify if it is changed either by user input or by script. + + + + + +Note: this means that if you want to imperatively set the native `input`'s, you +_must_ set `bind-value` instead, so that the wrapper `iron-input` can be +notified. + +### Validation + +`iron-input` uses the native `input`'s validation. For simplicity, `iron-input` +has a `validate()` method (which internally just checks the distributed +`input`'s validity), which sets an `invalid` attribute that can also be used for +styling. + +To validate automatically as you type, you can use the `auto-validate` +attribute. + +`iron-input` also fires an `iron-input-validate` event after `validate()` is +called. You can use it to implement a custom validator: + + var CatsOnlyValidator = { + validate: function(ironInput) { + var valid = !ironInput.bindValue || ironInput.bindValue === 'cat'; + ironInput.invalid = !valid; + return valid; + } + } + ironInput.addEventListener('iron-input-validate', function() { + CatsOnly.validate(input2); + }); + +You can also use an element implementing an +[`IronValidatorBehavior`](/element/PolymerElements/iron-validatable-behavior). +This example can also be found in the demo for this element: + + + + + +### Preventing invalid input + +It may be desirable to only allow users to enter certain characters. You can use +the `allowed-pattern` attribute to accomplish this. This feature is separate +from validation, and `allowed-pattern` does not affect how the input is +validated. + + // Only allow typing digits, but a valid input has exactly 5 digits. + + + + +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_5__.html)` + + +`, + + is: 'iron-input', + behaviors: [_polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_2__.IronValidatableBehavior], + + /** + * Fired whenever `validate()` is called. + * + * @event iron-input-validate + */ + + properties: { + + /** + * Use this property instead of `value` for two-way data binding, or to + * set a default value for the input. **Do not** use the distributed + * input's `value` property to set a default value. + */ + bindValue: {type: String, value: ''}, + + /** + * Computed property that echoes `bindValue` (mostly used for Polymer 1.0 + * backcompatibility, if you were one-way binding to the Polymer 1.0 + * `input is="iron-input"` value attribute). + */ + value: {type: String, computed: '_computeValue(bindValue)'}, + + /** + * Regex-like list of characters allowed as input; all characters not in the + * list will be rejected. The recommended format should be a list of allowed + * characters, for example, `[a-zA-Z0-9.+-!;:]`. + * + * This pattern represents the allowed characters for the field; as the user + * inputs text, each individual character will be checked against the + * pattern (rather than checking the entire value as a whole). If a + * character is not a match, it will be rejected. + * + * Pasted input will have each character checked individually; if any + * character doesn't match `allowedPattern`, the entire pasted string will + * be rejected. + * + * Note: if you were using `iron-input` in 1.0, you were also required to + * set `prevent-invalid-input`. This is no longer needed as of Polymer 2.0, + * and will be set automatically for you if an `allowedPattern` is provided. + * + */ + allowedPattern: {type: String}, + + /** + * Set to true to auto-validate the input value as you type. + */ + autoValidate: {type: Boolean, value: false}, + + /** + * The native input element. + */ + _inputElement: Object, + }, + + observers: ['_bindValueChanged(bindValue, _inputElement)'], + listeners: {'input': '_onInput', 'keypress': '_onKeypress'}, + + created: function() { + _polymer_iron_a11y_announcer_iron_a11y_announcer_js__WEBPACK_IMPORTED_MODULE_1__.IronA11yAnnouncer.requestAvailability(); + this._previousValidInput = ''; + this._patternAlreadyChecked = false; + }, + + attached: function() { + // If the input is added at a later time, update the internal reference. + this._observer = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(this).observeNodes(function(info) { + this._initSlottedInput(); + }.bind(this)); + }, + + detached: function() { + if (this._observer) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(this).unobserveNodes(this._observer); + this._observer = null; + } + }, + + /** + * Returns the distributed input element. + */ + get inputElement() { + return this._inputElement; + }, + + _initSlottedInput: function() { + this._inputElement = this.getEffectiveChildren()[0]; + + if (this.inputElement && this.inputElement.value) { + this.bindValue = this.inputElement.value; + } + + this.fire('iron-input-ready'); + }, + + get _patternRegExp() { + var pattern; + if (this.allowedPattern) { + pattern = new RegExp(this.allowedPattern); + } else { + switch (this.inputElement.type) { + case 'number': + pattern = /[0-9.,e-]/; + break; + } + } + return pattern; + }, + + /** + * @suppress {checkTypes} + */ + _bindValueChanged: function(bindValue, inputElement) { + // The observer could have run before attached() when we have actually + // initialized this property. + if (!inputElement) { + return; + } + + if (bindValue === undefined) { + inputElement.value = null; + } else if (bindValue !== inputElement.value) { + this.inputElement.value = bindValue; + } + + if (this.autoValidate) { + this.validate(); + } + + // manually notify because we don't want to notify until after setting value + this.fire('bind-value-changed', {value: bindValue}); + }, + + _onInput: function() { + // Need to validate each of the characters pasted if they haven't + // been validated inside `_onKeypress` already. + if (this.allowedPattern && !this._patternAlreadyChecked) { + var valid = this._checkPatternValidity(); + if (!valid) { + this._announceInvalidCharacter( + 'Invalid string of characters not entered.'); + this.inputElement.value = this._previousValidInput; + } + } + this.bindValue = this._previousValidInput = this.inputElement.value; + this._patternAlreadyChecked = false; + }, + + _isPrintable: function(event) { + // What a control/printable character is varies wildly based on the browser. + // - most control characters (arrows, backspace) do not send a `keypress` + // event + // in Chrome, but the *do* on Firefox + // - in Firefox, when they do send a `keypress` event, control chars have + // a charCode = 0, keyCode = xx (for ex. 40 for down arrow) + // - printable characters always send a keypress event. + // - in Firefox, printable chars always have a keyCode = 0. In Chrome, the + // keyCode + // always matches the charCode. + // None of this makes any sense. + + // For these keys, ASCII code == browser keycode. + var anyNonPrintable = (event.keyCode == 8) || // backspace + (event.keyCode == 9) || // tab + (event.keyCode == 13) || // enter + (event.keyCode == 27); // escape + + // For these keys, make sure it's a browser keycode and not an ASCII code. + var mozNonPrintable = (event.keyCode == 19) || // pause + (event.keyCode == 20) || // caps lock + (event.keyCode == 45) || // insert + (event.keyCode == 46) || // delete + (event.keyCode == 144) || // num lock + (event.keyCode == 145) || // scroll lock + (event.keyCode > 32 && + event.keyCode < 41) || // page up/down, end, home, arrows + (event.keyCode > 111 && event.keyCode < 124); // fn keys + + return !anyNonPrintable && !(event.charCode == 0 && mozNonPrintable); + }, + + _onKeypress: function(event) { + if (!this.allowedPattern && this.inputElement.type !== 'number') { + return; + } + var regexp = this._patternRegExp; + if (!regexp) { + return; + } + + // Handle special keys and backspace + if (event.metaKey || event.ctrlKey || event.altKey) { + return; + } + + // Check the pattern either here or in `_onInput`, but not in both. + this._patternAlreadyChecked = true; + + var thisChar = String.fromCharCode(event.charCode); + if (this._isPrintable(event) && !regexp.test(thisChar)) { + event.preventDefault(); + this._announceInvalidCharacter( + 'Invalid character ' + thisChar + ' not entered.'); + } + }, + + _checkPatternValidity: function() { + var regexp = this._patternRegExp; + if (!regexp) { + return true; + } + for (var i = 0; i < this.inputElement.value.length; i++) { + if (!regexp.test(this.inputElement.value[i])) { + return false; + } + } + return true; + }, + + /** + * Returns true if `value` is valid. The validator provided in `validator` + * will be used first, then any constraints. + * @return {boolean} True if the value is valid. + */ + validate: function() { + if (!this.inputElement) { + this.invalid = false; + return true; + } + + // Use the nested input's native validity. + var valid = this.inputElement.checkValidity(); + + // Only do extra checking if the browser thought this was valid. + if (valid) { + // Empty, required input is invalid + if (this.required && this.bindValue === '') { + valid = false; + } else if (this.hasValidator()) { + valid = _polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_2__.IronValidatableBehavior.validate.call(this, this.bindValue); + } + } + + this.invalid = !valid; + this.fire('iron-input-validate'); + return valid; + }, + + _announceInvalidCharacter: function(message) { + this.fire('iron-announce', {text: message}); + }, + + _computeValue: function(bindValue) { + return bindValue; + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-location/iron-location.js": +/*!**************************************************************!*\ + !*** ./node_modules/@polymer/iron-location/iron-location.js ***! + \**************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** + +The `iron-location` element manages binding to and from the current URL. + +iron-location is the first, and lowest level element in the Polymer team's +routing system. This is a beta release of iron-location as we continue work +on higher level elements, and as such iron-location may undergo breaking +changes. + +#### Properties + +When the URL is: `/search?query=583#details` iron-location's properties will be: + + - path: `'/search'` + - query: `'query=583'` + - hash: `'details'` + +These bindings are bidirectional. Modifying them will in turn modify the URL. + +iron-location is only active while it is attached to the document. + +#### Links + +While iron-location is active in the document it will intercept clicks on links +within your site, updating the URL pushing the updated URL out through the +databinding system. iron-location only intercepts clicks with the intent to +open in the same window, so middle mouse clicks and ctrl/cmd clicks work fine. + +You can customize this behavior with the `urlSpaceRegex`. + +#### Dwell Time + +iron-location protects against accidental history spamming by only adding +entries to the user's history if the URL stays unchanged for `dwellTime` +milliseconds. + +@demo demo/index.html + + */ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + is: 'iron-location', + _template: null, + + properties: { + /** + * The pathname component of the URL. + */ + path: { + type: String, + notify: true, + value: function() { + return window.decodeURIComponent(window.location.pathname); + } + }, + + /** + * The query string portion of the URL. + */ + query: { + type: String, + notify: true, + value: function() { + return window.location.search.slice(1); + } + }, + + /** + * The hash component of the URL. + */ + hash: { + type: String, + notify: true, + value: function() { + return window.decodeURIComponent(window.location.hash.slice(1)); + } + }, + + /** + * If the user was on a URL for less than `dwellTime` milliseconds, it + * won't be added to the browser's history, but instead will be replaced + * by the next entry. + * + * This is to prevent large numbers of entries from clogging up the user's + * browser history. Disable by setting to a negative number. + */ + dwellTime: {type: Number, value: 2000}, + + /** + * A regexp that defines the set of URLs that should be considered part + * of this web app. + * + * Clicking on a link that matches this regex won't result in a full page + * navigation, but will instead just update the URL state in place. + * + * This regexp is given everything after the origin in an absolute + * URL. So to match just URLs that start with /search/ do: + * url-space-regex="^/search/" + * + * @type {string|RegExp} + */ + urlSpaceRegex: {type: String, value: ''}, + + /** + * A flag that specifies whether the spaces in query that would normally be + * encoded as %20 should be encoded as +. + * + * Given an example text "hello world", it is encoded in query as + * - "hello%20world" without the parameter + * - "hello+world" with the parameter + */ + encodeSpaceAsPlusInQuery: {type: Boolean, value: false}, + + /** + * urlSpaceRegex, but coerced into a regexp. + * + * @type {RegExp} + */ + _urlSpaceRegExp: {computed: '_makeRegExp(urlSpaceRegex)'}, + + _lastChangedAt: {type: Number}, + + _initialized: {type: Boolean, value: false} + }, + + hostAttributes: {hidden: true}, + + observers: ['_updateUrl(path, query, hash)'], + + created: function() { + this.__location = window.location; + }, + + attached: function() { + this.listen(window, 'hashchange', '_hashChanged'); + this.listen(window, 'location-changed', '_urlChanged'); + this.listen(window, 'popstate', '_urlChanged'); + this.listen( + /** @type {!HTMLBodyElement} */ (document.body), + 'click', + '_globalOnClick'); + // Give a 200ms grace period to make initial redirects without any + // additions to the user's history. + this._lastChangedAt = window.performance.now() - (this.dwellTime - 200); + this._initialized = true; + + this._urlChanged(); + }, + + detached: function() { + this.unlisten(window, 'hashchange', '_hashChanged'); + this.unlisten(window, 'location-changed', '_urlChanged'); + this.unlisten(window, 'popstate', '_urlChanged'); + this.unlisten( + /** @type {!HTMLBodyElement} */ (document.body), + 'click', + '_globalOnClick'); + this._initialized = false; + }, + + _hashChanged: function() { + this.hash = window.decodeURIComponent(this.__location.hash.substring(1)); + }, + + _urlChanged: function() { + // We want to extract all info out of the updated URL before we + // try to write anything back into it. + // + // i.e. without _dontUpdateUrl we'd overwrite the new path with the old + // one when we set this.hash. Likewise for query. + this._dontUpdateUrl = true; + this._hashChanged(); + this.path = window.decodeURIComponent(this.__location.pathname); + this.query = this.__location.search.substring(1); + this._dontUpdateUrl = false; + this._updateUrl(); + }, + + _getUrl: function() { + var partiallyEncodedPath = + window.encodeURI(this.path).replace(/\#/g, '%23').replace(/\?/g, '%3F'); + var partiallyEncodedQuery = ''; + if (this.query) { + partiallyEncodedQuery = '?' + this.query.replace(/\#/g, '%23'); + if (this.encodeSpaceAsPlusInQuery) { + partiallyEncodedQuery = partiallyEncodedQuery.replace(/\+/g, '%2B') + .replace(/ /g, '+') + .replace(/%20/g, '+'); + } else { + // required for edge + partiallyEncodedQuery = + partiallyEncodedQuery.replace(/\+/g, '%2B').replace(/ /g, '%20'); + } + } + var partiallyEncodedHash = ''; + if (this.hash) { + partiallyEncodedHash = '#' + window.encodeURI(this.hash); + } + return ( + partiallyEncodedPath + partiallyEncodedQuery + partiallyEncodedHash); + }, + + _updateUrl: function() { + if (this._dontUpdateUrl || !this._initialized) { + return; + } + + if (this.path === window.decodeURIComponent(this.__location.pathname) && + this.query === this.__location.search.substring(1) && + this.hash === + window.decodeURIComponent(this.__location.hash.substring(1))) { + // Nothing to do, the current URL is a representation of our properties. + return; + } + + var newUrl = this._getUrl(); + // Need to use a full URL in case the containing page has a base URI. + var fullNewUrl = + new URL(newUrl, this.__location.protocol + '//' + this.__location.host) + .href; + var now = window.performance.now(); + var shouldReplace = this._lastChangedAt + this.dwellTime > now; + this._lastChangedAt = now; + + if (shouldReplace) { + window.history.replaceState({}, '', fullNewUrl); + } else { + window.history.pushState({}, '', fullNewUrl); + } + + this.fire('location-changed', {}, {node: window}); + }, + + /** + * A necessary evil so that links work as expected. Does its best to + * bail out early if possible. + * + * @param {MouseEvent} event . + */ + _globalOnClick: function(event) { + // If another event handler has stopped this event then there's nothing + // for us to do. This can happen e.g. when there are multiple + // iron-location elements in a page. + if (event.defaultPrevented) { + return; + } + + var href = this._getSameOriginLinkHref(event); + + if (!href) { + return; + } + + event.preventDefault(); + + // If the navigation is to the current page we shouldn't add a history + // entry or fire a change event. + if (href === this.__location.href) { + return; + } + + window.history.pushState({}, '', href); + this.fire('location-changed', {}, {node: window}); + }, + + /** + * Returns the absolute URL of the link (if any) that this click event + * is clicking on, if we can and should override the resulting full + * page navigation. Returns null otherwise. + * + * @param {MouseEvent} event . + * @return {string?} . + */ + _getSameOriginLinkHref: function(event) { + // We only care about left-clicks. + if (event.button !== 0) { + return null; + } + + // We don't want modified clicks, where the intent is to open the page + // in a new tab. + if (event.metaKey || event.ctrlKey || event.shiftKey) { + return null; + } + + var eventPath = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__.dom)(event).path; + var anchor = null; + + for (var i = 0; i < eventPath.length; i++) { + var element = eventPath[i]; + + if (element.tagName === 'A' && element.href) { + anchor = element; + break; + } + } + + // If there's no link there's nothing to do. + if (!anchor) { + return null; + } + + // Target blank is a new tab, don't intercept. + if (anchor.target === '_blank') { + return null; + } + + // If the link is for an existing parent frame, don't intercept. + if ((anchor.target === '_top' || anchor.target === '_parent') && + window.top !== window) { + return null; + } + + // If the link is a download, don't intercept. + if (anchor.download) { + return null; + } + + var href = anchor.href; + + // It only makes sense for us to intercept same-origin navigations. + // pushState/replaceState don't work with cross-origin links. + var url; + + if (document.baseURI != null) { + url = new URL(href, /** @type {string} */ (document.baseURI)); + } else { + url = new URL(href); + } + + var origin; + + // IE Polyfill + if (this.__location.origin) { + origin = this.__location.origin; + } else { + origin = this.__location.protocol + '//' + this.__location.host; + } + + var urlOrigin; + + if (url.origin) { + urlOrigin = url.origin; + } else { + // IE always adds port number on HTTP and HTTPS on .host but not on + // window.location.host + var urlHost = url.host; + var urlPort = url.port; + var urlProtocol = url.protocol; + var isExtraneousHTTPS = urlProtocol === 'https:' && urlPort === '443'; + var isExtraneousHTTP = urlProtocol === 'http:' && urlPort === '80'; + + if (isExtraneousHTTPS || isExtraneousHTTP) { + urlHost = url.hostname; + } + urlOrigin = urlProtocol + '//' + urlHost; + } + + if (urlOrigin !== origin) { + return null; + } + + var normalizedHref = url.pathname + url.search + url.hash; + + // pathname should start with '/', but may not if `new URL` is not supported + if (normalizedHref[0] !== '/') { + normalizedHref = '/' + normalizedHref; + } + + // If we've been configured not to handle this url... don't handle it! + if (this._urlSpaceRegExp && !this._urlSpaceRegExp.test(normalizedHref)) { + return null; + } + + // Need to use a full URL in case the containing page has a base URI. + var fullNormalizedHref = new URL(normalizedHref, this.__location.href).href; + return fullNormalizedHref; + }, + + _makeRegExp: function(urlSpaceRegex) { + return RegExp(urlSpaceRegex); + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-location/iron-query-params.js": +/*!******************************************************************!*\ + !*** ./node_modules/@polymer/iron-location/iron-query-params.js ***! + \******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + +/** + * @demo demo/iron-query-params.html + */ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + is: 'iron-query-params', + _template: null, + + properties: { + /** + * @type{string|undefined} + */ + paramsString: { + type: String, + notify: true, + observer: 'paramsStringChanged', + }, + + /** + * @type{Object|undefined} + */ + paramsObject: { + type: Object, + notify: true, + }, + + _dontReact: {type: Boolean, value: false} + }, + + hostAttributes: {hidden: true}, + + observers: ['paramsObjectChanged(paramsObject.*)'], + + paramsStringChanged: function() { + this._dontReact = true; + this.paramsObject = this._decodeParams(this.paramsString); + this._dontReact = false; + }, + + paramsObjectChanged: function() { + if (this._dontReact) { + return; + } + this.paramsString = this._encodeParams(this.paramsObject) + .replace(/%3F/g, '?') + .replace(/%2F/g, '/') + .replace(/'/g, '%27'); + }, + + _encodeParams: function(params) { + var encodedParams = []; + + for (var key in params) { + var value = params[key]; + + if (value === '') { + encodedParams.push(encodeURIComponent(key)); + + } else if (value) { + encodedParams.push( + encodeURIComponent(key) + '=' + + encodeURIComponent(value.toString())); + } + } + return encodedParams.join('&'); + }, + + _decodeParams: function(paramString) { + var params = {}; + // Work around a bug in decodeURIComponent where + is not + // converted to spaces: + paramString = (paramString || '').replace(/\+/g, '%20'); + var paramList = paramString.split('&'); + for (var i = 0; i < paramList.length; i++) { + var param = paramList[i].split('='); + if (param[0]) { + params[decodeURIComponent(param[0])] = + decodeURIComponent(param[1] || ''); + } + } + return params; + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-menu-behavior/iron-menu-behavior.js": +/*!************************************************************************!*\ + !*** ./node_modules/@polymer/iron-menu-behavior/iron-menu-behavior.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronMenuBehavior: () => (/* binding */ IronMenuBehavior), +/* harmony export */ IronMenuBehaviorImpl: () => (/* binding */ IronMenuBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js */ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js"); +/* harmony import */ var _polymer_iron_selector_iron_multi_selectable_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-selector/iron-multi-selectable.js */ "./node_modules/@polymer/iron-selector/iron-multi-selectable.js"); +/* harmony import */ var _polymer_iron_selector_iron_selectable_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/iron-selector/iron-selectable.js */ "./node_modules/@polymer/iron-selector/iron-selectable.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +/** + * `IronMenuBehavior` implements accessible menu behavior. + * + * @demo demo/index.html + * @polymerBehavior IronMenuBehavior + */ +const IronMenuBehaviorImpl = { + + properties: { + + /** + * Returns the currently focused item. + * @type {?Object} + */ + focusedItem: + {observer: '_focusedItemChanged', readOnly: true, type: Object}, + + /** + * The attribute to use on menu items to look up the item title. Typing the + * first letter of an item when the menu is open focuses that item. If + * unset, `textContent` will be used. + */ + attrForItemTitle: {type: String}, + + /** + * @type {boolean} + */ + disabled: { + type: Boolean, + value: false, + observer: '_disabledChanged', + }, + }, + + /** + * The list of keys has been taken from + * https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/getModifierState + * @private + */ + _MODIFIER_KEYS: [ + 'Alt', + 'AltGraph', + 'CapsLock', + 'Control', + 'Fn', + 'FnLock', + 'Hyper', + 'Meta', + 'NumLock', + 'OS', + 'ScrollLock', + 'Shift', + 'Super', + 'Symbol', + 'SymbolLock' + ], + + /** @private */ + _SEARCH_RESET_TIMEOUT_MS: 1000, + + /** @private */ + _previousTabIndex: 0, + + hostAttributes: { + 'role': 'menu', + }, + + observers: ['_updateMultiselectable(multi)'], + + listeners: { + 'focus': '_onFocus', + 'keydown': '_onKeydown', + 'iron-items-changed': '_onIronItemsChanged' + }, + + /** + * @type {!Object} + */ + keyBindings: { + 'up': '_onUpKey', + 'down': '_onDownKey', + 'esc': '_onEscKey', + 'shift+tab:keydown': '_onShiftTabDown' + }, + + attached: function() { + this._resetTabindices(); + }, + + /** + * Selects the given value. If the `multi` property is true, then the selected + * state of the `value` will be toggled; otherwise the `value` will be + * selected. + * + * @param {string|number} value the value to select. + */ + select: function(value) { + // Cancel automatically focusing a default item if the menu received focus + // through a user action selecting a particular item. + if (this._defaultFocusAsync) { + this.cancelAsync(this._defaultFocusAsync); + this._defaultFocusAsync = null; + } + var item = this._valueToItem(value); + if (item && item.hasAttribute('disabled')) + return; + this._setFocusedItem(item); + _polymer_iron_selector_iron_multi_selectable_js__WEBPACK_IMPORTED_MODULE_2__.IronMultiSelectableBehaviorImpl.select.apply(this, arguments); + }, + + /** + * Resets all tabindex attributes to the appropriate value based on the + * current selection state. The appropriate value is `0` (focusable) for + * the default selected item, and `-1` (not keyboard focusable) for all + * other items. Also sets the correct initial values for aria-selected + * attribute, true for default selected item and false for others. + */ + _resetTabindices: function() { + var firstSelectedItem = this.multi ? + (this.selectedItems && this.selectedItems[0]) : + this.selectedItem; + + this.items.forEach(function(item) { + item.setAttribute('tabindex', item === firstSelectedItem ? '0' : '-1'); + item.setAttribute('aria-selected', this._selection.isSelected(item)); + }, this); + }, + + /** + * Sets appropriate ARIA based on whether or not the menu is meant to be + * multi-selectable. + * + * @param {boolean} multi True if the menu should be multi-selectable. + */ + _updateMultiselectable: function(multi) { + if (multi) { + this.setAttribute('aria-multiselectable', 'true'); + } else { + this.removeAttribute('aria-multiselectable'); + } + }, + + /** + * Given a KeyboardEvent, this method will focus the appropriate item in the + * menu (if there is a relevant item, and it is possible to focus it). + * + * @param {KeyboardEvent} event A KeyboardEvent. + */ + _focusWithKeyboardEvent: function(event) { + // Make sure that the key pressed is not a modifier key. + // getModifierState is not being used, as it is not available in Safari + // earlier than 10.0.2 (https://trac.webkit.org/changeset/206725/webkit) + if (this._MODIFIER_KEYS.indexOf(event.key) !== -1) + return; + + this.cancelDebouncer('_clearSearchText'); + + var searchText = this._searchText || ''; + var key = event.key && event.key.length == 1 ? + event.key : + String.fromCharCode(event.keyCode); + searchText += key.toLocaleLowerCase(); + + var searchLength = searchText.length; + + for (var i = 0, item; item = this.items[i]; i++) { + if (item.hasAttribute('disabled')) { + continue; + } + + var attr = this.attrForItemTitle || 'textContent'; + var title = (item[attr] || item.getAttribute(attr) || '').trim(); + + if (title.length < searchLength) { + continue; + } + + if (title.slice(0, searchLength).toLocaleLowerCase() == searchText) { + this._setFocusedItem(item); + break; + } + } + + this._searchText = searchText; + this.debounce( + '_clearSearchText', + this._clearSearchText, + this._SEARCH_RESET_TIMEOUT_MS); + }, + + _clearSearchText: function() { + this._searchText = ''; + }, + + /** + * Focuses the previous item (relative to the currently focused item) in the + * menu, disabled items will be skipped. + * Loop until length + 1 to handle case of single item in menu. + */ + _focusPrevious: function() { + var length = this.items.length; + var curFocusIndex = Number(this.indexOf(this.focusedItem)); + + for (var i = 1; i < length + 1; i++) { + var item = this.items[(curFocusIndex - i + length) % length]; + if (!item.hasAttribute('disabled')) { + var owner = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(item).getOwnerRoot() || document; + this._setFocusedItem(item); + + // Focus might not have worked, if the element was hidden or not + // focusable. In that case, try again. + if ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(owner).activeElement == item) { + return; + } + } + } + }, + + /** + * Focuses the next item (relative to the currently focused item) in the + * menu, disabled items will be skipped. + * Loop until length + 1 to handle case of single item in menu. + */ + _focusNext: function() { + var length = this.items.length; + var curFocusIndex = Number(this.indexOf(this.focusedItem)); + + for (var i = 1; i < length + 1; i++) { + var item = this.items[(curFocusIndex + i) % length]; + if (!item.hasAttribute('disabled')) { + var owner = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(item).getOwnerRoot() || document; + this._setFocusedItem(item); + + // Focus might not have worked, if the element was hidden or not + // focusable. In that case, try again. + if ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(owner).activeElement == item) { + return; + } + } + } + }, + + /** + * Mutates items in the menu based on provided selection details, so that + * all items correctly reflect selection state. + * + * @param {Element} item An item in the menu. + * @param {boolean} isSelected True if the item should be shown in a + * selected state, otherwise false. + */ + _applySelection: function(item, isSelected) { + if (isSelected) { + item.setAttribute('aria-selected', 'true'); + } else { + item.setAttribute('aria-selected', 'false'); + } + _polymer_iron_selector_iron_selectable_js__WEBPACK_IMPORTED_MODULE_3__.IronSelectableBehavior._applySelection.apply(this, arguments); + }, + + /** + * Discretely updates tabindex values among menu items as the focused item + * changes. + * + * @param {Element} focusedItem The element that is currently focused. + * @param {?Element} old The last element that was considered focused, if + * applicable. + */ + _focusedItemChanged: function(focusedItem, old) { + old && old.setAttribute('tabindex', '-1'); + if (focusedItem && !focusedItem.hasAttribute('disabled') && + !this.disabled) { + focusedItem.setAttribute('tabindex', '0'); + focusedItem.focus(); + } + }, + + /** + * A handler that responds to mutation changes related to the list of items + * in the menu. + * + * @param {CustomEvent} event An event containing mutation records as its + * detail. + */ + _onIronItemsChanged: function(event) { + if (event.detail.addedNodes.length) { + this._resetTabindices(); + } + }, + + /** + * Handler that is called when a shift+tab keypress is detected by the menu. + * + * @param {CustomEvent} event A key combination event. + */ + _onShiftTabDown: function(event) { + var oldTabIndex = this.getAttribute('tabindex'); + + IronMenuBehaviorImpl._shiftTabPressed = true; + + this._setFocusedItem(null); + + this.setAttribute('tabindex', '-1'); + + this.async(function() { + this.setAttribute('tabindex', oldTabIndex); + IronMenuBehaviorImpl._shiftTabPressed = false; + // NOTE(cdata): polymer/polymer#1305 + }, 1); + }, + + /** + * Handler that is called when the menu receives focus. + * + * @param {FocusEvent} event A focus event. + */ + _onFocus: function(event) { + if (IronMenuBehaviorImpl._shiftTabPressed) { + // do not focus the menu itself + return; + } + + // Do not focus the selected tab if the deepest target is part of the + // menu element's local DOM and is focusable. + var rootTarget = + /** @type {?HTMLElement} */ ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_4__.dom)(event).rootTarget); + if (rootTarget !== this && typeof rootTarget.tabIndex !== 'undefined' && + !this.isLightDescendant(rootTarget)) { + return; + } + + // clear the cached focus item + this._defaultFocusAsync = this.async(function() { + // focus the selected item when the menu receives focus, or the first item + // if no item is selected + var firstSelectedItem = this.multi ? + (this.selectedItems && this.selectedItems[0]) : + this.selectedItem; + + this._setFocusedItem(null); + + if (firstSelectedItem) { + this._setFocusedItem(firstSelectedItem); + } else if (this.items[0]) { + // We find the first none-disabled item (if one exists) + this._focusNext(); + } + }); + }, + + /** + * Handler that is called when the up key is pressed. + * + * @param {CustomEvent} event A key combination event. + */ + _onUpKey: function(event) { + // up and down arrows moves the focus + this._focusPrevious(); + event.detail.keyboardEvent.preventDefault(); + }, + + /** + * Handler that is called when the down key is pressed. + * + * @param {CustomEvent} event A key combination event. + */ + _onDownKey: function(event) { + this._focusNext(); + event.detail.keyboardEvent.preventDefault(); + }, + + /** + * Handler that is called when the esc key is pressed. + * + * @param {CustomEvent} event A key combination event. + */ + _onEscKey: function(event) { + var focusedItem = this.focusedItem; + if (focusedItem) { + focusedItem.blur(); + } + }, + + /** + * Handler that is called when a keydown event is detected. + * + * @param {KeyboardEvent} event A keyboard event. + */ + _onKeydown: function(event) { + if (!this.keyboardEventMatchesKeys(event, 'up down esc')) { + // all other keys focus the menu item starting with that character + this._focusWithKeyboardEvent(event); + } + event.stopPropagation(); + }, + + // override _activateHandler + _activateHandler: function(event) { + _polymer_iron_selector_iron_selectable_js__WEBPACK_IMPORTED_MODULE_3__.IronSelectableBehavior._activateHandler.call(this, event); + event.stopPropagation(); + }, + + /** + * Updates this element's tab index when it's enabled/disabled. + * @param {boolean} disabled + */ + _disabledChanged: function(disabled) { + if (disabled) { + this._previousTabIndex = + this.hasAttribute('tabindex') ? this.tabIndex : 0; + this.removeAttribute( + 'tabindex'); // No tabindex means not tab-able or select-able. + } else if (!this.hasAttribute('tabindex')) { + this.setAttribute('tabindex', this._previousTabIndex); + } + } +}; + +IronMenuBehaviorImpl._shiftTabPressed = false; + +/** @polymerBehavior */ +const IronMenuBehavior = + [_polymer_iron_selector_iron_multi_selectable_js__WEBPACK_IMPORTED_MODULE_2__.IronMultiSelectableBehavior, _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronA11yKeysBehavior, IronMenuBehaviorImpl]; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-meta/iron-meta.js": +/*!******************************************************!*\ + !*** ./node_modules/@polymer/iron-meta/iron-meta.js ***! + \******************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronMeta: () => (/* binding */ IronMeta) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +class IronMeta { + /** + * @param {{ + * type: (string|null|undefined), + * key: (string|null|undefined), + * value: *, + * }=} options + */ + constructor(options) { + IronMeta[' '](options); + + /** @type {string} */ + this.type = (options && options.type) || 'default'; + /** @type {string|null|undefined} */ + this.key = options && options.key; + if (options && 'value' in options) { + /** @type {*} */ + this.value = options.value; + } + } + + /** @return {*} */ + get value() { + var type = this.type; + var key = this.key; + + if (type && key) { + return IronMeta.types[type] && IronMeta.types[type][key]; + } + } + + /** @param {*} value */ + set value(value) { + var type = this.type; + var key = this.key; + + if (type && key) { + type = IronMeta.types[type] = IronMeta.types[type] || {}; + if (value == null) { + delete type[key]; + } else { + type[key] = value; + } + } + } + + /** @return {!Array<*>} */ + get list() { + var type = this.type; + + if (type) { + var items = IronMeta.types[this.type]; + if (!items) { + return []; + } + + return Object.keys(items).map(function(key) { + return metaDatas[this.type][key]; + }, this); + } + } + + /** + * @param {string} key + * @return {*} + */ + byKey(key) { + this.key = key; + return this.value; + } +}; + +// This function is used to convince Closure not to remove constructor calls +// for instances that are not held anywhere. For example, when +// `new IronMeta({...})` is used only for the side effect of adding a value. +IronMeta[' '] = function() {}; + +IronMeta.types = {}; + +var metaDatas = IronMeta.types; + +/** +`iron-meta` is a generic element you can use for sharing information across the +DOM tree. It uses [monostate pattern](http://c2.com/cgi/wiki?MonostatePattern) +such that any instance of iron-meta has access to the shared information. You +can use `iron-meta` to share whatever you want (or create an extension [like +x-meta] for enhancements). + +The `iron-meta` instances containing your actual data can be loaded in an +import, or constructed in any way you see fit. The only requirement is that you +create them before you try to access them. + +Examples: + +If I create an instance like this: + + + +Note that value="foo/bar" is the metadata I've defined. I could define more +attributes or use child nodes to define additional metadata. + +Now I can access that element (and it's metadata) from any iron-meta instance +via the byKey method, e.g. + + meta.byKey('info'); + +Pure imperative form would be like: + + document.createElement('iron-meta').byKey('info'); + +Or, in a Polymer element, you can include a meta in your template: + + + ... + this.$.meta.byKey('info'); + +@group Iron Elements +@demo demo/index.html +@element iron-meta +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + + is: 'iron-meta', + + properties: { + + /** + * The type of meta-data. All meta-data of the same type is stored + * together. + * @type {string} + */ + type: { + type: String, + value: 'default', + }, + + /** + * The key used to store `value` under the `type` namespace. + * @type {?string} + */ + key: { + type: String, + }, + + /** + * The meta-data to store or retrieve. + * @type {*} + */ + value: { + type: String, + notify: true, + }, + + /** + * If true, `value` is set to the iron-meta instance itself. + */ + self: {type: Boolean, observer: '_selfChanged'}, + + __meta: {type: Boolean, computed: '__computeMeta(type, key, value)'} + }, + + hostAttributes: {hidden: true}, + + __computeMeta: function(type, key, value) { + var meta = new IronMeta({type: type, key: key}); + + if (value !== undefined && value !== meta.value) { + meta.value = value; + } else if (this.value !== meta.value) { + this.value = meta.value; + } + + return meta; + }, + + get list() { + return this.__meta && this.__meta.list; + }, + + _selfChanged: function(self) { + if (self) { + this.value = this; + } + }, + + /** + * Retrieves meta data value by key. + * + * @method byKey + * @param {string} key The key of the meta-data to be returned. + * @return {*} + */ + byKey: function(key) { + return new IronMeta({type: this.type, key: key}).value; + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-overlay-behavior/iron-focusables-helper.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/@polymer/iron-overlay-behavior/iron-focusables-helper.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronFocusablesHelper: () => (/* binding */ IronFocusablesHelper) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +var p = Element.prototype; +var matches = p.matches || p.matchesSelector || p.mozMatchesSelector || + p.msMatchesSelector || p.oMatchesSelector || p.webkitMatchesSelector; + +class IronFocusablesHelperClass { + /** + * Returns a sorted array of tabbable nodes, including the root node. + * It searches the tabbable nodes in the light and shadow dom of the chidren, + * sorting the result by tabindex. + * @param {!Node} node + * @return {!Array} + */ + getTabbableNodes(node) { + var result = []; + // If there is at least one element with tabindex > 0, we need to sort + // the final array by tabindex. + var needsSortByTabIndex = this._collectTabbableNodes(node, result); + if (needsSortByTabIndex) { + return this._sortByTabIndex(result); + } + return result; + } + + /** + * Returns if a element is focusable. + * @param {!HTMLElement} element + * @return {boolean} + */ + isFocusable(element) { + // From http://stackoverflow.com/a/1600194/4228703: + // There isn't a definite list, it's up to the browser. The only + // standard we have is DOM Level 2 HTML + // https://www.w3.org/TR/DOM-Level-2-HTML/html.html, according to which the + // only elements that have a focus() method are HTMLInputElement, + // HTMLSelectElement, HTMLTextAreaElement and HTMLAnchorElement. This + // notably omits HTMLButtonElement and HTMLAreaElement. Referring to these + // tests with tabbables in different browsers + // http://allyjs.io/data-tables/focusable.html + + // Elements that cannot be focused if they have [disabled] attribute. + if (matches.call(element, 'input, select, textarea, button, object')) { + return matches.call(element, ':not([disabled])'); + } + // Elements that can be focused even if they have [disabled] attribute. + return matches.call( + element, 'a[href], area[href], iframe, [tabindex], [contentEditable]'); + } + + /** + * Returns if a element is tabbable. To be tabbable, a element must be + * focusable, visible, and with a tabindex !== -1. + * @param {!HTMLElement} element + * @return {boolean} + */ + isTabbable(element) { + return this.isFocusable(element) && + matches.call(element, ':not([tabindex="-1"])') && + this._isVisible(element); + } + + /** + * Returns the normalized element tabindex. If not focusable, returns -1. + * It checks for the attribute "tabindex" instead of the element property + * `tabIndex` since browsers assign different values to it. + * e.g. in Firefox `
` has `tabIndex = -1` + * @param {!HTMLElement} element + * @return {!number} + * @private + */ + _normalizedTabIndex(element) { + if (this.isFocusable(element)) { + var tabIndex = element.getAttribute('tabindex') || 0; + return Number(tabIndex); + } + return -1; + } + + /** + * Searches for nodes that are tabbable and adds them to the `result` array. + * Returns if the `result` array needs to be sorted by tabindex. + * @param {!Node} node The starting point for the search; added to `result` + * if tabbable. + * @param {!Array} result + * @return {boolean} + * @private + */ + _collectTabbableNodes(node, result) { + // If not an element or not visible, no need to explore children. + if (node.nodeType !== Node.ELEMENT_NODE) { + return false; + } + var element = /** @type {!HTMLElement} */ (node); + if (!this._isVisible(element)) { + return false; + } + var tabIndex = this._normalizedTabIndex(element); + var needsSort = tabIndex > 0; + if (tabIndex >= 0) { + result.push(element); + } + // In ShadowDOM v1, tab order is affected by the order of distrubution. + // E.g. getTabbableNodes(#root) in ShadowDOM v1 should return [#A, #B]; + // in ShadowDOM v0 tab order is not affected by the distrubution order, + // in fact getTabbableNodes(#root) returns [#B, #A]. + //
+ // + // + // + // + // + // + //
+ // TODO(valdrin) support ShadowDOM v1 when upgrading to Polymer v2.0. + var children; + if (element.localName === 'content' || element.localName === 'slot') { + children = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(element).getDistributedNodes(); + } else { + // Use shadow root if possible, will check for distributed nodes. + children = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(element.root || element).children; + } + for (var i = 0; i < children.length; i++) { + // Ensure method is always invoked to collect tabbable children. + needsSort = this._collectTabbableNodes(children[i], result) || needsSort; + } + return needsSort; + } + + /** + * Returns false if the element has `visibility: hidden` or `display: none` + * @param {!HTMLElement} element + * @return {boolean} + * @private + */ + _isVisible(element) { + // Check inline style first to save a re-flow. If looks good, check also + // computed style. + var style = element.style; + if (style.visibility !== 'hidden' && style.display !== 'none') { + style = window.getComputedStyle(element); + return (style.visibility !== 'hidden' && style.display !== 'none'); + } + return false; + } + + /** + * Sorts an array of tabbable elements by tabindex. Returns a new array. + * @param {!Array} tabbables + * @return {!Array} + * @private + */ + _sortByTabIndex(tabbables) { + // Implement a merge sort as Array.prototype.sort does a non-stable sort + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort + var len = tabbables.length; + if (len < 2) { + return tabbables; + } + var pivot = Math.ceil(len / 2); + var left = this._sortByTabIndex(tabbables.slice(0, pivot)); + var right = this._sortByTabIndex(tabbables.slice(pivot)); + return this._mergeSortByTabIndex(left, right); + } + + /** + * Merge sort iterator, merges the two arrays into one, sorted by tab index. + * @param {!Array} left + * @param {!Array} right + * @return {!Array} + * @private + */ + _mergeSortByTabIndex(left, right) { + var result = []; + while ((left.length > 0) && (right.length > 0)) { + if (this._hasLowerTabOrder(left[0], right[0])) { + result.push(right.shift()); + } else { + result.push(left.shift()); + } + } + + return result.concat(left, right); + } + + /** + * Returns if element `a` has lower tab order compared to element `b` + * (both elements are assumed to be focusable and tabbable). + * Elements with tabindex = 0 have lower tab order compared to elements + * with tabindex > 0. + * If both have same tabindex, it returns false. + * @param {!HTMLElement} a + * @param {!HTMLElement} b + * @return {boolean} + * @private + */ + _hasLowerTabOrder(a, b) { + // Normalize tabIndexes + // e.g. in Firefox `
` has `tabIndex = -1` + var ati = Math.max(a.tabIndex, 0); + var bti = Math.max(b.tabIndex, 0); + return (ati === 0 || bti === 0) ? bti > ati : ati > bti; + } +} + +const IronFocusablesHelper = new IronFocusablesHelperClass(); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-backdrop.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@polymer/iron-overlay-behavior/iron-overlay-backdrop.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + +/* +`iron-overlay-backdrop` is a backdrop used by `Polymer.IronOverlayBehavior`. It +should be a singleton. + +### Styling + +The following custom properties and mixins are available for styling. + +Custom property | Description | Default +-------------------------------------------|------------------------|--------- +`--iron-overlay-backdrop-background-color` | Backdrop background color | #000 +`--iron-overlay-backdrop-opacity` | Backdrop opacity | 0.6 +`--iron-overlay-backdrop` | Mixin applied to `iron-overlay-backdrop`. | {} +`--iron-overlay-backdrop-opened` | Mixin applied to `iron-overlay-backdrop` when it is displayed | {} +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_3__.html)` + + + +`, + + is: 'iron-overlay-backdrop', + + properties: { + + /** + * Returns true if the backdrop is opened. + */ + opened: { + reflectToAttribute: true, + type: Boolean, + value: false, + observer: '_openedChanged', + } + + }, + + listeners: { + 'transitionend': '_onTransitionend', + }, + + /** @override */ + created: function() { + // Used to cancel previous requestAnimationFrame calls when opened changes. + this.__openedRaf = null; + }, + + /** @override */ + attached: function() { + this.opened && this._openedChanged(this.opened); + }, + + /** + * Appends the backdrop to document body if needed. + */ + prepare: function() { + if (this.opened && !this.parentNode) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__.dom)(document.body).appendChild(this); + } + }, + + /** + * Shows the backdrop. + */ + open: function() { + this.opened = true; + }, + + /** + * Hides the backdrop. + */ + close: function() { + this.opened = false; + }, + + /** + * Removes the backdrop from document body if needed. + */ + complete: function() { + if (!this.opened && this.parentNode === document.body) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__.dom)(this.parentNode).removeChild(this); + } + }, + + _onTransitionend: function(event) { + if (event && event.target === this) { + this.complete(); + } + }, + + /** + * @param {boolean} opened + * @private + */ + _openedChanged: function(opened) { + if (opened) { + // Auto-attach. + this.prepare(); + } else { + // Animation might be disabled via the mixin or opacity custom property. + // If it is disabled in other ways, it's up to the user to call complete. + var cs = window.getComputedStyle(this); + if (cs.transitionDuration === '0s' || cs.opacity == 0) { + this.complete(); + } + } + + if (!this.isAttached) { + return; + } + + // Always cancel previous requestAnimationFrame. + if (this.__openedRaf) { + window.cancelAnimationFrame(this.__openedRaf); + this.__openedRaf = null; + } + // Force relayout to ensure proper transitions. + this.scrollTop = this.scrollTop; + this.__openedRaf = window.requestAnimationFrame(function() { + this.__openedRaf = null; + this.toggleClass('opened', this.opened); + }.bind(this)); + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-behavior.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@polymer/iron-overlay-behavior/iron-overlay-behavior.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronOverlayBehavior: () => (/* binding */ IronOverlayBehavior), +/* harmony export */ IronOverlayBehaviorImpl: () => (/* binding */ IronOverlayBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_fit_behavior_iron_fit_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-fit-behavior/iron-fit-behavior.js */ "./node_modules/@polymer/iron-fit-behavior/iron-fit-behavior.js"); +/* harmony import */ var _polymer_iron_resizable_behavior_iron_resizable_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-resizable-behavior/iron-resizable-behavior.js */ "./node_modules/@polymer/iron-resizable-behavior/iron-resizable-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_settings_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/settings.js */ "./node_modules/@polymer/polymer/lib/utils/settings.js"); +/* harmony import */ var _iron_focusables_helper_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./iron-focusables-helper.js */ "./node_modules/@polymer/iron-overlay-behavior/iron-focusables-helper.js"); +/* harmony import */ var _iron_overlay_manager_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./iron-overlay-manager.js */ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-manager.js"); +/* harmony import */ var _iron_scroll_manager_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./iron-scroll-manager.js */ "./node_modules/@polymer/iron-overlay-behavior/iron-scroll-manager.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + + + +/** @polymerBehavior */ +const IronOverlayBehaviorImpl = { + + properties: { + + /** + * True if the overlay is currently displayed. + */ + opened: + {observer: '_openedChanged', type: Boolean, value: false, notify: true}, + + /** + * True if the overlay was canceled when it was last closed. + */ + canceled: { + observer: '_canceledChanged', + readOnly: true, + type: Boolean, + value: false + }, + + /** + * Set to true to display a backdrop behind the overlay. It traps the focus + * within the light DOM of the overlay. + */ + withBackdrop: { + observer: '_withBackdropChanged', + type: Boolean, + }, + + /** + * Set to true to disable auto-focusing the overlay or child nodes with + * the `autofocus` attribute` when the overlay is opened. + */ + noAutoFocus: { + type: Boolean, + value: false, + }, + + /** + * Set to true to disable canceling the overlay with the ESC key. + */ + noCancelOnEscKey: { + type: Boolean, + value: false, + }, + + /** + * Set to true to disable canceling the overlay by clicking outside it. + */ + noCancelOnOutsideClick: { + type: Boolean, + value: false, + }, + + /** + * Contains the reason(s) this overlay was last closed (see + * `iron-overlay-closed`). `IronOverlayBehavior` provides the `canceled` + * reason; implementers of the behavior can provide other reasons in + * addition to `canceled`. + */ + closingReason: { + // was a getter before, but needs to be a property so other + // behaviors can override this. + type: Object, + }, + + /** + * Set to true to enable restoring of focus when overlay is closed. + */ + restoreFocusOnClose: { + type: Boolean, + value: false, + }, + + /** + * Set to true to allow clicks to go through overlays. + * When the user clicks outside this overlay, the click may + * close the overlay below. + */ + allowClickThrough: { + type: Boolean, + }, + + /** + * Set to true to keep overlay always on top. + */ + alwaysOnTop: { + type: Boolean, + }, + + /** + * Determines which action to perform when scroll outside an opened overlay + * happens. Possible values: lock - blocks scrolling from happening, refit - + * computes the new position on the overlay cancel - causes the overlay to + * close + */ + scrollAction: { + type: String, + }, + + /** + * Shortcut to access to the overlay manager. + * @private + * @type {!IronOverlayManagerClass} + */ + _manager: { + type: Object, + value: _iron_overlay_manager_js__WEBPACK_IMPORTED_MODULE_6__.IronOverlayManager, + }, + + /** + * The node being focused. + * @type {?Node} + */ + _focusedChild: { + type: Object, + } + + }, + + listeners: {'iron-resize': '_onIronResize'}, + + observers: ['__updateScrollObservers(isAttached, opened, scrollAction)'], + + /** + * The backdrop element. + * @return {!Element} + */ + get backdropElement() { + return this._manager.backdropElement; + }, + + /** + * Returns the node to give focus to. + * @return {!Node} + */ + get _focusNode() { + return this._focusedChild || (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).querySelector('[autofocus]') || this; + }, + + /** + * Array of nodes that can receive focus (overlay included), ordered by + * `tabindex`. This is used to retrieve which is the first and last focusable + * nodes in order to wrap the focus for overlays `with-backdrop`. + * + * If you know what is your content (specifically the first and last focusable + * children), you can override this method to return only `[firstFocusable, + * lastFocusable];` + * @return {!Array} + * @protected + */ + get _focusableNodes() { + return _iron_focusables_helper_js__WEBPACK_IMPORTED_MODULE_5__.IronFocusablesHelper.getTabbableNodes(this); + }, + + /** + * @return {void} + */ + ready: function() { + // Used to skip calls to notifyResize and refit while the overlay is + // animating. + this.__isAnimating = false; + // with-backdrop needs tabindex to be set in order to trap the focus. + // If it is not set, IronOverlayBehavior will set it, and remove it if + // with-backdrop = false. + this.__shouldRemoveTabIndex = false; + // Used for wrapping the focus on TAB / Shift+TAB. + this.__firstFocusableNode = this.__lastFocusableNode = null; + // Used by to keep track of the RAF callbacks. + this.__rafs = {}; + // Focused node before overlay gets opened. Can be restored on close. + this.__restoreFocusNode = null; + // Scroll info to be restored. + this.__scrollTop = this.__scrollLeft = null; + this.__onCaptureScroll = this.__onCaptureScroll.bind(this); + // Root nodes hosting the overlay, used to listen for scroll events on them. + this.__rootNodes = null; + this._ensureSetup(); + }, + + /** @override */ + attached: function() { + // Call _openedChanged here so that position can be computed correctly. + if (this.opened) { + this._openedChanged(this.opened); + } + this._observer = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).observeNodes(this._onNodesChange); + }, + + /** @override */ + detached: function() { + // TODO(bicknellr): Per spec, checking `this._observer` should never be + // necessary because `connectedCallback` and `disconnectedCallback` should + // always be called in alternating order. However, the custom elements + // polyfill doesn't implement the reactions stack, so this can sometimes + // happen, particularly if ShadyDOM is in noPatch mode where the custom + // elements polyfill is installed before ShadyDOM. We should investigate + // whether or not we can either implement the reactions stack without major + // performance implications or patch ShadyDOM's functions to restore the + // typical ShadyDOM-then-custom-elements order and remove this workaround. + if (this._observer) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this).unobserveNodes(this._observer); + } + this._observer = null; + for (var cb in this.__rafs) { + if (this.__rafs[cb] !== null) { + cancelAnimationFrame(this.__rafs[cb]); + } + } + this.__rafs = {}; + this._manager.removeOverlay(this); + + // We got detached while animating, ensure we show/hide the overlay + // and fire iron-overlay-opened/closed event! + if (this.__isAnimating) { + if (this.opened) { + this._finishRenderOpened(); + } else { + // Restore the focus if necessary. + this._applyFocus(); + this._finishRenderClosed(); + } + } + }, + + /** + * Toggle the opened state of the overlay. + */ + toggle: function() { + this._setCanceled(false); + this.opened = !this.opened; + }, + + /** + * Open the overlay. + */ + open: function() { + this._setCanceled(false); + this.opened = true; + }, + + /** + * Close the overlay. + */ + close: function() { + this._setCanceled(false); + this.opened = false; + }, + + /** + * Cancels the overlay. + * @param {Event=} event The original event + */ + cancel: function(event) { + var cancelEvent = + this.fire('iron-overlay-canceled', event, {cancelable: true}); + if (cancelEvent.defaultPrevented) { + return; + } + + this._setCanceled(true); + this.opened = false; + }, + + /** + * Invalidates the cached tabbable nodes. To be called when any of the + * focusable content changes (e.g. a button is disabled). + */ + invalidateTabbables: function() { + this.__firstFocusableNode = this.__lastFocusableNode = null; + }, + + _ensureSetup: function() { + if (this._overlaySetup) { + return; + } + this._overlaySetup = true; + this.style.outline = 'none'; + this.style.display = 'none'; + }, + + /** + * Called when `opened` changes. + * @param {boolean=} opened + * @protected + */ + _openedChanged: function(opened) { + if (opened) { + this.removeAttribute('aria-hidden'); + } else { + this.setAttribute('aria-hidden', 'true'); + } + + // Defer any animation-related code on attached + // (_openedChanged gets called again on attached). + if (!this.isAttached) { + return; + } + + this.__isAnimating = true; + + // Deraf for non-blocking rendering. + this.__deraf('__openedChanged', this.__openedChanged); + }, + + _canceledChanged: function() { + this.closingReason = this.closingReason || {}; + this.closingReason.canceled = this.canceled; + }, + + _withBackdropChanged: function() { + // If tabindex is already set, no need to override it. + if (this.withBackdrop && !this.hasAttribute('tabindex')) { + this.setAttribute('tabindex', '-1'); + this.__shouldRemoveTabIndex = true; + } else if (this.__shouldRemoveTabIndex) { + this.removeAttribute('tabindex'); + this.__shouldRemoveTabIndex = false; + } + if (this.opened && this.isAttached) { + this._manager.trackBackdrop(); + } + }, + + /** + * tasks which must occur before opening; e.g. making the element visible. + * @protected + */ + _prepareRenderOpened: function() { + // Store focused node. + this.__restoreFocusNode = this._manager.deepActiveElement; + + // Needed to calculate the size of the overlay so that transitions on its + // size will have the correct starting points. + this._preparePositioning(); + this.refit(); + this._finishPositioning(); + + // Safari will apply the focus to the autofocus element when displayed + // for the first time, so we make sure to return the focus where it was. + if (this.noAutoFocus && document.activeElement === this._focusNode) { + this._focusNode.blur(); + this.__restoreFocusNode.focus(); + } + }, + + /** + * Tasks which cause the overlay to actually open; typically play an + * animation. + * @protected + */ + _renderOpened: function() { + this._finishRenderOpened(); + }, + + /** + * Tasks which cause the overlay to actually close; typically play an + * animation. + * @protected + */ + _renderClosed: function() { + this._finishRenderClosed(); + }, + + /** + * Tasks to be performed at the end of open action. Will fire + * `iron-overlay-opened`. + * @protected + */ + _finishRenderOpened: function() { + this.notifyResize(); + this.__isAnimating = false; + + this.fire('iron-overlay-opened'); + }, + + /** + * Tasks to be performed at the end of close action. Will fire + * `iron-overlay-closed`. + * @protected + */ + _finishRenderClosed: function() { + // Hide the overlay. + this.style.display = 'none'; + // Reset z-index only at the end of the animation. + this.style.zIndex = ''; + this.notifyResize(); + this.__isAnimating = false; + this.fire('iron-overlay-closed', this.closingReason); + }, + + _preparePositioning: function() { + this.style.transition = this.style.webkitTransition = 'none'; + this.style.transform = this.style.webkitTransform = 'none'; + this.style.display = ''; + }, + + _finishPositioning: function() { + // First, make it invisible & reactivate animations. + this.style.display = 'none'; + // Force reflow before re-enabling animations so that they don't start. + // Set scrollTop to itself so that Closure Compiler doesn't remove this. + this.scrollTop = this.scrollTop; + this.style.transition = this.style.webkitTransition = ''; + this.style.transform = this.style.webkitTransform = ''; + // Now that animations are enabled, make it visible again + this.style.display = ''; + // Force reflow, so that following animations are properly started. + // Set scrollTop to itself so that Closure Compiler doesn't remove this. + this.scrollTop = this.scrollTop; + }, + + /** + * Applies focus according to the opened state. + * @protected + */ + _applyFocus: function() { + if (this.opened) { + if (!this.noAutoFocus) { + this._focusNode.focus(); + } + } else { + // Restore focus. + if (this.restoreFocusOnClose && this.__restoreFocusNode) { + // If the activeElement is `` or inside the overlay, + // we are allowed to restore the focus. In all the other + // cases focus might have been moved elsewhere by another + // component or by an user interaction (e.g. click on a + // button outside the overlay). + var activeElement = this._manager.deepActiveElement; + if (activeElement === document.body || + composedContains(this, activeElement)) { + this.__restoreFocusNode.focus(); + } + } + this.__restoreFocusNode = null; + this._focusNode.blur(); + this._focusedChild = null; + } + }, + + /** + * Cancels (closes) the overlay. Call when click happens outside the overlay. + * @param {!Event} event + * @protected + */ + _onCaptureClick: function(event) { + if (!this.noCancelOnOutsideClick) { + this.cancel(event); + } + }, + + /** + * Keeps track of the focused child. If withBackdrop, traps focus within + * overlay. + * @param {!Event} event + * @protected + */ + _onCaptureFocus: function(event) { + if (!this.withBackdrop) { + return; + } + var path = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(event).path; + if (path.indexOf(this) === -1) { + event.stopPropagation(); + this._applyFocus(); + } else { + this._focusedChild = /** @type {Node} */ (path[0]); + } + }, + + /** + * Handles the ESC key event and cancels (closes) the overlay. + * @param {!Event} event + * @protected + */ + _onCaptureEsc: function(event) { + if (!this.noCancelOnEscKey) { + this.cancel(event); + } + }, + + /** + * Handles TAB key events to track focus changes. + * Will wrap focus for overlays withBackdrop. + * @param {!Event} event + * @protected + */ + _onCaptureTab: function(event) { + if (!this.withBackdrop) { + return; + } + this.__ensureFirstLastFocusables(); + // TAB wraps from last to first focusable. + // Shift + TAB wraps from first to last focusable. + var shift = event.shiftKey; + var nodeToCheck = + shift ? this.__firstFocusableNode : this.__lastFocusableNode; + var nodeToSet = + shift ? this.__lastFocusableNode : this.__firstFocusableNode; + var shouldWrap = false; + if (nodeToCheck === nodeToSet) { + // If nodeToCheck is the same as nodeToSet, it means we have an overlay + // with 0 or 1 focusables; in either case we still need to trap the + // focus within the overlay. + shouldWrap = true; + } else { + // In dom=shadow, the manager will receive focus changes on the main + // root but not the ones within other shadow roots, so we can't rely on + // _focusedChild, but we should check the deepest active element. + var focusedNode = this._manager.deepActiveElement; + // If the active element is not the nodeToCheck but the overlay itself, + // it means the focus is about to go outside the overlay, hence we + // should prevent that (e.g. user opens the overlay and hit Shift+TAB). + shouldWrap = (focusedNode === nodeToCheck || focusedNode === this); + } + + if (shouldWrap) { + // When the overlay contains the last focusable element of the document + // and it's already focused, pressing TAB would move the focus outside + // the document (e.g. to the browser search bar). Similarly, when the + // overlay contains the first focusable element of the document and it's + // already focused, pressing Shift+TAB would move the focus outside the + // document (e.g. to the browser search bar). + // In both cases, we would not receive a focus event, but only a blur. + // In order to achieve focus wrapping, we prevent this TAB event and + // force the focus. This will also prevent the focus to temporarily move + // outside the overlay, which might cause scrolling. + event.preventDefault(); + this._focusedChild = nodeToSet; + this._applyFocus(); + } + }, + + /** + * Refits if the overlay is opened and not animating. + * @protected + */ + _onIronResize: function() { + if (this.opened && !this.__isAnimating) { + this.__deraf('refit', this.refit); + } + }, + + /** + * Will call notifyResize if overlay is opened. + * Can be overridden in order to avoid multiple observers on the same node. + * @protected + */ + _onNodesChange: function() { + if (this.opened && !this.__isAnimating) { + // It might have added focusable nodes, so invalidate cached values. + this.invalidateTabbables(); + this.notifyResize(); + } + }, + + /** + * Updates the references to the first and last focusable nodes. + * @private + */ + __ensureFirstLastFocusables: function() { + var focusableNodes = this._focusableNodes; + this.__firstFocusableNode = focusableNodes[0]; + this.__lastFocusableNode = focusableNodes[focusableNodes.length - 1]; + }, + + /** + * Tasks executed when opened changes: prepare for the opening, move the + * focus, update the manager, render opened/closed. + * @private + */ + __openedChanged: function() { + if (this.opened) { + // Make overlay visible, then add it to the manager. + this._prepareRenderOpened(); + this._manager.addOverlay(this); + // Move the focus to the child node with [autofocus]. + this._applyFocus(); + + this._renderOpened(); + } else { + // Remove overlay, then restore the focus before actually closing. + this._manager.removeOverlay(this); + this._applyFocus(); + + this._renderClosed(); + } + }, + + /** + * Debounces the execution of a callback to the next animation frame. + * @param {!string} jobname + * @param {!Function} callback Always bound to `this` + * @private + */ + __deraf: function(jobname, callback) { + var rafs = this.__rafs; + if (rafs[jobname] !== null) { + cancelAnimationFrame(rafs[jobname]); + } + rafs[jobname] = requestAnimationFrame(function nextAnimationFrame() { + rafs[jobname] = null; + callback.call(this); + }.bind(this)); + }, + + /** + * @param {boolean} isAttached + * @param {boolean} opened + * @param {string=} scrollAction + * @private + */ + __updateScrollObservers: function(isAttached, opened, scrollAction) { + if (!isAttached || !opened || !this.__isValidScrollAction(scrollAction)) { + (0,_iron_scroll_manager_js__WEBPACK_IMPORTED_MODULE_7__.removeScrollLock)(this); + this.__removeScrollListeners(); + } else { + if (scrollAction === 'lock') { + this.__saveScrollPosition(); + (0,_iron_scroll_manager_js__WEBPACK_IMPORTED_MODULE_7__.pushScrollLock)(this); + } + this.__addScrollListeners(); + } + }, + + /** + * @private + */ + __addScrollListeners: function() { + if (!this.__rootNodes) { + this.__rootNodes = []; + // Listen for scroll events in all shadowRoots hosting this overlay only + // when in native ShadowDOM. + if (_polymer_polymer_lib_utils_settings_js__WEBPACK_IMPORTED_MODULE_4__.useShadow) { + var node = this; + while (node) { + if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && node.host) { + this.__rootNodes.push(node); + } + node = node.host || node.assignedSlot || node.parentNode; + } + } + this.__rootNodes.push(document); + } + this.__rootNodes.forEach(function(el) { + el.addEventListener('scroll', this.__onCaptureScroll, { + capture: true, + passive: true, + }); + }, this); + }, + + /** + * @private + */ + __removeScrollListeners: function() { + if (this.__rootNodes) { + this.__rootNodes.forEach(function(el) { + el.removeEventListener('scroll', this.__onCaptureScroll, { + capture: true, + passive: true, + }); + }, this); + } + if (!this.isAttached) { + this.__rootNodes = null; + } + }, + + /** + * @param {string=} scrollAction + * @return {boolean} + * @private + */ + __isValidScrollAction: function(scrollAction) { + return scrollAction === 'lock' || scrollAction === 'refit' || + scrollAction === 'cancel'; + }, + + /** + * @private + */ + __onCaptureScroll: function(event) { + if (this.__isAnimating) { + return; + } + // Check if scroll outside the overlay. + if ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(event).path.indexOf(this) >= 0) { + return; + } + switch (this.scrollAction) { + case 'lock': + // NOTE: scrolling might happen if a scroll event is not cancellable, or + // if user pressed keys that cause scrolling (they're not prevented in + // order not to break a11y features like navigate with arrow keys). + this.__restoreScrollPosition(); + break; + case 'refit': + this.__deraf('refit', this.refit); + break; + case 'cancel': + this.cancel(event); + break; + } + }, + + /** + * Memoizes the scroll position of the outside scrolling element. + * @private + */ + __saveScrollPosition: function() { + if (document.scrollingElement) { + this.__scrollTop = document.scrollingElement.scrollTop; + this.__scrollLeft = document.scrollingElement.scrollLeft; + } else { + // Since we don't know if is the body or html, get max. + this.__scrollTop = + Math.max(document.documentElement.scrollTop, document.body.scrollTop); + this.__scrollLeft = Math.max( + document.documentElement.scrollLeft, document.body.scrollLeft); + } + }, + + /** + * Resets the scroll position of the outside scrolling element. + * @private + */ + __restoreScrollPosition: function() { + if (document.scrollingElement) { + document.scrollingElement.scrollTop = this.__scrollTop; + document.scrollingElement.scrollLeft = this.__scrollLeft; + } else { + // Since we don't know if is the body or html, set both. + document.documentElement.scrollTop = document.body.scrollTop = + this.__scrollTop; + document.documentElement.scrollLeft = document.body.scrollLeft = + this.__scrollLeft; + } + }, + +}; + +const composedParent = node => + node.assignedSlot || node.parentNode || node.host; + +const composedContains = (ancestor, descendant) => { + for (let element = descendant; element; element = composedParent(element)) { + if (element === ancestor) { + return true; + } + } + return false; +}; + +/** + Use `Polymer.IronOverlayBehavior` to implement an element that can be hidden + or shown, and displays on top of other content. It includes an optional + backdrop, and can be used to implement a variety of UI controls including + dialogs and drop downs. Multiple overlays may be displayed at once. + + See the [demo source + code](https://github.com/PolymerElements/iron-overlay-behavior/blob/master/demo/simple-overlay.html) + for an example. + + ### Closing and canceling + + An overlay may be hidden by closing or canceling. The difference between close + and cancel is user intent. Closing generally implies that the user + acknowledged the content on the overlay. By default, it will cancel whenever + the user taps outside it or presses the escape key. This behavior is + configurable with the `no-cancel-on-esc-key` and the + `no-cancel-on-outside-click` properties. `close()` should be called explicitly + by the implementer when the user interacts with a control in the overlay + element. When the dialog is canceled, the overlay fires an + 'iron-overlay-canceled' event. Call `preventDefault` on this event to prevent + the overlay from closing. + + ### Positioning + + By default the element is sized and positioned to fit and centered inside the + window. You can position and size it manually using CSS. See + `Polymer.IronFitBehavior`. + + ### Backdrop + + Set the `with-backdrop` attribute to display a backdrop behind the overlay. + The backdrop is appended to `` and is of type ``. + See its doc page for styling options. + + In addition, `with-backdrop` will wrap the focus within the content in the + light DOM. Override the [`_focusableNodes` + getter](#Polymer.IronOverlayBehavior:property-_focusableNodes) to achieve a + different behavior. + + ### Limitations + + The element is styled to appear on top of other content by setting its + `z-index` property. You must ensure no element has a stacking context with a + higher `z-index` than its parent stacking context. You should place this + element as a child of `` whenever possible. + + @demo demo/index.html + @polymerBehavior + */ +const IronOverlayBehavior = + [_polymer_iron_fit_behavior_iron_fit_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronFitBehavior, _polymer_iron_resizable_behavior_iron_resizable_behavior_js__WEBPACK_IMPORTED_MODULE_2__.IronResizableBehavior, IronOverlayBehaviorImpl]; + +/** + * Fired after the overlay opens. + * @event iron-overlay-opened + */ + +/** + * Fired when the overlay is canceled, but before it is closed. + * @event iron-overlay-canceled + * @param {Event} event The closing of the overlay can be prevented + * by calling `event.preventDefault()`. The `event.detail` is the original event + * that originated the canceling (e.g. ESC keyboard event or click event outside + * the overlay). + */ + +/** + * Fired after the overlay closes. + * @event iron-overlay-closed + * @param {Event} event The `event.detail` is the `closingReason` property + * (contains `canceled`, whether the overlay was canceled). + */ + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-manager.js": +/*!*****************************************************************************!*\ + !*** ./node_modules/@polymer/iron-overlay-behavior/iron-overlay-manager.js ***! + \*****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronOverlayManager: () => (/* binding */ IronOverlayManager), +/* harmony export */ IronOverlayManagerClass: () => (/* binding */ IronOverlayManagerClass) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _iron_overlay_backdrop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iron-overlay-backdrop.js */ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-backdrop.js"); +/* harmony import */ var _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js */ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_gestures_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/gestures.js */ "./node_modules/@polymer/polymer/lib/utils/gestures.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +/** + * @package + */ +class IronOverlayManagerClass { + constructor() { + /** + * Used to keep track of the opened overlays. + * @private {!Array} + */ + this._overlays = []; + + /** + * iframes have a default z-index of 100, + * so this default should be at least that. + * @private {number} + */ + this._minimumZ = 101; + + /** + * Memoized backdrop element. + * @private {Element|null} + */ + this._backdropElement = null; + + // Enable document-wide tap recognizer. + // NOTE: Use useCapture=true to avoid accidentally prevention of the closing + // of an overlay via event.stopPropagation(). The only way to prevent + // closing of an overlay should be through its APIs. + // NOTE: enable tap on to workaround Polymer/polymer#4459 + // Pass no-op function because MSEdge 15 doesn't handle null as 2nd argument + // https://github.com/Microsoft/ChakraCore/issues/3863 + _polymer_polymer_lib_utils_gestures_js__WEBPACK_IMPORTED_MODULE_4__.addListener(document.documentElement, 'tap', function() {}); + document.addEventListener('tap', this._onCaptureClick.bind(this), true); + document.addEventListener('focus', this._onCaptureFocus.bind(this), true); + document.addEventListener( + 'keydown', this._onCaptureKeyDown.bind(this), true); + } + + /** + * The shared backdrop element. + * @return {!Element} backdropElement + */ + get backdropElement() { + if (!this._backdropElement) { + this._backdropElement = document.createElement('iron-overlay-backdrop'); + } + return this._backdropElement; + } + + /** + * The deepest active element. + * @return {!Element} activeElement the active element + */ + get deepActiveElement() { + var active = document.activeElement; + // document.activeElement can be null + // https://developer.mozilla.org/en-US/docs/Web/API/Document/activeElement + // In IE 11, it can also be an object when operating in iframes. + // In these cases, default it to document.body. + if (!active || active instanceof Element === false) { + active = document.body; + } + while (active.root && (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(active.root).activeElement) { + active = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(active.root).activeElement; + } + return active; + } + + /** + * Brings the overlay at the specified index to the front. + * @param {number} i + * @private + */ + _bringOverlayAtIndexToFront(i) { + var overlay = this._overlays[i]; + if (!overlay) { + return; + } + var lastI = this._overlays.length - 1; + var currentOverlay = this._overlays[lastI]; + // Ensure always-on-top overlay stays on top. + if (currentOverlay && + this._shouldBeBehindOverlay(overlay, currentOverlay)) { + lastI--; + } + // If already the top element, return. + if (i >= lastI) { + return; + } + // Update z-index to be on top. + var minimumZ = Math.max(this.currentOverlayZ(), this._minimumZ); + if (this._getZ(overlay) <= minimumZ) { + this._applyOverlayZ(overlay, minimumZ); + } + + // Shift other overlays behind the new on top. + while (i < lastI) { + this._overlays[i] = this._overlays[i + 1]; + i++; + } + this._overlays[lastI] = overlay; + } + + /** + * Adds the overlay and updates its z-index if it's opened, or removes it if + * it's closed. Also updates the backdrop z-index. + * @param {!Element} overlay + */ + addOrRemoveOverlay(overlay) { + if (overlay.opened) { + this.addOverlay(overlay); + } else { + this.removeOverlay(overlay); + } + } + + /** + * Tracks overlays for z-index and focus management. + * Ensures the last added overlay with always-on-top remains on top. + * @param {!Element} overlay + */ + addOverlay(overlay) { + var i = this._overlays.indexOf(overlay); + if (i >= 0) { + this._bringOverlayAtIndexToFront(i); + this.trackBackdrop(); + return; + } + var insertionIndex = this._overlays.length; + var currentOverlay = this._overlays[insertionIndex - 1]; + var minimumZ = Math.max(this._getZ(currentOverlay), this._minimumZ); + var newZ = this._getZ(overlay); + + // Ensure always-on-top overlay stays on top. + if (currentOverlay && + this._shouldBeBehindOverlay(overlay, currentOverlay)) { + // This bumps the z-index of +2. + this._applyOverlayZ(currentOverlay, minimumZ); + insertionIndex--; + // Update minimumZ to match previous overlay's z-index. + var previousOverlay = this._overlays[insertionIndex - 1]; + minimumZ = Math.max(this._getZ(previousOverlay), this._minimumZ); + } + + // Update z-index and insert overlay. + if (newZ <= minimumZ) { + this._applyOverlayZ(overlay, minimumZ); + } + this._overlays.splice(insertionIndex, 0, overlay); + + this.trackBackdrop(); + } + + /** + * @param {!Element} overlay + */ + removeOverlay(overlay) { + var i = this._overlays.indexOf(overlay); + if (i === -1) { + return; + } + this._overlays.splice(i, 1); + + this.trackBackdrop(); + } + + /** + * Returns the current overlay. + * @return {!Element|undefined} + */ + currentOverlay() { + var i = this._overlays.length - 1; + return this._overlays[i]; + } + + /** + * Returns the current overlay z-index. + * @return {number} + */ + currentOverlayZ() { + return this._getZ(this.currentOverlay()); + } + + /** + * Ensures that the minimum z-index of new overlays is at least `minimumZ`. + * This does not effect the z-index of any existing overlays. + * @param {number} minimumZ + */ + ensureMinimumZ(minimumZ) { + this._minimumZ = Math.max(this._minimumZ, minimumZ); + } + + focusOverlay() { + var current = /** @type {?} */ (this.currentOverlay()); + if (current) { + current._applyFocus(); + } + } + + /** + * Updates the backdrop z-index. + */ + trackBackdrop() { + var overlay = this._overlayWithBackdrop(); + // Avoid creating the backdrop if there is no overlay with backdrop. + if (!overlay && !this._backdropElement) { + return; + } + this.backdropElement.style.zIndex = this._getZ(overlay) - 1; + this.backdropElement.opened = !!overlay; + // Property observers are not fired until element is attached + // in Polymer 2.x, so we ensure element is attached if needed. + // https://github.com/Polymer/polymer/issues/4526 + this.backdropElement.prepare(); + } + + /** + * @return {!Array} + */ + getBackdrops() { + var backdrops = []; + for (var i = 0; i < this._overlays.length; i++) { + if (this._overlays[i].withBackdrop) { + backdrops.push(this._overlays[i]); + } + } + return backdrops; + } + + /** + * Returns the z-index for the backdrop. + * @return {number} + */ + backdropZ() { + return this._getZ(this._overlayWithBackdrop()) - 1; + } + + /** + * Returns the top opened overlay that has a backdrop. + * @return {!Element|undefined} + * @private + */ + _overlayWithBackdrop() { + for (var i = this._overlays.length - 1; i >= 0; i--) { + if (this._overlays[i].withBackdrop) { + return this._overlays[i]; + } + } + } + + /** + * Calculates the minimum z-index for the overlay. + * @param {Element=} overlay + * @private + */ + _getZ(overlay) { + var z = this._minimumZ; + if (overlay) { + var z1 = Number( + overlay.style.zIndex || window.getComputedStyle(overlay).zIndex); + // Check if is a number + // Number.isNaN not supported in IE 10+ + if (z1 === z1) { + z = z1; + } + } + return z; + } + + /** + * @param {!Element} element + * @param {number|string} z + * @private + */ + _setZ(element, z) { + element.style.zIndex = z; + } + + /** + * @param {!Element} overlay + * @param {number} aboveZ + * @private + */ + _applyOverlayZ(overlay, aboveZ) { + this._setZ(overlay, aboveZ + 2); + } + + /** + * Returns the deepest overlay in the path. + * @param {!Array=} path + * @return {!Element|undefined} + * @suppress {missingProperties} + * @private + */ + _overlayInPath(path) { + path = path || []; + for (var i = 0; i < path.length; i++) { + if (path[i]._manager === this) { + return path[i]; + } + } + } + + /** + * Ensures the click event is delegated to the right overlay. + * @param {!Event} event + * @private + */ + _onCaptureClick(event) { + var i = this._overlays.length - 1; + if (i === -1) + return; + var path = /** @type {!Array} */ ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(event).path); + var overlay; + // Check if clicked outside of overlay. + while ((overlay = /** @type {?} */ (this._overlays[i])) && + this._overlayInPath(path) !== overlay) { + overlay._onCaptureClick(event); + if (overlay.allowClickThrough) { + i--; + } else { + break; + } + } + } + + /** + * Ensures the focus event is delegated to the right overlay. + * @param {!Event} event + * @private + */ + _onCaptureFocus(event) { + var overlay = /** @type {?} */ (this.currentOverlay()); + if (overlay) { + overlay._onCaptureFocus(event); + } + } + + /** + * Ensures TAB and ESC keyboard events are delegated to the right overlay. + * @param {!Event} event + * @private + */ + _onCaptureKeyDown(event) { + var overlay = /** @type {?} */ (this.currentOverlay()); + if (overlay) { + if (_polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_2__.IronA11yKeysBehavior.keyboardEventMatchesKeys(event, 'esc')) { + overlay._onCaptureEsc(event); + } else if (_polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_2__.IronA11yKeysBehavior.keyboardEventMatchesKeys(event, 'tab')) { + overlay._onCaptureTab(event); + } + } + } + + /** + * Returns if the overlay1 should be behind overlay2. + * @param {!Element} overlay1 + * @param {!Element} overlay2 + * @return {boolean} + * @suppress {missingProperties} + * @private + */ + _shouldBeBehindOverlay(overlay1, overlay2) { + return !overlay1.alwaysOnTop && overlay2.alwaysOnTop; + } +}; + +const IronOverlayManager = new IronOverlayManagerClass(); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-overlay-behavior/iron-scroll-manager.js": +/*!****************************************************************************!*\ + !*** ./node_modules/@polymer/iron-overlay-behavior/iron-scroll-manager.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ _boundScrollHandler: () => (/* binding */ _boundScrollHandler), +/* harmony export */ _composedTreeContains: () => (/* binding */ _composedTreeContains), +/* harmony export */ _getScrollInfo: () => (/* binding */ _getScrollInfo), +/* harmony export */ _getScrollableNodes: () => (/* binding */ _getScrollableNodes), +/* harmony export */ _getScrollingNode: () => (/* binding */ _getScrollingNode), +/* harmony export */ _hasCachedLockedElement: () => (/* binding */ _hasCachedLockedElement), +/* harmony export */ _hasCachedUnlockedElement: () => (/* binding */ _hasCachedUnlockedElement), +/* harmony export */ _lockScrollInteractions: () => (/* binding */ _lockScrollInteractions), +/* harmony export */ _lockedElementCache: () => (/* binding */ _lockedElementCache), +/* harmony export */ _lockingElements: () => (/* binding */ _lockingElements), +/* harmony export */ _scrollInteractionHandler: () => (/* binding */ _scrollInteractionHandler), +/* harmony export */ _shouldPreventScrolling: () => (/* binding */ _shouldPreventScrolling), +/* harmony export */ _unlockScrollInteractions: () => (/* binding */ _unlockScrollInteractions), +/* harmony export */ _unlockedElementCache: () => (/* binding */ _unlockedElementCache), +/* harmony export */ currentLockingElement: () => (/* binding */ currentLockingElement), +/* harmony export */ elementIsScrollLocked: () => (/* binding */ elementIsScrollLocked), +/* harmony export */ pushScrollLock: () => (/* binding */ pushScrollLock), +/* harmony export */ removeScrollLock: () => (/* binding */ removeScrollLock) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2017 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + +/** + * Used to calculate the scroll direction during touch events. + * @type {!Object} + */ +var lastTouchPosition = {pageX: 0, pageY: 0}; +/** + * Used to avoid computing event.path and filter scrollable nodes (better perf). + * @type {?EventTarget} + */ +var lastRootTarget = null; +/** + * @type {!Array} + */ +var lastScrollableNodes = []; +/** + * @type {!Array} + */ +var scrollEvents = [ + // Modern `wheel` event for mouse wheel scrolling: + 'wheel', + // Older, non-standard `mousewheel` event for some FF: + 'mousewheel', + // IE: + 'DOMMouseScroll', + // Touch enabled devices + 'touchstart', + 'touchmove' +]; +// must be defined for modulizer +var _boundScrollHandler; + +/** + * The current element that defines the DOM boundaries of the + * scroll lock. This is always the most recently locking element. + * + * @type {!Node|undefined} + */ +var currentLockingElement; + + + +/** + * Returns true if the provided element is "scroll locked", which is to + * say that it cannot be scrolled via pointer or keyboard interactions. + * + * @param {!HTMLElement} element An HTML element instance which may or may + * not be scroll locked. + */ +function elementIsScrollLocked(element) { + var lockingElement = currentLockingElement; + + if (lockingElement === undefined) { + return false; + } + + var scrollLocked; + + if (_hasCachedLockedElement(element)) { + return true; + } + + if (_hasCachedUnlockedElement(element)) { + return false; + } + + scrollLocked = !!lockingElement && lockingElement !== element && + !_composedTreeContains(lockingElement, element); + + if (scrollLocked) { + _lockedElementCache.push(element); + } else { + _unlockedElementCache.push(element); + } + + return scrollLocked; +} + +/** + * Push an element onto the current scroll lock stack. The most recently + * pushed element and its children will be considered scrollable. All + * other elements will not be scrollable. + * + * Scroll locking is implemented as a stack so that cases such as + * dropdowns within dropdowns are handled well. + * + * @param {!HTMLElement} element The element that should lock scroll. + */ +function pushScrollLock(element) { + // Prevent pushing the same element twice + if (_lockingElements.indexOf(element) >= 0) { + return; + } + + if (_lockingElements.length === 0) { + _lockScrollInteractions(); + } + + _lockingElements.push(element); + currentLockingElement = _lockingElements[_lockingElements.length - 1]; + + _lockedElementCache = []; + _unlockedElementCache = []; +} + +/** + * Remove an element from the scroll lock stack. The element being + * removed does not need to be the most recently pushed element. However, + * the scroll lock constraints only change when the most recently pushed + * element is removed. + * + * @param {!HTMLElement} element The element to remove from the scroll + * lock stack. + */ +function removeScrollLock(element) { + var index = _lockingElements.indexOf(element); + + if (index === -1) { + return; + } + + _lockingElements.splice(index, 1); + currentLockingElement = _lockingElements[_lockingElements.length - 1]; + + _lockedElementCache = []; + _unlockedElementCache = []; + + if (_lockingElements.length === 0) { + _unlockScrollInteractions(); + } +} + +const _lockingElements = []; +let _lockedElementCache = null; +let _unlockedElementCache = null; + +function _hasCachedLockedElement(element) { + return _lockedElementCache.indexOf(element) > -1; +} + +function _hasCachedUnlockedElement(element) { + return _unlockedElementCache.indexOf(element) > -1; +} + +function _composedTreeContains(element, child) { + // NOTE(cdata): This method iterates over content elements and their + // corresponding distributed nodes to implement a contains-like method + // that pierces through the composed tree of the ShadowDOM. Results of + // this operation are cached (elsewhere) on a per-scroll-lock basis, to + // guard against potentially expensive lookups happening repeatedly as + // a user scrolls / touchmoves. + var contentElements; + var distributedNodes; + var contentIndex; + var nodeIndex; + + if (element.contains(child)) { + return true; + } + + contentElements = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(element).querySelectorAll('content,slot'); + + for (contentIndex = 0; contentIndex < contentElements.length; + ++contentIndex) { + distributedNodes = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(contentElements[contentIndex]).getDistributedNodes(); + + for (nodeIndex = 0; nodeIndex < distributedNodes.length; ++nodeIndex) { + // Polymer 2.x returns slot.assignedNodes which can contain text nodes. + if (distributedNodes[nodeIndex].nodeType !== Node.ELEMENT_NODE) + continue; + + if (_composedTreeContains(distributedNodes[nodeIndex], child)) { + return true; + } + } + } + + return false; +} + +function _scrollInteractionHandler(event) { + // Avoid canceling an event with cancelable=false, e.g. scrolling is in + // progress and cannot be interrupted. + if (event.cancelable && _shouldPreventScrolling(event)) { + event.preventDefault(); + } + // If event has targetTouches (touch event), update last touch position. + if (event.targetTouches) { + var touch = event.targetTouches[0]; + lastTouchPosition.pageX = touch.pageX; + lastTouchPosition.pageY = touch.pageY; + } +} + +/** + * @package + */ + + +function _lockScrollInteractions() { + _boundScrollHandler = + _boundScrollHandler || _scrollInteractionHandler.bind(undefined); + for (var i = 0, l = scrollEvents.length; i < l; i++) { + // NOTE: browsers that don't support objects as third arg will + // interpret it as boolean, hence useCapture = true in this case. + document.addEventListener( + scrollEvents[i], _boundScrollHandler, {capture: true, passive: false}); + } +} + +function _unlockScrollInteractions() { + for (var i = 0, l = scrollEvents.length; i < l; i++) { + // NOTE: browsers that don't support objects as third arg will + // interpret it as boolean, hence useCapture = true in this case. + document.removeEventListener( + scrollEvents[i], _boundScrollHandler, {capture: true, passive: false}); + } +} + +/** + * Returns true if the event causes scroll outside the current locking + * element, e.g. pointer/keyboard interactions, or scroll "leaking" + * outside the locking element when it is already at its scroll boundaries. + * @param {!Event} event + * @return {boolean} + * @package + */ +function _shouldPreventScrolling(event) { + // Update if root target changed. For touch events, ensure we don't + // update during touchmove. + var target = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(event).rootTarget; + if (event.type !== 'touchmove' && lastRootTarget !== target) { + lastRootTarget = target; + lastScrollableNodes = _getScrollableNodes((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(event).path); + } + + // Prevent event if no scrollable nodes. + if (!lastScrollableNodes.length) { + return true; + } + // Don't prevent touchstart event inside the locking element when it has + // scrollable nodes. + if (event.type === 'touchstart') { + return false; + } + // Get deltaX/Y. + var info = _getScrollInfo(event); + // Prevent if there is no child that can scroll. + return !_getScrollingNode(lastScrollableNodes, info.deltaX, info.deltaY); +} + +/** + * Returns an array of scrollable nodes up to the current locking element, + * which is included too if scrollable. + * @param {!Array} nodes + * @return {!Array} scrollables + * @package + */ +function _getScrollableNodes(nodes) { + var scrollables = []; + var lockingIndex = + nodes.indexOf(/** @type {!Node} */ (currentLockingElement)); + // Loop from root target to locking element (included). + for (var i = 0; i <= lockingIndex; i++) { + // Skip non-Element nodes. + if (nodes[i].nodeType !== Node.ELEMENT_NODE) { + continue; + } + var node = /** @type {!Element} */ (nodes[i]); + // Check inline style before checking computed style. + var style = node.style; + if (style.overflow !== 'scroll' && style.overflow !== 'auto') { + style = window.getComputedStyle(node); + } + if (style.overflow === 'scroll' || style.overflow === 'auto') { + scrollables.push(node); + } + } + return scrollables; +} + +/** + * Returns the node that is scrolling. If there is no scrolling, + * returns undefined. + * @param {!Array} nodes + * @param {number} deltaX Scroll delta on the x-axis + * @param {number} deltaY Scroll delta on the y-axis + * @return {!Node|undefined} + * @package + */ +function _getScrollingNode(nodes, deltaX, deltaY) { + // No scroll. + if (!deltaX && !deltaY) { + return; + } + // Check only one axis according to where there is more scroll. + // Prefer vertical to horizontal. + var verticalScroll = Math.abs(deltaY) >= Math.abs(deltaX); + for (var i = 0; i < nodes.length; i++) { + var node = nodes[i]; + var canScroll = false; + if (verticalScroll) { + // delta < 0 is scroll up, delta > 0 is scroll down. + canScroll = deltaY < 0 ? + node.scrollTop > 0 : + node.scrollTop < node.scrollHeight - node.clientHeight; + } else { + // delta < 0 is scroll left, delta > 0 is scroll right. + canScroll = deltaX < 0 ? + node.scrollLeft > 0 : + node.scrollLeft < node.scrollWidth - node.clientWidth; + } + if (canScroll) { + return node; + } + } +} + +/** + * Returns scroll `deltaX` and `deltaY`. + * @param {!Event} event The scroll event + * @return {{deltaX: number, deltaY: number}} Object containing the + * x-axis scroll delta (positive: scroll right, negative: scroll left, + * 0: no scroll), and the y-axis scroll delta (positive: scroll down, + * negative: scroll up, 0: no scroll). + * @package + */ +function _getScrollInfo(event) { + var info = {deltaX: event.deltaX, deltaY: event.deltaY}; + // Already available. + if ('deltaX' in event) { + // do nothing, values are already good. + } + // Safari has scroll info in `wheelDeltaX/Y`. + else if ('wheelDeltaX' in event && 'wheelDeltaY' in event) { + info.deltaX = -event.wheelDeltaX; + info.deltaY = -event.wheelDeltaY; + } + // IE10 has only vertical scroll info in `wheelDelta`. + else if ('wheelDelta' in event) { + info.deltaX = 0; + info.deltaY = -event.wheelDelta; + } + // Firefox has scroll info in `detail` and `axis`. + else if ('axis' in event) { + info.deltaX = event.axis === 1 ? event.detail : 0; + info.deltaY = event.axis === 2 ? event.detail : 0; + } + // On mobile devices, calculate scroll direction. + else if (event.targetTouches) { + var touch = event.targetTouches[0]; + // Touch moves from right to left => scrolling goes right. + info.deltaX = lastTouchPosition.pageX - touch.pageX; + // Touch moves from down to up => scrolling goes down. + info.deltaY = lastTouchPosition.pageY - touch.pageY; + } + return info; +} + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-pages/iron-pages.js": +/*!********************************************************!*\ + !*** ./node_modules/@polymer/iron-pages/iron-pages.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_resizable_behavior_iron_resizable_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-resizable-behavior/iron-resizable-behavior.js */ "./node_modules/@polymer/iron-resizable-behavior/iron-resizable-behavior.js"); +/* harmony import */ var _polymer_iron_selector_iron_selectable_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-selector/iron-selectable.js */ "./node_modules/@polymer/iron-selector/iron-selectable.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +/** +`iron-pages` is used to select one of its children to show. One use is to cycle +through a list of children "pages". + +Example: + + +
One
+
Two
+
Three
+
+ + + +@group Iron Elements +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_4__.html)` + + + +`, + + is: 'iron-pages', + behaviors: [_polymer_iron_resizable_behavior_iron_resizable_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronResizableBehavior, _polymer_iron_selector_iron_selectable_js__WEBPACK_IMPORTED_MODULE_2__.IronSelectableBehavior], + + properties: { + + // as the selected page is the only one visible, activateEvent + // is both non-sensical and problematic; e.g. in cases where a user + // handler attempts to change the page and the activateEvent + // handler immediately changes it back + activateEvent: {type: String, value: null} + + }, + + observers: ['_selectedPageChanged(selected)'], + + _selectedPageChanged: function(selected, old) { + this.async(this.notifyResize); + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-resizable-behavior/iron-resizable-behavior.js": +/*!**********************************************************************************!*\ + !*** ./node_modules/@polymer/iron-resizable-behavior/iron-resizable-behavior.js ***! + \**********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronResizableBehavior: () => (/* binding */ IronResizableBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_settings_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/utils/settings.js */ "./node_modules/@polymer/polymer/lib/utils/settings.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +// Contains all connected resizables that do not have a parent. +var ORPHANS = new Set(); + +/** + * `IronResizableBehavior` is a behavior that can be used in Polymer elements to + * coordinate the flow of resize events between "resizers" (elements that + *control the size or hidden state of their children) and "resizables" (elements + *that need to be notified when they are resized or un-hidden by their parents + *in order to take action on their new measurements). + * + * Elements that perform measurement should add the `IronResizableBehavior` + *behavior to their element definition and listen for the `iron-resize` event on + *themselves. This event will be fired when they become showing after having + *been hidden, when they are resized explicitly by another resizable, or when + *the window has been resized. + * + * Note, the `iron-resize` event is non-bubbling. + * + * @polymerBehavior + * @demo demo/index.html + **/ +const IronResizableBehavior = { + properties: { + /** + * The closest ancestor element that implements `IronResizableBehavior`. + */ + _parentResizable: { + type: Object, + observer: '_parentResizableChanged', + }, + + /** + * True if this element is currently notifying its descendant elements of + * resize. + */ + _notifyingDescendant: { + type: Boolean, + value: false, + } + }, + + listeners: { + 'iron-request-resize-notifications': '_onIronRequestResizeNotifications' + }, + + created: function() { + // We don't really need property effects on these, and also we want them + // to be created before the `_parentResizable` observer fires: + this._interestedResizables = []; + this._boundNotifyResize = this.notifyResize.bind(this); + this._boundOnDescendantIronResize = this._onDescendantIronResize.bind(this); + }, + + attached: function() { + this._requestResizeNotifications(); + }, + + detached: function() { + if (this._parentResizable) { + this._parentResizable.stopResizeNotificationsFor(this); + } else { + ORPHANS.delete(this); + window.removeEventListener('resize', this._boundNotifyResize); + } + + this._parentResizable = null; + }, + + /** + * Can be called to manually notify a resizable and its descendant + * resizables of a resize change. + */ + notifyResize: function() { + if (!this.isAttached) { + return; + } + + this._interestedResizables.forEach(function(resizable) { + if (this.resizerShouldNotify(resizable)) { + this._notifyDescendant(resizable); + } + }, this); + + this._fireResize(); + }, + + /** + * Used to assign the closest resizable ancestor to this resizable + * if the ancestor detects a request for notifications. + */ + assignParentResizable: function(parentResizable) { + if (this._parentResizable) { + this._parentResizable.stopResizeNotificationsFor(this); + } + + this._parentResizable = parentResizable; + + if (parentResizable && + parentResizable._interestedResizables.indexOf(this) === -1) { + parentResizable._interestedResizables.push(this); + parentResizable._subscribeIronResize(this); + } + }, + + /** + * Used to remove a resizable descendant from the list of descendants + * that should be notified of a resize change. + */ + stopResizeNotificationsFor: function(target) { + var index = this._interestedResizables.indexOf(target); + + if (index > -1) { + this._interestedResizables.splice(index, 1); + this._unsubscribeIronResize(target); + } + }, + + /** + * Subscribe this element to listen to iron-resize events on the given target. + * + * Preferred over target.listen because the property renamer does not + * understand to rename when the target is not specifically "this" + * + * @param {!HTMLElement} target Element to listen to for iron-resize events. + */ + _subscribeIronResize: function(target) { + target.addEventListener('iron-resize', this._boundOnDescendantIronResize); + }, + + /** + * Unsubscribe this element from listening to to iron-resize events on the + * given target. + * + * Preferred over target.unlisten because the property renamer does not + * understand to rename when the target is not specifically "this" + * + * @param {!HTMLElement} target Element to listen to for iron-resize events. + */ + _unsubscribeIronResize: function(target) { + target.removeEventListener( + 'iron-resize', this._boundOnDescendantIronResize); + }, + + /** + * This method can be overridden to filter nested elements that should or + * should not be notified by the current element. Return true if an element + * should be notified, or false if it should not be notified. + * + * @param {HTMLElement} element A candidate descendant element that + * implements `IronResizableBehavior`. + * @return {boolean} True if the `element` should be notified of resize. + */ + resizerShouldNotify: function(element) { + return true; + }, + + _onDescendantIronResize: function(event) { + if (this._notifyingDescendant) { + event.stopPropagation(); + return; + } + + // no need to use this during shadow dom because of event retargeting + if (!_polymer_polymer_lib_utils_settings_js__WEBPACK_IMPORTED_MODULE_2__.useShadow) { + this._fireResize(); + } + }, + + _fireResize: function() { + this.fire('iron-resize', null, {node: this, bubbles: false}); + }, + + _onIronRequestResizeNotifications: function(event) { + var target = /** @type {!EventTarget} */ ((0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(event).rootTarget); + if (target === this) { + return; + } + + target.assignParentResizable(this); + this._notifyDescendant(target); + + event.stopPropagation(); + }, + + _parentResizableChanged: function(parentResizable) { + if (parentResizable) { + window.removeEventListener('resize', this._boundNotifyResize); + } + }, + + _notifyDescendant: function(descendant) { + // NOTE(cdata): In IE10, attached is fired on children first, so it's + // important not to notify them if the parent is not attached yet (or + // else they will get redundantly notified when the parent attaches). + if (!this.isAttached) { + return; + } + + this._notifyingDescendant = true; + descendant.notifyResize(); + this._notifyingDescendant = false; + }, + + _requestResizeNotifications: function() { + if (!this.isAttached) { + return; + } + + if (document.readyState === 'loading') { + var _requestResizeNotifications = + this._requestResizeNotifications.bind(this); + document.addEventListener( + 'readystatechange', function readystatechanged() { + document.removeEventListener('readystatechange', readystatechanged); + _requestResizeNotifications(); + }); + } else { + this._findParent(); + + if (!this._parentResizable) { + // If this resizable is an orphan, tell other orphans to try to find + // their parent again, in case it's this resizable. + ORPHANS.forEach(function(orphan) { + if (orphan !== this) { + orphan._findParent(); + } + }, this); + + window.addEventListener('resize', this._boundNotifyResize); + this.notifyResize(); + } else { + // If this resizable has a parent, tell other child resizables of + // that parent to try finding their parent again, in case it's this + // resizable. + this._parentResizable._interestedResizables + .forEach(function(resizable) { + if (resizable !== this) { + resizable._findParent(); + } + }, this); + } + } + }, + + _findParent: function() { + this.assignParentResizable(null); + this.fire( + 'iron-request-resize-notifications', + null, + {node: this, bubbles: true, cancelable: true}); + + if (!this._parentResizable) { + ORPHANS.add(this); + } else { + ORPHANS.delete(this); + } + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-scroll-target-behavior/iron-scroll-target-behavior.js": +/*!******************************************************************************************!*\ + !*** ./node_modules/@polymer/iron-scroll-target-behavior/iron-scroll-target-behavior.js ***! + \******************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronScrollTargetBehavior: () => (/* binding */ IronScrollTargetBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** + * `Polymer.IronScrollTargetBehavior` allows an element to respond to scroll + * events from a designated scroll target. + * + * Elements that consume this behavior can override the `_scrollHandler` + * method to add logic on the scroll event. + * + * @demo demo/scrolling-region.html Scrolling Region + * @demo demo/document.html Document Element + * @polymerBehavior + */ +const IronScrollTargetBehavior = { + + properties: { + + /** + * Specifies the element that will handle the scroll event + * on the behalf of the current element. This is typically a reference to an + *element, but there are a few more posibilities: + * + * ### Elements id + * + *```html + *
+ * + * + * + *
+ *``` + * In this case, the `scrollTarget` will point to the outer div element. + * + * ### Document scrolling + * + * For document scrolling, you can use the reserved word `document`: + * + *```html + * + * + * + *``` + * + * ### Elements reference + * + *```js + * appHeader.scrollTarget = document.querySelector('#scrollable-element'); + *``` + * + * @type {HTMLElement} + * @default document + */ + scrollTarget: { + type: HTMLElement, + value: function() { + return this._defaultScrollTarget; + } + } + }, + + observers: ['_scrollTargetChanged(scrollTarget, isAttached)'], + + /** + * True if the event listener should be installed. + */ + _shouldHaveListener: true, + + _scrollTargetChanged: function(scrollTarget, isAttached) { + var eventTarget; + + if (this._oldScrollTarget) { + this._toggleScrollListener(false, this._oldScrollTarget); + this._oldScrollTarget = null; + } + if (!isAttached) { + return; + } + // Support element id references + if (scrollTarget === 'document') { + this.scrollTarget = this._doc; + + } else if (typeof scrollTarget === 'string') { + var domHost = this.domHost; + + this.scrollTarget = domHost && domHost.$ ? + domHost.$[scrollTarget] : + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(this.ownerDocument).querySelector('#' + scrollTarget); + + } else if (this._isValidScrollTarget()) { + this._oldScrollTarget = scrollTarget; + this._toggleScrollListener(this._shouldHaveListener, scrollTarget); + } + }, + + /** + * Runs on every scroll event. Consumer of this behavior may override this + * method. + * + * @protected + */ + _scrollHandler: function scrollHandler() {}, + + /** + * The default scroll target. Consumers of this behavior may want to customize + * the default scroll target. + * + * @type {Element} + */ + get _defaultScrollTarget() { + return this._doc; + }, + + /** + * Shortcut for the document element + * + * @type {Element} + */ + get _doc() { + return this.ownerDocument.documentElement; + }, + + /** + * Gets the number of pixels that the content of an element is scrolled + * upward. + * + * @type {number} + */ + get _scrollTop() { + if (this._isValidScrollTarget()) { + return this.scrollTarget === this._doc ? window.pageYOffset : + this.scrollTarget.scrollTop; + } + return 0; + }, + + /** + * Gets the number of pixels that the content of an element is scrolled to the + * left. + * + * @type {number} + */ + get _scrollLeft() { + if (this._isValidScrollTarget()) { + return this.scrollTarget === this._doc ? window.pageXOffset : + this.scrollTarget.scrollLeft; + } + return 0; + }, + + /** + * Sets the number of pixels that the content of an element is scrolled + * upward. + * + * @type {number} + */ + set _scrollTop(top) { + if (this.scrollTarget === this._doc) { + window.scrollTo(window.pageXOffset, top); + } else if (this._isValidScrollTarget()) { + this.scrollTarget.scrollTop = top; + } + }, + + /** + * Sets the number of pixels that the content of an element is scrolled to the + * left. + * + * @type {number} + */ + set _scrollLeft(left) { + if (this.scrollTarget === this._doc) { + window.scrollTo(left, window.pageYOffset); + } else if (this._isValidScrollTarget()) { + this.scrollTarget.scrollLeft = left; + } + }, + + /** + * Scrolls the content to a particular place. + * + * @method scroll + * @param {number|!{left: number, top: number}} leftOrOptions The left position or scroll options + * @param {number=} top The top position + * @return {void} + */ + scroll: function(leftOrOptions, top) { + var left; + + if (typeof leftOrOptions === 'object') { + left = leftOrOptions.left; + top = leftOrOptions.top; + } else { + left = leftOrOptions; + } + + left = left || 0; + top = top || 0; + if (this.scrollTarget === this._doc) { + window.scrollTo(left, top); + } else if (this._isValidScrollTarget()) { + this.scrollTarget.scrollLeft = left; + this.scrollTarget.scrollTop = top; + } + }, + + /** + * Gets the width of the scroll target. + * + * @type {number} + */ + get _scrollTargetWidth() { + if (this._isValidScrollTarget()) { + return this.scrollTarget === this._doc ? window.innerWidth : + this.scrollTarget.offsetWidth; + } + return 0; + }, + + /** + * Gets the height of the scroll target. + * + * @type {number} + */ + get _scrollTargetHeight() { + if (this._isValidScrollTarget()) { + return this.scrollTarget === this._doc ? window.innerHeight : + this.scrollTarget.offsetHeight; + } + return 0; + }, + + /** + * Returns true if the scroll target is a valid HTMLElement. + * + * @return {boolean} + */ + _isValidScrollTarget: function() { + return this.scrollTarget instanceof HTMLElement; + }, + + _toggleScrollListener: function(yes, scrollTarget) { + var eventTarget = scrollTarget === this._doc ? window : scrollTarget; + if (yes) { + if (!this._boundScrollHandler) { + this._boundScrollHandler = this._scrollHandler.bind(this); + eventTarget.addEventListener('scroll', this._boundScrollHandler); + } + } else { + if (this._boundScrollHandler) { + eventTarget.removeEventListener('scroll', this._boundScrollHandler); + this._boundScrollHandler = null; + } + } + }, + + /** + * Enables or disables the scroll event listener. + * + * @param {boolean} yes True to add the event, False to remove it. + */ + toggleScrollListener: function(yes) { + this._shouldHaveListener = yes; + this._toggleScrollListener(yes, this.scrollTarget); + } + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-selector/iron-multi-selectable.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@polymer/iron-selector/iron-multi-selectable.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronMultiSelectableBehavior: () => (/* binding */ IronMultiSelectableBehavior), +/* harmony export */ IronMultiSelectableBehaviorImpl: () => (/* binding */ IronMultiSelectableBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _iron_selectable_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./iron-selectable.js */ "./node_modules/@polymer/iron-selector/iron-selectable.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** + * @polymerBehavior IronMultiSelectableBehavior + */ +const IronMultiSelectableBehaviorImpl = { + properties: { + + /** + * If true, multiple selections are allowed. + */ + multi: {type: Boolean, value: false, observer: 'multiChanged'}, + + /** + * Gets or sets the selected elements. This is used instead of `selected` + * when `multi` is true. + */ + selectedValues: { + type: Array, + notify: true, + value: function() { + return []; + } + }, + + /** + * Returns an array of currently selected items. + */ + selectedItems: { + type: Array, + readOnly: true, + notify: true, + value: function() { + return []; + } + }, + + }, + + observers: ['_updateSelected(selectedValues.splices)'], + + /** + * Selects the given value. If the `multi` property is true, then the selected + * state of the `value` will be toggled; otherwise the `value` will be + * selected. + * + * @method select + * @param {string|number} value the value to select. + */ + select: function(value) { + if (this.multi) { + this._toggleSelected(value); + } else { + this.selected = value; + } + }, + + multiChanged: function(multi) { + this._selection.multi = multi; + this._updateSelected(); + }, + + // UNUSED, FOR API COMPATIBILITY + get _shouldUpdateSelection() { + return this.selected != null || + (this.selectedValues != null && this.selectedValues.length); + }, + + _updateAttrForSelected: function() { + if (!this.multi) { + _iron_selectable_js__WEBPACK_IMPORTED_MODULE_1__.IronSelectableBehavior._updateAttrForSelected.apply(this); + } else if (this.selectedItems && this.selectedItems.length > 0) { + this.selectedValues = + this.selectedItems + .map( + function(selectedItem) { + return this._indexToValue(this.indexOf(selectedItem)); + }, + this) + .filter(function(unfilteredValue) { + return unfilteredValue != null; + }, this); + } + }, + + _updateSelected: function() { + if (this.multi) { + this._selectMulti(this.selectedValues); + } else { + this._selectSelected(this.selected); + } + }, + + _selectMulti: function(values) { + values = values || []; + + var selectedItems = + (this._valuesToItems(values) || []).filter(function(item) { + return item !== null && item !== undefined; + }); + + // clear all but the current selected items + this._selection.clear(selectedItems); + + // select only those not selected yet + for (var i = 0; i < selectedItems.length; i++) { + this._selection.setItemSelected(selectedItems[i], true); + } + + // Check for items, since this array is populated only when attached + if (this.fallbackSelection && !this._selection.get().length) { + var fallback = this._valueToItem(this.fallbackSelection); + if (fallback) { + this.select(this.fallbackSelection); + } + } + }, + + _selectionChange: function() { + var s = this._selection.get(); + if (this.multi) { + this._setSelectedItems(s); + this._setSelectedItem(s.length ? s[0] : null); + } else { + if (s !== null && s !== undefined) { + this._setSelectedItems([s]); + this._setSelectedItem(s); + } else { + this._setSelectedItems([]); + this._setSelectedItem(null); + } + } + }, + + _toggleSelected: function(value) { + var i = this.selectedValues.indexOf(value); + var unselected = i < 0; + if (unselected) { + this.push('selectedValues', value); + } else { + this.splice('selectedValues', i, 1); + } + }, + + _valuesToItems: function(values) { + return (values == null) ? null : values.map(function(value) { + return this._valueToItem(value); + }, this); + } +}; + +/** @polymerBehavior */ +const IronMultiSelectableBehavior = + [_iron_selectable_js__WEBPACK_IMPORTED_MODULE_1__.IronSelectableBehavior, IronMultiSelectableBehaviorImpl]; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-selector/iron-selectable.js": +/*!****************************************************************!*\ + !*** ./node_modules/@polymer/iron-selector/iron-selectable.js ***! + \****************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronSelectableBehavior: () => (/* binding */ IronSelectableBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_case_map_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/utils/case-map.js */ "./node_modules/@polymer/polymer/lib/utils/case-map.js"); +/* harmony import */ var _iron_selection_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./iron-selection.js */ "./node_modules/@polymer/iron-selector/iron-selection.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +/** + * @polymerBehavior + */ +const IronSelectableBehavior = { + + /** + * Fired when iron-selector is activated (selected or deselected). + * It is fired before the selected items are changed. + * Cancel the event to abort selection. + * + * @event iron-activate + */ + + /** + * Fired when an item is selected + * + * @event iron-select + */ + + /** + * Fired when an item is deselected + * + * @event iron-deselect + */ + + /** + * Fired when the list of selectable items changes (e.g., items are + * added or removed). The detail of the event is a mutation record that + * describes what changed. + * + * @event iron-items-changed + */ + + properties: { + + /** + * If you want to use an attribute value or property of an element for + * `selected` instead of the index, set this to the name of the attribute + * or property. Hyphenated values are converted to camel case when used to + * look up the property of a selectable element. Camel cased values are + * *not* converted to hyphenated values for attribute lookup. It's + * recommended that you provide the hyphenated form of the name so that + * selection works in both cases. (Use `attr-or-property-name` instead of + * `attrOrPropertyName`.) + */ + attrForSelected: {type: String, value: null}, + + /** + * Gets or sets the selected element. The default is to use the index of the + * item. + * @type {string|number} + */ + selected: {type: String, notify: true}, + + /** + * Returns the currently selected item. + * + * @type {?Object} + */ + selectedItem: {type: Object, readOnly: true, notify: true}, + + /** + * The event that fires from items when they are selected. Selectable + * will listen for this event from items and update the selection state. + * Set to empty string to listen to no events. + */ + activateEvent: + {type: String, value: 'tap', observer: '_activateEventChanged'}, + + /** + * This is a CSS selector string. If this is set, only items that match the + * CSS selector are selectable. + */ + selectable: String, + + /** + * The class to set on elements when selected. + */ + selectedClass: {type: String, value: 'iron-selected'}, + + /** + * The attribute to set on elements when selected. + */ + selectedAttribute: {type: String, value: null}, + + /** + * Default fallback if the selection based on selected with + * `attrForSelected` is not found. + */ + fallbackSelection: {type: String, value: null}, + + /** + * The list of items from which a selection can be made. + */ + items: { + type: Array, + readOnly: true, + notify: true, + value: function() { + return []; + } + }, + + /** + * The set of excluded elements where the key is the `localName` + * of the element that will be ignored from the item list. + * + * @default {template: 1} + */ + _excludedLocalNames: { + type: Object, + value: function() { + return { + 'template': 1, + 'dom-bind': 1, + 'dom-if': 1, + 'dom-repeat': 1, + }; + } + } + }, + + observers: [ + '_updateAttrForSelected(attrForSelected)', + '_updateSelected(selected)', + '_checkFallback(fallbackSelection)' + ], + + created: function() { + this._bindFilterItem = this._filterItem.bind(this); + this._selection = new _iron_selection_js__WEBPACK_IMPORTED_MODULE_3__.IronSelection(this._applySelection.bind(this)); + }, + + attached: function() { + this._observer = this._observeItems(this); + this._addListener(this.activateEvent); + }, + + detached: function() { + if (this._observer) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(this).unobserveNodes(this._observer); + } + this._removeListener(this.activateEvent); + }, + + /** + * Returns the index of the given item. + * + * @method indexOf + * @param {Object} item + * @returns Returns the index of the item + */ + indexOf: function(item) { + return this.items ? this.items.indexOf(item) : -1; + }, + + /** + * Selects the given value. + * + * @method select + * @param {string|number} value the value to select. + */ + select: function(value) { + this.selected = value; + }, + + /** + * Selects the previous item. + * + * @method selectPrevious + */ + selectPrevious: function() { + var length = this.items.length; + var index = length - 1; + if (this.selected !== undefined) { + index = (Number(this._valueToIndex(this.selected)) - 1 + length) % length; + } + this.selected = this._indexToValue(index); + }, + + /** + * Selects the next item. + * + * @method selectNext + */ + selectNext: function() { + var index = 0; + if (this.selected !== undefined) { + index = + (Number(this._valueToIndex(this.selected)) + 1) % this.items.length; + } + this.selected = this._indexToValue(index); + }, + + /** + * Selects the item at the given index. + * + * @method selectIndex + */ + selectIndex: function(index) { + this.select(this._indexToValue(index)); + }, + + /** + * Force a synchronous update of the `items` property. + * + * NOTE: Consider listening for the `iron-items-changed` event to respond to + * updates to the set of selectable items after updates to the DOM list and + * selection state have been made. + * + * WARNING: If you are using this method, you should probably consider an + * alternate approach. Synchronously querying for items is potentially + * slow for many use cases. The `items` property will update asynchronously + * on its own to reflect selectable items in the DOM. + */ + forceSynchronousItemUpdate: function() { + if (this._observer && typeof this._observer.flush === 'function') { + // NOTE(bicknellr): `dom.flush` above is no longer sufficient to trigger + // `observeNodes` callbacks. Polymer 2.x returns an object from + // `observeNodes` with a `flush` that synchronously gives the callback any + // pending MutationRecords (retrieved with `takeRecords`). Any case where + // ShadyDOM flushes were expected to synchronously trigger item updates + // will now require calling `forceSynchronousItemUpdate`. + this._observer.flush(); + } else { + this._updateItems(); + } + }, + + // UNUSED, FOR API COMPATIBILITY + get _shouldUpdateSelection() { + return this.selected != null; + }, + + _checkFallback: function() { + this._updateSelected(); + }, + + _addListener: function(eventName) { + this.listen(this, eventName, '_activateHandler'); + }, + + _removeListener: function(eventName) { + this.unlisten(this, eventName, '_activateHandler'); + }, + + _activateEventChanged: function(eventName, old) { + this._removeListener(old); + this._addListener(eventName); + }, + + _updateItems: function() { + var nodes = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(this).queryDistributedElements(this.selectable || '*'); + nodes = Array.prototype.filter.call(nodes, this._bindFilterItem); + this._setItems(nodes); + }, + + _updateAttrForSelected: function() { + if (this.selectedItem) { + this.selected = this._valueForItem(this.selectedItem); + } + }, + + _updateSelected: function() { + this._selectSelected(this.selected); + }, + + _selectSelected: function(selected) { + if (!this.items) { + return; + } + + var item = this._valueToItem(this.selected); + if (item) { + this._selection.select(item); + } else { + this._selection.clear(); + } + // Check for items, since this array is populated only when attached + // Since Number(0) is falsy, explicitly check for undefined + if (this.fallbackSelection && this.items.length && + (this._selection.get() === undefined)) { + this.selected = this.fallbackSelection; + } + }, + + _filterItem: function(node) { + return !this._excludedLocalNames[node.localName]; + }, + + _valueToItem: function(value) { + return (value == null) ? null : this.items[this._valueToIndex(value)]; + }, + + _valueToIndex: function(value) { + if (this.attrForSelected) { + for (var i = 0, item; item = this.items[i]; i++) { + if (this._valueForItem(item) == value) { + return i; + } + } + } else { + return Number(value); + } + }, + + _indexToValue: function(index) { + if (this.attrForSelected) { + var item = this.items[index]; + if (item) { + return this._valueForItem(item); + } + } else { + return index; + } + }, + + _valueForItem: function(item) { + if (!item) { + return null; + } + if (!this.attrForSelected) { + var i = this.indexOf(item); + return i === -1 ? null : i; + } + var propValue = item[(0,_polymer_polymer_lib_utils_case_map_js__WEBPACK_IMPORTED_MODULE_2__.dashToCamelCase)(this.attrForSelected)]; + return propValue != undefined ? propValue : + item.getAttribute(this.attrForSelected); + }, + + _applySelection: function(item, isSelected) { + if (this.selectedClass) { + this.toggleClass(this.selectedClass, isSelected, item); + } + if (this.selectedAttribute) { + this.toggleAttribute(this.selectedAttribute, isSelected, item); + } + this._selectionChange(); + this.fire('iron-' + (isSelected ? 'select' : 'deselect'), {item: item}); + }, + + _selectionChange: function() { + this._setSelectedItem(this._selection.get()); + }, + + // observe items change under the given node. + _observeItems: function(node) { + return (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_1__.dom)(node).observeNodes(function(mutation) { + this._updateItems(); + this._updateSelected(); + + // Let other interested parties know about the change so that + // we don't have to recreate mutation observers everywhere. + this.fire( + 'iron-items-changed', mutation, {bubbles: false, cancelable: false}); + }); + }, + + _activateHandler: function(e) { + var t = e.target; + var items = this.items; + while (t && t != this) { + var i = items.indexOf(t); + if (i >= 0) { + var value = this._indexToValue(i); + this._itemActivate(value, t); + return; + } + t = t.parentNode; + } + }, + + _itemActivate: function(value, item) { + if (!this.fire('iron-activate', {selected: value, item: item}, { + cancelable: true + }) + .defaultPrevented) { + this.select(value); + } + } + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-selector/iron-selection.js": +/*!***************************************************************!*\ + !*** ./node_modules/@polymer/iron-selector/iron-selection.js ***! + \***************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronSelection: () => (/* binding */ IronSelection) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +class IronSelection { + /** + * @param {!Function} selectCallback + * @suppress {missingProvide} + */ + constructor(selectCallback) { + this.selection = []; + this.selectCallback = selectCallback; + } + + /** + * Retrieves the selected item(s). + * + * @returns Returns the selected item(s). If the multi property is true, + * `get` will return an array, otherwise it will return + * the selected item or undefined if there is no selection. + */ + get() { + return this.multi ? this.selection.slice() : this.selection[0]; + } + + /** + * Clears all the selection except the ones indicated. + * + * @param {Array} excludes items to be excluded. + */ + clear(excludes) { + this.selection.slice().forEach(function(item) { + if (!excludes || excludes.indexOf(item) < 0) { + this.setItemSelected(item, false); + } + }, this); + } + + /** + * Indicates if a given item is selected. + * + * @param {*} item The item whose selection state should be checked. + * @return {boolean} Returns true if `item` is selected. + */ + isSelected(item) { + return this.selection.indexOf(item) >= 0; + } + + /** + * Sets the selection state for a given item to either selected or deselected. + * + * @param {*} item The item to select. + * @param {boolean} isSelected True for selected, false for deselected. + */ + setItemSelected(item, isSelected) { + if (item != null) { + if (isSelected !== this.isSelected(item)) { + // proceed to update selection only if requested state differs from + // current + if (isSelected) { + this.selection.push(item); + } else { + var i = this.selection.indexOf(item); + if (i >= 0) { + this.selection.splice(i, 1); + } + } + if (this.selectCallback) { + this.selectCallback(item, isSelected); + } + } + } + } + + /** + * Sets the selection state for a given item. If the `multi` property + * is true, then the selected state of `item` will be toggled; otherwise + * the `item` will be selected. + * + * @param {*} item The item to select. + */ + select(item) { + if (this.multi) { + this.toggle(item); + } else if (this.get() !== item) { + this.setItemSelected(this.get(), false); + this.setItemSelected(item, true); + } + } + + /** + * Toggles the selection state for `item`. + * + * @param {*} item The item to toggle. + */ + toggle(item) { + this.setItemSelected(item, !this.isSelected(item)); + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/iron-validatable-behavior/iron-validatable-behavior.js": +/*!**************************************************************************************!*\ + !*** ./node_modules/@polymer/iron-validatable-behavior/iron-validatable-behavior.js ***! + \**************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ IronValidatableBehavior: () => (/* binding */ IronValidatableBehavior), +/* harmony export */ IronValidatableBehaviorMeta: () => (/* binding */ IronValidatableBehaviorMeta) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_meta_iron_meta_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-meta/iron-meta.js */ "./node_modules/@polymer/iron-meta/iron-meta.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** + * Singleton IronMeta instance. + */ +let IronValidatableBehaviorMeta = null; + +/** + * `Use IronValidatableBehavior` to implement an element that validates + * user input. Use the related `IronValidatorBehavior` to add custom + * validation logic to an iron-input. + * + * By default, an `` element validates its fields when the user + * presses the submit button. To validate a form imperatively, call the form's + * `validate()` method, which in turn will call `validate()` on all its + * children. By using `IronValidatableBehavior`, your custom element + * will get a public `validate()`, which will return the validity of the + * element, and a corresponding `invalid` attribute, which can be used for + * styling. + * + * To implement the custom validation logic of your element, you must override + * the protected `_getValidity()` method of this behaviour, rather than + * `validate()`. See + * [this](https://github.com/PolymerElements/iron-form/blob/master/demo/simple-element.html) + * for an example. + * + * ### Accessibility + * + * Changing the `invalid` property, either manually or by calling `validate()` + * will update the `aria-invalid` attribute. + * + * @demo demo/index.html + * @polymerBehavior + */ +const IronValidatableBehavior = { + + properties: { + /** + * Name of the validator to use. + */ + validator: {type: String}, + + /** + * True if the last call to `validate` is invalid. + */ + invalid: { + notify: true, + reflectToAttribute: true, + type: Boolean, + value: false, + observer: '_invalidChanged' + }, + }, + + registered: function() { + IronValidatableBehaviorMeta = new _polymer_iron_meta_iron_meta_js__WEBPACK_IMPORTED_MODULE_1__.IronMeta({type: 'validator'}); + }, + + _invalidChanged: function() { + if (this.invalid) { + this.setAttribute('aria-invalid', 'true'); + } else { + this.removeAttribute('aria-invalid'); + } + }, + + /* Recompute this every time it's needed, because we don't know if the + * underlying IronValidatableBehaviorMeta has changed. */ + get _validator() { + return IronValidatableBehaviorMeta && + IronValidatableBehaviorMeta.byKey(this.validator); + }, + + /** + * @return {boolean} True if the validator `validator` exists. + */ + hasValidator: function() { + return this._validator != null; + }, + + /** + * Returns true if the `value` is valid, and updates `invalid`. If you want + * your element to have custom validation logic, do not override this method; + * override `_getValidity(value)` instead. + + * @param {Object} value Deprecated: The value to be validated. By default, + * it is passed to the validator's `validate()` function, if a validator is + set. + * If this argument is not specified, then the element's `value` property + * is used, if it exists. + * @return {boolean} True if `value` is valid. + */ + validate: function(value) { + // If this is an element that also has a value property, and there was + // no explicit value argument passed, use the element's property instead. + if (value === undefined && this.value !== undefined) + this.invalid = !this._getValidity(this.value); + else + this.invalid = !this._getValidity(value); + return !this.invalid; + }, + + /** + * Returns true if `value` is valid. By default, it is passed + * to the validator's `validate()` function, if a validator is set. You + * should override this method if you want to implement custom validity + * logic for your element. + * + * @param {Object} value The value to be validated. + * @return {boolean} True if `value` is valid. + */ + + _getValidity: function(value) { + if (this.hasValidator()) { + return this._validator.validate(value); + } + return true; + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/neon-animation/animations/fade-in-animation.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@polymer/neon-animation/animations/fade-in-animation.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _neon_animation_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../neon-animation-behavior.js */ "./node_modules/@polymer/neon-animation/neon-animation-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/* +`` animates the opacity of an element from 0 to 1. + +Configuration: +``` +{ + name: 'fade-in-animation', + node: + timing: +} +``` +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + + is: 'fade-in-animation', + + behaviors: [_neon_animation_behavior_js__WEBPACK_IMPORTED_MODULE_2__.NeonAnimationBehavior], + + configure: function(config) { + var node = config.node; + this._effect = new KeyframeEffect( + node, + [{'opacity': '0'}, {'opacity': '1'}], + this.timingFromConfig(config)); + return this._effect; + } + +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/neon-animation/animations/fade-out-animation.js": +/*!*******************************************************************************!*\ + !*** ./node_modules/@polymer/neon-animation/animations/fade-out-animation.js ***! + \*******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _neon_animation_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../neon-animation-behavior.js */ "./node_modules/@polymer/neon-animation/neon-animation-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/* +`` animates the opacity of an element from 1 to 0. + +Configuration: +``` +{ + name: 'fade-out-animation', + node: + timing: +} +``` +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_1__.Polymer)({ + + is: 'fade-out-animation', + + behaviors: [_neon_animation_behavior_js__WEBPACK_IMPORTED_MODULE_2__.NeonAnimationBehavior], + + configure: function(config) { + var node = config.node; + this._effect = new KeyframeEffect( + node, + [ + {'opacity': '1'}, + {'opacity': '0'}, + ], + this.timingFromConfig(config)); + return this._effect; + } + +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/neon-animation/neon-animatable-behavior.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@polymer/neon-animation/neon-animatable-behavior.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ NeonAnimatableBehavior: () => (/* binding */ NeonAnimatableBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +/** + * `NeonAnimatableBehavior` is implemented by elements containing + * animations for use with elements implementing + * `NeonAnimationRunnerBehavior`. + * @polymerBehavior + */ +const NeonAnimatableBehavior = { + + properties: { + + /** + * Animation configuration. See README for more info. + */ + animationConfig: {type: Object}, + + /** + * Convenience property for setting an 'entry' animation. Do not set + * `animationConfig.entry` manually if using this. The animated node is set + * to `this` if using this property. + */ + entryAnimation: { + observer: '_entryAnimationChanged', + type: String, + }, + + /** + * Convenience property for setting an 'exit' animation. Do not set + * `animationConfig.exit` manually if using this. The animated node is set + * to `this` if using this property. + */ + exitAnimation: { + observer: '_exitAnimationChanged', + type: String, + }, + + }, + + _entryAnimationChanged: function() { + this.animationConfig = this.animationConfig || {}; + this.animationConfig['entry'] = [{name: this.entryAnimation, node: this}]; + }, + + _exitAnimationChanged: function() { + this.animationConfig = this.animationConfig || {}; + this.animationConfig['exit'] = [{name: this.exitAnimation, node: this}]; + }, + + _copyProperties: function(config1, config2) { + // shallowly copy properties from config2 to config1 + for (var property in config2) { + config1[property] = config2[property]; + } + }, + + _cloneConfig: function(config) { + var clone = {isClone: true}; + this._copyProperties(clone, config); + return clone; + }, + + _getAnimationConfigRecursive: function(type, map, allConfigs) { + if (!this.animationConfig) { + return; + } + + if (this.animationConfig.value && + typeof this.animationConfig.value === 'function') { + this._warn(this._logf( + 'playAnimation', + 'Please put \'animationConfig\' inside of your components \'properties\' object instead of outside of it.')); + return; + } + + // type is optional + var thisConfig; + if (type) { + thisConfig = this.animationConfig[type]; + } else { + thisConfig = this.animationConfig; + } + + if (!Array.isArray(thisConfig)) { + thisConfig = [thisConfig]; + } + + // iterate animations and recurse to process configurations from child nodes + if (thisConfig) { + for (var config, index = 0; config = thisConfig[index]; index++) { + if (config.animatable) { + config.animatable._getAnimationConfigRecursive( + config.type || type, map, allConfigs); + } else { + if (config.id) { + var cachedConfig = map[config.id]; + if (cachedConfig) { + // merge configurations with the same id, making a clone lazily + if (!cachedConfig.isClone) { + map[config.id] = this._cloneConfig(cachedConfig); + cachedConfig = map[config.id]; + } + this._copyProperties(cachedConfig, config); + } else { + // put any configs with an id into a map + map[config.id] = config; + } + } else { + allConfigs.push(config); + } + } + } + } + }, + + /** + * An element implementing `NeonAnimationRunnerBehavior` calls this + * method to configure an animation with an optional type. Elements + * implementing `NeonAnimatableBehavior` should define the property + * `animationConfig`, which is either a configuration object or a map of + * animation type to array of configuration objects. + */ + getAnimationConfig: function(type) { + var map = {}; + var allConfigs = []; + this._getAnimationConfigRecursive(type, map, allConfigs); + // append the configurations saved in the map to the array + for (var key in map) { + allConfigs.push(map[key]); + } + return allConfigs; + } + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/neon-animation/neon-animation-behavior.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@polymer/neon-animation/neon-animation-behavior.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ NeonAnimationBehavior: () => (/* binding */ NeonAnimationBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +/** + * Use `NeonAnimationBehavior` to implement an animation. + * @polymerBehavior + */ +const NeonAnimationBehavior = { + + properties: { + + /** + * Defines the animation timing. + */ + animationTiming: { + type: Object, + value: function() { + return { + duration: 500, easing: 'cubic-bezier(0.4, 0, 0.2, 1)', fill: 'both' + } + } + } + + }, + + /** + * Can be used to determine that elements implement this behavior. + */ + isNeonAnimation: true, + + /** + * Do any animation configuration here. + */ + // configure: function(config) { + // }, + + created: function() { + if (!document.body.animate) { + console.warn( + 'No web animations detected. This element will not' + + ' function without a web animations polyfill.'); + } + }, + + /** + * Returns the animation timing by mixing in properties from `config` to the + * defaults defined by the animation. + */ + timingFromConfig: function(config) { + if (config.timing) { + for (var property in config.timing) { + this.animationTiming[property] = config.timing[property]; + } + } + return this.animationTiming; + }, + + /** + * Sets `transform` and `transformOrigin` properties along with the prefixed + * versions. + */ + setPrefixedProperty: function(node, property, value) { + var map = { + 'transform': ['webkitTransform'], + 'transformOrigin': ['mozTransformOrigin', 'webkitTransformOrigin'] + }; + var prefixes = map[property]; + for (var prefix, index = 0; prefix = prefixes[index]; index++) { + node.style[prefix] = value; + } + node.style[property] = value; + }, + + /** + * Called when the animation finishes. + */ + complete: function(config) {} + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/neon-animation/neon-animation-runner-behavior.js": +/*!********************************************************************************!*\ + !*** ./node_modules/@polymer/neon-animation/neon-animation-runner-behavior.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ NeonAnimationRunnerBehavior: () => (/* binding */ NeonAnimationRunnerBehavior), +/* harmony export */ NeonAnimationRunnerBehaviorImpl: () => (/* binding */ NeonAnimationRunnerBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _neon_animatable_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./neon-animatable-behavior.js */ "./node_modules/@polymer/neon-animation/neon-animatable-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + +/** + * `NeonAnimationRunnerBehavior` adds a method to run animations. + * + * @polymerBehavior NeonAnimationRunnerBehavior + */ +const NeonAnimationRunnerBehaviorImpl = { + + _configureAnimations: function(configs) { + var results = []; + var resultsToPlay = []; + + if (configs.length > 0) { + for (let config, index = 0; config = configs[index]; index++) { + let neonAnimation = document.createElement(config.name); + // is this element actually a neon animation? + if (neonAnimation.isNeonAnimation) { + let result = null; + // Closure compiler does not work well with a try / catch here. + // .configure needs to be explicitly defined + if (!neonAnimation.configure) { + /** + * @param {Object} config + * @return {AnimationEffectReadOnly} + */ + neonAnimation.configure = function(config) { + return null; + } + } + + result = neonAnimation.configure(config); + resultsToPlay.push({ + result: result, + config: config, + neonAnimation: neonAnimation, + }); + } else { + console.warn(this.is + ':', config.name, 'not found!'); + } + } + } + + for (var i = 0; i < resultsToPlay.length; i++) { + let result = resultsToPlay[i].result; + let config = resultsToPlay[i].config; + let neonAnimation = resultsToPlay[i].neonAnimation; + // configuration or play could fail if polyfills aren't loaded + try { + // Check if we have an Effect rather than an Animation + if (typeof result.cancel != 'function') { + result = document.timeline.play(result); + } + } catch (e) { + result = null; + console.warn('Couldnt play', '(', config.name, ').', e); + } + + if (result) { + results.push({ + neonAnimation: neonAnimation, + config: config, + animation: result, + }); + } + } + + return results; + }, + + _shouldComplete: function(activeEntries) { + var finished = true; + for (var i = 0; i < activeEntries.length; i++) { + if (activeEntries[i].animation.playState != 'finished') { + finished = false; + break; + } + } + return finished; + }, + + _complete: function(activeEntries) { + for (var i = 0; i < activeEntries.length; i++) { + activeEntries[i].neonAnimation.complete(activeEntries[i].config); + } + for (var i = 0; i < activeEntries.length; i++) { + activeEntries[i].animation.cancel(); + } + }, + + /** + * Plays an animation with an optional `type`. + * @param {string=} type + * @param {!Object=} cookie + */ + playAnimation: function(type, cookie) { + var configs = this.getAnimationConfig(type); + if (!configs) { + return; + } + this._active = this._active || {}; + if (this._active[type]) { + this._complete(this._active[type]); + delete this._active[type]; + } + + var activeEntries = this._configureAnimations(configs); + + if (activeEntries.length == 0) { + this.fire('neon-animation-finish', cookie, {bubbles: false}); + return; + } + + this._active[type] = activeEntries; + + for (var i = 0; i < activeEntries.length; i++) { + activeEntries[i].animation.onfinish = function() { + if (this._shouldComplete(activeEntries)) { + this._complete(activeEntries); + delete this._active[type]; + this.fire('neon-animation-finish', cookie, {bubbles: false}); + } + }.bind(this); + } + }, + + /** + * Cancels the currently running animations. + */ + cancelAnimation: function() { + for (var k in this._active) { + var entries = this._active[k] + + for (var j in entries) { + entries[j].animation.cancel(); + } + } + + this._active = {}; + } +}; + +/** @polymerBehavior */ +const NeonAnimationRunnerBehavior = + [_neon_animatable_behavior_js__WEBPACK_IMPORTED_MODULE_1__.NeonAnimatableBehavior, NeonAnimationRunnerBehaviorImpl]; + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-behaviors/paper-button-behavior.js": +/*!************************************************************************!*\ + !*** ./node_modules/@polymer/paper-behaviors/paper-button-behavior.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PaperButtonBehavior: () => (/* binding */ PaperButtonBehavior), +/* harmony export */ PaperButtonBehaviorImpl: () => (/* binding */ PaperButtonBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-button-state.js */ "./node_modules/@polymer/iron-behaviors/iron-button-state.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _paper_ripple_behavior_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./paper-ripple-behavior.js */ "./node_modules/@polymer/paper-behaviors/paper-ripple-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +/** @polymerBehavior PaperButtonBehavior */ +const PaperButtonBehaviorImpl = { + properties: { + /** + * The z-depth of this element, from 0-5. Setting to 0 will remove the + * shadow, and each increasing number greater than 0 will be "deeper" + * than the last. + * + * @attribute elevation + * @type number + * @default 1 + */ + elevation: {type: Number, reflectToAttribute: true, readOnly: true} + }, + + observers: [ + '_calculateElevation(focused, disabled, active, pressed, receivedFocusFromKeyboard)', + '_computeKeyboardClass(receivedFocusFromKeyboard)' + ], + + hostAttributes: {role: 'button', tabindex: '0', animated: true}, + + _calculateElevation: function() { + var e = 1; + if (this.disabled) { + e = 0; + } else if (this.active || this.pressed) { + e = 4; + } else if (this.receivedFocusFromKeyboard) { + e = 3; + } + this._setElevation(e); + }, + + _computeKeyboardClass: function(receivedFocusFromKeyboard) { + this.toggleClass('keyboard-focus', receivedFocusFromKeyboard); + }, + + /** + * In addition to `IronButtonState` behavior, when space key goes down, + * create a ripple down effect. + * + * @param {!KeyboardEvent} event . + */ + _spaceKeyDownHandler: function(event) { + _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_1__.IronButtonStateImpl._spaceKeyDownHandler.call(this, event); + // Ensure that there is at most one ripple when the space key is held down. + if (this.hasRipple() && this.getRipple().ripples.length < 1) { + this._ripple.uiDownAction(); + } + }, + + /** + * In addition to `IronButtonState` behavior, when space key goes up, + * create a ripple up effect. + * + * @param {!KeyboardEvent} event . + */ + _spaceKeyUpHandler: function(event) { + _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_1__.IronButtonStateImpl._spaceKeyUpHandler.call(this, event); + if (this.hasRipple()) { + this._ripple.uiUpAction(); + } + } +}; + +/** @polymerBehavior */ +const PaperButtonBehavior = [ + _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_1__.IronButtonState, + _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__.IronControlState, + _paper_ripple_behavior_js__WEBPACK_IMPORTED_MODULE_3__.PaperRippleBehavior, + PaperButtonBehaviorImpl +]; + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-behaviors/paper-inky-focus-behavior.js": +/*!****************************************************************************!*\ + !*** ./node_modules/@polymer/paper-behaviors/paper-inky-focus-behavior.js ***! + \****************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PaperInkyFocusBehavior: () => (/* binding */ PaperInkyFocusBehavior), +/* harmony export */ PaperInkyFocusBehaviorImpl: () => (/* binding */ PaperInkyFocusBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-button-state.js */ "./node_modules/@polymer/iron-behaviors/iron-button-state.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _paper_ripple_behavior_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./paper-ripple-behavior.js */ "./node_modules/@polymer/paper-behaviors/paper-ripple-behavior.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +/** + * `PaperInkyFocusBehavior` implements a ripple when the element has keyboard + * focus. + * + * @polymerBehavior PaperInkyFocusBehavior + */ +const PaperInkyFocusBehaviorImpl = { + observers: ['_focusedChanged(receivedFocusFromKeyboard)'], + + _focusedChanged: function(receivedFocusFromKeyboard) { + if (receivedFocusFromKeyboard) { + this.ensureRipple(); + } + if (this.hasRipple()) { + this._ripple.holdDown = receivedFocusFromKeyboard; + } + }, + + _createRipple: function() { + var ripple = _paper_ripple_behavior_js__WEBPACK_IMPORTED_MODULE_3__.PaperRippleBehavior._createRipple(); + ripple.id = 'ink'; + ripple.setAttribute('center', ''); + ripple.classList.add('circle'); + return ripple; + } +}; + +/** @polymerBehavior */ +const PaperInkyFocusBehavior = [ + _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_1__.IronButtonState, + _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__.IronControlState, + _paper_ripple_behavior_js__WEBPACK_IMPORTED_MODULE_3__.PaperRippleBehavior, + PaperInkyFocusBehaviorImpl +]; + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-behaviors/paper-ripple-behavior.js": +/*!************************************************************************!*\ + !*** ./node_modules/@polymer/paper-behaviors/paper-ripple-behavior.js ***! + \************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PaperRippleBehavior: () => (/* binding */ PaperRippleBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_paper_ripple_paper_ripple_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/paper-ripple/paper-ripple.js */ "./node_modules/@polymer/paper-ripple/paper-ripple.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-button-state.js */ "./node_modules/@polymer/iron-behaviors/iron-button-state.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + +/** + * `PaperRippleBehavior` dynamically implements a ripple when the element has + * focus via pointer or keyboard. + * + * NOTE: This behavior is intended to be used in conjunction with and after + * `IronButtonState` and `IronControlState`. + * + * @polymerBehavior PaperRippleBehavior + */ +const PaperRippleBehavior = { + properties: { + /** + * If true, the element will not produce a ripple effect when interacted + * with via the pointer. + */ + noink: {type: Boolean, observer: '_noinkChanged'}, + + /** + * @type {Element|undefined} + */ + _rippleContainer: { + type: Object, + } + }, + + /** + * Ensures a `` element is available when the element is + * focused. + */ + _buttonStateChanged: function() { + if (this.focused) { + this.ensureRipple(); + } + }, + + /** + * In addition to the functionality provided in `IronButtonState`, ensures + * a ripple effect is created when the element is in a `pressed` state. + */ + _downHandler: function(event) { + _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_2__.IronButtonStateImpl._downHandler.call(this, event); + if (this.pressed) { + this.ensureRipple(event); + } + }, + + /** + * Ensures this element contains a ripple effect. For startup efficiency + * the ripple effect is dynamically on demand when needed. + * @param {!Event=} optTriggeringEvent (optional) event that triggered the + * ripple. + */ + ensureRipple: function(optTriggeringEvent) { + if (!this.hasRipple()) { + this._ripple = this._createRipple(); + this._ripple.noink = this.noink; + var rippleContainer = this._rippleContainer || this.root; + if (rippleContainer) { + (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(rippleContainer).appendChild(this._ripple); + } + if (optTriggeringEvent) { + // Check if the event happened inside of the ripple container + // Fall back to host instead of the root because distributed text + // nodes are not valid event targets + var domContainer = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(this._rippleContainer || this); + var target = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__.dom)(optTriggeringEvent).rootTarget; + if (domContainer.deepContains(/** @type {Node} */ (target))) { + this._ripple.uiDownAction(optTriggeringEvent); + } + } + } + }, + + /** + * Returns the `` element used by this element to create + * ripple effects. The element's ripple is created on demand, when + * necessary, and calling this method will force the + * ripple to be created. + */ + getRipple: function() { + this.ensureRipple(); + return this._ripple; + }, + + /** + * Returns true if this element currently contains a ripple effect. + * @return {boolean} + */ + hasRipple: function() { + return Boolean(this._ripple); + }, + + /** + * Create the element's ripple effect via creating a ``. + * Override this method to customize the ripple element. + * @return {!PaperRippleElement} Returns a `` element. + */ + _createRipple: function() { + var element = /** @type {!PaperRippleElement} */ ( + document.createElement('paper-ripple')); + return element; + }, + + _noinkChanged: function(noink) { + if (this.hasRipple()) { + this._ripple.noink = noink; + } + } +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-button/paper-button.js": +/*!************************************************************!*\ + !*** ./node_modules/@polymer/paper-button/paper-button.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_paper_styles_element_styles_paper_material_styles_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/paper-styles/element-styles/paper-material-styles.js */ "./node_modules/@polymer/paper-styles/element-styles/paper-material-styles.js"); +/* harmony import */ var _polymer_paper_behaviors_paper_button_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/paper-behaviors/paper-button-behavior.js */ "./node_modules/@polymer/paper-behaviors/paper-button-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +const template = (0,_polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_4__.html)` + + + `; + +template.setAttribute('strip-whitespace', ''); + +/** +Material design: +[Buttons](https://www.google.com/design/spec/components/buttons.html) + +`paper-button` is a button. When the user touches the button, a ripple effect +emanates from the point of contact. It may be flat or raised. A raised button is +styled with a shadow. + +Example: + + Flat button + Raised button + No ripple effect + Toggle-able button + +A button that has `toggles` true will remain `active` after being clicked (and +will have an `active` attribute set). For more information, see the +`IronButtonState` behavior. + +You may use custom DOM in the button body to create a variety of buttons. For +example, to create a button with an icon and some text: + + + + custom button content + + +To use `paper-button` as a link, wrap it in an anchor tag. Since `paper-button` +will already receive focus, you may want to prevent the anchor tag from +receiving focus as well by setting its tabindex to -1. + +
+ Polymer Project + + +### Styling + +Style the button with CSS as you would a normal DOM element. + + paper-button.fancy { + background: green; + color: yellow; + } + + paper-button.fancy:hover { + background: lime; + } + + paper-button[disabled], + paper-button[toggles][active] { + background: red; + } + +By default, the ripple is the same color as the foreground at 25% opacity. You +may customize the color using the `--paper-button-ink-color` custom property. + +The following custom properties and mixins are also available for styling: + +Custom property | Description | Default +----------------|-------------|---------- +`--paper-button-ink-color` | Background color of the ripple | `Based on the button's color` +`--paper-button` | Mixin applied to the button | `{}` +`--paper-button-disabled` | Mixin applied to the disabled button. Note that you can also use the `paper-button[disabled]` selector | `{}` +`--paper-button-flat-keyboard-focus` | Mixin applied to a flat button after it's been focused using the keyboard | `{}` +`--paper-button-raised-keyboard-focus` | Mixin applied to a raised button after it's been focused using the keyboard | `{}` + +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_3__.Polymer)({ + _template: template, + + is: 'paper-button', + + behaviors: [_polymer_paper_behaviors_paper_button_behavior_js__WEBPACK_IMPORTED_MODULE_2__.PaperButtonBehavior], + + properties: { + /** + * If true, the button should be styled with a shadow. + */ + raised: { + type: Boolean, + reflectToAttribute: true, + value: false, + observer: '_calculateElevation', + } + }, + + _calculateElevation: function() { + if (!this.raised) { + this._setElevation(0); + } else { + _polymer_paper_behaviors_paper_button_behavior_js__WEBPACK_IMPORTED_MODULE_2__.PaperButtonBehaviorImpl._calculateElevation.apply(this); + } + } + + /** + Fired when the animation finishes. + This is useful if you want to wait until + the ripple animation finishes to perform some action. + + @event transitionend + Event param: {{node: Object}} detail Contains the animated node. + */ +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-card/paper-card.js": +/*!********************************************************!*\ + !*** ./node_modules/@polymer/paper-card/paper-card.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_iron_image_iron_image_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-image/iron-image.js */ "./node_modules/@polymer/iron-image/iron-image.js"); +/* harmony import */ var _polymer_paper_styles_element_styles_paper_material_styles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/paper-styles/element-styles/paper-material-styles.js */ "./node_modules/@polymer/paper-styles/element-styles/paper-material-styles.js"); +/* harmony import */ var _polymer_paper_styles_default_theme_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/paper-styles/default-theme.js */ "./node_modules/@polymer/paper-styles/default-theme.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + +/** +Material design: +[Cards](https://www.google.com/design/spec/components/cards.html) + +`paper-card` is a container with a drop shadow. + +Example: + + +
Some content
+
+ Some action +
+
+ +Example - top card image: + + + ... + + +### Accessibility + +By default, the `aria-label` will be set to the value of the `heading` +attribute. + +### Styling + +The following custom properties and mixins are available for styling: + +Custom property | Description | Default +----------------|-------------|---------- +`--paper-card-background-color` | The background color of the card | `--primary-background-color` +`--paper-card-header-color` | The color of the header text | `#000` +`--paper-card-header` | Mixin applied to the card header section | `{}` +`--paper-card-header-text` | Mixin applied to the title in the card header section | `{}` +`--paper-card-header-image` | Mixin applied to the image in the card header section | `{}` +`--paper-card-header-image-text` | Mixin applied to the text overlapping the image in the card header section | `{}` +`--paper-card-content` | Mixin applied to the card content section| `{}` +`--paper-card-actions` | Mixin applied to the card action section | `{}` +`--paper-card` | Mixin applied to the card | `{}` + +@group Paper Elements +@element paper-card +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_5__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_6__.html)` + + +
+ +
[[heading]]
+
+ + +`, + + is: 'paper-card', + + properties: { + /** + * The title of the card. + */ + heading: {type: String, value: '', observer: '_headingChanged'}, + + /** + * The url of the title image of the card. + */ + image: {type: String, value: ''}, + + /** + * The text alternative of the card's title image. + */ + alt: {type: String}, + + /** + * When `true`, any change to the image url property will cause the + * `placeholder` image to be shown until the image is fully rendered. + */ + preloadImage: {type: Boolean, value: false}, + + /** + * When `preloadImage` is true, setting `fadeImage` to true will cause the + * image to fade into place. + */ + fadeImage: {type: Boolean, value: false}, + + /** + * This image will be used as a background/placeholder until the src image + * has loaded. Use of a data-URI for placeholder is encouraged for instant + * rendering. + */ + placeholderImage: {type: String, value: null}, + + /** + * The z-depth of the card, from 0-5. + */ + elevation: {type: Number, value: 1, reflectToAttribute: true}, + + /** + * Set this to true to animate the card shadow when setting a new + * `z` value. + */ + animatedShadow: {type: Boolean, value: false}, + + /** + * Read-only property used to pass down the `animatedShadow` value to + * the underlying paper-material style (since they have different names). + */ + animated: { + type: Boolean, + reflectToAttribute: true, + readOnly: true, + computed: '_computeAnimated(animatedShadow)' + } + }, + + /** + * Format function for aria-hidden. Use the ! operator results in the + * empty string when given a falsy value. + */ + _isHidden: function(image) { + return image ? 'false' : 'true'; + }, + + _headingChanged: function(heading) { + var currentHeading = this.getAttribute('heading'), + currentLabel = this.getAttribute('aria-label'); + + if (typeof currentLabel !== 'string' || currentLabel === currentHeading) { + this.setAttribute('aria-label', heading); + } + }, + + _computeHeadingClass: function(image) { + return image ? ' over-image' : ''; + }, + + _computeAnimated: function(animatedShadow) { + return animatedShadow; + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-dialog-behavior/paper-dialog-behavior.js": +/*!******************************************************************************!*\ + !*** ./node_modules/@polymer/paper-dialog-behavior/paper-dialog-behavior.js ***! + \******************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PaperDialogBehavior: () => (/* binding */ PaperDialogBehavior), +/* harmony export */ PaperDialogBehaviorImpl: () => (/* binding */ PaperDialogBehaviorImpl) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-overlay-behavior/iron-overlay-behavior.js */ "./node_modules/@polymer/iron-overlay-behavior/iron-overlay-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + +/** + Use `Polymer.PaperDialogBehavior` and `paper-dialog-shared-styles.html` to + implement a Material Design dialog. + + For example, if `` implements this behavior: + + +

Header

+
Dialog body
+
+ Cancel + Accept +
+
+ + `paper-dialog-shared-styles.html` provide styles for a header, content area, + and an action area for buttons. Use the `

` tag for the header and the + `buttons` class for the action area. You can use the `paper-dialog-scrollable` + element (in its own repository) if you need a scrolling content area. + + Use the `dialog-dismiss` and `dialog-confirm` attributes on interactive + controls to close the dialog. If the user dismisses the dialog with + `dialog-confirm`, the `closingReason` will update to include `confirmed: + true`. + + ### Accessibility + + This element has `role="dialog"` by default. Depending on the context, it may + be more appropriate to override this attribute with `role="alertdialog"`. + + If `modal` is set, the element will prevent the focus from exiting the + element. It will also ensure that focus remains in the dialog. + + @hero hero.svg + @demo demo/index.html + @polymerBehavior PaperDialogBehavior + */ +const PaperDialogBehaviorImpl = { + + hostAttributes: {'role': 'dialog', 'tabindex': '-1'}, + + properties: { + + /** + * If `modal` is true, this implies `no-cancel-on-outside-click`, + * `no-cancel-on-esc-key` and `with-backdrop`. + */ + modal: {type: Boolean, value: false}, + + __readied: {type: Boolean, value: false} + + }, + + observers: ['_modalChanged(modal, __readied)'], + + listeners: {'tap': '_onDialogClick'}, + + /** + * @return {void} + */ + ready: function() { + // Only now these properties can be read. + this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick; + this.__prevNoCancelOnEscKey = this.noCancelOnEscKey; + this.__prevWithBackdrop = this.withBackdrop; + this.__readied = true; + }, + + _modalChanged: function(modal, readied) { + // modal implies noCancelOnOutsideClick, noCancelOnEscKey and withBackdrop. + // We need to wait for the element to be ready before we can read the + // properties values. + if (!readied) { + return; + } + + if (modal) { + this.__prevNoCancelOnOutsideClick = this.noCancelOnOutsideClick; + this.__prevNoCancelOnEscKey = this.noCancelOnEscKey; + this.__prevWithBackdrop = this.withBackdrop; + this.noCancelOnOutsideClick = true; + this.noCancelOnEscKey = true; + this.withBackdrop = true; + } else { + // If the value was changed to false, let it false. + this.noCancelOnOutsideClick = + this.noCancelOnOutsideClick && this.__prevNoCancelOnOutsideClick; + this.noCancelOnEscKey = + this.noCancelOnEscKey && this.__prevNoCancelOnEscKey; + this.withBackdrop = this.withBackdrop && this.__prevWithBackdrop; + } + }, + + _updateClosingReasonConfirmed: function(confirmed) { + this.closingReason = this.closingReason || {}; + this.closingReason.confirmed = confirmed; + }, + + /** + * Will dismiss the dialog if user clicked on an element with dialog-dismiss + * or dialog-confirm attribute. + */ + _onDialogClick: function(event) { + // Search for the element with dialog-confirm or dialog-dismiss, + // from the root target until this (excluded). + var path = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_2__.dom)(event).path; + for (var i = 0, l = path.indexOf(this); i < l; i++) { + var target = path[i]; + if (target.hasAttribute && + (target.hasAttribute('dialog-dismiss') || + target.hasAttribute('dialog-confirm'))) { + this._updateClosingReasonConfirmed( + target.hasAttribute('dialog-confirm')); + this.close(); + event.stopPropagation(); + break; + } + } + } + +}; + +/** @polymerBehavior */ +const PaperDialogBehavior = + [_polymer_iron_overlay_behavior_iron_overlay_behavior_js__WEBPACK_IMPORTED_MODULE_1__.IronOverlayBehavior, PaperDialogBehaviorImpl]; + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js": +/*!***********************************************************************************!*\ + !*** ./node_modules/@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js ***! + \***********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_flex_layout_iron_flex_layout_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-flex-layout/iron-flex-layout.js */ "./node_modules/@polymer/iron-flex-layout/iron-flex-layout.js"); +/* harmony import */ var _polymer_paper_styles_default_theme_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/paper-styles/default-theme.js */ "./node_modules/@polymer/paper-styles/default-theme.js"); +/* harmony import */ var _polymer_paper_styles_typography_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/paper-styles/typography.js */ "./node_modules/@polymer/paper-styles/typography.js"); +/* harmony import */ var _polymer_paper_styles_shadow_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/paper-styles/shadow.js */ "./node_modules/@polymer/paper-styles/shadow.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ +/* +### Styling + +The following custom properties and mixins are available for styling. + +Custom property | Description | Default +----------------|-------------|---------- +`--paper-dialog-background-color` | Dialog background color | `--primary-background-color` +`--paper-dialog-color` | Dialog foreground color | `--primary-text-color` +`--paper-dialog` | Mixin applied to the dialog | `{}` +`--paper-dialog-title` | Mixin applied to the title (`

`) element | `{}` +`--paper-dialog-button-color` | Button area foreground color | `--default-primary-color` +*/ + + + + + +const $_documentContainer = document.createElement('template'); +$_documentContainer.setAttribute('style', 'display: none;'); + +$_documentContainer.innerHTML = ` + +`; + +document.head.appendChild($_documentContainer.content); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-dialog/paper-dialog.js": +/*!************************************************************!*\ + !*** ./node_modules/@polymer/paper-dialog/paper-dialog.js ***! + \************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_paper_dialog_behavior_paper_dialog_shared_styles_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/paper-dialog-behavior/paper-dialog-shared-styles.js */ "./node_modules/@polymer/paper-dialog-behavior/paper-dialog-shared-styles.js"); +/* harmony import */ var _polymer_neon_animation_neon_animation_runner_behavior_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/neon-animation/neon-animation-runner-behavior.js */ "./node_modules/@polymer/neon-animation/neon-animation-runner-behavior.js"); +/* harmony import */ var _polymer_paper_dialog_behavior_paper_dialog_behavior_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/paper-dialog-behavior/paper-dialog-behavior.js */ "./node_modules/@polymer/paper-dialog-behavior/paper-dialog-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + +/** +Material design: +[Dialogs](https://www.google.com/design/spec/components/dialogs.html) + +`` is a dialog with Material Design styling and optional +animations when it is opened or closed. It provides styles for a header, content +area, and an action area for buttons. You can use the +`` element (in its own repository) if you need a +scrolling content area. To autofocus a specific child element after opening the +dialog, give it the `autofocus` attribute. See `Polymer.PaperDialogBehavior` and +`Polymer.IronOverlayBehavior` for specifics. + +For example, the following code implements a dialog with a header, scrolling +content area and buttons. Focus will be given to the `dialog-confirm` button +when the dialog is opened. + + +

Header

+ + Lorem ipsum... + +
+ Cancel + Accept +
+
+ +### Styling + +See the docs for `Polymer.PaperDialogBehavior` for the custom properties +available for styling this element. + +### Animations + +Set the `entry-animation` and/or `exit-animation` attributes to add an animation +when the dialog is opened or closed. See the documentation in +[PolymerElements/neon-animation](https://github.com/PolymerElements/neon-animation) +for more info. + +For example: + + + + +

Header

+
Dialog body
+
+ +### Accessibility + +See the docs for `Polymer.PaperDialogBehavior` for accessibility features +implemented by this element. + +@group Paper Elements +@element paper-dialog +@hero hero.svg +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_4__.Polymer)({ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_5__.html)` + + +`, + + is: 'paper-dialog', + behaviors: [_polymer_paper_dialog_behavior_paper_dialog_behavior_js__WEBPACK_IMPORTED_MODULE_3__.PaperDialogBehavior, _polymer_neon_animation_neon_animation_runner_behavior_js__WEBPACK_IMPORTED_MODULE_2__.NeonAnimationRunnerBehavior], + listeners: {'neon-animation-finish': '_onNeonAnimationFinish'}, + + _renderOpened: function() { + this.cancelAnimation(); + this.playAnimation('entry'); + }, + + _renderClosed: function() { + this.cancelAnimation(); + this.playAnimation('exit'); + }, + + _onNeonAnimationFinish: function() { + if (this.opened) { + this._finishRenderOpened(); + } else { + this._finishRenderClosed(); + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu-icons.js": +/*!********************************************************************************!*\ + !*** ./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu-icons.js ***! + \********************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_iron_iconset_svg_iron_iconset_svg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/iron-iconset-svg/iron-iconset-svg.js */ "./node_modules/@polymer/iron-iconset-svg/iron-iconset-svg.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + +const $_documentContainer = document.createElement('template'); +$_documentContainer.setAttribute('style', 'display: none;'); + +$_documentContainer.innerHTML = + ` + + + +`; + +document.head.appendChild($_documentContainer.content); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu-shared-styles.js": +/*!****************************************************************************************!*\ + !*** ./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu-shared-styles.js ***! + \****************************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_paper_styles_default_theme_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/paper-styles/default-theme.js */ "./node_modules/@polymer/paper-styles/default-theme.js"); +/** +@license +Copyright (c) 2016 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + +const $_documentContainer = document.createElement('template'); +$_documentContainer.setAttribute('style', 'display: none;'); + +$_documentContainer.innerHTML = + ` + +`; + +document.head.appendChild($_documentContainer.content); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu.js ***! + \**************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js */ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js"); +/* harmony import */ var _polymer_iron_icon_iron_icon_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-icon/iron-icon.js */ "./node_modules/@polymer/iron-icon/iron-icon.js"); +/* harmony import */ var _polymer_paper_input_paper_input_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/paper-input/paper-input.js */ "./node_modules/@polymer/paper-input/paper-input.js"); +/* harmony import */ var _polymer_paper_menu_button_paper_menu_button_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/paper-menu-button/paper-menu-button.js */ "./node_modules/@polymer/paper-menu-button/paper-menu-button.js"); +/* harmony import */ var _polymer_paper_ripple_paper_ripple_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/paper-ripple/paper-ripple.js */ "./node_modules/@polymer/paper-ripple/paper-ripple.js"); +/* harmony import */ var _polymer_paper_styles_default_theme_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @polymer/paper-styles/default-theme.js */ "./node_modules/@polymer/paper-styles/default-theme.js"); +/* harmony import */ var _paper_dropdown_menu_icons_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./paper-dropdown-menu-icons.js */ "./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu-icons.js"); +/* harmony import */ var _paper_dropdown_menu_shared_styles_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./paper-dropdown-menu-shared-styles.js */ "./node_modules/@polymer/paper-dropdown-menu/paper-dropdown-menu-shared-styles.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-button-state.js */ "./node_modules/@polymer/iron-behaviors/iron-button-state.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _polymer_iron_form_element_behavior_iron_form_element_behavior_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @polymer/iron-form-element-behavior/iron-form-element-behavior.js */ "./node_modules/@polymer/iron-form-element-behavior/iron-form-element-behavior.js"); +/* harmony import */ var _polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @polymer/iron-validatable-behavior/iron-validatable-behavior.js */ "./node_modules/@polymer/iron-validatable-behavior/iron-validatable-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_legacy_element_mixin_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/legacy-element-mixin.js */ "./node_modules/@polymer/polymer/lib/legacy/legacy-element-mixin.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_lib_utils_gestures_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @polymer/polymer/lib/utils/gestures.js */ "./node_modules/@polymer/polymer/lib/utils/gestures.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/* harmony import */ var _polymer_polymer_lib_utils_wrap_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @polymer/polymer/lib/utils/wrap.js */ "./node_modules/@polymer/polymer/lib/utils/wrap.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + + + + + + + + + + + + + + +// LegacyElementMixin dedupes and this is the base class for elements created +// with the `Polymer` function, so this is only a cache lookup. +// https://github.com/Polymer/polymer/blob/640bc80ac7177b761d46b2fa9c455c318f2b85c6/lib/legacy/class.js#L533-L534 +const LegacyPolymerElementBase = (0,_polymer_polymer_lib_legacy_legacy_element_mixin_js__WEBPACK_IMPORTED_MODULE_13__.LegacyElementMixin)(HTMLElement); + +/** +Material design: [Dropdown +menus](https://www.google.com/design/spec/components/buttons.html#buttons-dropdown-buttons) + +`paper-dropdown-menu` is similar to a native browser select element. +`paper-dropdown-menu` works with selectable content. The currently selected +item is displayed in the control. If no item is selected, the `label` is +displayed instead. + +Example: + + + + Croissant + Donut + Financier + Madeleine + + + +This example renders a dropdown menu with 4 options. + +The child element with the slot `dropdown-content` is used as the dropdown +menu. This can be a [`paper-listbox`](paper-listbox), or any other or +element that acts like an [`iron-selector`](iron-selector). + +Specifically, the menu child must fire an +[`iron-select`](iron-selector#event-iron-select) event when one of its +children is selected, and an +[`iron-deselect`](iron-selector#event-iron-deselect) event when a child is +deselected. The selected or deselected item must be passed as the event's +`detail.item` property. + +Applications can listen for the `iron-select` and `iron-deselect` events +to react when options are selected and deselected. + +### Styling + +The following custom properties and mixins are also available for styling: + +Custom property | Description | Default +----------------|-------------|---------- +`--paper-dropdown-menu` | A mixin that is applied to the element host | `{}` +`--paper-dropdown-menu-disabled` | A mixin that is applied to the element host when disabled | `{}` +`--paper-dropdown-menu-ripple` | A mixin that is applied to the internal ripple | `{}` +`--paper-dropdown-menu-button` | A mixin that is applied to the internal menu button | `{}` +`--paper-dropdown-menu-input` | A mixin that is applied to the internal paper input | `{}` +`--paper-dropdown-menu-icon` | A mixin that is applied to the internal icon | `{}` + +You can also use any of the `paper-input-container` and `paper-menu-button` +style mixins and custom properties to style the internal input and menu button +respectively. + +@element paper-dropdown-menu +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_14__.Polymer)({ + /** @override */ + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_17__.html)` + + + + + + + +`, + + is: 'paper-dropdown-menu', + + behaviors: [ + _polymer_iron_behaviors_iron_button_state_js__WEBPACK_IMPORTED_MODULE_9__.IronButtonState, + _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_10__.IronControlState, + _polymer_iron_form_element_behavior_iron_form_element_behavior_js__WEBPACK_IMPORTED_MODULE_11__.IronFormElementBehavior, + _polymer_iron_validatable_behavior_iron_validatable_behavior_js__WEBPACK_IMPORTED_MODULE_12__.IronValidatableBehavior + ], + + properties: { + /** + * The derived "label" of the currently selected item. This value + * is the `label` property on the selected item if set, or else the + * trimmed text content of the selected item. + */ + selectedItemLabel: {type: String, notify: true, readOnly: true}, + + /** + * The last selected item. An item is selected if the dropdown menu has + * a child with slot `dropdown-content`, and that child triggers an + * `iron-select` event with the selected `item` in the `detail`. + * + * @type {?Object} + */ + selectedItem: {type: Object, notify: true, readOnly: true}, + + /** + * The value for this element that will be used when submitting in + * a form. It reflects the value of `selectedItemLabel`. If set directly, + * it will not update the `selectedItemLabel` value. + */ + value: { + type: String, + notify: true, + }, + + /** + * The label for the dropdown. + */ + label: {type: String}, + + /** + * The placeholder for the dropdown. + */ + placeholder: {type: String}, + + /** + * The error message to display when invalid. + */ + errorMessage: {type: String}, + + /** + * True if the dropdown is open. Otherwise, false. + */ + opened: + {type: Boolean, notify: true, value: false, observer: '_openedChanged'}, + + /** + * By default, the dropdown will constrain scrolling on the page + * to itself when opened. + * Set to true in order to prevent scroll from being constrained + * to the dropdown when it opens. + */ + allowOutsideScroll: {type: Boolean, value: false}, + + /** + * Set to true to disable the floating label. Bind this to the + * ``'s `noLabelFloat` property. + */ + noLabelFloat: {type: Boolean, value: false, reflectToAttribute: true}, + + /** + * Set to true to always float the label. Bind this to the + * ``'s `alwaysFloatLabel` property. + */ + alwaysFloatLabel: {type: Boolean, value: false}, + + /** + * Set to true to disable animations when opening and closing the + * dropdown. + */ + noAnimations: {type: Boolean, value: false}, + + /** + * The orientation against which to align the menu dropdown + * horizontally relative to the dropdown trigger. + */ + horizontalAlign: {type: String, value: 'right'}, + + /** + * The orientation against which to align the menu dropdown + * vertically relative to the dropdown trigger. + */ + verticalAlign: {type: String, value: 'top'}, + + /** + * Overrides the vertical offset computed in + * _computeMenuVerticalOffset. + */ + verticalOffset: Number, + + /** + * If true, the `horizontalAlign` and `verticalAlign` properties will + * be considered preferences instead of strict requirements when + * positioning the dropdown and may be changed if doing so reduces + * the area of the dropdown falling outside of `fitInto`. + */ + dynamicAlign: {type: Boolean}, + + /** + * Whether focus should be restored to the dropdown when the menu closes. + */ + restoreFocusOnClose: {type: Boolean, value: true}, + + /** + * If true and scrollbars are added to the dropdown after it is positioned, + * the size of the added scrollbars will be added to its `maxWidth` and + * `maxHeight`. + */ + expandSizingTargetForScrollbars: {type: Boolean, value: false}, + }, + + listeners: {'tap': '_onTap'}, + + /** + * @type {!Object} + */ + keyBindings: {'up down': 'open', 'esc': 'close'}, + + observers: ['_selectedItemChanged(selectedItem)'], + + /** + * Override `_attachDom` so that we can pass `delegatesFocus`. The overridden + * implementation of `_attachDom` specifically skips the steps performed here + * if the node already hosts a shadow root: + * https://github.com/Polymer/polymer/blob/640bc80ac7177b761d46b2fa9c455c318f2b85c6/lib/mixins/element-mixin.js#L691-L694 + * @override + */ + _attachDom(dom) { + const wrappedThis = (0,_polymer_polymer_lib_utils_wrap_js__WEBPACK_IMPORTED_MODULE_18__.wrap)(this); + wrappedThis.attachShadow({ + mode: 'open', + delegatesFocus: true, + shadyUpgradeFragment: dom, + }); + wrappedThis.shadowRoot.appendChild(dom); + return LegacyPolymerElementBase.prototype._attachDom.call(this, dom); + }, + + /** @override */ + focus() { + // When using Shady DOM and in browsers that don't support + // `delegatesFocus`, attempting to focus this element with the browser's + // native `HTMLElement#focus` will cause focus to be lost because this + // element isn't focusable in those situations. To work around this, the + // element in the shadow root that this element intends to delegate focus + // to is manually focused instead. + this.$.input._focusableElement.focus(); + }, + + /** @override */ + attached: function() { + // NOTE(cdata): Due to timing, a preselected value in a `IronSelectable` + // child will cause an `iron-select` event to fire while the element is + // still in a `DocumentFragment`. This has the effect of causing + // handlers not to fire. So, we double check this value on attached: + var contentElement = this.contentElement; + if (contentElement && contentElement.selectedItem) { + this._setSelectedItem(contentElement.selectedItem); + } + }, + + /** + * The content element that is contained by the dropdown menu, if any. + */ + get contentElement() { + // Polymer 2.x returns slot.assignedNodes which can contain text nodes. + var nodes = (0,_polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_15__.dom)(this.$.content).getDistributedNodes(); + for (var i = 0, l = nodes.length; i < l; i++) { + if (nodes[i].nodeType === Node.ELEMENT_NODE) { + return nodes[i]; + } + } + }, + + /** + * Show the dropdown content. + */ + open: function() { + this.$.menuButton.open(); + }, + + /** + * Hide the dropdown content. + */ + close: function() { + this.$.menuButton.close(); + }, + + /** + * A handler that is called when `iron-select` is fired. + * + * @param {CustomEvent} event An `iron-select` event. + */ + _onIronSelect: function(event) { + this._setSelectedItem(event.detail.item); + }, + + /** + * A handler that is called when `iron-deselect` is fired. + * + * @param {CustomEvent} event An `iron-deselect` event. + */ + _onIronDeselect: function(event) { + this._setSelectedItem(null); + }, + + /** + * A handler that is called when the dropdown is tapped. + * + * @param {CustomEvent} event A tap event. + */ + _onTap: function(event) { + if (_polymer_polymer_lib_utils_gestures_js__WEBPACK_IMPORTED_MODULE_16__.findOriginalTarget(event) === this) { + this.open(); + } + }, + + /** + * Compute the label for the dropdown given a selected item. + * + * @param {Element} selectedItem A selected Element item, with an + * optional `label` property. + */ + _selectedItemChanged: function(selectedItem) { + var value = ''; + if (!selectedItem) { + value = ''; + } else { + value = selectedItem.label || selectedItem.getAttribute('label') || + selectedItem.textContent.trim(); + } + + this.value = value; + this._setSelectedItemLabel(value); + }, + + /** + * Compute the vertical offset of the menu based on the value of + * `noLabelFloat`. + * + * @param {boolean} noLabelFloat True if the label should not float + * @param {number=} opt_verticalOffset Optional offset from the user + * above the input, otherwise false. + */ + _computeMenuVerticalOffset: function(noLabelFloat, opt_verticalOffset) { + // Override offset if it's passed from the user. + if (opt_verticalOffset) { + return opt_verticalOffset; + } + + // NOTE(cdata): These numbers are somewhat magical because they are + // derived from the metrics of elements internal to `paper-input`'s + // template. The metrics will change depending on whether or not the + // input has a floating label. + return noLabelFloat ? -4 : 8; + }, + + /** + * Returns false if the element is required and does not have a selection, + * and true otherwise. + * @param {*=} _value Ignored. + * @return {boolean} true if `required` is false, or if `required` is true + * and the element has a valid selection. + */ + _getValidity: function(_value) { + return this.disabled || !this.required || (this.required && !!this.value); + }, + + _openedChanged: function() { + var openState = this.opened ? 'true' : 'false'; + var e = this.contentElement; + if (e) { + e.setAttribute('aria-expanded', openState); + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-icon-button/paper-icon-button.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@polymer/paper-icon-button/paper-icon-button.js ***! + \**********************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_icon_iron_icon_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-icon/iron-icon.js */ "./node_modules/@polymer/iron-icon/iron-icon.js"); +/* harmony import */ var _polymer_paper_styles_default_theme_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/paper-styles/default-theme.js */ "./node_modules/@polymer/paper-styles/default-theme.js"); +/* harmony import */ var _polymer_paper_behaviors_paper_inky_focus_behavior_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/paper-behaviors/paper-inky-focus-behavior.js */ "./node_modules/@polymer/paper-behaviors/paper-inky-focus-behavior.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer-fn.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer-fn.js"); +/* harmony import */ var _polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @polymer/polymer/lib/utils/html-tag.js */ "./node_modules/@polymer/polymer/lib/utils/html-tag.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + + +/** +Material design: [Icon +toggles](https://www.google.com/design/spec/components/buttons.html#buttons-toggle-buttons) + +`paper-icon-button` is a button with an image placed at the center. When the +user touches the button, a ripple effect emanates from the center of the button. + +`paper-icon-button` does not include a default icon set. To use icons from the +default set, include `PolymerElements/iron-icons/iron-icons.html`, and use the +`icon` attribute to specify which icon from the icon set to use. + + + +See [`iron-iconset`](iron-iconset) for more information about +how to use a custom icon set. + +Example: + + + + + + +To use `paper-icon-button` as a link, wrap it in an anchor tag. Since +`paper-icon-button` will already receive focus, you may want to prevent the +anchor tag from receiving focus as well by setting its tabindex to -1. + + + + + +### Styling + +Style the button with CSS as you would a normal DOM element. If you are using +the icons provided by `iron-icons`, they will inherit the foreground color of +the button. + + /* make a red "favorite" button *\/ + + +By default, the ripple is the same color as the foreground at 25% opacity. You +may customize the color using the `--paper-icon-button-ink-color` custom +property. + +The following custom properties and mixins are available for styling: + +Custom property | Description | Default +----------------|-------------|---------- +`--paper-icon-button-disabled-text` | The color of the disabled button | `--disabled-text-color` +`--paper-icon-button-ink-color` | Selected/focus ripple color | `--primary-text-color` +`--paper-icon-button` | Mixin for a button | `{}` +`--paper-icon-button-disabled` | Mixin for a disabled button | `{}` +`--paper-icon-button-hover` | Mixin for button on hover | `{}` + +@group Paper Elements +@element paper-icon-button +@demo demo/index.html +*/ +(0,_polymer_polymer_lib_legacy_polymer_fn_js__WEBPACK_IMPORTED_MODULE_4__.Polymer)({ + is: 'paper-icon-button', + + _template: (0,_polymer_polymer_lib_utils_html_tag_js__WEBPACK_IMPORTED_MODULE_5__.html)` + + + + `, + + hostAttributes: {role: 'button', tabindex: '0'}, + + behaviors: [_polymer_paper_behaviors_paper_inky_focus_behavior_js__WEBPACK_IMPORTED_MODULE_3__.PaperInkyFocusBehavior], + + registered: function() { + this._template.setAttribute('strip-whitespace', ''); + }, + + properties: { + /** + * The URL of an image for the icon. If the src property is specified, + * the icon property should not be. + */ + src: {type: String}, + + /** + * Specifies the icon name or index in the set of icons available in + * the icon's icon set. If the icon property is specified, + * the src property should not be. + */ + icon: {type: String}, + + /** + * Specifies the alternate text for the button, for accessibility. + */ + alt: {type: String, observer: '_altChanged'} + }, + + _altChanged: function(newValue, oldValue) { + var label = this.getAttribute('aria-label'); + + // Don't stomp over a user-set aria-label. + if (!label || oldValue == label) { + this.setAttribute('aria-label', newValue); + } + } +}); + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-input/paper-input-addon-behavior.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@polymer/paper-input/paper-input-addon-behavior.js ***! + \*************************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PaperInputAddonBehavior: () => (/* binding */ PaperInputAddonBehavior) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + +/** + * Use `Polymer.PaperInputAddonBehavior` to implement an add-on for + * ``. A add-on appears below the input, and may display + * information based on the input value and validity such as a character counter + * or an error message. + * @polymerBehavior + */ +const PaperInputAddonBehavior = { + attached: function() { + this.fire('addon-attached'); + }, + + /** + * The function called by `` when the input value or + * validity changes. + * @param {{ + * invalid: boolean, + * inputElement: (Element|undefined), + * value: (string|undefined) + * }} state - + * inputElement: The input element. + * value: The input value. + * invalid: True if the input value is invalid. + */ + update: function(state) {} + +}; + + +/***/ }), + +/***/ "./node_modules/@polymer/paper-input/paper-input-behavior.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@polymer/paper-input/paper-input-behavior.js ***! + \*******************************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ PaperInputBehavior: () => (/* binding */ PaperInputBehavior), +/* harmony export */ PaperInputBehaviorImpl: () => (/* binding */ PaperInputBehaviorImpl), +/* harmony export */ PaperInputHelper: () => (/* binding */ PaperInputHelper) +/* harmony export */ }); +/* harmony import */ var _polymer_polymer_polymer_legacy_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @polymer/polymer/polymer-legacy.js */ "./node_modules/@polymer/polymer/polymer-legacy.js"); +/* harmony import */ var _polymer_iron_a11y_keys_behavior_iron_a11y_keys_behavior_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js */ "./node_modules/@polymer/iron-a11y-keys-behavior/iron-a11y-keys-behavior.js"); +/* harmony import */ var _polymer_iron_behaviors_iron_control_state_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @polymer/iron-behaviors/iron-control-state.js */ "./node_modules/@polymer/iron-behaviors/iron-control-state.js"); +/* harmony import */ var _polymer_polymer_lib_legacy_polymer_dom_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @polymer/polymer/lib/legacy/polymer.dom.js */ "./node_modules/@polymer/polymer/lib/legacy/polymer.dom.js"); +/* harmony import */ var _polymer_polymer_polymer_element_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @polymer/polymer/polymer-element.js */ "./node_modules/@polymer/polymer/polymer-element.js"); +/** +@license +Copyright (c) 2015 The Polymer Project Authors. All rights reserved. +This code may only be used under the BSD style license found at +http://polymer.github.io/LICENSE.txt The complete set of authors may be found at +http://polymer.github.io/AUTHORS.txt The complete set of contributors may be +found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as +part of the polymer project is also subject to an additional IP rights grant +found at http://polymer.github.io/PATENTS.txt +*/ + + + + + + + +// Generate unique, monotonically increasing IDs for labels (needed by +// aria-labelledby) and add-ons. +const PaperInputHelper = {}; + +PaperInputHelper.NextLabelID = 1; +PaperInputHelper.NextAddonID = 1; +PaperInputHelper.NextInputID = 1; + +/** + * Use `PaperInputBehavior` to implement inputs with ``. + * This behavior is implemented by ``. It exposes a number of + * properties from `` and `` and + * they should be bound in your template. + * + * The input element can be accessed by the `inputElement` property if you need + * to access properties or methods that are not exposed. + * @polymerBehavior PaperInputBehavior + */ +const PaperInputBehaviorImpl = { + + properties: { + /** + * Fired when the input changes due to user interaction. + * + * @event change + */ + + /** + * The label for this input. If you're using PaperInputBehavior to + * implement your own paper-input-like element, bind this to + * `