diff --git a/commafeed-client/.bowerrc b/commafeed-client/.bowerrc
deleted file mode 100644
index b1283deb..00000000
--- a/commafeed-client/.bowerrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "directory": "src/main/app/lib"
-}
\ No newline at end of file
diff --git a/commafeed-client/.eslintignore b/commafeed-client/.eslintignore
new file mode 100644
index 00000000..18f7dde2
--- /dev/null
+++ b/commafeed-client/.eslintignore
@@ -0,0 +1,6 @@
+dist
+node_modules
+
+vite.config.ts
+
+src/locales/**/*.ts
\ No newline at end of file
diff --git a/commafeed-client/.eslintrc b/commafeed-client/.eslintrc
new file mode 100644
index 00000000..b4a46a5f
--- /dev/null
+++ b/commafeed-client/.eslintrc
@@ -0,0 +1,78 @@
+{
+ "extends": ["plugin:react/recommended", "react-app", "airbnb", "airbnb-typescript", "prettier"],
+ "plugins": ["prettier", "hooks"],
+ "parserOptions": {
+ "project": "./tsconfig.json"
+ },
+ "rules": {
+ // make eslint check prettier rules
+ "prettier/prettier": "error",
+
+ // enforce consistent curly braces usage
+ "curly": ["error", "multi-line", "consistent"],
+
+ // set "props" to false because it cases false positives with immer
+ "no-param-reassign": ["error", { "props": false }],
+
+ "prefer-destructuring": [
+ "error",
+ {
+ "array": false,
+ "object": true
+ },
+ {
+ "enforceForRenamedProperties": false
+ }
+ ],
+
+ // causes issues in thunks when we want to dispatch an action that is defined in the reducer
+ "@typescript-eslint/no-use-before-define": "off",
+
+ // make sure the key prop is filled when required
+ "react/jsx-key": ["error", { "checkFragmentShorthand": true }],
+
+ // configure additional hooks
+ "react-hooks/exhaustive-deps": [
+ "warn",
+ {
+ "additionalHooks": "useAsync"
+ }
+ ],
+
+ // trigger even if props is used only in createStyles()
+ "react/no-unused-prop-types": "off",
+
+ // no longer required with modern react versions
+ "react/react-in-jsx-scope": "off",
+
+ // not required with typescript
+ "react/prop-types": "off",
+ "react/require-default-props": "off",
+
+ // matter of taste
+ "react/destructuring-assignment": "off",
+ "react/jsx-props-no-spreading": "off",
+ "react/no-unescaped-entities": "off",
+ "import/prefer-default-export": "off",
+
+ // enforce hook call order
+ "hooks/sort": [
+ 2,
+ {
+ "groups": [
+ "useLocation",
+ "useParams",
+ "useStyles",
+ "useMantineTheme",
+ "useState",
+ "useAppSelector",
+ "useAppDispatch",
+ "useForm",
+ "useMutation",
+ "useCallback",
+ "useEffect"
+ ]
+ }
+ ]
+ }
+}
diff --git a/commafeed-client/.gitignore b/commafeed-client/.gitignore
index 0fb007ab..635dff8a 100644
--- a/commafeed-client/.gitignore
+++ b/commafeed-client/.gitignore
@@ -1,39 +1,33 @@
-# config file
-config.yml
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
-# build directory
-target
-target-ide
-
-# database files
-database
-
-# log files
-log
-
-# jetty sessions
-sessions
-
-# node
-node
node_modules
+dist
+dist-ssr
+*.local
-# bower
-src/main/app/lib
-
-# Eclipse files
-.project
-.classpath
-.settings
-.factorypath
-.checkstyle
-
-# IntelliJ Idea files
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
.idea
-*.iml
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
-# Sublime
-*.sublime*
+# rollup-plugin-visualizer
+/stats.html
-# Macs
-*.DS_Store
+# vite
+vite.config.ts.timestamp-*.mjs
+
+# compiled locales
+src/locales/**/*.ts
\ No newline at end of file
diff --git a/commafeed-client/.linguirc b/commafeed-client/.linguirc
new file mode 100644
index 00000000..e4d58226
--- /dev/null
+++ b/commafeed-client/.linguirc
@@ -0,0 +1,31 @@
+{
+ "locales": [
+ "en",
+ "fr"
+ ],
+ "catalogs": [
+ {
+ "path": "src/locales/{locale}/messages",
+ "include": [
+ "src"
+ ],
+ "exclude": [
+ "src/locales/**"
+ ]
+ }
+ ],
+ "format": "po",
+ "formatOptions": {
+ "origins": true,
+ "lineNumbers": false
+ },
+ "sourceLocale": "en",
+ "fallbackLocales": {
+ "default": "en"
+ },
+ "extractBabelOptions": {
+ "presets": [
+ "@babel/preset-typescript"
+ ]
+ }
+}
diff --git a/commafeed-client/README.md b/commafeed-client/README.md
new file mode 100644
index 00000000..032c2c94
--- /dev/null
+++ b/commafeed-client/README.md
@@ -0,0 +1,3 @@
+## CommaFeed new UI prototype
+
+This project may or may not one day replace the existing CommaFeed web UI.
diff --git a/commafeed-client/bower.json b/commafeed-client/bower.json
deleted file mode 100644
index 30464146..00000000
--- a/commafeed-client/bower.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
- "name": "commafeed",
- "version": "2.0.0",
- "dependencies": {
- "jquery": "2.1.3",
- "jquery-ui": "1.10.3",
- "jquery-mousewheel": "3.1.12",
- "lodash": "3.4.0",
- "bootstrap": "3.3.2",
- "font-awesome": "3.2.1",
- "angular": "1.3.14",
- "angular-resource": "1.3.14",
- "angular-route": "1.3.14",
- "angular-sanitize": "1.3.14",
- "angular-touch": "1.3.14",
- "angular-animate": "1.3.14",
- "angular-ui-router": "0.2.13",
- "angular-ui-utils": "0.1.0",
- "angular-ui-select2": "0.0.5",
- "angular-bootstrap": "0.2.0",
- "angular-loading-bar": "0.6.0",
- "angular-translate": "2.6.1",
- "angular-translate-loader-static-files": "2.6.1",
- "ngInfiniteScroll": "1.0.0",
- "ng-grid": "2.0.6",
- "mousetrap": "1.4.6",
- "momentjs": "2.9.0",
- "devicejs": "0.2.4",
- "zocial-less": "1.0.0",
- "swagger-ui": "2.1.0",
- "tinycon": "0.6.5"
- },
- "resolutions": {
- "angular": "1.3.14",
- "angular-translate": "2.6.1"
- }
-}
diff --git a/commafeed-client/gulp b/commafeed-client/gulp
deleted file mode 100644
index f02507dc..00000000
--- a/commafeed-client/gulp
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/bin/sh
-"node/node" "node_modules/gulp/bin/gulp.js" "$@"
\ No newline at end of file
diff --git a/commafeed-client/gulp.cmd b/commafeed-client/gulp.cmd
deleted file mode 100644
index 3cfe9dad..00000000
--- a/commafeed-client/gulp.cmd
+++ /dev/null
@@ -1,3 +0,0 @@
-@echo off
-%~dp0node/node node_modules/gulp/bin/gulp.js %*
-@echo on
\ No newline at end of file
diff --git a/commafeed-client/gulpfile.js b/commafeed-client/gulpfile.js
deleted file mode 100644
index c3d90b0b..00000000
--- a/commafeed-client/gulpfile.js
+++ /dev/null
@@ -1,115 +0,0 @@
-var gulp = require('gulp');
-var rev = require('gulp-rev');
-var revReplace = require('gulp-rev-replace');
-var minifyCSS = require('gulp-minify-css');
-var uglify = require('gulp-uglify');
-var filter = require('gulp-filter');
-var connect = require('gulp-connect');
-var modRewrite = require('connect-modrewrite');
-var sass = require('gulp-sass');
-var useref = require('gulp-useref');
-var templateCache = require('gulp-angular-templatecache');
-
-var SRC_DIR = 'src/main/app/';
-var TEMP_DIR = 'target/gulp/'
-var BUILD_DIR = 'target/classes/assets/';
-
-gulp.task('images', function() {
- return gulp.src(SRC_DIR + 'images/**/*').pipe(gulp.dest(BUILD_DIR + 'images'));
-});
-
-gulp.task('i18n', function() {
- return gulp.src(SRC_DIR + 'i18n/**/*.js').pipe(gulp.dest(BUILD_DIR + 'i18n'));
-});
-
-gulp.task('resources', function() {
- var favicons_png = SRC_DIR + '*.png';
- var favicons_ico = SRC_DIR + '*.ico';
- var favicons_svg = SRC_DIR + '*.svg';
- var manifest = SRC_DIR + 'manifest.json';
- return gulp.src([favicons_png, favicons_ico, favicons_svg, manifest]).pipe(gulp.dest(BUILD_DIR));
-});
-
-gulp.task('sass', function() {
- return gulp.src(SRC_DIR + 'sass/app.scss').pipe(sass()).pipe(gulp.dest(TEMP_DIR + 'css'));
-});
-
-gulp.task('fonts', function() {
- var font_awesome = SRC_DIR + 'lib/font-awesome/font/fontawesome-webfont.*';
- var zocial = SRC_DIR + 'lib/zocial-less/css/zocial-regular-*';
- var readabilicons = SRC_DIR + 'lib/readabilicons/webfont/fonts/readabilicons-*';
- return gulp.src([font_awesome, zocial, readabilicons]).pipe(gulp.dest(BUILD_DIR + 'font'));
-});
-
-gulp.task('select2', function() {
- var gif = SRC_DIR + 'lib/select2/*.gif';
- var png = SRC_DIR + 'lib/select2/*.png';
- return gulp.src([gif, png]).pipe(gulp.dest(BUILD_DIR + 'css'));
-});
-
-gulp.task('swagger-ui', function() {
- var index_html = SRC_DIR + 'api/index.html';
- var swagger_json = 'target/swagger/swagger.json';
- var lib = SRC_DIR + 'lib/swagger-ui/dist/**/*';
- return gulp.src([lib, index_html, swagger_json]).pipe(gulp.dest(BUILD_DIR + 'api'));
-});
-
-gulp.task('template-cache', function() {
- var options = {
- module : 'commafeed.services',
- root : 'templates/'
- };
- return gulp.src(SRC_DIR + 'templates/**/*.html').pipe(templateCache(options)).pipe(gulp.dest(TEMP_DIR + 'js'));
-});
-
-gulp.task('build-dev', ['images', 'i18n', 'resources', 'sass', 'fonts', 'select2', 'swagger-ui', 'template-cache'], function() {
- var assets = useref.assets({
- searchPath : [SRC_DIR, TEMP_DIR]
- });
- var jsFilter = filter("**/*.js");
- var cssFilter = filter("**/*.css");
- return gulp.src([SRC_DIR + 'index.html', TEMP_DIR + 'app.css']).pipe(assets).pipe(rev()).pipe(assets.restore()).pipe(useref()).pipe(
- revReplace()).pipe(gulp.dest(BUILD_DIR)).pipe(connect.reload());
-});
-
-gulp.task('build', ['images', 'i18n', 'resources', 'sass', 'fonts', 'select2', 'swagger-ui', 'template-cache'], function() {
- var assets = useref.assets({
- searchPath : [SRC_DIR, TEMP_DIR]
- });
- var jsFilter = filter("**/*.js");
- var cssFilter = filter("**/*.css");
- return gulp.src([SRC_DIR + 'index.html', TEMP_DIR + 'app.css']).pipe(assets)
-
- .pipe(cssFilter).pipe(minifyCSS()).pipe(cssFilter.restore())
-
- .pipe(jsFilter).pipe(uglify()).pipe(jsFilter.restore())
-
- .pipe(rev()).pipe(assets.restore()).pipe(useref()).pipe(revReplace()).pipe(gulp.dest(BUILD_DIR));
-});
-
-gulp.task('watch', function() {
- gulp.watch(SRC_DIR + 'sass/**/*.scss', ['build-dev']);
- gulp.watch(SRC_DIR + 'js/**/*.js', ['build-dev']);
- gulp.watch(SRC_DIR + 'i18n/**/*.js', ['build-dev']);
- gulp.watch(SRC_DIR + 'templates/**/*.html', ['build-dev']);
-});
-
-gulp.task('serve', function() {
- connect.server({
- root : BUILD_DIR,
- port : 8082,
- livereload : true,
- middleware : function() {
- var api = '^/api/(.*)$ http://localhost:8083/rest/$1 [P]';
- var rest = '^/rest/(.*)$ http://localhost:8083/rest/$1 [P]';
- var next = '^/next(.*)$ http://localhost:8083/next$1 [P]';
- var logout = '^/logout$ http://localhost:8083/logout [P]';
- var custom_css = '^/custom_css.css$ http://localhost:8083/custom_css.css [P]';
- var analytics = '^/analytics.js http://localhost:8083/analytics.js [P]';
- return [modRewrite([rest, next, logout, custom_css, analytics])];
- }
- });
-});
-
-gulp.task('dev', ['build-dev', 'watch', 'serve']);
-gulp.task('default', ['build']);
diff --git a/commafeed-client/index.html b/commafeed-client/index.html
new file mode 100644
index 00000000..96e735df
--- /dev/null
+++ b/commafeed-client/index.html
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+ CommaFeed
+
+
+
+
+
+
diff --git a/commafeed-client/package-lock.json b/commafeed-client/package-lock.json
new file mode 100644
index 00000000..42126cce
--- /dev/null
+++ b/commafeed-client/package-lock.json
@@ -0,0 +1,15143 @@
+{
+ "name": "commafeed-client",
+ "version": "0.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "commafeed-client",
+ "version": "0.0.0",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@emotion/react": "^11.10.0",
+ "@fontsource/open-sans": "^4.5.11",
+ "@lingui/core": "^3.14.0",
+ "@lingui/macro": "^3.14.0",
+ "@lingui/react": "^3.14.0",
+ "@mantine/core": "^5.1.1",
+ "@mantine/form": "^5.1.1",
+ "@mantine/hooks": "^5.1.1",
+ "@mantine/modals": "^5.1.1",
+ "@mantine/notifications": "^5.1.1",
+ "@mantine/spotlight": "^5.1.1",
+ "@reduxjs/toolkit": "^1.8.3",
+ "axios": "^0.27.2",
+ "dayjs": "^1.11.4",
+ "make-plural": "^7.1.0",
+ "mousetrap": "^1.6.5",
+ "react": "^18.2.0",
+ "react-async-hook": "^4.0.0",
+ "react-dom": "^18.2.0",
+ "react-icons": "^4.4.0",
+ "react-infinite-scroller": "^1.2.6",
+ "react-redux": "^8.0.2",
+ "react-router-dom": "^6.3.0",
+ "tinycon": "^0.6.8",
+ "use-mutation": "^2.2.1"
+ },
+ "devDependencies": {
+ "@lingui/cli": "^3.14.0",
+ "@types/eslint": "^8.4.5",
+ "@types/mousetrap": "^1.6.9",
+ "@types/react": "^18.0.17",
+ "@types/react-dom": "^18.0.6",
+ "@types/react-infinite-scroller": "^1.2.3",
+ "@types/tinycon": "^0.6.3",
+ "@vitejs/plugin-react": "^2.0.0",
+ "eslint": "^8.21.0",
+ "eslint-config-airbnb": "^19.0.4",
+ "eslint-config-airbnb-typescript": "^17.0.0",
+ "eslint-config-prettier": "^8.5.0",
+ "eslint-config-react-app": "^7.0.1",
+ "eslint-plugin-hooks": "^0.4.3",
+ "eslint-plugin-prettier": "^4.2.1",
+ "prettier": "^2.7.1",
+ "rollup-plugin-visualizer": "^5.7.1",
+ "typescript": "^4.7.4",
+ "vite": "^3.0.5",
+ "vite-plugin-eslint": "^1.7.0",
+ "vite-tsconfig-paths": "^3.5.0",
+ "vitest": "^0.21.1",
+ "vitest-mock-extended": "^0.1.13"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
+ "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+ "dependencies": {
+ "@babel/highlight": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/compat-data": {
+ "version": "7.18.8",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz",
+ "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz",
+ "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==",
+ "dependencies": {
+ "@ampproject/remapping": "^2.1.0",
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.18.9",
+ "@babel/helper-compilation-targets": "^7.18.9",
+ "@babel/helper-module-transforms": "^7.18.9",
+ "@babel/helpers": "^7.18.9",
+ "@babel/parser": "^7.18.9",
+ "@babel/template": "^7.18.6",
+ "@babel/traverse": "^7.18.9",
+ "@babel/types": "^7.18.9",
+ "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/core/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/eslint-parser": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz",
+ "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==",
+ "dev": true,
+ "dependencies": {
+ "eslint-scope": "^5.1.1",
+ "eslint-visitor-keys": "^2.1.0",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || >=14.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7.11.0",
+ "eslint": "^7.5.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@babel/eslint-parser/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz",
+ "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==",
+ "dependencies": {
+ "@babel/types": "^7.18.9",
+ "@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",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
+ "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz",
+ "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
+ "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
+ "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-compilation-targets/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-create-class-features-plugin": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz",
+ "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
+ "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
+ "dev": true,
+ "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.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz",
+ "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.13.0",
+ "@babel/helper-module-imports": "^7.12.13",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/traverse": "^7.13.0",
+ "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-define-polyfill-provider/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/helper-environment-visitor": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
+ "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-explode-assignable-expression": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz",
+ "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
+ "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
+ "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-member-expression-to-functions": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz",
+ "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-imports": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+ "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-module-transforms": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
+ "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz",
+ "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-plugin-utils": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-remap-async-to-generator": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz",
+ "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
+ "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
+ "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz",
+ "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-split-export-declaration": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
+ "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-wrap-function": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.9.tgz",
+ "integrity": "sha512-cG2ru3TRAL6a60tfQflpEfs4ldiPwF6YW3zfJiRgmoFVIaC1vGnBBgatfec+ZUziPHkHSaXAuEck3Cdkf3eRpQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/template": "^7.18.6",
+ "@babel/traverse": "^7.18.9",
+ "@babel/types": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helpers": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
+ "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+ "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/parser": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz",
+ "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz",
+ "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz",
+ "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==",
+ "dev": true,
+ "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.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz",
+ "integrity": "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-remap-async-to-generator": "^7.18.6",
+ "@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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
+ "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz",
+ "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==",
+ "dev": true,
+ "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-decorators": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.9.tgz",
+ "integrity": "sha512-KD7zDNaD14CRpjQjVbV4EnH9lsKYlcpUrhZH37ei2IY+AlXrfAPy5pTmRUE4X6X1k8EsKXPraykxeaogqQvSGA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/plugin-syntax-decorators": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-dynamic-import": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz",
+ "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz",
+ "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz",
+ "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz",
+ "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
+ "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz",
+ "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz",
+ "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz",
+ "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz",
+ "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
+ "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
+ "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
+ "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
+ "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-decorators": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.18.6.tgz",
+ "integrity": "sha512-fqyLgjcxf/1yhyZ6A+yo1u9gJ7eleFQod2lkaUsF9DQ7sbbY3Ligym3L0+I2c0WmqNKDpoD9UTb1AKP3qRMOAQ==",
+ "dev": true,
+ "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-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-flow": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz",
+ "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==",
+ "dev": true,
+ "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-assertions": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz",
+ "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==",
+ "dev": true,
+ "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-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
+ "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
+ "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-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "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-typescript": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz",
+ "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==",
+ "dev": true,
+ "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-arrow-functions": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz",
+ "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz",
+ "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz",
+ "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
+ "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz",
+ "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz",
+ "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz",
+ "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz",
+ "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz",
+ "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz",
+ "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==",
+ "dev": true,
+ "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-flow-strip-types": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.18.9.tgz",
+ "integrity": "sha512-+G6rp2zRuOAInY5wcggsx4+QVao1qPM0osC9fTUVlAV3zOrzTCnrMAFVnR6+a3T8wz1wFIH7KhYMcMB3u1n80A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/plugin-syntax-flow": "^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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz",
+ "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz",
+ "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz",
+ "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz",
+ "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
+ "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
+ "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz",
+ "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz",
+ "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz",
+ "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz",
+ "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz",
+ "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz",
+ "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz",
+ "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==",
+ "dev": true,
+ "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-display-name": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz",
+ "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==",
+ "dev": true,
+ "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.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz",
+ "integrity": "sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-jsx": "^7.18.6",
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-development": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
+ "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/plugin-transform-react-jsx": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz",
+ "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==",
+ "dev": true,
+ "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-source": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz",
+ "integrity": "sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==",
+ "dev": true,
+ "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-pure-annotations": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz",
+ "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^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-regenerator": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
+ "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz",
+ "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==",
+ "dev": true,
+ "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-runtime": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.9.tgz",
+ "integrity": "sha512-wS8uJwBt7/b/mzE13ktsJdmS4JP/j7PQSaADtnb4I2wL0zK51MQ0pmF8/Jy0wUIS96fr+fXT6S/ifiPXnvrlSg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "babel-plugin-polyfill-corejs2": "^0.3.1",
+ "babel-plugin-polyfill-corejs3": "^0.5.2",
+ "babel-plugin-polyfill-regenerator": "^0.3.1",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-runtime/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/plugin-transform-shorthand-properties": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz",
+ "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz",
+ "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz",
+ "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz",
+ "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz",
+ "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==",
+ "dev": true,
+ "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-typescript": {
+ "version": "7.18.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz",
+ "integrity": "sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-typescript": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-escapes": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz",
+ "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==",
+ "dev": true,
+ "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-unicode-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz",
+ "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==",
+ "dev": true,
+ "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/preset-env": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.9.tgz",
+ "integrity": "sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg==",
+ "dev": true,
+ "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.6",
+ "@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.6",
+ "@babel/plugin-transform-unicode-regex": "^7.18.6",
+ "@babel/preset-modules": "^0.1.5",
+ "@babel/types": "^7.18.9",
+ "babel-plugin-polyfill-corejs2": "^0.3.1",
+ "babel-plugin-polyfill-corejs3": "^0.5.2",
+ "babel-plugin-polyfill-regenerator": "^0.3.1",
+ "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-env/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/preset-modules": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
+ "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
+ "dev": true,
+ "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/preset-react": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz",
+ "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-validator-option": "^7.18.6",
+ "@babel/plugin-transform-react-display-name": "^7.18.6",
+ "@babel/plugin-transform-react-jsx": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-development": "^7.18.6",
+ "@babel/plugin-transform-react-pure-annotations": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-typescript": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz",
+ "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-validator-option": "^7.18.6",
+ "@babel/plugin-transform-typescript": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz",
+ "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==",
+ "dependencies": {
+ "regenerator-runtime": "^0.13.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/runtime-corejs3": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz",
+ "integrity": "sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A==",
+ "dev": true,
+ "dependencies": {
+ "core-js-pure": "^3.20.2",
+ "regenerator-runtime": "^0.13.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/template": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
+ "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
+ "dependencies": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.6",
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz",
+ "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==",
+ "dependencies": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.18.9",
+ "@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.9",
+ "@babel/types": "^7.18.9",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/types": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@cush/relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@cush/relative/-/relative-1.0.0.tgz",
+ "integrity": "sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==",
+ "dev": true
+ },
+ "node_modules/@emotion/babel-plugin": {
+ "version": "11.10.0",
+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.0.tgz",
+ "integrity": "sha512-xVnpDAAbtxL1dsuSelU5A7BnY/lftws0wUexNJZTPsvX/1tM4GZJbclgODhvW4E+NH7E5VFcH0bBn30NvniPJA==",
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/plugin-syntax-jsx": "^7.17.12",
+ "@babel/runtime": "^7.18.3",
+ "@emotion/hash": "^0.9.0",
+ "@emotion/memoize": "^0.8.0",
+ "@emotion/serialize": "^1.1.0",
+ "babel-plugin-macros": "^3.1.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7",
+ "stylis": "4.0.13"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@emotion/cache": {
+ "version": "11.10.1",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.1.tgz",
+ "integrity": "sha512-uZTj3Yz5D69GE25iFZcIQtibnVCFsc/6+XIozyL3ycgWvEdif2uEw9wlUt6umjLr4Keg9K6xRPHmD8LGi+6p1A==",
+ "dependencies": {
+ "@emotion/memoize": "^0.8.0",
+ "@emotion/sheet": "^1.2.0",
+ "@emotion/utils": "^1.2.0",
+ "@emotion/weak-memoize": "^0.3.0",
+ "stylis": "4.0.13"
+ }
+ },
+ "node_modules/@emotion/hash": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz",
+ "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ=="
+ },
+ "node_modules/@emotion/memoize": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz",
+ "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA=="
+ },
+ "node_modules/@emotion/react": {
+ "version": "11.10.0",
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.0.tgz",
+ "integrity": "sha512-K6z9zlHxxBXwN8TcpwBKcEsBsOw4JWCCmR+BeeOWgqp8GIU1yA2Odd41bwdAAr0ssbQrbJbVnndvv7oiv1bZeQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.10.0",
+ "@emotion/cache": "^11.10.0",
+ "@emotion/serialize": "^1.1.0",
+ "@emotion/utils": "^1.2.0",
+ "@emotion/weak-memoize": "^0.3.0",
+ "hoist-non-react-statics": "^3.3.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0",
+ "react": ">=16.8.0"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@emotion/serialize": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz",
+ "integrity": "sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==",
+ "dependencies": {
+ "@emotion/hash": "^0.9.0",
+ "@emotion/memoize": "^0.8.0",
+ "@emotion/unitless": "^0.8.0",
+ "@emotion/utils": "^1.2.0",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@emotion/sheet": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.0.tgz",
+ "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w=="
+ },
+ "node_modules/@emotion/unitless": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz",
+ "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw=="
+ },
+ "node_modules/@emotion/utils": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz",
+ "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw=="
+ },
+ "node_modules/@emotion/weak-memoize": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz",
+ "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg=="
+ },
+ "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz",
+ "integrity": "sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==",
+ "dependencies": {
+ "lodash.get": "^4",
+ "make-error": "^1",
+ "ts-node": "^9",
+ "tslib": "^2"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "cosmiconfig": ">=6"
+ }
+ },
+ "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader/node_modules/tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
+ },
+ "node_modules/@eslint/eslintrc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
+ "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+ "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz",
+ "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg=="
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz",
+ "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==",
+ "dependencies": {
+ "@floating-ui/core": "^0.7.3"
+ }
+ },
+ "node_modules/@floating-ui/react-dom": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.7.2.tgz",
+ "integrity": "sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==",
+ "dependencies": {
+ "@floating-ui/dom": "^0.5.3",
+ "use-isomorphic-layout-effect": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/react-dom-interactions": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom-interactions/-/react-dom-interactions-0.6.6.tgz",
+ "integrity": "sha512-qnao6UPjSZNHnXrF+u4/n92qVroQkx0Umlhy3Avk1oIebm/5ee6yvDm4xbHob0OjY7ya8WmUnV3rQlPwX3Atwg==",
+ "dependencies": {
+ "@floating-ui/react-dom": "^0.7.2",
+ "aria-hidden": "^1.1.3",
+ "use-isomorphic-layout-effect": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@fontsource/open-sans": {
+ "version": "4.5.11",
+ "resolved": "https://registry.npmjs.org/@fontsource/open-sans/-/open-sans-4.5.11.tgz",
+ "integrity": "sha512-nG0gmbx4pSr8wltdG/ZdlS6OrsMK40Wt6iyuLTKHEf0TQfzKRMlWaskZHdeuWCwS6WUgqHKMf9KSwGdxPfapOg=="
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz",
+ "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
+ "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
+ "node_modules/@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "node_modules/@jest/types": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
+ "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^15.0.0",
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/@jest/types/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@jest/types/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "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/@jest/types/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@jest/types/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/@jest/types/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jest/types/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
+ "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
+ "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "node_modules/@lingui/babel-plugin-extract-messages": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-3.14.0.tgz",
+ "integrity": "sha512-4lcDgVdjYiObuFdDwnAG3jJxS+d3YLq4i7qywlHgjIqteKUH01S3paJRXhZaPvLGl56HarSq0kt8Pymxw8lOrA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/generator": "^7.11.6",
+ "@babel/runtime": "^7.11.2",
+ "@lingui/conf": "^3.14.0",
+ "mkdirp": "^1.0.4"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/@lingui/cli": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-3.14.0.tgz",
+ "integrity": "sha512-QZURsIf7A97tf28b/ffpeL0DekA6tBmcwnj4FBui1SbQqJw1d4IPg2bUM5VRn3/25vhqpi9Uhx5m9x7Vv8QfCQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/generator": "^7.11.6",
+ "@babel/parser": "^7.11.5",
+ "@babel/plugin-syntax-jsx": "^7.10.4",
+ "@babel/runtime": "^7.11.2",
+ "@babel/types": "^7.11.5",
+ "@lingui/babel-plugin-extract-messages": "^3.14.0",
+ "@lingui/conf": "^3.14.0",
+ "babel-plugin-macros": "^3.0.1",
+ "bcp-47": "^1.0.7",
+ "chalk": "^4.1.0",
+ "chokidar": "3.5.1",
+ "cli-table": "0.3.6",
+ "commander": "^6.1.0",
+ "date-fns": "^2.16.1",
+ "fs-extra": "^9.0.1",
+ "fuzzaldrin": "^2.1.0",
+ "glob": "^7.1.4",
+ "inquirer": "^7.3.3",
+ "make-plural": "^6.2.2",
+ "messageformat-parser": "^4.1.3",
+ "micromatch": "4.0.2",
+ "mkdirp": "^1.0.4",
+ "node-gettext": "^3.0.0",
+ "normalize-path": "^3.0.0",
+ "ora": "^5.1.0",
+ "papaparse": "^5.3.0",
+ "pkg-up": "^3.1.0",
+ "plurals-cldr": "^1.0.4",
+ "pofile": "^1.1.0",
+ "pseudolocale": "^1.1.0",
+ "ramda": "^0.27.1"
+ },
+ "bin": {
+ "lingui": "lingui.js"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0",
+ "babel-plugin-macros": "2 || 3",
+ "typescript": "2 || 3 || 4"
+ }
+ },
+ "node_modules/@lingui/cli/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@lingui/cli/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/@lingui/cli/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@lingui/cli/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/@lingui/cli/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@lingui/cli/node_modules/make-plural": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-6.2.2.tgz",
+ "integrity": "sha512-8iTuFioatnTTmb/YJjywkVIHLjcwkFD9Ms0JpxjEm9Mo8eQYkh1z+55dwv4yc1jQ8ftVBxWQbihvZL1DfzGGWA==",
+ "dev": true
+ },
+ "node_modules/@lingui/cli/node_modules/micromatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+ "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.0.5"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@lingui/cli/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@lingui/conf": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-3.14.0.tgz",
+ "integrity": "sha512-5GMAbIRad9FavqYsfZCRAwjcOLzE7tONDJe9lSYE5SSJbbG01RI5kR5P0B84DUhTI6cGXau+1dAcP9K+JbEx+g==",
+ "dependencies": {
+ "@babel/runtime": "^7.11.2",
+ "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2",
+ "chalk": "^4.1.0",
+ "cosmiconfig": "^7.0.0",
+ "jest-validate": "^26.5.2",
+ "lodash.get": "^4.4.2"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/@lingui/conf/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@lingui/conf/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "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/@lingui/conf/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/@lingui/conf/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/@lingui/conf/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@lingui/conf/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@lingui/core": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@lingui/core/-/core-3.14.0.tgz",
+ "integrity": "sha512-ertREq9oi9B/umxpd/pInm9uFO8FLK2/0FXfDmMqvH5ydswWn/c9nY5YO4W1h4/8LWO45mewypOIyjoue4De1w==",
+ "dependencies": {
+ "@babel/runtime": "^7.11.2",
+ "make-plural": "^6.2.2",
+ "messageformat-parser": "^4.1.3"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/@lingui/core/node_modules/make-plural": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-6.2.2.tgz",
+ "integrity": "sha512-8iTuFioatnTTmb/YJjywkVIHLjcwkFD9Ms0JpxjEm9Mo8eQYkh1z+55dwv4yc1jQ8ftVBxWQbihvZL1DfzGGWA=="
+ },
+ "node_modules/@lingui/macro": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-3.14.0.tgz",
+ "integrity": "sha512-NxTRrhrZ/cUO9PX/4vWys90Ku58+ExxHuE30IuDnnDldWhWlOdycmjDt9tB+yIiUdFym/veSxBs+h114FzG5mA==",
+ "dependencies": {
+ "@babel/runtime": "^7.11.2",
+ "@lingui/conf": "^3.14.0",
+ "ramda": "^0.27.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "@lingui/core": "^3.13.0",
+ "@lingui/react": "^3.13.0",
+ "babel-plugin-macros": "2 || 3"
+ }
+ },
+ "node_modules/@lingui/react": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@lingui/react/-/react-3.14.0.tgz",
+ "integrity": "sha512-ow9Mtru7f0T2S9AwnPWRejppcucCW0LmoDR3P4wqHjL+eH5f8a6nxd2doxGieC91/2i4qqW88y4K/zXJxwRSQw==",
+ "dependencies": {
+ "@babel/runtime": "^7.11.2",
+ "@lingui/core": "^3.14.0"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/@mantine/core": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/core/-/core-5.1.1.tgz",
+ "integrity": "sha512-IjEUSQinGawinVNjBXVZTmhcVTaFURtHP/JuJtFDcVCdXEB18ibeyEh985NGhMwoar71tpsWZ0XsQQf9cMhcsA==",
+ "dependencies": {
+ "@floating-ui/react-dom-interactions": "0.6.6",
+ "@mantine/styles": "5.1.1",
+ "@mantine/utils": "5.1.1",
+ "@radix-ui/react-scroll-area": "1.0.0",
+ "react-textarea-autosize": "8.3.4"
+ },
+ "peerDependencies": {
+ "@mantine/hooks": "5.1.1",
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@mantine/form": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/form/-/form-5.1.1.tgz",
+ "integrity": "sha512-W2ab/wz9jcZE7q9LVbbu25mPLF49SOAnK67L3OqoByQ/PDflwKbJSz+pBuPRCW3snVijZkNNy0+S+JH6Yc7RFg==",
+ "dependencies": {
+ "fast-deep-equal": "^3.1.3",
+ "klona": "^2.0.5"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@mantine/hooks": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-5.1.1.tgz",
+ "integrity": "sha512-paixen37qs9a8g/hYMIAMXCl+WUK2DdGqSPahGpza1BdNqtYEIfbu12LcuZkfswufIY8DaagdabG0yL6Swh+bg==",
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@mantine/modals": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/modals/-/modals-5.1.1.tgz",
+ "integrity": "sha512-5B+fkP3z9XtKoIWuITCeTJwlIAV6sLIKEZgVrmnnHaXYPqQ+RjjOCkgEnQM1CI0pt46gdMK0Z1wTptgC1HcdHA==",
+ "dependencies": {
+ "@mantine/utils": "5.1.1"
+ },
+ "peerDependencies": {
+ "@mantine/core": "5.1.1",
+ "@mantine/hooks": "5.1.1",
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@mantine/notifications": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-5.1.1.tgz",
+ "integrity": "sha512-LTgb8atDTl9wnLRVMgdcCZyBy8iXL84b3PC0VNB8r/1hbxdlZTFSjOSzklT0H2L4kqRFigL4BduLpj7jRQeh+w==",
+ "dependencies": {
+ "@mantine/utils": "5.1.1",
+ "react-transition-group": "4.4.2"
+ },
+ "peerDependencies": {
+ "@mantine/core": "5.1.1",
+ "@mantine/hooks": "5.1.1",
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@mantine/spotlight": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/spotlight/-/spotlight-5.1.1.tgz",
+ "integrity": "sha512-WaMSd3AjohTDcO4vr51unh9z01wrC/DdrnNz32PUS3XwhaOcbjEeQIW4dr5otyAUjT8jM6aHfaTTdOK47OpxLw==",
+ "dependencies": {
+ "@mantine/utils": "5.1.1"
+ },
+ "peerDependencies": {
+ "@mantine/core": "5.1.1",
+ "@mantine/hooks": "5.1.1",
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@mantine/styles": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/styles/-/styles-5.1.1.tgz",
+ "integrity": "sha512-QMGiG/w3WaqUd79uQ9OjGLsdccqjExsIQpyGq2GbZJRAlrP8TYnohUtrXQx0VhGfM8oCn5n2IrZc48LzNkArJg==",
+ "dependencies": {
+ "clsx": "1.1.1",
+ "csstype": "3.0.9"
+ },
+ "peerDependencies": {
+ "@emotion/react": ">=11.9.0",
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@mantine/utils": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-5.1.1.tgz",
+ "integrity": "sha512-2FiSrD1lYuDHSGVi1QL5iskO8/Bnd6eDrwdpEWS/PJfg6iEz80HnmBxf/xzkDBaNdK3/n8g2kOaOcw5Ff1OFkA==",
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@radix-ui/number": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz",
+ "integrity": "sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "node_modules/@radix-ui/primitive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz",
+ "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz",
+ "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-context": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz",
+ "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-direction": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz",
+ "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-presence": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz",
+ "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-use-layout-effect": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-primitive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz",
+ "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-slot": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-scroll-area": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.0.tgz",
+ "integrity": "sha512-3SNFukAjS5remgtpAVR9m3Zgo23ZojBZ8V3TCyR3A+56x2mtVqKlPV4+e8rScZUFMuvtbjIdQCmsJBFBazKZig==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/number": "1.0.0",
+ "@radix-ui/primitive": "1.0.0",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-direction": "1.0.0",
+ "@radix-ui/react-presence": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.0",
+ "@radix-ui/react-use-callback-ref": "1.0.0",
+ "@radix-ui/react-use-layout-effect": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-slot": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz",
+ "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.0"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-use-callback-ref": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz",
+ "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@radix-ui/react-use-layout-effect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz",
+ "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
+ },
+ "peerDependencies": {
+ "react": "^16.8 || ^17.0 || ^18.0"
+ }
+ },
+ "node_modules/@reduxjs/toolkit": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.3.tgz",
+ "integrity": "sha512-lU/LDIfORmjBbyDLaqFN2JB9YmAT1BElET9y0ZszwhSBa5Ef3t6o5CrHupw5J1iOXwd+o92QfQZ8OJpwXvsssg==",
+ "dependencies": {
+ "immer": "^9.0.7",
+ "redux": "^4.1.2",
+ "redux-thunk": "^2.4.1",
+ "reselect": "^4.1.5"
+ },
+ "peerDependencies": {
+ "react": "^16.9.0 || ^17.0.0 || ^18",
+ "react-redux": "^7.2.1 || ^8.0.2"
+ },
+ "peerDependenciesMeta": {
+ "react": {
+ "optional": true
+ },
+ "react-redux": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
+ "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
+ "dev": true,
+ "dependencies": {
+ "estree-walker": "^2.0.1",
+ "picomatch": "^2.2.2"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/@rushstack/eslint-patch": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz",
+ "integrity": "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==",
+ "dev": true
+ },
+ "node_modules/@types/chai": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz",
+ "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==",
+ "dev": true
+ },
+ "node_modules/@types/chai-subset": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz",
+ "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==",
+ "dev": true,
+ "dependencies": {
+ "@types/chai": "*"
+ }
+ },
+ "node_modules/@types/eslint": {
+ "version": "8.4.5",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz",
+ "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
+ "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==",
+ "dev": true
+ },
+ "node_modules/@types/hoist-non-react-statics": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
+ "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
+ "dependencies": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g=="
+ },
+ "node_modules/@types/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "dependencies": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "node_modules/@types/istanbul-reports": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
+ "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "dependencies": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "dev": true
+ },
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true
+ },
+ "node_modules/@types/mousetrap": {
+ "version": "1.6.9",
+ "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.9.tgz",
+ "integrity": "sha512-HUAiN65VsRXyFCTicolwb5+I7FM6f72zjMWr+ajGk+YTvzBgXqa2A5U7d+rtsouAkunJ5U4Sb5lNJjo9w+nmXg==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "18.6.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz",
+ "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg=="
+ },
+ "node_modules/@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
+ },
+ "node_modules/@types/prop-types": {
+ "version": "15.7.5",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
+ },
+ "node_modules/@types/react": {
+ "version": "18.0.17",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.17.tgz",
+ "integrity": "sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ==",
+ "dependencies": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/@types/react-dom": {
+ "version": "18.0.6",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz",
+ "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==",
+ "devOptional": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/react-infinite-scroller": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@types/react-infinite-scroller/-/react-infinite-scroller-1.2.3.tgz",
+ "integrity": "sha512-l60JckVoO+dxmKW2eEG7jbliEpITsTJvRPTe97GazjF5+ylagAuyYdXl8YY9DQsTP9QjhqGKZROknzgscGJy0A==",
+ "dev": true,
+ "dependencies": {
+ "@types/react": "*"
+ }
+ },
+ "node_modules/@types/scheduler": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
+ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
+ },
+ "node_modules/@types/tinycon": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/@types/tinycon/-/tinycon-0.6.3.tgz",
+ "integrity": "sha512-TC42m8KAyp3AqyZKRXVkk5Qy+oIU8zo2U3362i16Qan0JgZNzLawO7oYnin4BJOy8FSZfOadYYvUWQnpaXoZwg==",
+ "dev": true
+ },
+ "node_modules/@types/use-sync-external-store": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
+ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
+ },
+ "node_modules/@types/yargs": {
+ "version": "15.0.14",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz",
+ "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==",
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/@types/yargs-parser": {
+ "version": "21.0.0",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
+ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA=="
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "5.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.7.tgz",
+ "integrity": "sha512-l4L6Do+tfeM2OK0GJsU7TUcM/1oN/N25xHm3Jb4z3OiDU4Lj8dIuxX9LpVMS9riSXQs42D1ieX7b85/r16H9Fw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.30.7",
+ "@typescript-eslint/type-utils": "5.30.7",
+ "@typescript-eslint/utils": "5.30.7",
+ "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/experimental-utils": {
+ "version": "5.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.30.7.tgz",
+ "integrity": "sha512-r218ZVL0zFBYzEq8/9K2ZhRgsmKUhm8xd3sWChgvTbmP98kHGuY83IUl64SS9fx9OSBM9vMLdzBfox4eDdm/ZQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/utils": "5.30.7"
+ },
+ "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/parser": {
+ "version": "5.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.7.tgz",
+ "integrity": "sha512-Rg5xwznHWWSy7v2o0cdho6n+xLhK2gntImp0rJroVVFkcYFYQ8C8UJTSuTw/3CnExBmPjycjmUJkxVmjXsld6A==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.30.7",
+ "@typescript-eslint/types": "5.30.7",
+ "@typescript-eslint/typescript-estree": "5.30.7",
+ "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.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz",
+ "integrity": "sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.30.7",
+ "@typescript-eslint/visitor-keys": "5.30.7"
+ },
+ "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.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.7.tgz",
+ "integrity": "sha512-nD5qAE2aJX/YLyKMvOU5jvJyku4QN5XBVsoTynFrjQZaDgDV6i7QHFiYCx10wvn7hFvfuqIRNBtsgaLe0DbWhw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/utils": "5.30.7",
+ "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.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.7.tgz",
+ "integrity": "sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg==",
+ "dev": true,
+ "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.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz",
+ "integrity": "sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.30.7",
+ "@typescript-eslint/visitor-keys": "5.30.7",
+ "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/utils": {
+ "version": "5.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.7.tgz",
+ "integrity": "sha512-Z3pHdbFw+ftZiGUnm1GZhkJgVqsDL5CYW2yj+TB2mfXDFOMqtbzQi2dNJIyPqPbx9mv2kUxS1gU+r2gKlKi1rQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.30.7",
+ "@typescript-eslint/types": "5.30.7",
+ "@typescript-eslint/typescript-estree": "5.30.7",
+ "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.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz",
+ "integrity": "sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.30.7",
+ "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/@vitejs/plugin-react": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.0.0.tgz",
+ "integrity": "sha512-zHkRR+X4zqEPNBbKV2FvWSxK7Q6crjMBVIAYroSU8Nbb4M3E5x4qOiLoqJBHtXgr27kfednXjkwr3lr8jS6Wrw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.18.6",
+ "@babel/plugin-transform-react-jsx": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-development": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-self": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-source": "^7.18.6",
+ "magic-string": "^0.26.2",
+ "react-refresh": "^0.14.0"
+ },
+ "engines": {
+ "node": ">=14.18.0"
+ },
+ "peerDependencies": {
+ "vite": "^3.0.0"
+ }
+ },
+ "node_modules/acorn": {
+ "version": "8.8.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
+ "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "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/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.21.3"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-escapes/node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "dependencies": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
+ },
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "node_modules/aria-hidden": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.1.3.tgz",
+ "integrity": "sha512-RhVWFtKH5BiGMycI72q2RAFMLQi8JP9bLuQXgR5a8Znp7P5KOIADSJeyfI8PCVxLEp067B2HbP5JIiI/PXIZeA==",
+ "dependencies": {
+ "tslib": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.5.0"
+ }
+ },
+ "node_modules/aria-query": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz",
+ "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.10.2",
+ "@babel/runtime-corejs3": "^7.10.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/array-includes": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz",
+ "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==",
+ "dev": true,
+ "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-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
+ "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
+ "dev": true,
+ "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/array.prototype.flatmap": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz",
+ "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==",
+ "dev": true,
+ "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/assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==",
+ "dev": true
+ },
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "node_modules/at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/axe-core": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz",
+ "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/axios": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
+ "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
+ "dependencies": {
+ "follow-redirects": "^1.14.9",
+ "form-data": "^4.0.0"
+ }
+ },
+ "node_modules/axobject-query": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
+ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==",
+ "dev": true
+ },
+ "node_modules/babel-plugin-dynamic-import-node": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
+ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
+ "dev": true,
+ "dependencies": {
+ "object.assign": "^4.1.0"
+ }
+ },
+ "node_modules/babel-plugin-macros": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
+ "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+ "dependencies": {
+ "@babel/runtime": "^7.12.5",
+ "cosmiconfig": "^7.0.0",
+ "resolve": "^1.19.0"
+ },
+ "engines": {
+ "node": ">=10",
+ "npm": ">=6"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs2": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz",
+ "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.13.11",
+ "@babel/helper-define-polyfill-provider": "^0.3.1",
+ "semver": "^6.1.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz",
+ "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.3.1",
+ "core-js-compat": "^3.21.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-regenerator": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz",
+ "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.3.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-transform-react-remove-prop-types": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz",
+ "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==",
+ "dev": true
+ },
+ "node_modules/babel-preset-react-app": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz",
+ "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.16.0",
+ "@babel/plugin-proposal-class-properties": "^7.16.0",
+ "@babel/plugin-proposal-decorators": "^7.16.4",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0",
+ "@babel/plugin-proposal-numeric-separator": "^7.16.0",
+ "@babel/plugin-proposal-optional-chaining": "^7.16.0",
+ "@babel/plugin-proposal-private-methods": "^7.16.0",
+ "@babel/plugin-transform-flow-strip-types": "^7.16.0",
+ "@babel/plugin-transform-react-display-name": "^7.16.0",
+ "@babel/plugin-transform-runtime": "^7.16.4",
+ "@babel/preset-env": "^7.16.4",
+ "@babel/preset-react": "^7.16.0",
+ "@babel/preset-typescript": "^7.16.0",
+ "@babel/runtime": "^7.16.3",
+ "babel-plugin-macros": "^3.1.0",
+ "babel-plugin-transform-react-remove-prop-types": "^0.4.24"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "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"
+ }
+ ]
+ },
+ "node_modules/bcp-47": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-1.0.8.tgz",
+ "integrity": "sha512-Y9y1QNBBtYtv7hcmoX0tR+tUNSFZGZ6OL6vKPObq8BbOhkCoyayF6ogfLTgAli/KuAEbsYHYUNq2AQuY6IuLag==",
+ "dev": true,
+ "dependencies": {
+ "is-alphabetical": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "dev": true,
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.2.tgz",
+ "integrity": "sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001366",
+ "electron-to-chromium": "^1.4.188",
+ "node-releases": "^2.0.6",
+ "update-browserslist-db": "^1.0.4"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "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"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "node_modules/call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001369",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001369.tgz",
+ "integrity": "sha512-OY1SBHaodJc4wflDIKnlkdqWzJZd1Ls/2zbVJHBSv3AT7vgOJ58yAhd2CN4d57l2kPJrgMb7P9+N1Mhy4tNSQA==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ }
+ ]
+ },
+ "node_modules/chai": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
+ "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
+ "dev": true,
+ "dependencies": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^3.0.1",
+ "get-func-name": "^2.0.0",
+ "loupe": "^2.3.1",
+ "pathval": "^1.1.1",
+ "type-detect": "^4.0.5"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
+ "node_modules/check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/chokidar": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
+ "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+ "dev": true,
+ "dependencies": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.5.0"
+ },
+ "engines": {
+ "node": ">= 8.10.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.1"
+ }
+ },
+ "node_modules/chokidar/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "dependencies": {
+ "restore-cursor": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/cli-spinners": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz",
+ "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/cli-table": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.6.tgz",
+ "integrity": "sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ==",
+ "dev": true,
+ "dependencies": {
+ "colors": "1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.2.0"
+ }
+ },
+ "node_modules/cli-width": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
+ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "node_modules/clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8"
+ }
+ },
+ "node_modules/clsx": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
+ "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "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",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/confusing-browser-globals": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
+ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
+ "dev": true
+ },
+ "node_modules/convert-source-map": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
+ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
+ "dependencies": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "node_modules/core-js-compat": {
+ "version": "3.23.5",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.5.tgz",
+ "integrity": "sha512-fHYozIFIxd+91IIbXJgWd/igXIc8Mf9is0fusswjnGIWVG96y2cwyUdlCkGOw6rMLHKAxg7xtCIVaHsyOUnJIg==",
+ "dev": true,
+ "dependencies": {
+ "browserslist": "^4.21.2",
+ "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",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
+ "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/core-js-pure": {
+ "version": "3.23.5",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.5.tgz",
+ "integrity": "sha512-8t78LdpKSuCq4pJYCYk8hl7XEkAX+BP16yRIwL3AanTksxuEf7CM83vRyctmiEL8NDZ3jpUcv56fk9/zG3aIuw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/cosmiconfig": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
+ "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+ "dependencies": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
+ },
+ "node_modules/cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/csstype": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz",
+ "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw=="
+ },
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "dev": true
+ },
+ "node_modules/date-fns": {
+ "version": "2.29.1",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.1.tgz",
+ "integrity": "sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.11"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/date-fns"
+ }
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.4",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.4.tgz",
+ "integrity": "sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g=="
+ },
+ "node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=0.12"
+ }
+ },
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "node_modules/defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==",
+ "dev": true,
+ "dependencies": {
+ "clone": "^1.0.2"
+ }
+ },
+ "node_modules/define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dev": true,
+ "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/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "dependencies": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.199",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz",
+ "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg=="
+ },
+ "node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "node_modules/es-abstract": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz",
+ "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==",
+ "dev": true,
+ "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-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ }
+ },
+ "node_modules/es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "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/esbuild": {
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz",
+ "integrity": "sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "esbuild-android-64": "0.14.49",
+ "esbuild-android-arm64": "0.14.49",
+ "esbuild-darwin-64": "0.14.49",
+ "esbuild-darwin-arm64": "0.14.49",
+ "esbuild-freebsd-64": "0.14.49",
+ "esbuild-freebsd-arm64": "0.14.49",
+ "esbuild-linux-32": "0.14.49",
+ "esbuild-linux-64": "0.14.49",
+ "esbuild-linux-arm": "0.14.49",
+ "esbuild-linux-arm64": "0.14.49",
+ "esbuild-linux-mips64le": "0.14.49",
+ "esbuild-linux-ppc64le": "0.14.49",
+ "esbuild-linux-riscv64": "0.14.49",
+ "esbuild-linux-s390x": "0.14.49",
+ "esbuild-netbsd-64": "0.14.49",
+ "esbuild-openbsd-64": "0.14.49",
+ "esbuild-sunos-64": "0.14.49",
+ "esbuild-windows-32": "0.14.49",
+ "esbuild-windows-64": "0.14.49",
+ "esbuild-windows-arm64": "0.14.49"
+ }
+ },
+ "node_modules/esbuild-windows-64": {
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz",
+ "integrity": "sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint": {
+ "version": "8.21.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz",
+ "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==",
+ "dev": true,
+ "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-config-airbnb": {
+ "version": "19.0.4",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz",
+ "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==",
+ "dev": true,
+ "dependencies": {
+ "eslint-config-airbnb-base": "^15.0.0",
+ "object.assign": "^4.1.2",
+ "object.entries": "^1.1.5"
+ },
+ "engines": {
+ "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.32.0 || ^8.2.0",
+ "eslint-plugin-import": "^2.25.3",
+ "eslint-plugin-jsx-a11y": "^6.5.1",
+ "eslint-plugin-react": "^7.28.0",
+ "eslint-plugin-react-hooks": "^4.3.0"
+ }
+ },
+ "node_modules/eslint-config-airbnb-base": {
+ "version": "15.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
+ "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
+ "dev": true,
+ "dependencies": {
+ "confusing-browser-globals": "^1.0.10",
+ "object.assign": "^4.1.2",
+ "object.entries": "^1.1.5",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.32.0 || ^8.2.0",
+ "eslint-plugin-import": "^2.25.2"
+ }
+ },
+ "node_modules/eslint-config-airbnb-base/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-config-airbnb-typescript": {
+ "version": "17.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz",
+ "integrity": "sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g==",
+ "dev": true,
+ "dependencies": {
+ "eslint-config-airbnb-base": "^15.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^5.13.0",
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^7.32.0 || ^8.2.0",
+ "eslint-plugin-import": "^2.25.3"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
+ "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
+ "dev": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-config-react-app": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz",
+ "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.16.0",
+ "@babel/eslint-parser": "^7.16.3",
+ "@rushstack/eslint-patch": "^1.1.0",
+ "@typescript-eslint/eslint-plugin": "^5.5.0",
+ "@typescript-eslint/parser": "^5.5.0",
+ "babel-preset-react-app": "^10.0.1",
+ "confusing-browser-globals": "^1.0.11",
+ "eslint-plugin-flowtype": "^8.0.3",
+ "eslint-plugin-import": "^2.25.3",
+ "eslint-plugin-jest": "^25.3.0",
+ "eslint-plugin-jsx-a11y": "^6.5.1",
+ "eslint-plugin-react": "^7.27.1",
+ "eslint-plugin-react-hooks": "^4.3.0",
+ "eslint-plugin-testing-library": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^8.0.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
+ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^3.2.7",
+ "resolve": "^1.20.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/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/eslint-module-utils": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
+ "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-flowtype": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz",
+ "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==",
+ "dev": true,
+ "dependencies": {
+ "lodash": "^4.17.21",
+ "string-natural-compare": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "@babel/plugin-syntax-flow": "^7.14.5",
+ "@babel/plugin-transform-react-jsx": "^7.14.9",
+ "eslint": "^8.1.0"
+ }
+ },
+ "node_modules/eslint-plugin-hooks": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-hooks/-/eslint-plugin-hooks-0.4.3.tgz",
+ "integrity": "sha512-Ra/YMBoTVFlM3zcU0c3vW8WQnauDyj/zVGnx6MUlIHaIMdZ/fZcptA20rotOGpRxZDQhReTlCYzz8BQmteJNWw==",
+ "dev": true,
+ "dependencies": {
+ "requireindex": "~1.2.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.26.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
+ "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
+ "dev": true,
+ "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",
+ "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/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/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/eslint-plugin-jest": {
+ "version": "25.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz",
+ "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/experimental-utils": "^5.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/eslint-plugin": {
+ "optional": true
+ },
+ "jest": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz",
+ "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.18.9",
+ "aria-query": "^4.2.2",
+ "array-includes": "^3.1.5",
+ "ast-types-flow": "^0.0.7",
+ "axe-core": "^4.4.3",
+ "axobject-query": "^2.2.0",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^3.3.2",
+ "language-tags": "^1.0.5",
+ "minimatch": "^3.1.2",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-prettier": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
+ "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
+ "dev": true,
+ "dependencies": {
+ "prettier-linter-helpers": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.28.0",
+ "prettier": ">=2.0.0"
+ },
+ "peerDependenciesMeta": {
+ "eslint-config-prettier": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.30.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz",
+ "integrity": "sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.5",
+ "array.prototype.flatmap": "^1.3.0",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.5",
+ "object.fromentries": "^2.0.5",
+ "object.hasown": "^1.1.1",
+ "object.values": "^1.1.5",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.3",
+ "semver": "^6.3.0",
+ "string.prototype.matchall": "^4.0.7"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
+ "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
+ "dev": true,
+ "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/eslint-plugin-react/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-testing-library": {
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.5.1.tgz",
+ "integrity": "sha512-plLEkkbAKBjPxsLj7x4jNapcHAg2ernkQlKKrN2I8NrQwPISZHyCUNvg5Hv3EDqOQReToQb5bnqXYbkijJPE/g==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/utils": "^5.13.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0",
+ "npm": ">=6"
+ },
+ "peerDependencies": {
+ "eslint": "^7.5.0 || ^8.0.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/eslint-scope/node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/eslint/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/eslint/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/eslint/node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "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/find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/globals": {
+ "version": "13.17.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+ "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint/node_modules/path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/eslint/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/espree": {
+ "version": "9.3.3",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz",
+ "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==",
+ "dev": true,
+ "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/esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "node_modules/esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "dev": true,
+ "dependencies": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "node_modules/fast-diff": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
+ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+ "dev": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "dev": true,
+ "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-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "node_modules/fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "node_modules/fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "dependencies": {
+ "flat-cache": "^3.0.4"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
+ },
+ "node_modules/find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "dependencies": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ }
+ },
+ "node_modules/flatted": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz",
+ "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==",
+ "dev": true
+ },
+ "node_modules/follow-redirects": {
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
+ "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
+ },
+ "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==",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "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.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "node_modules/function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
+ "dev": true
+ },
+ "node_modules/functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/fuzzaldrin": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fuzzaldrin/-/fuzzaldrin-2.1.0.tgz",
+ "integrity": "sha512-zgllBYwfHR5P3CncJiGbGVPpa3iFYW1yuPaIv8DiTVRrcg5/6uETNL5zvIoKflG1aifXVUZTlIroDehw4WygGA==",
+ "dev": true
+ },
+ "node_modules/gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
+ "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
+ "dev": true,
+ "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-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "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-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.3"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob-regex": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/glob-regex/-/glob-regex-0.3.2.tgz",
+ "integrity": "sha512-m5blUd3/OqDTWwzBBtWBPrGlAzatRywHameHeekAZyZrskYouOGdNB8T/q6JucucvJXtOuyHIn0/Yia7iDasDw==",
+ "dev": true
+ },
+ "node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "dev": true
+ },
+ "node_modules/grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/history": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz",
+ "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.7.6"
+ }
+ },
+ "node_modules/hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "dependencies": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "node_modules/iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "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"
+ }
+ ]
+ },
+ "node_modules/ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/immer": {
+ "version": "9.0.15",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz",
+ "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/immer"
+ }
+ },
+ "node_modules/import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.8.19"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/inquirer": {
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
+ "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^3.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.19",
+ "mute-stream": "0.0.8",
+ "run-async": "^2.4.0",
+ "rxjs": "^6.6.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/inquirer/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/inquirer/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/inquirer/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/inquirer/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/inquirer/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/inquirer/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/is-alphabetical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
+ "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-alphanumerical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
+ "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
+ },
+ "node_modules/is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "dependencies": {
+ "has-bigints": "^1.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "dependencies": {
+ "binary-extensions": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "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-callable": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
+ "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/wooorm"
+ }
+ },
+ "node_modules/is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "dev": true,
+ "bin": {
+ "is-docker": "cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-interactive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
+ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dev": true,
+ "dependencies": {
+ "is-docker": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "node_modules/jest-get-type": {
+ "version": "26.3.0",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz",
+ "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==",
+ "engines": {
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/jest-validate": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz",
+ "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==",
+ "dependencies": {
+ "@jest/types": "^26.6.2",
+ "camelcase": "^6.0.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^26.3.0",
+ "leven": "^3.1.0",
+ "pretty-format": "^26.6.2"
+ },
+ "engines": {
+ "node": ">= 10.14.2"
+ }
+ },
+ "node_modules/jest-validate/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/jest-validate/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "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/jest-validate/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/jest-validate/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-validate/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
+ "node_modules/jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "node_modules/json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "node_modules/json5": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "dependencies": {
+ "universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/jsx-ast-utils": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz",
+ "integrity": "sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.5",
+ "object.assign": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/klona": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz",
+ "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==",
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.22",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
+ "dev": true
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+ "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
+ "dev": true,
+ "dependencies": {
+ "language-subtag-registry": "~0.3.2"
+ }
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
+ "node_modules/local-pkg": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz",
+ "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+ "dev": true
+ },
+ "node_modules/lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ=="
+ },
+ "node_modules/lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/log-symbols/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/log-symbols/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/log-symbols/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/log-symbols/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/log-symbols/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/log-symbols/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
+ "node_modules/loupe": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz",
+ "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==",
+ "dev": true,
+ "dependencies": {
+ "get-func-name": "^2.0.0"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.26.2",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz",
+ "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==",
+ "dev": true,
+ "dependencies": {
+ "sourcemap-codec": "^1.4.8"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
+ },
+ "node_modules/make-plural": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-7.1.0.tgz",
+ "integrity": "sha512-PKkwVlAxYVo98NrbclaQIT4F5Oy+X58PZM5r2IwUSCe3syya6PXkIRCn2XCdz7p58Scgpp50PBeHmepXVDG3hg=="
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/messageformat-parser": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-4.1.3.tgz",
+ "integrity": "sha512-2fU3XDCanRqeOCkn7R5zW5VQHWf+T3hH65SzuqRvjatBK7r4uyFa5mEX+k6F9Bd04LVM5G4/BHBTUJsOdW7uyg=="
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "dev": true
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/mousetrap": {
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz",
+ "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA=="
+ },
+ "node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+ "dev": true
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "dev": true,
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node_modules/node-gettext": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/node-gettext/-/node-gettext-3.0.0.tgz",
+ "integrity": "sha512-/VRYibXmVoN6tnSAY2JWhNRhWYJ8Cd844jrZU/DwLVoI4vBI6ceYbd8i42sYZ9uOgDH3S7vslIKOWV/ZrT2YBA==",
+ "dev": true,
+ "dependencies": {
+ "lodash.get": "^4.4.2"
+ }
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
+ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
+ },
+ "node_modules/normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/object-inspect": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.entries": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
+ "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/object.fromentries": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
+ "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
+ "dev": true,
+ "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/object.hasown": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz",
+ "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==",
+ "dev": true,
+ "dependencies": {
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "dev": true,
+ "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/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "dependencies": {
+ "mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/open": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
+ "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
+ "dev": true,
+ "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/optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "dev": true,
+ "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/ora": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
+ "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
+ "dev": true,
+ "dependencies": {
+ "bl": "^4.1.0",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-spinners": "^2.5.0",
+ "is-interactive": "^1.0.0",
+ "is-unicode-supported": "^0.1.0",
+ "log-symbols": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "wcwidth": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ora/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/ora/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/ora/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/ora/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/ora/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/ora/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/papaparse": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.3.2.tgz",
+ "integrity": "sha512-6dNZu0Ki+gyV0eBsFKJhYr+MdQYAzFUGlBMNj3GNrmHxmz1lfRa24CjFObPXtjcetlOv5Ad299MhIK0znp3afw==",
+ "dev": true
+ },
+ "node_modules/parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "dependencies": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pathval": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
+ "dev": true,
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pkg-up": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
+ "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-up/node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-up/node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-up/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-up/node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pkg-up/node_modules/p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/plurals-cldr": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/plurals-cldr/-/plurals-cldr-1.0.4.tgz",
+ "integrity": "sha512-4nLXqtel7fsCgzi8dvRZvUjfL8SXpP982sKg7b2TgpnR8rDnes06iuQ83trQ/+XdtyMIQkBBbKzX6x97eLfsJQ==",
+ "dev": true
+ },
+ "node_modules/pofile": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/pofile/-/pofile-1.1.3.tgz",
+ "integrity": "sha512-sk96pUvpNwDV6PLrnhr68Uu1S5NohsxqLKz0GuracgrDo40BdF/r1RhHnjakUk6Q4Z0OKIybOQ7GevLKGN1iYw==",
+ "dev": true
+ },
+ "node_modules/postcss": {
+ "version": "8.4.16",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz",
+ "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/prettier": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
+ "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
+ "dev": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "dependencies": {
+ "fast-diff": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
+ "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
+ "dependencies": {
+ "@jest/types": "^26.6.2",
+ "ansi-regex": "^5.0.0",
+ "ansi-styles": "^4.0.0",
+ "react-is": "^17.0.1"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/pretty-format/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "node_modules/pretty-format/node_modules/react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
+ },
+ "node_modules/prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "node_modules/pseudolocale": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pseudolocale/-/pseudolocale-1.2.0.tgz",
+ "integrity": "sha512-k0OQFvIlvpRdzR0dPVrrbWX7eE9EaZ6gpZtTlFSDi1Gf9tMy9wiANCNu7JZ0drcKgUri/39a2mBbH0goiQmrmQ==",
+ "dev": true,
+ "dependencies": {
+ "commander": "*"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "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"
+ }
+ ]
+ },
+ "node_modules/ramda": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz",
+ "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA=="
+ },
+ "node_modules/react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-async-hook": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/react-async-hook/-/react-async-hook-4.0.0.tgz",
+ "integrity": "sha512-97lgjFkOcHCTYSrsKBpsXg3iVWM0LnzedB749iP76sb3/8Ouu4nHIkCLEOrQWHVYqrYxjF05NN6GHoXWFkB3Kw==",
+ "engines": {
+ "node": ">=8",
+ "npm": ">=5"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "dependencies": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ },
+ "peerDependencies": {
+ "react": "^18.2.0"
+ }
+ },
+ "node_modules/react-icons": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.4.0.tgz",
+ "integrity": "sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg==",
+ "peerDependencies": {
+ "react": "*"
+ }
+ },
+ "node_modules/react-infinite-scroller": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/react-infinite-scroller/-/react-infinite-scroller-1.2.6.tgz",
+ "integrity": "sha512-mGdMyOD00YArJ1S1F3TVU9y4fGSfVVl6p5gh/Vt4u99CJOptfVu/q5V/Wlle72TMgYlBwIhbxK5wF0C/R33PXQ==",
+ "dependencies": {
+ "prop-types": "^15.5.8"
+ },
+ "peerDependencies": {
+ "react": "^0.14.9 || ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "node_modules/react-redux": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.2.tgz",
+ "integrity": "sha512-nBwiscMw3NoP59NFCXFf02f8xdo+vSHT/uZ1ldDwF7XaTpzm+Phk97VT4urYBl5TYAPNVaFm12UHAEyzkpNzRA==",
+ "dependencies": {
+ "@babel/runtime": "^7.12.1",
+ "@types/hoist-non-react-statics": "^3.3.1",
+ "@types/use-sync-external-store": "^0.0.3",
+ "hoist-non-react-statics": "^3.3.2",
+ "react-is": "^18.0.0",
+ "use-sync-external-store": "^1.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8 || ^17.0 || ^18.0",
+ "@types/react-dom": "^16.8 || ^17.0 || ^18.0",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0",
+ "react-native": ">=0.59",
+ "redux": "^4"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ },
+ "react-native": {
+ "optional": true
+ },
+ "redux": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-redux/node_modules/react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
+ },
+ "node_modules/react-refresh": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
+ "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/react-router": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz",
+ "integrity": "sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==",
+ "dependencies": {
+ "history": "^5.2.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz",
+ "integrity": "sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==",
+ "dependencies": {
+ "history": "^5.2.0",
+ "react-router": "6.3.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
+ "node_modules/react-textarea-autosize": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz",
+ "integrity": "sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==",
+ "dependencies": {
+ "@babel/runtime": "^7.10.2",
+ "use-composed-ref": "^1.3.0",
+ "use-latest": "^1.2.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/react-transition-group": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
+ "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==",
+ "dependencies": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ },
+ "peerDependencies": {
+ "react": ">=16.6.0",
+ "react-dom": ">=16.6.0"
+ }
+ },
+ "node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/readdirp": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+ "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+ "dev": true,
+ "dependencies": {
+ "picomatch": "^2.2.1"
+ },
+ "engines": {
+ "node": ">=8.10.0"
+ }
+ },
+ "node_modules/recrawl-sync": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.2.tgz",
+ "integrity": "sha512-E2sI4F25Fu2nrfV+KsnC7/qfk/spQIYXlonfQoS4rwxeNK5BjxnLPbWiRXHVXPwYBOTWtPX5765kTm/zJiL+LQ==",
+ "dev": true,
+ "dependencies": {
+ "@cush/relative": "^1.0.0",
+ "glob-regex": "^0.3.0",
+ "slash": "^3.0.0",
+ "tslib": "^1.9.3"
+ }
+ },
+ "node_modules/redux": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz",
+ "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==",
+ "dependencies": {
+ "@babel/runtime": "^7.9.2"
+ }
+ },
+ "node_modules/redux-thunk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz",
+ "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==",
+ "peerDependencies": {
+ "redux": "^4"
+ }
+ },
+ "node_modules/regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+ "dev": true
+ },
+ "node_modules/regenerate-unicode-properties": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
+ "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
+ "dev": true,
+ "dependencies": {
+ "regenerate": "^1.4.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regenerator-runtime": {
+ "version": "0.13.9",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
+ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
+ },
+ "node_modules/regenerator-transform": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz",
+ "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
+ "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ }
+ },
+ "node_modules/regexpu-core": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
+ "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
+ "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==",
+ "dev": true
+ },
+ "node_modules/regjsparser": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
+ "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
+ "dev": true,
+ "dependencies": {
+ "jsesc": "~0.5.0"
+ },
+ "bin": {
+ "regjsparser": "bin/parser"
+ }
+ },
+ "node_modules/regjsparser/node_modules/jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+ "dev": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ }
+ },
+ "node_modules/require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/requireindex": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz",
+ "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.5"
+ }
+ },
+ "node_modules/reselect": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz",
+ "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ=="
+ },
+ "node_modules/resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "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-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "2.77.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.0.tgz",
+ "integrity": "sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g==",
+ "dev": true,
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rollup-plugin-visualizer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.7.1.tgz",
+ "integrity": "sha512-E/IgOMnmXKlc6ICyf53ok1b6DxPeNVUs3R0kYYPuDpGfofT4bkiG+KtSMlGjMACFmfwbbqTVDZBIF7sMZVKJbA==",
+ "dev": true,
+ "dependencies": {
+ "nanoid": "^3.3.4",
+ "open": "^8.4.0",
+ "source-map": "^0.7.3",
+ "yargs": "^17.5.1"
+ },
+ "bin": {
+ "rollup-plugin-visualizer": "dist/bin/cli.js"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "rollup": "^2.0.0"
+ }
+ },
+ "node_modules/rollup-plugin-visualizer/node_modules/source-map": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/run-async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "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"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^1.9.0"
+ },
+ "engines": {
+ "npm": ">=2.0.0"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "node_modules/scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "dependencies": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/source-map-support/node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "dev": true
+ },
+ "node_modules/string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "~5.2.0"
+ }
+ },
+ "node_modules/string_decoder/node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "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"
+ }
+ ]
+ },
+ "node_modules/string-natural-compare": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz",
+ "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==",
+ "dev": true
+ },
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "dependencies": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/string-width/node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz",
+ "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==",
+ "dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1",
+ "get-intrinsic": "^1.1.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "regexp.prototype.flags": "^1.4.1",
+ "side-channel": "^1.0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/string.prototype.trimend": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
+ "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
+ "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
+ "dev": true,
+ "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/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/stylis": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz",
+ "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag=="
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "node_modules/through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true
+ },
+ "node_modules/tinycon": {
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/tinycon/-/tinycon-0.6.8.tgz",
+ "integrity": "sha512-bF8Lxm4JUXF6Cw0XlZdugJ44GV575OinZ0Pt8vQPr8ooNqd2yyNkoFdCHzmdpHlgoqfSLfcyk4HDP1EyllT+ug=="
+ },
+ "node_modules/tinypool": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.2.4.tgz",
+ "integrity": "sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tinyspy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.0.tgz",
+ "integrity": "sha512-FI5B2QdODQYDRjfuLF+OrJ8bjWRMCXokQPcwKm0W3IzcbUmBNv536cQc7eXGoAuXphZwgx1DFbqImwzz08Fnhw==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "dependencies": {
+ "os-tmpdir": "~1.0.2"
+ },
+ "engines": {
+ "node": ">=0.6.0"
+ }
+ },
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/ts-essentials": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-9.2.0.tgz",
+ "integrity": "sha512-HLl+am6q+ulOWcjUFghpIQXXyaH0hVTnFTVWNqwz1iDxyN+t+lwDfqPB5FmPUTFw3J+y26UR3hNGmK/1jehokA==",
+ "dev": true,
+ "peerDependencies": {
+ "typescript": ">=4.1.0"
+ }
+ },
+ "node_modules/ts-node": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz",
+ "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==",
+ "dependencies": {
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "source-map-support": "^0.5.17",
+ "yn": "3.1.1"
+ },
+ "bin": {
+ "ts-node": "dist/bin.js",
+ "ts-node-script": "dist/bin-script.js",
+ "ts-node-transpile-only": "dist/bin-transpile.js",
+ "ts-script": "dist/bin-script-deprecated.js"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ },
+ "peerDependencies": {
+ "typescript": ">=2.7"
+ }
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
+ "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
+ "dev": true,
+ "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.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
+ "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/tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "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/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/typescript": {
+ "version": "4.7.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
+ "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=4.2.0"
+ }
+ },
+ "node_modules/unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "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/unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+ "dev": true,
+ "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",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-property-aliases-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz",
+ "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "browserslist-lint": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/use-composed-ref": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz",
+ "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/use-isomorphic-layout-effect": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
+ "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-latest": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz",
+ "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==",
+ "dependencies": {
+ "use-isomorphic-layout-effect": "^1.1.1"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/use-mutation": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/use-mutation/-/use-mutation-2.2.1.tgz",
+ "integrity": "sha512-qGvtQpVgj2Ekcrrykiq4rOlOhUrlebaO/sVVGpXjrb0IEOBtZqNzq8hKJwrYGkyUWqu3pBPpOEyss8OHRhS3Ow==",
+ "dependencies": {
+ "use-safe-callback": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": ">=16"
+ }
+ },
+ "node_modules/use-safe-callback": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/use-safe-callback/-/use-safe-callback-1.0.2.tgz",
+ "integrity": "sha512-RVeoyxgjJNfu9baNwulBM+HuPQGlcE1MJtrA1w50B5Hd0tyeKvrBIPdCfRx4Trrrxe34M6qRTys/bfpqsKRcyA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "react": ">=16"
+ }
+ },
+ "node_modules/use-sync-external-store": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
+ "node_modules/util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "node_modules/v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "node_modules/vite": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.5.tgz",
+ "integrity": "sha512-bRvrt9Tw8EGW4jj64aYFTnVg134E8hgDxyl/eEHnxiGqYk7/pTPss6CWlurqPOUzqvEoZkZ58Ws+Iu8MB87iMA==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "^0.14.47",
+ "postcss": "^8.4.16",
+ "resolve": "^1.22.1",
+ "rollup": "^2.75.6"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "less": "*",
+ "sass": "*",
+ "stylus": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "less": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vite-plugin-eslint": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-eslint/-/vite-plugin-eslint-1.7.0.tgz",
+ "integrity": "sha512-Kz2HwBeAArmsE0QmWSm+e7CaEQrfMkEZpFw4hngoy6JmERjw7WUH8HLbG1OkreOKX4iIUReOss9N1Mkw4wEk8g==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^4.2.1",
+ "@types/eslint": "^8.4.5",
+ "rollup": "^2.77.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=7",
+ "vite": ">=2"
+ }
+ },
+ "node_modules/vite-tsconfig-paths": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-3.5.0.tgz",
+ "integrity": "sha512-NKIubr7gXgh/3uniQaOytSg+aKWPrjquP6anAy+zCWEn6h9fB8z2/qdlfQrTgZWaXJ2pHVlllrSdRZltHn9P4g==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.1.1",
+ "globrex": "^0.1.2",
+ "recrawl-sync": "^2.0.3",
+ "tsconfig-paths": "^4.0.0"
+ },
+ "peerDependencies": {
+ "vite": ">2.0.0-0"
+ }
+ },
+ "node_modules/vite-tsconfig-paths/node_modules/tsconfig-paths": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.0.0.tgz",
+ "integrity": "sha512-SLBg2GBKlR6bVtMgJJlud/o3waplKtL7skmLkExomIiaAtLGtVsoXIqP3SYdjbcH9lq/KVv7pMZeCBpLYOit6Q==",
+ "dev": true,
+ "dependencies": {
+ "json5": "^2.2.1",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "node_modules/vitest": {
+ "version": "0.21.1",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.21.1.tgz",
+ "integrity": "sha512-WBIxuFmIDPuK47GO6Lu9eNeRMqHj/FWL3dk73OHH3eyPPWPiu+UB3QHLkLK2PEggCqJW4FaWoWg8R68S7p9+9Q==",
+ "dev": true,
+ "dependencies": {
+ "@types/chai": "^4.3.3",
+ "@types/chai-subset": "^1.3.3",
+ "@types/node": "*",
+ "chai": "^4.3.6",
+ "debug": "^4.3.4",
+ "local-pkg": "^0.4.2",
+ "tinypool": "^0.2.4",
+ "tinyspy": "^1.0.0",
+ "vite": "^2.9.12 || ^3.0.0-0"
+ },
+ "bin": {
+ "vitest": "vitest.mjs"
+ },
+ "engines": {
+ "node": ">=v14.16.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@edge-runtime/vm": "*",
+ "@vitest/browser": "*",
+ "@vitest/ui": "*",
+ "c8": "*",
+ "happy-dom": "*",
+ "jsdom": "*"
+ },
+ "peerDependenciesMeta": {
+ "@edge-runtime/vm": {
+ "optional": true
+ },
+ "@vitest/browser": {
+ "optional": true
+ },
+ "@vitest/ui": {
+ "optional": true
+ },
+ "c8": {
+ "optional": true
+ },
+ "happy-dom": {
+ "optional": true
+ },
+ "jsdom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitest-mock-extended": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/vitest-mock-extended/-/vitest-mock-extended-0.1.13.tgz",
+ "integrity": "sha512-XV0AT+YyWNiPHCwbak5jIx9TMG2MckemYVgorRAbOGZ4imohVNdFNVTFmaqvc5GBrO2WRQgHxqAsRkpLxWicng==",
+ "dev": true,
+ "dependencies": {
+ "ts-essentials": "^9.2.0"
+ },
+ "peerDependencies": {
+ "typescript": "3.x || 4.x",
+ "vitest": ">=0.20.2"
+ }
+ },
+ "node_modules/wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
+ "dev": true,
+ "dependencies": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "dev": true,
+ "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/word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "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/wrap-ansi/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/wrap-ansi/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "node_modules/yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/yargs": {
+ "version": "17.5.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
+ "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==",
+ "dev": true,
+ "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.0.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
+ "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ }
+ },
+ "dependencies": {
+ "@ampproject/remapping": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
+ "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.1.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@babel/code-frame": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+ "requires": {
+ "@babel/highlight": "^7.18.6"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.18.8",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz",
+ "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ=="
+ },
+ "@babel/core": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz",
+ "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==",
+ "requires": {
+ "@ampproject/remapping": "^2.1.0",
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.18.9",
+ "@babel/helper-compilation-targets": "^7.18.9",
+ "@babel/helper-module-transforms": "^7.18.9",
+ "@babel/helpers": "^7.18.9",
+ "@babel/parser": "^7.18.9",
+ "@babel/template": "^7.18.6",
+ "@babel/traverse": "^7.18.9",
+ "@babel/types": "^7.18.9",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.1",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "@babel/eslint-parser": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz",
+ "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==",
+ "dev": true,
+ "requires": {
+ "eslint-scope": "^5.1.1",
+ "eslint-visitor-keys": "^2.1.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz",
+ "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==",
+ "requires": {
+ "@babel/types": "^7.18.9",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "jsesc": "^2.5.1"
+ },
+ "dependencies": {
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
+ "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz",
+ "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-explode-assignable-expression": "^7.18.6",
+ "@babel/types": "^7.18.9"
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
+ "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
+ "requires": {
+ "@babel/compat-data": "^7.18.8",
+ "@babel/helper-validator-option": "^7.18.6",
+ "browserslist": "^4.20.2",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz",
+ "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz",
+ "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "regexpu-core": "^5.1.0"
+ }
+ },
+ "@babel/helper-define-polyfill-provider": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz",
+ "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-compilation-targets": "^7.13.0",
+ "@babel/helper-module-imports": "^7.12.13",
+ "@babel/helper-plugin-utils": "^7.13.0",
+ "@babel/traverse": "^7.13.0",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2",
+ "semver": "^6.1.2"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/helper-environment-visitor": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
+ "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg=="
+ },
+ "@babel/helper-explode-assignable-expression": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz",
+ "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
+ "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
+ "requires": {
+ "@babel/template": "^7.18.6",
+ "@babel/types": "^7.18.9"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
+ "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz",
+ "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.9"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+ "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
+ "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz",
+ "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz",
+ "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w=="
+ },
+ "@babel/helper-remap-async-to-generator": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz",
+ "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz",
+ "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
+ "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz",
+ "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.18.9"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "requires": {
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
+ "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw=="
+ },
+ "@babel/helper-wrap-function": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.9.tgz",
+ "integrity": "sha512-cG2ru3TRAL6a60tfQflpEfs4ldiPwF6YW3zfJiRgmoFVIaC1vGnBBgatfec+ZUziPHkHSaXAuEck3Cdkf3eRpQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/template": "^7.18.6",
+ "@babel/traverse": "^7.18.9",
+ "@babel/types": "^7.18.9"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
+ "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
+ "requires": {
+ "@babel/template": "^7.18.6",
+ "@babel/traverse": "^7.18.9",
+ "@babel/types": "^7.18.9"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz",
+ "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg=="
+ },
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz",
+ "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz",
+ "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==",
+ "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.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz",
+ "integrity": "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-remap-async-to-generator": "^7.18.6",
+ "@babel/plugin-syntax-async-generators": "^7.8.4"
+ }
+ },
+ "@babel/plugin-proposal-class-properties": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
+ "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz",
+ "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==",
+ "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-decorators": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.9.tgz",
+ "integrity": "sha512-KD7zDNaD14CRpjQjVbV4EnH9lsKYlcpUrhZH37ei2IY+AlXrfAPy5pTmRUE4X6X1k8EsKXPraykxeaogqQvSGA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/helper-replace-supers": "^7.18.9",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/plugin-syntax-decorators": "^7.18.6"
+ }
+ },
+ "@babel/plugin-proposal-dynamic-import": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz",
+ "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz",
+ "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz",
+ "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz",
+ "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
+ "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz",
+ "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz",
+ "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz",
+ "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz",
+ "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
+ "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz",
+ "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
+ "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
+ "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-class-properties": {
+ "version": "7.12.13",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
+ "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.12.13"
+ }
+ },
+ "@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-decorators": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.18.6.tgz",
+ "integrity": "sha512-fqyLgjcxf/1yhyZ6A+yo1u9gJ7eleFQod2lkaUsF9DQ7sbbY3Ligym3L0+I2c0WmqNKDpoD9UTb1AKP3qRMOAQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ }
+ },
+ "@babel/plugin-syntax-flow": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz",
+ "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-syntax-import-assertions": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz",
+ "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-syntax-json-strings": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
+ "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-jsx": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
+ "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-syntax-logical-assignment-operators": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+ "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-nullish-coalescing-operator": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+ "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-syntax-object-rest-spread": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
+ "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-catch-binding": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
+ "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-optional-chaining": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
+ "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ }
+ },
+ "@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-top-level-await": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ }
+ },
+ "@babel/plugin-syntax-typescript": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz",
+ "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-arrow-functions": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz",
+ "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-async-to-generator": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz",
+ "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz",
+ "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-block-scoping": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz",
+ "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.9"
+ }
+ },
+ "@babel/plugin-transform-classes": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz",
+ "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz",
+ "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.9"
+ }
+ },
+ "@babel/plugin-transform-destructuring": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz",
+ "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.9"
+ }
+ },
+ "@babel/plugin-transform-dotall-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz",
+ "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz",
+ "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.9"
+ }
+ },
+ "@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz",
+ "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-flow-strip-types": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.18.9.tgz",
+ "integrity": "sha512-+G6rp2zRuOAInY5wcggsx4+QVao1qPM0osC9fTUVlAV3zOrzTCnrMAFVnR6+a3T8wz1wFIH7KhYMcMB3u1n80A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/plugin-syntax-flow": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-for-of": {
+ "version": "7.18.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz",
+ "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-function-name": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz",
+ "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz",
+ "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.9"
+ }
+ },
+ "@babel/plugin-transform-member-expression-literals": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz",
+ "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-modules-amd": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz",
+ "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz",
+ "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz",
+ "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz",
+ "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz",
+ "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz",
+ "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-object-super": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz",
+ "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz",
+ "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-property-literals": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz",
+ "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-react-display-name": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz",
+ "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-react-jsx": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz",
+ "integrity": "sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-jsx": "^7.18.6",
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-development": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
+ "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
+ "dev": true,
+ "requires": {
+ "@babel/plugin-transform-react-jsx": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-self": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz",
+ "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-react-jsx-source": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.18.6.tgz",
+ "integrity": "sha512-utZmlASneDfdaMh0m/WausbjUjEdGrQJz0vFK93d7wD3xf5wBtX219+q6IlCNZeguIcxS2f/CvLZrlLSvSHQXw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-react-pure-annotations": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz",
+ "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-regenerator": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz",
+ "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "regenerator-transform": "^0.15.0"
+ }
+ },
+ "@babel/plugin-transform-reserved-words": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz",
+ "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-runtime": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.9.tgz",
+ "integrity": "sha512-wS8uJwBt7/b/mzE13ktsJdmS4JP/j7PQSaADtnb4I2wL0zK51MQ0pmF8/Jy0wUIS96fr+fXT6S/ifiPXnvrlSg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "babel-plugin-polyfill-corejs2": "^0.3.1",
+ "babel-plugin-polyfill-corejs3": "^0.5.2",
+ "babel-plugin-polyfill-regenerator": "^0.3.1",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/plugin-transform-shorthand-properties": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz",
+ "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-spread": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz",
+ "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz",
+ "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-template-literals": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz",
+ "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.9"
+ }
+ },
+ "@babel/plugin-transform-typeof-symbol": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz",
+ "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.9"
+ }
+ },
+ "@babel/plugin-transform-typescript": {
+ "version": "7.18.8",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz",
+ "integrity": "sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-typescript": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-unicode-escapes": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz",
+ "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/plugin-transform-unicode-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz",
+ "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ }
+ },
+ "@babel/preset-env": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.9.tgz",
+ "integrity": "sha512-75pt/q95cMIHWssYtyfjVlvI+QEZQThQbKvR9xH+F/Agtw/s4Wfc2V9Bwd/P39VtixB7oWxGdH4GteTTwYJWMg==",
+ "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.6",
+ "@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.6",
+ "@babel/plugin-transform-unicode-regex": "^7.18.6",
+ "@babel/preset-modules": "^0.1.5",
+ "@babel/types": "^7.18.9",
+ "babel-plugin-polyfill-corejs2": "^0.3.1",
+ "babel-plugin-polyfill-corejs3": "^0.5.2",
+ "babel-plugin-polyfill-regenerator": "^0.3.1",
+ "core-js-compat": "^3.22.1",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/preset-modules": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
+ "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
+ "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/preset-react": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz",
+ "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-validator-option": "^7.18.6",
+ "@babel/plugin-transform-react-display-name": "^7.18.6",
+ "@babel/plugin-transform-react-jsx": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-development": "^7.18.6",
+ "@babel/plugin-transform-react-pure-annotations": "^7.18.6"
+ }
+ },
+ "@babel/preset-typescript": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz",
+ "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-validator-option": "^7.18.6",
+ "@babel/plugin-transform-typescript": "^7.18.6"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz",
+ "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==",
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/runtime-corejs3": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.9.tgz",
+ "integrity": "sha512-qZEWeccZCrHA2Au4/X05QW5CMdm4VjUDCrGq5gf1ZDcM4hRqreKrtwAn7yci9zfgAS9apvnsFXiGBHBAxZdK9A==",
+ "dev": true,
+ "requires": {
+ "core-js-pure": "^3.20.2",
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/template": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
+ "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
+ "requires": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.6",
+ "@babel/types": "^7.18.6"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz",
+ "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==",
+ "requires": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.18.9",
+ "@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.9",
+ "@babel/types": "^7.18.9",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ }
+ },
+ "@babel/types": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz",
+ "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@cush/relative": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@cush/relative/-/relative-1.0.0.tgz",
+ "integrity": "sha512-RpfLEtTlyIxeNPGKcokS+p3BZII/Q3bYxryFRglh5H3A3T8q9fsLYm72VYAMEOOIBLEa8o93kFLiBDUWKrwXZA==",
+ "dev": true
+ },
+ "@emotion/babel-plugin": {
+ "version": "11.10.0",
+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.0.tgz",
+ "integrity": "sha512-xVnpDAAbtxL1dsuSelU5A7BnY/lftws0wUexNJZTPsvX/1tM4GZJbclgODhvW4E+NH7E5VFcH0bBn30NvniPJA==",
+ "requires": {
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/plugin-syntax-jsx": "^7.17.12",
+ "@babel/runtime": "^7.18.3",
+ "@emotion/hash": "^0.9.0",
+ "@emotion/memoize": "^0.8.0",
+ "@emotion/serialize": "^1.1.0",
+ "babel-plugin-macros": "^3.1.0",
+ "convert-source-map": "^1.5.0",
+ "escape-string-regexp": "^4.0.0",
+ "find-root": "^1.1.0",
+ "source-map": "^0.5.7",
+ "stylis": "4.0.13"
+ },
+ "dependencies": {
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
+ }
+ }
+ },
+ "@emotion/cache": {
+ "version": "11.10.1",
+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.10.1.tgz",
+ "integrity": "sha512-uZTj3Yz5D69GE25iFZcIQtibnVCFsc/6+XIozyL3ycgWvEdif2uEw9wlUt6umjLr4Keg9K6xRPHmD8LGi+6p1A==",
+ "requires": {
+ "@emotion/memoize": "^0.8.0",
+ "@emotion/sheet": "^1.2.0",
+ "@emotion/utils": "^1.2.0",
+ "@emotion/weak-memoize": "^0.3.0",
+ "stylis": "4.0.13"
+ }
+ },
+ "@emotion/hash": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz",
+ "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ=="
+ },
+ "@emotion/memoize": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz",
+ "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA=="
+ },
+ "@emotion/react": {
+ "version": "11.10.0",
+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.0.tgz",
+ "integrity": "sha512-K6z9zlHxxBXwN8TcpwBKcEsBsOw4JWCCmR+BeeOWgqp8GIU1yA2Odd41bwdAAr0ssbQrbJbVnndvv7oiv1bZeQ==",
+ "requires": {
+ "@babel/runtime": "^7.18.3",
+ "@emotion/babel-plugin": "^11.10.0",
+ "@emotion/cache": "^11.10.0",
+ "@emotion/serialize": "^1.1.0",
+ "@emotion/utils": "^1.2.0",
+ "@emotion/weak-memoize": "^0.3.0",
+ "hoist-non-react-statics": "^3.3.1"
+ }
+ },
+ "@emotion/serialize": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.0.tgz",
+ "integrity": "sha512-F1ZZZW51T/fx+wKbVlwsfchr5q97iW8brAnXmsskz4d0hVB4O3M/SiA3SaeH06x02lSNzkkQv+n3AX3kCXKSFA==",
+ "requires": {
+ "@emotion/hash": "^0.9.0",
+ "@emotion/memoize": "^0.8.0",
+ "@emotion/unitless": "^0.8.0",
+ "@emotion/utils": "^1.2.0",
+ "csstype": "^3.0.2"
+ }
+ },
+ "@emotion/sheet": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.0.tgz",
+ "integrity": "sha512-OiTkRgpxescko+M51tZsMq7Puu/KP55wMT8BgpcXVG2hqXc0Vo0mfymJ/Uj24Hp0i083ji/o0aLddh08UEjq8w=="
+ },
+ "@emotion/unitless": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz",
+ "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw=="
+ },
+ "@emotion/utils": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.0.tgz",
+ "integrity": "sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw=="
+ },
+ "@emotion/weak-memoize": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.0.tgz",
+ "integrity": "sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg=="
+ },
+ "@endemolshinegroup/cosmiconfig-typescript-loader": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz",
+ "integrity": "sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==",
+ "requires": {
+ "lodash.get": "^4",
+ "make-error": "^1",
+ "ts-node": "^9",
+ "tslib": "^2"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
+ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
+ }
+ }
+ },
+ "@eslint/eslintrc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz",
+ "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==",
+ "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",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+ "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ }
+ }
+ },
+ "@floating-ui/core": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-0.7.3.tgz",
+ "integrity": "sha512-buc8BXHmG9l82+OQXOFU3Kr2XQx9ys01U/Q9HMIrZ300iLc8HLMgh7dcCqgYzAzf4BkoQvDcXf5Y+CuEZ5JBYg=="
+ },
+ "@floating-ui/dom": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-0.5.4.tgz",
+ "integrity": "sha512-419BMceRLq0RrmTSDxn8hf9R3VCJv2K9PUfugh5JyEFmdjzDo+e8U5EdR8nzKq8Yj1htzLm3b6eQEEam3/rrtg==",
+ "requires": {
+ "@floating-ui/core": "^0.7.3"
+ }
+ },
+ "@floating-ui/react-dom": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-0.7.2.tgz",
+ "integrity": "sha512-1T0sJcpHgX/u4I1OzIEhlcrvkUN8ln39nz7fMoE/2HDHrPiMFoOGR7++GYyfUmIQHkkrTinaeQsO3XWubjSvGg==",
+ "requires": {
+ "@floating-ui/dom": "^0.5.3",
+ "use-isomorphic-layout-effect": "^1.1.1"
+ }
+ },
+ "@floating-ui/react-dom-interactions": {
+ "version": "0.6.6",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom-interactions/-/react-dom-interactions-0.6.6.tgz",
+ "integrity": "sha512-qnao6UPjSZNHnXrF+u4/n92qVroQkx0Umlhy3Avk1oIebm/5ee6yvDm4xbHob0OjY7ya8WmUnV3rQlPwX3Atwg==",
+ "requires": {
+ "@floating-ui/react-dom": "^0.7.2",
+ "aria-hidden": "^1.1.3",
+ "use-isomorphic-layout-effect": "^1.1.1"
+ }
+ },
+ "@fontsource/open-sans": {
+ "version": "4.5.11",
+ "resolved": "https://registry.npmjs.org/@fontsource/open-sans/-/open-sans-4.5.11.tgz",
+ "integrity": "sha512-nG0gmbx4pSr8wltdG/ZdlS6OrsMK40Wt6iyuLTKHEf0TQfzKRMlWaskZHdeuWCwS6WUgqHKMf9KSwGdxPfapOg=="
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz",
+ "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==",
+ "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",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
+ "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
+ "dev": true
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
+ "dev": true
+ },
+ "@jest/types": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
+ "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
+ "requires": {
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^15.0.0",
+ "chalk": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@jridgewell/gen-mapping": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
+ "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w=="
+ },
+ "@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
+ "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@lingui/babel-plugin-extract-messages": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@lingui/babel-plugin-extract-messages/-/babel-plugin-extract-messages-3.14.0.tgz",
+ "integrity": "sha512-4lcDgVdjYiObuFdDwnAG3jJxS+d3YLq4i7qywlHgjIqteKUH01S3paJRXhZaPvLGl56HarSq0kt8Pymxw8lOrA==",
+ "dev": true,
+ "requires": {
+ "@babel/generator": "^7.11.6",
+ "@babel/runtime": "^7.11.2",
+ "@lingui/conf": "^3.14.0",
+ "mkdirp": "^1.0.4"
+ }
+ },
+ "@lingui/cli": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@lingui/cli/-/cli-3.14.0.tgz",
+ "integrity": "sha512-QZURsIf7A97tf28b/ffpeL0DekA6tBmcwnj4FBui1SbQqJw1d4IPg2bUM5VRn3/25vhqpi9Uhx5m9x7Vv8QfCQ==",
+ "dev": true,
+ "requires": {
+ "@babel/generator": "^7.11.6",
+ "@babel/parser": "^7.11.5",
+ "@babel/plugin-syntax-jsx": "^7.10.4",
+ "@babel/runtime": "^7.11.2",
+ "@babel/types": "^7.11.5",
+ "@lingui/babel-plugin-extract-messages": "^3.14.0",
+ "@lingui/conf": "^3.14.0",
+ "babel-plugin-macros": "^3.0.1",
+ "bcp-47": "^1.0.7",
+ "chalk": "^4.1.0",
+ "chokidar": "3.5.1",
+ "cli-table": "0.3.6",
+ "commander": "^6.1.0",
+ "date-fns": "^2.16.1",
+ "fs-extra": "^9.0.1",
+ "fuzzaldrin": "^2.1.0",
+ "glob": "^7.1.4",
+ "inquirer": "^7.3.3",
+ "make-plural": "^6.2.2",
+ "messageformat-parser": "^4.1.3",
+ "micromatch": "4.0.2",
+ "mkdirp": "^1.0.4",
+ "node-gettext": "^3.0.0",
+ "normalize-path": "^3.0.0",
+ "ora": "^5.1.0",
+ "papaparse": "^5.3.0",
+ "pkg-up": "^3.1.0",
+ "plurals-cldr": "^1.0.4",
+ "pofile": "^1.1.0",
+ "pseudolocale": "^1.1.0",
+ "ramda": "^0.27.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "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"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "make-plural": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-6.2.2.tgz",
+ "integrity": "sha512-8iTuFioatnTTmb/YJjywkVIHLjcwkFD9Ms0JpxjEm9Mo8eQYkh1z+55dwv4yc1jQ8ftVBxWQbihvZL1DfzGGWA==",
+ "dev": true
+ },
+ "micromatch": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
+ "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.1",
+ "picomatch": "^2.0.5"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@lingui/conf": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@lingui/conf/-/conf-3.14.0.tgz",
+ "integrity": "sha512-5GMAbIRad9FavqYsfZCRAwjcOLzE7tONDJe9lSYE5SSJbbG01RI5kR5P0B84DUhTI6cGXau+1dAcP9K+JbEx+g==",
+ "requires": {
+ "@babel/runtime": "^7.11.2",
+ "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2",
+ "chalk": "^4.1.0",
+ "cosmiconfig": "^7.0.0",
+ "jest-validate": "^26.5.2",
+ "lodash.get": "^4.4.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "@lingui/core": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@lingui/core/-/core-3.14.0.tgz",
+ "integrity": "sha512-ertREq9oi9B/umxpd/pInm9uFO8FLK2/0FXfDmMqvH5ydswWn/c9nY5YO4W1h4/8LWO45mewypOIyjoue4De1w==",
+ "requires": {
+ "@babel/runtime": "^7.11.2",
+ "make-plural": "^6.2.2",
+ "messageformat-parser": "^4.1.3"
+ },
+ "dependencies": {
+ "make-plural": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-6.2.2.tgz",
+ "integrity": "sha512-8iTuFioatnTTmb/YJjywkVIHLjcwkFD9Ms0JpxjEm9Mo8eQYkh1z+55dwv4yc1jQ8ftVBxWQbihvZL1DfzGGWA=="
+ }
+ }
+ },
+ "@lingui/macro": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@lingui/macro/-/macro-3.14.0.tgz",
+ "integrity": "sha512-NxTRrhrZ/cUO9PX/4vWys90Ku58+ExxHuE30IuDnnDldWhWlOdycmjDt9tB+yIiUdFym/veSxBs+h114FzG5mA==",
+ "requires": {
+ "@babel/runtime": "^7.11.2",
+ "@lingui/conf": "^3.14.0",
+ "ramda": "^0.27.1"
+ }
+ },
+ "@lingui/react": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/@lingui/react/-/react-3.14.0.tgz",
+ "integrity": "sha512-ow9Mtru7f0T2S9AwnPWRejppcucCW0LmoDR3P4wqHjL+eH5f8a6nxd2doxGieC91/2i4qqW88y4K/zXJxwRSQw==",
+ "requires": {
+ "@babel/runtime": "^7.11.2",
+ "@lingui/core": "^3.14.0"
+ }
+ },
+ "@mantine/core": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/core/-/core-5.1.1.tgz",
+ "integrity": "sha512-IjEUSQinGawinVNjBXVZTmhcVTaFURtHP/JuJtFDcVCdXEB18ibeyEh985NGhMwoar71tpsWZ0XsQQf9cMhcsA==",
+ "requires": {
+ "@floating-ui/react-dom-interactions": "0.6.6",
+ "@mantine/styles": "5.1.1",
+ "@mantine/utils": "5.1.1",
+ "@radix-ui/react-scroll-area": "1.0.0",
+ "react-textarea-autosize": "8.3.4"
+ }
+ },
+ "@mantine/form": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/form/-/form-5.1.1.tgz",
+ "integrity": "sha512-W2ab/wz9jcZE7q9LVbbu25mPLF49SOAnK67L3OqoByQ/PDflwKbJSz+pBuPRCW3snVijZkNNy0+S+JH6Yc7RFg==",
+ "requires": {
+ "fast-deep-equal": "^3.1.3",
+ "klona": "^2.0.5"
+ }
+ },
+ "@mantine/hooks": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-5.1.1.tgz",
+ "integrity": "sha512-paixen37qs9a8g/hYMIAMXCl+WUK2DdGqSPahGpza1BdNqtYEIfbu12LcuZkfswufIY8DaagdabG0yL6Swh+bg==",
+ "requires": {}
+ },
+ "@mantine/modals": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/modals/-/modals-5.1.1.tgz",
+ "integrity": "sha512-5B+fkP3z9XtKoIWuITCeTJwlIAV6sLIKEZgVrmnnHaXYPqQ+RjjOCkgEnQM1CI0pt46gdMK0Z1wTptgC1HcdHA==",
+ "requires": {
+ "@mantine/utils": "5.1.1"
+ }
+ },
+ "@mantine/notifications": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-5.1.1.tgz",
+ "integrity": "sha512-LTgb8atDTl9wnLRVMgdcCZyBy8iXL84b3PC0VNB8r/1hbxdlZTFSjOSzklT0H2L4kqRFigL4BduLpj7jRQeh+w==",
+ "requires": {
+ "@mantine/utils": "5.1.1",
+ "react-transition-group": "4.4.2"
+ }
+ },
+ "@mantine/spotlight": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/spotlight/-/spotlight-5.1.1.tgz",
+ "integrity": "sha512-WaMSd3AjohTDcO4vr51unh9z01wrC/DdrnNz32PUS3XwhaOcbjEeQIW4dr5otyAUjT8jM6aHfaTTdOK47OpxLw==",
+ "requires": {
+ "@mantine/utils": "5.1.1"
+ }
+ },
+ "@mantine/styles": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/styles/-/styles-5.1.1.tgz",
+ "integrity": "sha512-QMGiG/w3WaqUd79uQ9OjGLsdccqjExsIQpyGq2GbZJRAlrP8TYnohUtrXQx0VhGfM8oCn5n2IrZc48LzNkArJg==",
+ "requires": {
+ "clsx": "1.1.1",
+ "csstype": "3.0.9"
+ }
+ },
+ "@mantine/utils": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/@mantine/utils/-/utils-5.1.1.tgz",
+ "integrity": "sha512-2FiSrD1lYuDHSGVi1QL5iskO8/Bnd6eDrwdpEWS/PJfg6iEz80HnmBxf/xzkDBaNdK3/n8g2kOaOcw5Ff1OFkA==",
+ "requires": {}
+ },
+ "@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ }
+ },
+ "@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
+ },
+ "@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "requires": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ }
+ },
+ "@radix-ui/number": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.0.tgz",
+ "integrity": "sha512-Ofwh/1HX69ZfJRiRBMTy7rgjAzHmwe4kW9C9Y99HTRUcYLUuVT0KESFj15rPjRgKJs20GPq8Bm5aEDJ8DuA3vA==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/primitive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.0.tgz",
+ "integrity": "sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-compose-refs": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz",
+ "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-context": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.0.tgz",
+ "integrity": "sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-direction": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.0.tgz",
+ "integrity": "sha512-2HV05lGUgYcA6xgLQ4BKPDmtL+QbIZYH5fCOTAOOcJ5O0QbWS3i9lKaurLzliYUDhORI2Qr3pyjhJh44lKA3rQ==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-presence": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.0.tgz",
+ "integrity": "sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-use-layout-effect": "1.0.0"
+ }
+ },
+ "@radix-ui/react-primitive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.0.tgz",
+ "integrity": "sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-slot": "1.0.0"
+ }
+ },
+ "@radix-ui/react-scroll-area": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.0.0.tgz",
+ "integrity": "sha512-3SNFukAjS5remgtpAVR9m3Zgo23ZojBZ8V3TCyR3A+56x2mtVqKlPV4+e8rScZUFMuvtbjIdQCmsJBFBazKZig==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/number": "1.0.0",
+ "@radix-ui/primitive": "1.0.0",
+ "@radix-ui/react-compose-refs": "1.0.0",
+ "@radix-ui/react-context": "1.0.0",
+ "@radix-ui/react-direction": "1.0.0",
+ "@radix-ui/react-presence": "1.0.0",
+ "@radix-ui/react-primitive": "1.0.0",
+ "@radix-ui/react-use-callback-ref": "1.0.0",
+ "@radix-ui/react-use-layout-effect": "1.0.0"
+ }
+ },
+ "@radix-ui/react-slot": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz",
+ "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==",
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.0"
+ }
+ },
+ "@radix-ui/react-use-callback-ref": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.0.tgz",
+ "integrity": "sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-use-layout-effect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.0.tgz",
+ "integrity": "sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==",
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@reduxjs/toolkit": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.3.tgz",
+ "integrity": "sha512-lU/LDIfORmjBbyDLaqFN2JB9YmAT1BElET9y0ZszwhSBa5Ef3t6o5CrHupw5J1iOXwd+o92QfQZ8OJpwXvsssg==",
+ "requires": {
+ "immer": "^9.0.7",
+ "redux": "^4.1.2",
+ "redux-thunk": "^2.4.1",
+ "reselect": "^4.1.5"
+ }
+ },
+ "@rollup/pluginutils": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz",
+ "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==",
+ "dev": true,
+ "requires": {
+ "estree-walker": "^2.0.1",
+ "picomatch": "^2.2.2"
+ }
+ },
+ "@rushstack/eslint-patch": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.4.tgz",
+ "integrity": "sha512-LwzQKA4vzIct1zNZzBmRKI9QuNpLgTQMEjsQLf3BXuGYb3QPTP4Yjf6mkdX+X1mYttZ808QpOwAzZjv28kq7DA==",
+ "dev": true
+ },
+ "@types/chai": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz",
+ "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==",
+ "dev": true
+ },
+ "@types/chai-subset": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz",
+ "integrity": "sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "*"
+ }
+ },
+ "@types/eslint": {
+ "version": "8.4.5",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz",
+ "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "@types/estree": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
+ "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==",
+ "dev": true
+ },
+ "@types/hoist-non-react-statics": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz",
+ "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==",
+ "requires": {
+ "@types/react": "*",
+ "hoist-non-react-statics": "^3.3.0"
+ }
+ },
+ "@types/istanbul-lib-coverage": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
+ "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g=="
+ },
+ "@types/istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "requires": {
+ "@types/istanbul-lib-coverage": "*"
+ }
+ },
+ "@types/istanbul-reports": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
+ "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "requires": {
+ "@types/istanbul-lib-report": "*"
+ }
+ },
+ "@types/json-schema": {
+ "version": "7.0.11",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz",
+ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
+ "dev": true
+ },
+ "@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==",
+ "dev": true
+ },
+ "@types/mousetrap": {
+ "version": "1.6.9",
+ "resolved": "https://registry.npmjs.org/@types/mousetrap/-/mousetrap-1.6.9.tgz",
+ "integrity": "sha512-HUAiN65VsRXyFCTicolwb5+I7FM6f72zjMWr+ajGk+YTvzBgXqa2A5U7d+rtsouAkunJ5U4Sb5lNJjo9w+nmXg==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "18.6.3",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.3.tgz",
+ "integrity": "sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg=="
+ },
+ "@types/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
+ },
+ "@types/prop-types": {
+ "version": "15.7.5",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
+ },
+ "@types/react": {
+ "version": "18.0.17",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.17.tgz",
+ "integrity": "sha512-38ETy4tL+rn4uQQi7mB81G7V1g0u2ryquNmsVIOKUAEIDK+3CUjZ6rSRpdvS99dNBnkLFL83qfmtLacGOTIhwQ==",
+ "requires": {
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
+ }
+ },
+ "@types/react-dom": {
+ "version": "18.0.6",
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz",
+ "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==",
+ "devOptional": true,
+ "requires": {
+ "@types/react": "*"
+ }
+ },
+ "@types/react-infinite-scroller": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@types/react-infinite-scroller/-/react-infinite-scroller-1.2.3.tgz",
+ "integrity": "sha512-l60JckVoO+dxmKW2eEG7jbliEpITsTJvRPTe97GazjF5+ylagAuyYdXl8YY9DQsTP9QjhqGKZROknzgscGJy0A==",
+ "dev": true,
+ "requires": {
+ "@types/react": "*"
+ }
+ },
+ "@types/scheduler": {
+ "version": "0.16.2",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
+ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
+ },
+ "@types/tinycon": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/@types/tinycon/-/tinycon-0.6.3.tgz",
+ "integrity": "sha512-TC42m8KAyp3AqyZKRXVkk5Qy+oIU8zo2U3362i16Qan0JgZNzLawO7oYnin4BJOy8FSZfOadYYvUWQnpaXoZwg==",
+ "dev": true
+ },
+ "@types/use-sync-external-store": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz",
+ "integrity": "sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA=="
+ },
+ "@types/yargs": {
+ "version": "15.0.14",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz",
+ "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==",
+ "requires": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "@types/yargs-parser": {
+ "version": "21.0.0",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
+ "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA=="
+ },
+ "@typescript-eslint/eslint-plugin": {
+ "version": "5.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.7.tgz",
+ "integrity": "sha512-l4L6Do+tfeM2OK0GJsU7TUcM/1oN/N25xHm3Jb4z3OiDU4Lj8dIuxX9LpVMS9riSXQs42D1ieX7b85/r16H9Fw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.30.7",
+ "@typescript-eslint/type-utils": "5.30.7",
+ "@typescript-eslint/utils": "5.30.7",
+ "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"
+ }
+ },
+ "@typescript-eslint/experimental-utils": {
+ "version": "5.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.30.7.tgz",
+ "integrity": "sha512-r218ZVL0zFBYzEq8/9K2ZhRgsmKUhm8xd3sWChgvTbmP98kHGuY83IUl64SS9fx9OSBM9vMLdzBfox4eDdm/ZQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/utils": "5.30.7"
+ }
+ },
+ "@typescript-eslint/parser": {
+ "version": "5.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.7.tgz",
+ "integrity": "sha512-Rg5xwznHWWSy7v2o0cdho6n+xLhK2gntImp0rJroVVFkcYFYQ8C8UJTSuTw/3CnExBmPjycjmUJkxVmjXsld6A==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/scope-manager": "5.30.7",
+ "@typescript-eslint/types": "5.30.7",
+ "@typescript-eslint/typescript-estree": "5.30.7",
+ "debug": "^4.3.4"
+ }
+ },
+ "@typescript-eslint/scope-manager": {
+ "version": "5.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.7.tgz",
+ "integrity": "sha512-7BM1bwvdF1UUvt+b9smhqdc/eniOnCKxQT/kj3oXtj3LqnTWCAM0qHRHfyzCzhEfWX0zrW7KqXXeE4DlchZBKw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.30.7",
+ "@typescript-eslint/visitor-keys": "5.30.7"
+ }
+ },
+ "@typescript-eslint/type-utils": {
+ "version": "5.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.7.tgz",
+ "integrity": "sha512-nD5qAE2aJX/YLyKMvOU5jvJyku4QN5XBVsoTynFrjQZaDgDV6i7QHFiYCx10wvn7hFvfuqIRNBtsgaLe0DbWhw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/utils": "5.30.7",
+ "debug": "^4.3.4",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.7.tgz",
+ "integrity": "sha512-ocVkETUs82+U+HowkovV6uxf1AnVRKCmDRNUBUUo46/5SQv1owC/EBFkiu4MOHeZqhKz2ktZ3kvJJ1uFqQ8QPg==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.7.tgz",
+ "integrity": "sha512-tNslqXI1ZdmXXrHER83TJ8OTYl4epUzJC0aj2i4DMDT4iU+UqLT3EJeGQvJ17BMbm31x5scSwo3hPM0nqQ1AEA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.30.7",
+ "@typescript-eslint/visitor-keys": "5.30.7",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/utils": {
+ "version": "5.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.7.tgz",
+ "integrity": "sha512-Z3pHdbFw+ftZiGUnm1GZhkJgVqsDL5CYW2yj+TB2mfXDFOMqtbzQi2dNJIyPqPbx9mv2kUxS1gU+r2gKlKi1rQ==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.9",
+ "@typescript-eslint/scope-manager": "5.30.7",
+ "@typescript-eslint/types": "5.30.7",
+ "@typescript-eslint/typescript-estree": "5.30.7",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.30.7",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.7.tgz",
+ "integrity": "sha512-KrRXf8nnjvcpxDFOKej4xkD7657+PClJs5cJVSG7NNoCNnjEdc46juNAQt7AyuWctuCgs6mVRc1xGctEqrjxWw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.30.7",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "@vitejs/plugin-react": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.0.0.tgz",
+ "integrity": "sha512-zHkRR+X4zqEPNBbKV2FvWSxK7Q6crjMBVIAYroSU8Nbb4M3E5x4qOiLoqJBHtXgr27kfednXjkwr3lr8jS6Wrw==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.18.6",
+ "@babel/plugin-transform-react-jsx": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-development": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-self": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-source": "^7.18.6",
+ "magic-string": "^0.26.2",
+ "react-refresh": "^0.14.0"
+ }
+ },
+ "acorn": {
+ "version": "8.8.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
+ "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "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"
+ }
+ },
+ "ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.21.3"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true
+ }
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "arg": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
+ "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
+ "aria-hidden": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.1.3.tgz",
+ "integrity": "sha512-RhVWFtKH5BiGMycI72q2RAFMLQi8JP9bLuQXgR5a8Znp7P5KOIADSJeyfI8PCVxLEp067B2HbP5JIiI/PXIZeA==",
+ "requires": {
+ "tslib": "^1.0.0"
+ }
+ },
+ "aria-query": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz",
+ "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.10.2",
+ "@babel/runtime-corejs3": "^7.10.2"
+ }
+ },
+ "array-includes": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz",
+ "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==",
+ "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-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true
+ },
+ "array.prototype.flat": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
+ "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.2",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "array.prototype.flatmap": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz",
+ "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.2",
+ "es-shim-unscopables": "^1.0.0"
+ }
+ },
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
+ "dev": true
+ },
+ "ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "at-least-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
+ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
+ "dev": true
+ },
+ "axe-core": {
+ "version": "4.4.3",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz",
+ "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==",
+ "dev": true
+ },
+ "axios": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
+ "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
+ "requires": {
+ "follow-redirects": "^1.14.9",
+ "form-data": "^4.0.0"
+ }
+ },
+ "axobject-query": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
+ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==",
+ "dev": true
+ },
+ "babel-plugin-dynamic-import-node": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
+ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
+ "dev": true,
+ "requires": {
+ "object.assign": "^4.1.0"
+ }
+ },
+ "babel-plugin-macros": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
+ "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
+ "requires": {
+ "@babel/runtime": "^7.12.5",
+ "cosmiconfig": "^7.0.0",
+ "resolve": "^1.19.0"
+ }
+ },
+ "babel-plugin-polyfill-corejs2": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz",
+ "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.13.11",
+ "@babel/helper-define-polyfill-provider": "^0.3.1",
+ "semver": "^6.1.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "babel-plugin-polyfill-corejs3": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz",
+ "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.3.1",
+ "core-js-compat": "^3.21.0"
+ }
+ },
+ "babel-plugin-polyfill-regenerator": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz",
+ "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.3.1"
+ }
+ },
+ "babel-plugin-transform-react-remove-prop-types": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz",
+ "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==",
+ "dev": true
+ },
+ "babel-preset-react-app": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz",
+ "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.16.0",
+ "@babel/plugin-proposal-class-properties": "^7.16.0",
+ "@babel/plugin-proposal-decorators": "^7.16.4",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0",
+ "@babel/plugin-proposal-numeric-separator": "^7.16.0",
+ "@babel/plugin-proposal-optional-chaining": "^7.16.0",
+ "@babel/plugin-proposal-private-methods": "^7.16.0",
+ "@babel/plugin-transform-flow-strip-types": "^7.16.0",
+ "@babel/plugin-transform-react-display-name": "^7.16.0",
+ "@babel/plugin-transform-runtime": "^7.16.4",
+ "@babel/preset-env": "^7.16.4",
+ "@babel/preset-react": "^7.16.0",
+ "@babel/preset-typescript": "^7.16.0",
+ "@babel/runtime": "^7.16.3",
+ "babel-plugin-macros": "^3.1.0",
+ "babel-plugin-transform-react-remove-prop-types": "^0.4.24"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true
+ },
+ "bcp-47": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/bcp-47/-/bcp-47-1.0.8.tgz",
+ "integrity": "sha512-Y9y1QNBBtYtv7hcmoX0tR+tUNSFZGZ6OL6vKPObq8BbOhkCoyayF6ogfLTgAli/KuAEbsYHYUNq2AQuY6IuLag==",
+ "dev": true,
+ "requires": {
+ "is-alphabetical": "^1.0.0",
+ "is-alphanumerical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ }
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
+ "dev": true
+ },
+ "bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "dev": true,
+ "requires": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browserslist": {
+ "version": "4.21.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.2.tgz",
+ "integrity": "sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA==",
+ "requires": {
+ "caniuse-lite": "^1.0.30001366",
+ "electron-to-chromium": "^1.4.188",
+ "node-releases": "^2.0.6",
+ "update-browserslist-db": "^1.0.4"
+ }
+ },
+ "buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+ },
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001369",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001369.tgz",
+ "integrity": "sha512-OY1SBHaodJc4wflDIKnlkdqWzJZd1Ls/2zbVJHBSv3AT7vgOJ58yAhd2CN4d57l2kPJrgMb7P9+N1Mhy4tNSQA=="
+ },
+ "chai": {
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz",
+ "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==",
+ "dev": true,
+ "requires": {
+ "assertion-error": "^1.1.0",
+ "check-error": "^1.0.2",
+ "deep-eql": "^3.0.1",
+ "get-func-name": "^2.0.0",
+ "loupe": "^2.3.1",
+ "pathval": "^1.1.1",
+ "type-detect": "^4.0.5"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==",
+ "dev": true
+ },
+ "chokidar": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
+ "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.1",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.5.0"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^3.1.0"
+ }
+ },
+ "cli-spinners": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz",
+ "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==",
+ "dev": true
+ },
+ "cli-table": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.6.tgz",
+ "integrity": "sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ==",
+ "dev": true,
+ "requires": {
+ "colors": "1.0.3"
+ }
+ },
+ "cli-width": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
+ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
+ "dev": true
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
+ "dev": true
+ },
+ "clsx": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz",
+ "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA=="
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "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",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "dev": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "confusing-browser-globals": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
+ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
+ "dev": true
+ },
+ "convert-source-map": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
+ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "core-js-compat": {
+ "version": "3.23.5",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.5.tgz",
+ "integrity": "sha512-fHYozIFIxd+91IIbXJgWd/igXIc8Mf9is0fusswjnGIWVG96y2cwyUdlCkGOw6rMLHKAxg7xtCIVaHsyOUnJIg==",
+ "dev": true,
+ "requires": {
+ "browserslist": "^4.21.2",
+ "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
+ }
+ }
+ },
+ "core-js-pure": {
+ "version": "3.23.5",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.5.tgz",
+ "integrity": "sha512-8t78LdpKSuCq4pJYCYk8hl7XEkAX+BP16yRIwL3AanTksxuEf7CM83vRyctmiEL8NDZ3jpUcv56fk9/zG3aIuw==",
+ "dev": true
+ },
+ "cosmiconfig": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz",
+ "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==",
+ "requires": {
+ "@types/parse-json": "^4.0.0",
+ "import-fresh": "^3.2.1",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0",
+ "yaml": "^1.10.0"
+ }
+ },
+ "create-require": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz",
+ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "csstype": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz",
+ "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw=="
+ },
+ "damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "dev": true
+ },
+ "date-fns": {
+ "version": "2.29.1",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.1.tgz",
+ "integrity": "sha512-dlLD5rKaKxpFdnjrs+5azHDFOPEu4ANy/LTh04A1DTzMM7qoajmKCBc8pkKRFT41CNzw+4gQh79X5C+Jq27HAw==",
+ "dev": true
+ },
+ "dayjs": {
+ "version": "1.11.4",
+ "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.4.tgz",
+ "integrity": "sha512-Zj/lPM5hOvQ1Bf7uAvewDaUcsJoI6JmNqmHhHl3nyumwe0XHwt8sWdOVAPACJzCebL8gQCi+K49w7iKWnGwX9g=="
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "dev": true,
+ "requires": {
+ "type-detect": "^4.0.0"
+ }
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
+ "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==",
+ "dev": true,
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
+ "define-lazy-prop": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
+ "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
+ "dev": true
+ },
+ "define-properties": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
+ "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "dev": true,
+ "requires": {
+ "has-property-descriptors": "^1.0.0",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="
+ },
+ "dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "requires": {
+ "path-type": "^4.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-helpers": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
+ "requires": {
+ "@babel/runtime": "^7.8.7",
+ "csstype": "^3.0.2"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.4.199",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.199.tgz",
+ "integrity": "sha512-WIGME0Cs7oob3mxsJwHbeWkH0tYkIE/sjkJ8ML2BYmuRcjhRl/q5kVDXG7W9LOOKwzPU5M0LBlXRq9rlSgnNlg=="
+ },
+ "emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.20.1",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz",
+ "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==",
+ "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-shim-unscopables": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
+ "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "dev": true,
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "esbuild": {
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.49.tgz",
+ "integrity": "sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==",
+ "dev": true,
+ "requires": {
+ "esbuild-android-64": "0.14.49",
+ "esbuild-android-arm64": "0.14.49",
+ "esbuild-darwin-64": "0.14.49",
+ "esbuild-darwin-arm64": "0.14.49",
+ "esbuild-freebsd-64": "0.14.49",
+ "esbuild-freebsd-arm64": "0.14.49",
+ "esbuild-linux-32": "0.14.49",
+ "esbuild-linux-64": "0.14.49",
+ "esbuild-linux-arm": "0.14.49",
+ "esbuild-linux-arm64": "0.14.49",
+ "esbuild-linux-mips64le": "0.14.49",
+ "esbuild-linux-ppc64le": "0.14.49",
+ "esbuild-linux-riscv64": "0.14.49",
+ "esbuild-linux-s390x": "0.14.49",
+ "esbuild-netbsd-64": "0.14.49",
+ "esbuild-openbsd-64": "0.14.49",
+ "esbuild-sunos-64": "0.14.49",
+ "esbuild-windows-32": "0.14.49",
+ "esbuild-windows-64": "0.14.49",
+ "esbuild-windows-arm64": "0.14.49"
+ }
+ },
+ "esbuild-windows-64": {
+ "version": "0.14.49",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.49.tgz",
+ "integrity": "sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==",
+ "dev": true,
+ "optional": true
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
+ },
+ "eslint": {
+ "version": "8.21.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.21.0.tgz",
+ "integrity": "sha512-/XJ1+Qurf1T9G2M5IHrsjp+xrGT73RZf23xA1z5wB1ZzzEAWSZKvRwhWxTFp1rvkvCfwcvAUNAP31bhKTTGfDA==",
+ "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": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "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"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
+ },
+ "eslint-scope": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
+ "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "globals": {
+ "version": "13.17.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+ "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
+ "dev": true,
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "dev": true,
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "eslint-config-airbnb": {
+ "version": "19.0.4",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz",
+ "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==",
+ "dev": true,
+ "requires": {
+ "eslint-config-airbnb-base": "^15.0.0",
+ "object.assign": "^4.1.2",
+ "object.entries": "^1.1.5"
+ }
+ },
+ "eslint-config-airbnb-base": {
+ "version": "15.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
+ "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
+ "dev": true,
+ "requires": {
+ "confusing-browser-globals": "^1.0.10",
+ "object.assign": "^4.1.2",
+ "object.entries": "^1.1.5",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-config-airbnb-typescript": {
+ "version": "17.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz",
+ "integrity": "sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g==",
+ "dev": true,
+ "requires": {
+ "eslint-config-airbnb-base": "^15.0.0"
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz",
+ "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-config-react-app": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz",
+ "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.16.0",
+ "@babel/eslint-parser": "^7.16.3",
+ "@rushstack/eslint-patch": "^1.1.0",
+ "@typescript-eslint/eslint-plugin": "^5.5.0",
+ "@typescript-eslint/parser": "^5.5.0",
+ "babel-preset-react-app": "^10.0.1",
+ "confusing-browser-globals": "^1.0.11",
+ "eslint-plugin-flowtype": "^8.0.3",
+ "eslint-plugin-import": "^2.25.3",
+ "eslint-plugin-jest": "^25.3.0",
+ "eslint-plugin-jsx-a11y": "^6.5.1",
+ "eslint-plugin-react": "^7.27.1",
+ "eslint-plugin-react-hooks": "^4.3.0",
+ "eslint-plugin-testing-library": "^5.0.1"
+ }
+ },
+ "eslint-import-resolver-node": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
+ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "resolve": "^1.20.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
+ "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "find-up": "^2.1.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
+ }
+ },
+ "eslint-plugin-flowtype": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz",
+ "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==",
+ "dev": true,
+ "requires": {
+ "lodash": "^4.17.21",
+ "string-natural-compare": "^3.0.1"
+ }
+ },
+ "eslint-plugin-hooks": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-hooks/-/eslint-plugin-hooks-0.4.3.tgz",
+ "integrity": "sha512-Ra/YMBoTVFlM3zcU0c3vW8WQnauDyj/zVGnx6MUlIHaIMdZ/fZcptA20rotOGpRxZDQhReTlCYzz8BQmteJNWw==",
+ "dev": true,
+ "requires": {
+ "requireindex": "~1.2.0"
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.26.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz",
+ "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==",
+ "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",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-jest": {
+ "version": "25.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz",
+ "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/experimental-utils": "^5.0.0"
+ }
+ },
+ "eslint-plugin-jsx-a11y": {
+ "version": "6.6.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz",
+ "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.18.9",
+ "aria-query": "^4.2.2",
+ "array-includes": "^3.1.5",
+ "ast-types-flow": "^0.0.7",
+ "axe-core": "^4.4.3",
+ "axobject-query": "^2.2.0",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^3.3.2",
+ "language-tags": "^1.0.5",
+ "minimatch": "^3.1.2",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-prettier": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
+ "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
+ "dev": true,
+ "requires": {
+ "prettier-linter-helpers": "^1.0.0"
+ }
+ },
+ "eslint-plugin-react": {
+ "version": "7.30.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz",
+ "integrity": "sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.5",
+ "array.prototype.flatmap": "^1.3.0",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.5",
+ "object.fromentries": "^2.0.5",
+ "object.hasown": "^1.1.1",
+ "object.values": "^1.1.5",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.3",
+ "semver": "^6.3.0",
+ "string.prototype.matchall": "^4.0.7"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "resolve": {
+ "version": "2.0.0-next.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
+ "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
+ "dev": true,
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-plugin-react-hooks": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
+ "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
+ "dev": true,
+ "requires": {}
+ },
+ "eslint-plugin-testing-library": {
+ "version": "5.5.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.5.1.tgz",
+ "integrity": "sha512-plLEkkbAKBjPxsLj7x4jNapcHAg2ernkQlKKrN2I8NrQwPISZHyCUNvg5Hv3EDqOQReToQb5bnqXYbkijJPE/g==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/utils": "^5.13.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
+ "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
+ "dev": true
+ },
+ "espree": {
+ "version": "9.3.3",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz",
+ "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==",
+ "dev": true,
+ "requires": {
+ "acorn": "^8.8.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "esquery": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz",
+ "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true
+ },
+ "external-editor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-diff": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
+ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+ "dev": true
+ },
+ "fast-glob": {
+ "version": "3.2.11",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz",
+ "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==",
+ "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"
+ },
+ "dependencies": {
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ }
+ }
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true
+ },
+ "fastq": {
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
+ "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
+ "dev": true,
+ "requires": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "figures": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
+ "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-root": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "dev": true,
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ }
+ },
+ "flatted": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz",
+ "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==",
+ "dev": true
+ },
+ "follow-redirects": {
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz",
+ "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA=="
+ },
+ "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==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs-extra": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
+ "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "dev": true,
+ "requires": {
+ "at-least-node": "^1.0.0",
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "function.prototype.name": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
+ "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
+ "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",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==",
+ "dev": true
+ },
+ "functions-have-names": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
+ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "dev": true
+ },
+ "fuzzaldrin": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fuzzaldrin/-/fuzzaldrin-2.1.0.tgz",
+ "integrity": "sha512-zgllBYwfHR5P3CncJiGbGVPpa3iFYW1yuPaIv8DiTVRrcg5/6uETNL5zvIoKflG1aifXVUZTlIroDehw4WygGA==",
+ "dev": true
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==",
+ "dev": true
+ },
+ "get-intrinsic": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
+ "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
+ "dev": true,
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-symbol-description": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
+ "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "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-parent": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.3"
+ }
+ },
+ "glob-regex": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/glob-regex/-/glob-regex-0.3.2.tgz",
+ "integrity": "sha512-m5blUd3/OqDTWwzBBtWBPrGlAzatRywHameHeekAZyZrskYouOGdNB8T/q6JucucvJXtOuyHIn0/Yia7iDasDw==",
+ "dev": true
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
+ },
+ "globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "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",
+ "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz",
+ "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
+ "dev": true
+ },
+ "grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-bigints": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
+ "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
+ },
+ "has-property-descriptors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
+ "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "dev": true
+ },
+ "has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "history": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/history/-/history-5.3.0.tgz",
+ "integrity": "sha512-ZqaKwjjrAYUYfLG+htGaIIZ4nioX2L70ZUMIFysS3xvBsSG4x/n1V6TXV3N8ZYNuFGlDirFg32T7B6WOUPDYcQ==",
+ "requires": {
+ "@babel/runtime": "^7.7.6"
+ }
+ },
+ "hoist-non-react-statics": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+ "requires": {
+ "react-is": "^16.7.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true
+ },
+ "ignore": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
+ "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==",
+ "dev": true
+ },
+ "immer": {
+ "version": "9.0.15",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz",
+ "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ=="
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "dev": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz",
+ "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^4.2.1",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-width": "^3.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^3.0.0",
+ "lodash": "^4.17.19",
+ "mute-stream": "0.0.8",
+ "run-async": "^2.4.0",
+ "rxjs": "^6.6.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "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"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "internal-slot": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz",
+ "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.1.0",
+ "has": "^1.0.3",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "is-alphabetical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
+ "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
+ "dev": true
+ },
+ "is-alphanumerical": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
+ "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
+ "dev": true,
+ "requires": {
+ "is-alphabetical": "^1.0.0",
+ "is-decimal": "^1.0.0"
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
+ },
+ "is-bigint": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
+ "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==",
+ "dev": true,
+ "requires": {
+ "has-bigints": "^1.0.1"
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "dev": true,
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-boolean-object": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
+ "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-callable": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz",
+ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==",
+ "dev": true
+ },
+ "is-core-module": {
+ "version": "2.9.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
+ "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz",
+ "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-decimal": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
+ "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
+ "dev": true
+ },
+ "is-docker": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
+ "dev": true
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-interactive": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
+ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
+ "dev": true
+ },
+ "is-negative-zero": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "dev": true
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true
+ },
+ "is-number-object": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz",
+ "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-regex": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz",
+ "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-shared-array-buffer": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "is-string": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz",
+ "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
+ "is-symbol": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz",
+ "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
+ },
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true
+ },
+ "is-weakref": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2"
+ }
+ },
+ "is-wsl": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
+ "dev": true,
+ "requires": {
+ "is-docker": "^2.0.0"
+ }
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true
+ },
+ "jest-get-type": {
+ "version": "26.3.0",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz",
+ "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig=="
+ },
+ "jest-validate": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz",
+ "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==",
+ "requires": {
+ "@jest/types": "^26.6.2",
+ "camelcase": "^6.0.0",
+ "chalk": "^4.0.0",
+ "jest-get-type": "^26.3.0",
+ "leven": "^3.1.0",
+ "pretty-format": "^26.6.2"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+ },
+ "json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA=="
+ },
+ "jsonfile": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6",
+ "universalify": "^2.0.0"
+ }
+ },
+ "jsx-ast-utils": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz",
+ "integrity": "sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q==",
+ "dev": true,
+ "requires": {
+ "array-includes": "^3.1.5",
+ "object.assign": "^4.1.2"
+ }
+ },
+ "klona": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz",
+ "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ=="
+ },
+ "language-subtag-registry": {
+ "version": "0.3.22",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
+ "dev": true
+ },
+ "language-tags": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+ "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
+ "dev": true,
+ "requires": {
+ "language-subtag-registry": "~0.3.2"
+ }
+ },
+ "leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A=="
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
+ },
+ "local-pkg": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz",
+ "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
+ "dev": true
+ },
+ "lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+ "dev": true
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ=="
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "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"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
+ "loupe": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz",
+ "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==",
+ "dev": true,
+ "requires": {
+ "get-func-name": "^2.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "magic-string": {
+ "version": "0.26.2",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz",
+ "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==",
+ "dev": true,
+ "requires": {
+ "sourcemap-codec": "^1.4.8"
+ }
+ },
+ "make-error": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
+ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="
+ },
+ "make-plural": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/make-plural/-/make-plural-7.1.0.tgz",
+ "integrity": "sha512-PKkwVlAxYVo98NrbclaQIT4F5Oy+X58PZM5r2IwUSCe3syya6PXkIRCn2XCdz7p58Scgpp50PBeHmepXVDG3hg=="
+ },
+ "merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
+ },
+ "messageformat-parser": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/messageformat-parser/-/messageformat-parser-4.1.3.tgz",
+ "integrity": "sha512-2fU3XDCanRqeOCkn7R5zW5VQHWf+T3hH65SzuqRvjatBK7r4uyFa5mEX+k6F9Bd04LVM5G4/BHBTUJsOdW7uyg=="
+ },
+ "micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "requires": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true
+ },
+ "mousetrap": {
+ "version": "1.6.5",
+ "resolved": "https://registry.npmjs.org/mousetrap/-/mousetrap-1.6.5.tgz",
+ "integrity": "sha512-QNo4kEepaIBwiT8CDhP98umTetp+JNfQYBWvC1pc6/OAibuXtRcxZ58Qz8skvEHYvURne/7R8T5VoOI7rDsEUA=="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "mute-stream": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
+ "dev": true
+ },
+ "nanoid": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
+ "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "dev": true
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true
+ },
+ "node-gettext": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/node-gettext/-/node-gettext-3.0.0.tgz",
+ "integrity": "sha512-/VRYibXmVoN6tnSAY2JWhNRhWYJ8Cd844jrZU/DwLVoI4vBI6ceYbd8i42sYZ9uOgDH3S7vslIKOWV/ZrT2YBA==",
+ "dev": true,
+ "requires": {
+ "lodash.get": "^4.4.2"
+ }
+ },
+ "node-releases": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
+ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg=="
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
+ },
+ "object-inspect": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
+ "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
+ "dev": true
+ },
+ "object.assign": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
+ "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "has-symbols": "^1.0.1",
+ "object-keys": "^1.1.1"
+ }
+ },
+ "object.entries": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
+ "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "object.fromentries": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz",
+ "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "object.hasown": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz",
+ "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ }
+ },
+ "object.values": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz",
+ "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^2.1.0"
+ }
+ },
+ "open": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
+ "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
+ "dev": true,
+ "requires": {
+ "define-lazy-prop": "^2.0.0",
+ "is-docker": "^2.1.1",
+ "is-wsl": "^2.2.0"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "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"
+ }
+ },
+ "ora": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
+ "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
+ "dev": true,
+ "requires": {
+ "bl": "^4.1.0",
+ "chalk": "^4.1.0",
+ "cli-cursor": "^3.1.0",
+ "cli-spinners": "^2.5.0",
+ "is-interactive": "^1.0.0",
+ "is-unicode-supported": "^0.1.0",
+ "log-symbols": "^4.1.0",
+ "strip-ansi": "^6.0.0",
+ "wcwidth": "^1.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "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"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
+ "dev": true
+ },
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
+ "dev": true
+ },
+ "papaparse": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.3.2.tgz",
+ "integrity": "sha512-6dNZu0Ki+gyV0eBsFKJhYr+MdQYAzFUGlBMNj3GNrmHxmz1lfRa24CjFObPXtjcetlOv5Ad299MhIK0znp3afw==",
+ "dev": true
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-json": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "error-ex": "^1.3.1",
+ "json-parse-even-better-errors": "^2.3.0",
+ "lines-and-columns": "^1.1.6"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+ "dev": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
+ },
+ "pathval": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
+ "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
+ "dev": true
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true
+ },
+ "pkg-up": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
+ "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ }
+ }
+ },
+ "plurals-cldr": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/plurals-cldr/-/plurals-cldr-1.0.4.tgz",
+ "integrity": "sha512-4nLXqtel7fsCgzi8dvRZvUjfL8SXpP982sKg7b2TgpnR8rDnes06iuQ83trQ/+XdtyMIQkBBbKzX6x97eLfsJQ==",
+ "dev": true
+ },
+ "pofile": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/pofile/-/pofile-1.1.3.tgz",
+ "integrity": "sha512-sk96pUvpNwDV6PLrnhr68Uu1S5NohsxqLKz0GuracgrDo40BdF/r1RhHnjakUk6Q4Z0OKIybOQ7GevLKGN1iYw==",
+ "dev": true
+ },
+ "postcss": {
+ "version": "8.4.16",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz",
+ "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==",
+ "dev": true,
+ "requires": {
+ "nanoid": "^3.3.4",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
+ },
+ "prettier": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
+ "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
+ "dev": true
+ },
+ "prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "requires": {
+ "fast-diff": "^1.1.2"
+ }
+ },
+ "pretty-format": {
+ "version": "26.6.2",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
+ "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
+ "requires": {
+ "@jest/types": "^26.6.2",
+ "ansi-regex": "^5.0.0",
+ "ansi-styles": "^4.0.0",
+ "react-is": "^17.0.1"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "react-is": {
+ "version": "17.0.2",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
+ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
+ }
+ }
+ },
+ "prop-types": {
+ "version": "15.8.1",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.13.1"
+ }
+ },
+ "pseudolocale": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pseudolocale/-/pseudolocale-1.2.0.tgz",
+ "integrity": "sha512-k0OQFvIlvpRdzR0dPVrrbWX7eE9EaZ6gpZtTlFSDi1Gf9tMy9wiANCNu7JZ0drcKgUri/39a2mBbH0goiQmrmQ==",
+ "dev": true,
+ "requires": {
+ "commander": "*"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
+ },
+ "ramda": {
+ "version": "0.27.2",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.2.tgz",
+ "integrity": "sha512-SbiLPU40JuJniHexQSAgad32hfwd+DRUdwF2PlVuI5RZD0/vahUco7R8vD86J/tcEKKF9vZrUVwgtmGCqlCKyA=="
+ },
+ "react": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "react-async-hook": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/react-async-hook/-/react-async-hook-4.0.0.tgz",
+ "integrity": "sha512-97lgjFkOcHCTYSrsKBpsXg3iVWM0LnzedB749iP76sb3/8Ouu4nHIkCLEOrQWHVYqrYxjF05NN6GHoXWFkB3Kw==",
+ "requires": {}
+ },
+ "react-dom": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "scheduler": "^0.23.0"
+ }
+ },
+ "react-icons": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.4.0.tgz",
+ "integrity": "sha512-fSbvHeVYo/B5/L4VhB7sBA1i2tS8MkT0Hb9t2H1AVPkwGfVHLJCqyr2Py9dKMxsyM63Eng1GkdZfbWj+Fmv8Rg==",
+ "requires": {}
+ },
+ "react-infinite-scroller": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/react-infinite-scroller/-/react-infinite-scroller-1.2.6.tgz",
+ "integrity": "sha512-mGdMyOD00YArJ1S1F3TVU9y4fGSfVVl6p5gh/Vt4u99CJOptfVu/q5V/Wlle72TMgYlBwIhbxK5wF0C/R33PXQ==",
+ "requires": {
+ "prop-types": "^15.5.8"
+ }
+ },
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
+ },
+ "react-redux": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-8.0.2.tgz",
+ "integrity": "sha512-nBwiscMw3NoP59NFCXFf02f8xdo+vSHT/uZ1ldDwF7XaTpzm+Phk97VT4urYBl5TYAPNVaFm12UHAEyzkpNzRA==",
+ "requires": {
+ "@babel/runtime": "^7.12.1",
+ "@types/hoist-non-react-statics": "^3.3.1",
+ "@types/use-sync-external-store": "^0.0.3",
+ "hoist-non-react-statics": "^3.3.2",
+ "react-is": "^18.0.0",
+ "use-sync-external-store": "^1.0.0"
+ },
+ "dependencies": {
+ "react-is": {
+ "version": "18.2.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
+ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
+ }
+ }
+ },
+ "react-refresh": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz",
+ "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==",
+ "dev": true
+ },
+ "react-router": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.3.0.tgz",
+ "integrity": "sha512-7Wh1DzVQ+tlFjkeo+ujvjSqSJmkt1+8JO+T5xklPlgrh70y7ogx75ODRW0ThWhY7S+6yEDks8TYrtQe/aoboBQ==",
+ "requires": {
+ "history": "^5.2.0"
+ }
+ },
+ "react-router-dom": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.3.0.tgz",
+ "integrity": "sha512-uaJj7LKytRxZNQV8+RbzJWnJ8K2nPsOOEuX7aQstlMZKQT0164C+X2w6bnkqU3sjtLvpd5ojrezAyfZ1+0sStw==",
+ "requires": {
+ "history": "^5.2.0",
+ "react-router": "6.3.0"
+ }
+ },
+ "react-textarea-autosize": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.3.4.tgz",
+ "integrity": "sha512-CdtmP8Dc19xL8/R6sWvtknD/eCXkQr30dtvC4VmGInhRsfF8X/ihXCq6+9l9qbxmKRiq407/7z5fxE7cVWQNgQ==",
+ "requires": {
+ "@babel/runtime": "^7.10.2",
+ "use-composed-ref": "^1.3.0",
+ "use-latest": "^1.2.1"
+ }
+ },
+ "react-transition-group": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
+ "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==",
+ "requires": {
+ "@babel/runtime": "^7.5.5",
+ "dom-helpers": "^5.0.1",
+ "loose-envify": "^1.4.0",
+ "prop-types": "^15.6.2"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+ "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "recrawl-sync": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/recrawl-sync/-/recrawl-sync-2.2.2.tgz",
+ "integrity": "sha512-E2sI4F25Fu2nrfV+KsnC7/qfk/spQIYXlonfQoS4rwxeNK5BjxnLPbWiRXHVXPwYBOTWtPX5765kTm/zJiL+LQ==",
+ "dev": true,
+ "requires": {
+ "@cush/relative": "^1.0.0",
+ "glob-regex": "^0.3.0",
+ "slash": "^3.0.0",
+ "tslib": "^1.9.3"
+ }
+ },
+ "redux": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz",
+ "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==",
+ "requires": {
+ "@babel/runtime": "^7.9.2"
+ }
+ },
+ "redux-thunk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz",
+ "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==",
+ "requires": {}
+ },
+ "regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+ "dev": true
+ },
+ "regenerate-unicode-properties": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz",
+ "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==",
+ "dev": true,
+ "requires": {
+ "regenerate": "^1.4.2"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.9",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
+ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA=="
+ },
+ "regenerator-transform": {
+ "version": "0.15.0",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz",
+ "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+ "regexp.prototype.flags": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
+ "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "functions-have-names": "^1.2.2"
+ }
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true
+ },
+ "regexpu-core": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz",
+ "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==",
+ "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",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz",
+ "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==",
+ "dev": true
+ },
+ "regjsparser": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz",
+ "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==",
+ "dev": true,
+ "requires": {
+ "jsesc": "~0.5.0"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+ "dev": true
+ }
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "dev": true
+ },
+ "requireindex": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz",
+ "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==",
+ "dev": true
+ },
+ "reselect": {
+ "version": "4.1.6",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz",
+ "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ=="
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+ },
+ "restore-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
+ "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
+ "dev": true,
+ "requires": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "rollup": {
+ "version": "2.77.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.0.tgz",
+ "integrity": "sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g==",
+ "dev": true,
+ "requires": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "rollup-plugin-visualizer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-5.7.1.tgz",
+ "integrity": "sha512-E/IgOMnmXKlc6ICyf53ok1b6DxPeNVUs3R0kYYPuDpGfofT4bkiG+KtSMlGjMACFmfwbbqTVDZBIF7sMZVKJbA==",
+ "dev": true,
+ "requires": {
+ "nanoid": "^3.3.4",
+ "open": "^8.4.0",
+ "source-map": "^0.7.3",
+ "yargs": "^17.5.1"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.7.4",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
+ "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "dev": true
+ }
+ }
+ },
+ "run-async": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
+ "dev": true
+ },
+ "run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "requires": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "rxjs": {
+ "version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "scheduler": {
+ "version": "0.23.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
+ "requires": {
+ "loose-envify": "^1.1.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.7",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "dev": true
+ },
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="
+ },
+ "source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true
+ },
+ "source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ }
+ }
+ },
+ "sourcemap-codec": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
+ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
+ "dev": true
+ },
+ "string_decoder": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.2.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true
+ }
+ }
+ },
+ "string-natural-compare": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz",
+ "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ }
+ }
+ },
+ "string.prototype.matchall": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz",
+ "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.19.1",
+ "get-intrinsic": "^1.1.1",
+ "has-symbols": "^1.0.3",
+ "internal-slot": "^1.0.3",
+ "regexp.prototype.flags": "^1.4.1",
+ "side-channel": "^1.0.4"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz",
+ "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==",
+ "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",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz",
+ "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "es-abstract": "^1.19.5"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
+ },
+ "stylis": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz",
+ "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag=="
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
+ "dev": true
+ },
+ "tinycon": {
+ "version": "0.6.8",
+ "resolved": "https://registry.npmjs.org/tinycon/-/tinycon-0.6.8.tgz",
+ "integrity": "sha512-bF8Lxm4JUXF6Cw0XlZdugJ44GV575OinZ0Pt8vQPr8ooNqd2yyNkoFdCHzmdpHlgoqfSLfcyk4HDP1EyllT+ug=="
+ },
+ "tinypool": {
+ "version": "0.2.4",
+ "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.2.4.tgz",
+ "integrity": "sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ==",
+ "dev": true
+ },
+ "tinyspy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.0.tgz",
+ "integrity": "sha512-FI5B2QdODQYDRjfuLF+OrJ8bjWRMCXokQPcwKm0W3IzcbUmBNv536cQc7eXGoAuXphZwgx1DFbqImwzz08Fnhw==",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "ts-essentials": {
+ "version": "9.2.0",
+ "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-9.2.0.tgz",
+ "integrity": "sha512-HLl+am6q+ulOWcjUFghpIQXXyaH0hVTnFTVWNqwz1iDxyN+t+lwDfqPB5FmPUTFw3J+y26UR3hNGmK/1jehokA==",
+ "dev": true,
+ "requires": {}
+ },
+ "ts-node": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz",
+ "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==",
+ "requires": {
+ "arg": "^4.1.0",
+ "create-require": "^1.1.0",
+ "diff": "^4.0.1",
+ "make-error": "^1.1.1",
+ "source-map-support": "^0.5.17",
+ "yn": "3.1.1"
+ }
+ },
+ "tsconfig-paths": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
+ "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
+ "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.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ }
+ }
+ },
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
+ },
+ "tsutils": {
+ "version": "3.21.0",
+ "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
+ "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.8.1"
+ }
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
+ "dev": true
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
+ },
+ "typescript": {
+ "version": "4.7.4",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
+ "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ=="
+ },
+ "unbox-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
+ "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "has-bigints": "^1.0.2",
+ "has-symbols": "^1.0.3",
+ "which-boxed-primitive": "^1.0.2"
+ }
+ },
+ "unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+ "dev": true
+ },
+ "unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+ "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",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==",
+ "dev": true
+ },
+ "unicode-property-aliases-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==",
+ "dev": true
+ },
+ "universalify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
+ "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "dev": true
+ },
+ "update-browserslist-db": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz",
+ "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==",
+ "requires": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "use-composed-ref": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz",
+ "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==",
+ "requires": {}
+ },
+ "use-isomorphic-layout-effect": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz",
+ "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==",
+ "requires": {}
+ },
+ "use-latest": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz",
+ "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==",
+ "requires": {
+ "use-isomorphic-layout-effect": "^1.1.1"
+ }
+ },
+ "use-mutation": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/use-mutation/-/use-mutation-2.2.1.tgz",
+ "integrity": "sha512-qGvtQpVgj2Ekcrrykiq4rOlOhUrlebaO/sVVGpXjrb0IEOBtZqNzq8hKJwrYGkyUWqu3pBPpOEyss8OHRhS3Ow==",
+ "requires": {
+ "use-safe-callback": "^1.0.2"
+ }
+ },
+ "use-safe-callback": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/use-safe-callback/-/use-safe-callback-1.0.2.tgz",
+ "integrity": "sha512-RVeoyxgjJNfu9baNwulBM+HuPQGlcE1MJtrA1w50B5Hd0tyeKvrBIPdCfRx4Trrrxe34M6qRTys/bfpqsKRcyA==",
+ "requires": {}
+ },
+ "use-sync-external-store": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz",
+ "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==",
+ "requires": {}
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "dev": true
+ },
+ "v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
+ },
+ "vite": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.5.tgz",
+ "integrity": "sha512-bRvrt9Tw8EGW4jj64aYFTnVg134E8hgDxyl/eEHnxiGqYk7/pTPss6CWlurqPOUzqvEoZkZ58Ws+Iu8MB87iMA==",
+ "dev": true,
+ "requires": {
+ "esbuild": "^0.14.47",
+ "fsevents": "~2.3.2",
+ "postcss": "^8.4.16",
+ "resolve": "^1.22.1",
+ "rollup": "^2.75.6"
+ }
+ },
+ "vite-plugin-eslint": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/vite-plugin-eslint/-/vite-plugin-eslint-1.7.0.tgz",
+ "integrity": "sha512-Kz2HwBeAArmsE0QmWSm+e7CaEQrfMkEZpFw4hngoy6JmERjw7WUH8HLbG1OkreOKX4iIUReOss9N1Mkw4wEk8g==",
+ "dev": true,
+ "requires": {
+ "@rollup/pluginutils": "^4.2.1",
+ "@types/eslint": "^8.4.5",
+ "rollup": "^2.77.0"
+ }
+ },
+ "vite-tsconfig-paths": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-3.5.0.tgz",
+ "integrity": "sha512-NKIubr7gXgh/3uniQaOytSg+aKWPrjquP6anAy+zCWEn6h9fB8z2/qdlfQrTgZWaXJ2pHVlllrSdRZltHn9P4g==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "globrex": "^0.1.2",
+ "recrawl-sync": "^2.0.3",
+ "tsconfig-paths": "^4.0.0"
+ },
+ "dependencies": {
+ "tsconfig-paths": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.0.0.tgz",
+ "integrity": "sha512-SLBg2GBKlR6bVtMgJJlud/o3waplKtL7skmLkExomIiaAtLGtVsoXIqP3SYdjbcH9lq/KVv7pMZeCBpLYOit6Q==",
+ "dev": true,
+ "requires": {
+ "json5": "^2.2.1",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ }
+ }
+ }
+ },
+ "vitest": {
+ "version": "0.21.1",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.21.1.tgz",
+ "integrity": "sha512-WBIxuFmIDPuK47GO6Lu9eNeRMqHj/FWL3dk73OHH3eyPPWPiu+UB3QHLkLK2PEggCqJW4FaWoWg8R68S7p9+9Q==",
+ "dev": true,
+ "requires": {
+ "@types/chai": "^4.3.3",
+ "@types/chai-subset": "^1.3.3",
+ "@types/node": "*",
+ "chai": "^4.3.6",
+ "debug": "^4.3.4",
+ "local-pkg": "^0.4.2",
+ "tinypool": "^0.2.4",
+ "tinyspy": "^1.0.0",
+ "vite": "^2.9.12 || ^3.0.0-0"
+ }
+ },
+ "vitest-mock-extended": {
+ "version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/vitest-mock-extended/-/vitest-mock-extended-0.1.13.tgz",
+ "integrity": "sha512-XV0AT+YyWNiPHCwbak5jIx9TMG2MckemYVgorRAbOGZ4imohVNdFNVTFmaqvc5GBrO2WRQgHxqAsRkpLxWicng==",
+ "dev": true,
+ "requires": {
+ "ts-essentials": "^9.2.0"
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
+ "dev": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-boxed-primitive": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz",
+ "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==",
+ "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"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "dev": true
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ },
+ "yaml": {
+ "version": "1.10.2",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
+ },
+ "yargs": {
+ "version": "17.5.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz",
+ "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==",
+ "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"
+ }
+ },
+ "yargs-parser": {
+ "version": "21.0.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
+ "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
+ "dev": true
+ },
+ "yn": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz",
+ "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
+ "dev": true
+ }
+ }
+}
diff --git a/commafeed-client/package.json b/commafeed-client/package.json
index e4f34c30..20612dd1 100644
--- a/commafeed-client/package.json
+++ b/commafeed-client/package.json
@@ -1,20 +1,70 @@
{
- "name": "commafeed",
- "version": "2.0.0",
- "main": "main.js",
- "private": true,
- "devDependencies": {
- "bower": "1.8.8",
- "gulp": "3.8.11",
- "gulp-rev": "4.0.0",
- "gulp-rev-replace": "0.4.1",
- "gulp-minify-css": "1.1.5",
- "gulp-uglify": "1.2.0",
- "gulp-filter": "2.0.2",
- "gulp-connect": "2.2.0",
- "connect-modrewrite": "0.8.1",
- "gulp-sass": "2.0.2",
- "gulp-useref": "1.1.2",
- "gulp-angular-templatecache": "1.6.0"
- }
+ "name": "commafeed-client",
+ "private": true,
+ "version": "0.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "npm run i18n:compile && tsc && vite build",
+ "preview": "vite preview",
+ "test": "vitest",
+ "test:ci": "vitest run",
+ "eslint": "eslint --ext=.js,.jsx,.ts,.tsx src",
+ "i18n": "npm run i18n:extract && npm run i18n:compile",
+ "i18n:extract": "lingui extract --clean",
+ "i18n:compile": "lingui compile --typescript",
+ "postinstall": "npm run i18n:compile"
+ },
+ "dependencies": {
+ "@emotion/react": "^11.10.0",
+ "@fontsource/open-sans": "^4.5.11",
+ "@lingui/core": "^3.14.0",
+ "@lingui/macro": "^3.14.0",
+ "@lingui/react": "^3.14.0",
+ "@mantine/core": "^5.1.1",
+ "@mantine/form": "^5.1.1",
+ "@mantine/hooks": "^5.1.1",
+ "@mantine/modals": "^5.1.1",
+ "@mantine/notifications": "^5.1.1",
+ "@mantine/spotlight": "^5.1.1",
+ "@reduxjs/toolkit": "^1.8.3",
+ "axios": "^0.27.2",
+ "dayjs": "^1.11.4",
+ "make-plural": "^7.1.0",
+ "mousetrap": "^1.6.5",
+ "react": "^18.2.0",
+ "react-async-hook": "^4.0.0",
+ "react-dom": "^18.2.0",
+ "react-icons": "^4.4.0",
+ "react-infinite-scroller": "^1.2.6",
+ "react-redux": "^8.0.2",
+ "react-router-dom": "^6.3.0",
+ "tinycon": "^0.6.8",
+ "use-mutation": "^2.2.1"
+ },
+ "devDependencies": {
+ "@lingui/cli": "^3.14.0",
+ "@types/eslint": "^8.4.5",
+ "@types/mousetrap": "^1.6.9",
+ "@types/react": "^18.0.17",
+ "@types/react-dom": "^18.0.6",
+ "@types/react-infinite-scroller": "^1.2.3",
+ "@types/tinycon": "^0.6.3",
+ "@vitejs/plugin-react": "^2.0.0",
+ "eslint": "^8.21.0",
+ "eslint-config-airbnb": "^19.0.4",
+ "eslint-config-airbnb-typescript": "^17.0.0",
+ "eslint-config-prettier": "^8.5.0",
+ "eslint-config-react-app": "^7.0.1",
+ "eslint-plugin-hooks": "^0.4.3",
+ "eslint-plugin-prettier": "^4.2.1",
+ "prettier": "^2.7.1",
+ "rollup-plugin-visualizer": "^5.7.1",
+ "typescript": "^4.7.4",
+ "vite": "^3.0.5",
+ "vite-plugin-eslint": "^1.7.0",
+ "vite-tsconfig-paths": "^3.5.0",
+ "vitest": "^0.21.1",
+ "vitest-mock-extended": "^0.1.13"
+ }
}
diff --git a/commafeed-client/pom.xml b/commafeed-client/pom.xml
index c95d05e0..545f9cca 100644
--- a/commafeed-client/pom.xml
+++ b/commafeed-client/pom.xml
@@ -5,7 +5,7 @@
com.commafeed
commafeed
- ${revision}
+ 3.0.0
commafeed-client
CommaFeed Client
@@ -15,7 +15,7 @@
com.github.eirslett
frontend-maven-plugin
- 1.6
+ 1.12.1
@@ -25,8 +25,8 @@
compile
- v6.11.4
- 3.10.6
+ v16.16.0
+ 8.15.0
@@ -36,25 +36,60 @@
compile
- install
+ ci
- bower install
+ npm run eslint
- bower
+ npm
compile
- install
+ run eslint
- gulp build
+ npm run test
- gulp
+ npm
compile
+
+ run test:ci
+
+
+
+ npm run build
+
+ npm
+
+ compile
+
+ run build
+
+
+
+
+
+ maven-resources-plugin
+ 3.3.0
+
+
+ copy web interface to resources
+ prepare-package
+
+ copy-resources
+
+
+ ${project.build.directory}/classes/assets
+
+
+ dist
+ false
+
+
+
diff --git a/commafeed-client/src/main/app/app-icon-114.png b/commafeed-client/public/app-icon-114.png
similarity index 100%
rename from commafeed-client/src/main/app/app-icon-114.png
rename to commafeed-client/public/app-icon-114.png
diff --git a/commafeed-client/src/main/app/app-icon-144.png b/commafeed-client/public/app-icon-144.png
similarity index 100%
rename from commafeed-client/src/main/app/app-icon-144.png
rename to commafeed-client/public/app-icon-144.png
diff --git a/commafeed-client/src/main/app/app-icon-192.png b/commafeed-client/public/app-icon-192.png
similarity index 100%
rename from commafeed-client/src/main/app/app-icon-192.png
rename to commafeed-client/public/app-icon-192.png
diff --git a/commafeed-client/src/main/app/app-icon-72.png b/commafeed-client/public/app-icon-72.png
similarity index 100%
rename from commafeed-client/src/main/app/app-icon-72.png
rename to commafeed-client/public/app-icon-72.png
diff --git a/commafeed-client/src/main/app/favicon.ico b/commafeed-client/public/favicon.ico
similarity index 100%
rename from commafeed-client/src/main/app/favicon.ico
rename to commafeed-client/public/favicon.ico
diff --git a/commafeed-client/src/main/app/manifest.json b/commafeed-client/public/manifest.json
similarity index 83%
rename from commafeed-client/src/main/app/manifest.json
rename to commafeed-client/public/manifest.json
index f08af759..800b482b 100644
--- a/commafeed-client/src/main/app/manifest.json
+++ b/commafeed-client/public/manifest.json
@@ -1,5 +1,10 @@
{
+ "$schema": "https://json.schemastore.org/web-manifest-combined.json",
"name": "CommaFeed",
+ "scope": ".",
+ "start_url": "./",
+ "display": "standalone",
+ "theme_color": "#f88a14",
"icons": [
{
"src": "app-icon-72.png",
@@ -25,8 +30,5 @@
"type": "image/png",
"density": "4.0"
}
- ],
- "scope": ".",
- "start_url": "./",
- "display": "standalone"
+ ]
}
diff --git a/commafeed-client/src/App.tsx b/commafeed-client/src/App.tsx
new file mode 100644
index 00000000..ecc2ef5d
--- /dev/null
+++ b/commafeed-client/src/App.tsx
@@ -0,0 +1,132 @@
+import { i18n } from "@lingui/core"
+import { I18nProvider } from "@lingui/react"
+import { ColorScheme, ColorSchemeProvider, MantineProvider } from "@mantine/core"
+import { useLocalStorage } from "@mantine/hooks"
+import { ModalsProvider } from "@mantine/modals"
+import { NotificationsProvider } from "@mantine/notifications"
+import { Constants } from "app/constants"
+import { redirectTo } from "app/slices/redirect"
+import { reloadServerInfos } from "app/slices/server"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { categoryUnreadCount } from "app/utils"
+import { Header } from "components/header/Header"
+import { Tree } from "components/sidebar/Tree"
+import { useI18n } from "i18n"
+import { AdminUsersPage } from "pages/admin/AdminUsersPage"
+import { AddPage } from "pages/app/AddPage"
+import { CategoryDetailsPage } from "pages/app/CategoryDetailsPage"
+import { FeedDetailsPage } from "pages/app/FeedDetailsPage"
+import { FeedEntriesPage } from "pages/app/FeedEntriesPage"
+import Layout from "pages/app/Layout"
+import { SettingsPage } from "pages/app/SettingsPage"
+import { LoginPage } from "pages/auth/LoginPage"
+import { PasswordRecoveryPage } from "pages/auth/PasswordRecoveryPage"
+import { RegistrationPage } from "pages/auth/RegistrationPage"
+import React, { useEffect } from "react"
+import { HashRouter, Navigate, Route, Routes, useNavigate } from "react-router-dom"
+import Tinycon from "tinycon"
+
+function Providers(props: { children: React.ReactNode }) {
+ const [colorScheme, setColorScheme] = useLocalStorage({
+ key: "color-scheme",
+ defaultValue: "light",
+ getInitialValueInEffect: true,
+ })
+ const toggleColorScheme = (value?: ColorScheme) => setColorScheme(value || (colorScheme === "dark" ? "light" : "dark"))
+
+ return (
+
+
+
+
+
+ {props.children}
+
+
+
+
+
+ )
+}
+
+function AppRoutes() {
+ return (
+
+ } />
+ } />
+ } />
+ } />
+ } sidebar={} />}>
+
+ } />
+ } />
+
+
+ } />
+ } />
+
+ } />
+ } />
+
+ } />
+
+
+ } />
+
+ )
+}
+
+function RedirectHandler() {
+ const target = useAppSelector(state => state.redirect.to)
+ const dispatch = useAppDispatch()
+ const navigate = useNavigate()
+ useEffect(() => {
+ if (target) {
+ // pages can subscribe to state.timestamp in order to refresh when navigating to an url matching the current page
+ navigate(target, { state: { timestamp: new Date() } })
+ dispatch(redirectTo(undefined))
+ }
+ }, [target, dispatch, navigate])
+
+ return null
+}
+
+function FaviconHandler() {
+ const root = useAppSelector(state => state.tree.rootCategory)
+ useEffect(() => {
+ const unreadCount = categoryUnreadCount(root)
+ if (unreadCount === 0) Tinycon.reset()
+ else Tinycon.setBubble(unreadCount)
+ }, [root])
+
+ return null
+}
+
+export function App() {
+ useI18n()
+ const dispatch = useAppDispatch()
+
+ useEffect(() => {
+ dispatch(reloadServerInfos())
+ }, [dispatch])
+
+ return (
+
+ <>
+
+
+
+
+
+ >
+
+ )
+}
diff --git a/commafeed-client/src/app/client.ts b/commafeed-client/src/app/client.ts
new file mode 100644
index 00000000..6366472e
--- /dev/null
+++ b/commafeed-client/src/app/client.ts
@@ -0,0 +1,107 @@
+import axios from "axios"
+import {
+ AddCategoryRequest,
+ Category,
+ CategoryModificationRequest,
+ CollapseRequest,
+ Entries,
+ FeedInfo,
+ FeedInfoRequest,
+ FeedModificationRequest,
+ GetEntriesPaginatedRequest,
+ IDRequest,
+ LoginRequest,
+ MarkRequest,
+ PasswordResetRequest,
+ ProfileModificationRequest,
+ RegistrationRequest,
+ ServerInfo,
+ Settings,
+ SubscribeRequest,
+ Subscription,
+ UserModel,
+} from "./types"
+
+const axiosInstance = axios.create({ baseURL: "./rest", withCredentials: true })
+axiosInstance.interceptors.response.use(
+ response => response,
+ error => {
+ if (error.response.status === 401) window.location.hash = "/login"
+ throw error
+ }
+)
+
+export const client = {
+ category: {
+ getRoot: () => axiosInstance.get("category/get"),
+ modify: (req: CategoryModificationRequest) => axiosInstance.post("category/modify", req),
+ collapse: (req: CollapseRequest) => axiosInstance.post("category/collapse", req),
+ getEntries: (req: GetEntriesPaginatedRequest) => axiosInstance.get("category/entries", { params: req }),
+ markEntries: (req: MarkRequest) => axiosInstance.post("category/mark", req),
+ add: (req: AddCategoryRequest) => axiosInstance.post("category/add", req),
+ delete: (req: IDRequest) => axiosInstance.post("category/delete", req),
+ },
+ entry: {
+ mark: (req: MarkRequest) => axiosInstance.post("entry/mark", req),
+ },
+ feed: {
+ get: (id: string) => axiosInstance.get(`feed/get/${id}`),
+ modify: (req: FeedModificationRequest) => axiosInstance.post("feed/modify", req),
+ getEntries: (req: GetEntriesPaginatedRequest) => axiosInstance.get("feed/entries", { params: req }),
+ markEntries: (req: MarkRequest) => axiosInstance.post("feed/mark", req),
+ fetchFeed: (req: FeedInfoRequest) => axiosInstance.post("feed/fetch", req),
+ subscribe: (req: SubscribeRequest) => axiosInstance.post("feed/subscribe", req),
+ unsubscribe: (req: IDRequest) => axiosInstance.post("feed/unsubscribe", req),
+ importOpml: (req: File) => {
+ const formData = new FormData()
+ formData.append("file", req)
+ return axiosInstance.post("feed/import", formData, {
+ headers: {
+ "Content-Type": "multipart/form-data",
+ },
+ // TODO remove redirect from backend method then remove this
+ validateStatus: () => true,
+ })
+ },
+ },
+ user: {
+ login: (req: LoginRequest) => axiosInstance.post("user/login", req),
+ register: (req: RegistrationRequest) => axiosInstance.post("user/register", req),
+ passwordReset: (req: PasswordResetRequest) => axiosInstance.post("user/passwordReset", req),
+ getSettings: () => axiosInstance.get("user/settings"),
+ saveSettings: (settings: Settings) => axiosInstance.post("user/settings", settings),
+ getProfile: () => axiosInstance.get("user/profile"),
+ saveProfile: (req: ProfileModificationRequest) => axiosInstance.post("user/profile", req),
+ deleteProfile: () => axiosInstance.post("user/profile/deleteAccount"),
+ },
+ server: {
+ getServerInfos: () => axiosInstance.get("server/get"),
+ },
+ admin: {
+ getAllUsers: () => axiosInstance.get("admin/user/getAll"),
+ saveUser: (req: UserModel) => axiosInstance.post("admin/user/save", req),
+ deleteUser: (req: IDRequest) => axiosInstance.post("admin/user/delete", req),
+ },
+}
+
+/**
+ * transform an error object to an array of strings that can be displayed to the user
+ * @param err an error object (e.g. from axios)
+ * @returns an array of messages to show the user
+ */
+export const errorToStrings = (err: any) => {
+ let strings: string[] = []
+
+ if (axios.isAxiosError(err)) {
+ if (err.response) {
+ const data = err.response.data as any
+ if (typeof data === "string") strings.push(data)
+ if (typeof data === "object" && data.message) strings.push(data.message)
+ if (typeof data === "object" && data.errors) strings = [...strings, ...data.errors]
+ }
+ }
+
+ return strings
+}
+
+export const errorsToStrings = (errors: any[]) => errors.map(errorToStrings).flat()
diff --git a/commafeed-client/src/app/constants.ts b/commafeed-client/src/app/constants.ts
new file mode 100644
index 00000000..aa2541a8
--- /dev/null
+++ b/commafeed-client/src/app/constants.ts
@@ -0,0 +1,15 @@
+import { DEFAULT_THEME } from "@mantine/core"
+
+export const Constants = {
+ categoryIds: {
+ all: "all",
+ },
+ layout: {
+ mobileBreakpoint: DEFAULT_THEME.breakpoints.md,
+ headerHeight: 60,
+ sidebarWidth: 350,
+ },
+ dom: {
+ mainScrollAreaId: "main-scroll-area-id",
+ },
+}
diff --git a/commafeed-client/src/app/slices/entries.test.ts b/commafeed-client/src/app/slices/entries.test.ts
new file mode 100644
index 00000000..da08d11a
--- /dev/null
+++ b/commafeed-client/src/app/slices/entries.test.ts
@@ -0,0 +1,146 @@
+/* eslint-disable import/first */
+import { beforeEach, describe, expect, it, vi } from "vitest"
+import { DeepMockProxy, mockDeep, mockReset } from "vitest-mock-extended"
+
+vi.doMock("app/client", () => ({ client: mockDeep() }))
+
+import { configureStore } from "@reduxjs/toolkit"
+import { client } from "app/client"
+import { reducers } from "app/store"
+import { Entries, Entry } from "app/types"
+import { AxiosResponse } from "axios"
+import { loadEntries, loadMoreEntries, markAllEntries, markEntry } from "./entries"
+
+describe("entries", () => {
+ const mockClient = client as DeepMockProxy
+
+ beforeEach(() => {
+ mockReset(mockClient)
+ })
+
+ it("loads entries", async () => {
+ mockClient.feed.getEntries.mockResolvedValue({
+ data: {
+ entries: [{ id: "3" } as Entry],
+ hasMore: false,
+ name: "my-feed",
+ errorCount: 3,
+ feedLink: "https://mysite.com/feed",
+ timestamp: 123,
+ ignoredReadStatus: false,
+ },
+ } as AxiosResponse)
+
+ const store = configureStore({ reducer: reducers })
+ const promise = store.dispatch(
+ loadEntries({
+ sourceType: "feed",
+ req: {
+ id: "feed-id",
+ },
+ })
+ )
+
+ expect(store.getState().entries.source.type).toBe("feed")
+ expect(store.getState().entries.source.id).toBe("feed-id")
+ expect(store.getState().entries.entries).toStrictEqual([])
+ expect(store.getState().entries.hasMore).toBe(true)
+ expect(store.getState().entries.sourceLabel).toBe("")
+ expect(store.getState().entries.sourceWebsiteUrl).toBe("")
+ expect(store.getState().entries.timestamp).toBeUndefined()
+
+ await promise
+ expect(store.getState().entries.source.type).toBe("feed")
+ expect(store.getState().entries.source.id).toBe("feed-id")
+ expect(store.getState().entries.entries).toStrictEqual([{ id: "3" }])
+ expect(store.getState().entries.hasMore).toBe(false)
+ expect(store.getState().entries.sourceLabel).toBe("my-feed")
+ expect(store.getState().entries.sourceWebsiteUrl).toBe("https://mysite.com/feed")
+ expect(store.getState().entries.timestamp).toBe(123)
+ })
+
+ it("loads more entries", async () => {
+ mockClient.category.getEntries.mockResolvedValue({
+ data: {
+ entries: [{ id: "4" } as Entry],
+ hasMore: false,
+ name: "my-feed",
+ errorCount: 3,
+ feedLink: "https://mysite.com/feed",
+ timestamp: 123,
+ ignoredReadStatus: false,
+ },
+ } as AxiosResponse)
+
+ const store = configureStore({
+ reducer: reducers,
+ preloadedState: {
+ entries: {
+ source: {
+ type: "category",
+ id: "category-id",
+ },
+ sourceLabel: "",
+ sourceWebsiteUrl: "",
+ entries: [{ id: "3" } as Entry],
+ hasMore: true,
+ },
+ },
+ })
+ const promise = store.dispatch(loadMoreEntries())
+
+ await promise
+ expect(store.getState().entries.entries).toStrictEqual([{ id: "3" }, { id: "4" }])
+ expect(store.getState().entries.hasMore).toBe(false)
+ })
+
+ it("marks an entry as read", async () => {
+ const store = configureStore({
+ reducer: reducers,
+ preloadedState: {
+ entries: {
+ source: {
+ type: "category",
+ id: "category-id",
+ },
+ sourceLabel: "",
+ sourceWebsiteUrl: "",
+ entries: [{ id: "3", read: false } as Entry, { id: "4", read: false } as Entry],
+ hasMore: true,
+ },
+ },
+ })
+
+ store.dispatch(markEntry({ entry: { id: "3" } as Entry, read: true }))
+ expect(store.getState().entries.entries).toStrictEqual([
+ { id: "3", read: true },
+ { id: "4", read: false },
+ ])
+ expect(mockClient.entry.mark).toHaveBeenCalledWith({ id: "3", read: true })
+ })
+
+ it("marks all entries as read", async () => {
+ const store = configureStore({
+ reducer: reducers,
+ preloadedState: {
+ entries: {
+ source: {
+ type: "category",
+ id: "category-id",
+ },
+ sourceLabel: "",
+ sourceWebsiteUrl: "",
+ entries: [{ id: "3", read: false } as Entry, { id: "4", read: false } as Entry],
+ hasMore: true,
+ },
+ },
+ })
+
+ store.dispatch(markAllEntries({ sourceType: "category", req: { id: "all", read: true } }))
+ expect(store.getState().entries.entries).toStrictEqual([
+ { id: "3", read: true },
+ { id: "4", read: true },
+ ])
+ expect(mockClient.category.markEntries).toHaveBeenCalledWith({ id: "all", read: true })
+ })
+})
diff --git a/commafeed-client/src/app/slices/entries.ts b/commafeed-client/src/app/slices/entries.ts
new file mode 100644
index 00000000..f2b46f46
--- /dev/null
+++ b/commafeed-client/src/app/slices/entries.ts
@@ -0,0 +1,205 @@
+import { createAsyncThunk, createSlice, PayloadAction } from "@reduxjs/toolkit"
+import { client } from "app/client"
+import { Constants } from "app/constants"
+import { RootState } from "app/store"
+import { Entries, Entry, GetEntriesRequest, MarkRequest } from "app/types"
+
+export type EntrySourceType = "category" | "feed"
+export type EntrySource = { type: EntrySourceType; id: string }
+export type ExpendableEntry = Entry & { expanded?: boolean }
+
+interface EntriesState {
+ /** selected source */
+ source: EntrySource
+ sourceLabel: string
+ sourceWebsiteUrl: string
+ entries: ExpendableEntry[]
+ /** stores when the first batch of entries were retrieved
+ *
+ * this is used when marking all entries of a feed/category to only mark entries up to that timestamp as newer entries were potentially never shown
+ */
+ timestamp?: number
+ selectedEntryId?: string
+ hasMore: boolean
+}
+
+const initialState: EntriesState = {
+ source: {
+ type: "category",
+ id: Constants.categoryIds.all,
+ },
+ sourceLabel: "",
+ sourceWebsiteUrl: "",
+ entries: [],
+ hasMore: true,
+}
+
+const getEndpoint = (sourceType: EntrySourceType) => (sourceType === "category" ? client.category.getEntries : client.feed.getEntries)
+export const loadEntries = createAsyncThunk(
+ "entries/load",
+ async arg => {
+ const endpoint = getEndpoint(arg.sourceType)
+ const result = await endpoint({
+ ...arg.req,
+ offset: 0,
+ limit: 50,
+ })
+ return result.data
+ }
+)
+export const loadMoreEntries = createAsyncThunk("entries/loadMore", async (_, thunkApi) => {
+ const state = thunkApi.getState()
+ const offset =
+ state.user.settings?.readingMode === "all" ? state.entries.entries.length : state.entries.entries.filter(e => !e.read).length
+ const endpoint = getEndpoint(state.entries.source.type)
+ const result = await endpoint({
+ id: state.entries.source.id,
+ readType: state.user.settings?.readingMode,
+ order: state.user.settings?.readingOrder,
+ offset,
+ limit: 50,
+ })
+ return result.data
+})
+export const reloadEntries = createAsyncThunk("entries/reload", async (_, thunkApi) => {
+ const state = thunkApi.getState()
+ const endpoint = getEndpoint(state.entries.source.type)
+ const result = await endpoint({
+ id: state.entries.source.id,
+ readType: state.user.settings?.readingMode,
+ order: state.user.settings?.readingOrder,
+ offset: 0,
+ limit: 50,
+ })
+ return result.data
+})
+export const markEntry = createAsyncThunk(
+ "entries/entry/mark",
+ (arg: { entry: Entry; read: boolean }) => {
+ client.entry.mark({
+ id: arg.entry.id,
+ read: arg.read,
+ })
+ },
+ {
+ condition: arg => arg.entry.read !== arg.read,
+ }
+)
+export const markAllEntries = createAsyncThunk("entries/entry/markAll", (arg: { sourceType: EntrySourceType; req: MarkRequest }) => {
+ const endpoint = arg.sourceType === "category" ? client.category.markEntries : client.feed.markEntries
+ endpoint(arg.req)
+})
+export const selectEntry = createAsyncThunk("entries/entry/select", (arg, thunkApi) => {
+ const state = thunkApi.getState()
+ const entry = state.entries.entries.find(e => e.id === arg.id)
+ if (!entry) return
+
+ // only mark entry as read if we're expanding
+ if (!entry.expanded) {
+ thunkApi.dispatch(markEntry({ entry, read: true }))
+ }
+
+ // set entry as selected
+ thunkApi.dispatch(entriesSlice.actions.setSelectedEntry(entry))
+
+ // collapse or expand entry if needed
+ const previouslySelectedEntry = state.entries.entries.find(e => e.id === state.entries.selectedEntryId)
+ if (entry === previouslySelectedEntry) {
+ // selecting an entry already selected toggles expanded status
+ thunkApi.dispatch(entriesSlice.actions.setEntryExpanded({ entry, expanded: !entry.expanded }))
+ } else {
+ if (previouslySelectedEntry) {
+ thunkApi.dispatch(entriesSlice.actions.setEntryExpanded({ entry: previouslySelectedEntry, expanded: false }))
+ }
+ thunkApi.dispatch(entriesSlice.actions.setEntryExpanded({ entry, expanded: true }))
+ }
+})
+export const selectPreviousEntry = createAsyncThunk("entries/entry/selectPrevious", (_, thunkApi) => {
+ const state = thunkApi.getState()
+ const { entries } = state.entries
+ const previousIndex = entries.findIndex(e => e.id === state.entries.selectedEntryId) - 1
+ if (previousIndex >= 0) {
+ thunkApi.dispatch(selectEntry(entries[previousIndex]))
+ }
+})
+export const selectNextEntry = createAsyncThunk("entries/entry/selectNext", (_, thunkApi) => {
+ const state = thunkApi.getState()
+ const { entries } = state.entries
+ const nextIndex = entries.findIndex(e => e.id === state.entries.selectedEntryId) + 1
+ if (nextIndex < entries.length) {
+ thunkApi.dispatch(selectEntry(entries[nextIndex]))
+ }
+})
+
+export const entriesSlice = createSlice({
+ name: "entries",
+ initialState,
+ reducers: {
+ setSelectedEntry: (state, action: PayloadAction) => {
+ state.selectedEntryId = action.payload.id
+ },
+ setEntryExpanded: (state, action: PayloadAction<{ entry: Entry; expanded: boolean }>) => {
+ state.entries
+ .filter(e => e.id === action.payload.entry.id)
+ .forEach(e => {
+ e.expanded = action.payload.expanded
+ })
+ },
+ },
+ extraReducers: builder => {
+ builder.addCase(markEntry.pending, (state, action) => {
+ state.entries
+ .filter(e => e.id === action.meta.arg.entry.id)
+ .forEach(e => {
+ e.read = action.meta.arg.read
+ })
+ })
+ builder.addCase(markAllEntries.pending, state => {
+ state.entries.forEach(e => {
+ e.read = true
+ })
+ })
+ builder.addCase(loadEntries.pending, (state, action) => {
+ state.source = {
+ type: action.meta.arg.sourceType,
+ id: action.meta.arg.req.id,
+ }
+ state.entries = []
+ state.timestamp = undefined
+ state.sourceLabel = ""
+ state.sourceWebsiteUrl = ""
+ state.hasMore = true
+ state.selectedEntryId = undefined
+ })
+ builder.addCase(loadEntries.fulfilled, (state, action) => {
+ state.entries = action.payload.entries
+ state.timestamp = action.payload.timestamp
+ state.sourceLabel = action.payload.name
+ state.sourceWebsiteUrl = action.payload.feedLink
+ state.hasMore = action.payload.hasMore
+ })
+ builder.addCase(loadMoreEntries.fulfilled, (state, action) => {
+ // remove already existing entries
+ const entriesToAdd = action.payload.entries.filter(e => !state.entries.some(e2 => e.id === e2.id))
+ state.entries = [...state.entries, ...entriesToAdd]
+ state.hasMore = action.payload.hasMore
+ })
+ builder.addCase(reloadEntries.pending, state => {
+ state.entries = []
+ state.timestamp = undefined
+ state.sourceLabel = ""
+ state.sourceWebsiteUrl = ""
+ state.hasMore = true
+ state.selectedEntryId = undefined
+ })
+ builder.addCase(reloadEntries.fulfilled, (state, action) => {
+ state.entries = action.payload.entries
+ state.timestamp = action.payload.timestamp
+ state.sourceLabel = action.payload.name
+ state.sourceWebsiteUrl = action.payload.feedLink
+ state.hasMore = action.payload.hasMore
+ })
+ },
+})
+
+export default entriesSlice.reducer
diff --git a/commafeed-client/src/app/slices/redirect.test.ts b/commafeed-client/src/app/slices/redirect.test.ts
new file mode 100644
index 00000000..0250de18
--- /dev/null
+++ b/commafeed-client/src/app/slices/redirect.test.ts
@@ -0,0 +1,10 @@
+import { store } from "app/store"
+import { describe, expect, it } from "vitest"
+import { redirectToCategory } from "./redirect"
+
+describe("redirects", () => {
+ it("redirects to category", async () => {
+ await store.dispatch(redirectToCategory("1"))
+ expect(store.getState().redirect.to).toBe("/app/category/1")
+ })
+})
diff --git a/commafeed-client/src/app/slices/redirect.ts b/commafeed-client/src/app/slices/redirect.ts
new file mode 100644
index 00000000..fc41da38
--- /dev/null
+++ b/commafeed-client/src/app/slices/redirect.ts
@@ -0,0 +1,52 @@
+import { createAsyncThunk, createSlice, PayloadAction } from "@reduxjs/toolkit"
+import { Constants } from "app/constants"
+import { RootState } from "app/store"
+
+interface RedirectState {
+ to?: string
+}
+
+const initialState: RedirectState = {}
+
+export const redirectToLogin = createAsyncThunk("redirect/login", (_, thunkApi) => thunkApi.dispatch(redirectTo("/login")))
+export const redirectToRegistration = createAsyncThunk("redirect/register", (_, thunkApi) => thunkApi.dispatch(redirectTo("/register")))
+export const redirectToPasswordRecovery = createAsyncThunk("redirect/passwordRecovery", (_, thunkApi) =>
+ thunkApi.dispatch(redirectTo("/passwordRecovery"))
+)
+export const redirectToSelectedSource = createAsyncThunk("redirect/selectedSource", (_, thunkApi) => {
+ const { source } = thunkApi.getState().entries
+ thunkApi.dispatch(redirectTo(`/app/${source.type}/${source.id}`))
+})
+export const redirectToCategory = createAsyncThunk("redirect/category", (id: string, thunkApi) =>
+ thunkApi.dispatch(redirectTo(`/app/category/${id}`))
+)
+export const redirectToRootCategory = createAsyncThunk("redirect/category/root", (_, thunkApi) =>
+ thunkApi.dispatch(redirectToCategory(Constants.categoryIds.all))
+)
+export const redirectToCategoryDetails = createAsyncThunk("redirect/category/details", (id: string, thunkApi) =>
+ thunkApi.dispatch(redirectTo(`/app/category/${id}/details`))
+)
+export const redirectToFeed = createAsyncThunk("redirect/feed", (id: string | number, thunkApi) =>
+ thunkApi.dispatch(redirectTo(`/app/feed/${id}`))
+)
+export const redirectToFeedDetails = createAsyncThunk("redirect/feed/details", (id: string, thunkApi) =>
+ thunkApi.dispatch(redirectTo(`/app/feed/${id}/details`))
+)
+export const redirectToAdd = createAsyncThunk("redirect/add", (_, thunkApi) => thunkApi.dispatch(redirectTo("/app/add")))
+export const redirectToSettings = createAsyncThunk("redirect/settings", (_, thunkApi) => thunkApi.dispatch(redirectTo("/app/settings")))
+export const redirectToAdminUsers = createAsyncThunk("redirect/admin/users", (_, thunkApi) =>
+ thunkApi.dispatch(redirectTo("/app/admin/users"))
+)
+
+export const redirectSlice = createSlice({
+ name: "redirect",
+ initialState,
+ reducers: {
+ redirectTo: (state, action: PayloadAction) => {
+ state.to = action.payload
+ },
+ },
+})
+
+export const { redirectTo } = redirectSlice.actions
+export default redirectSlice.reducer
diff --git a/commafeed-client/src/app/slices/server.ts b/commafeed-client/src/app/slices/server.ts
new file mode 100644
index 00000000..2ebcdd3c
--- /dev/null
+++ b/commafeed-client/src/app/slices/server.ts
@@ -0,0 +1,23 @@
+import { createAsyncThunk, createSlice } from "@reduxjs/toolkit"
+import { client } from "app/client"
+import { ServerInfo } from "app/types"
+
+interface ServerState {
+ serverInfos?: ServerInfo
+}
+
+const initialState: ServerState = {}
+
+export const reloadServerInfos = createAsyncThunk("server/infos", () => client.server.getServerInfos().then(r => r.data))
+export const serverSlice = createSlice({
+ name: "server",
+ initialState,
+ reducers: {},
+ extraReducers: builder => {
+ builder.addCase(reloadServerInfos.fulfilled, (state, action) => {
+ state.serverInfos = action.payload
+ })
+ },
+})
+
+export default serverSlice.reducer
diff --git a/commafeed-client/src/app/slices/tree.ts b/commafeed-client/src/app/slices/tree.ts
new file mode 100644
index 00000000..75a2b9f6
--- /dev/null
+++ b/commafeed-client/src/app/slices/tree.ts
@@ -0,0 +1,77 @@
+import { createAsyncThunk, createSlice, PayloadAction } from "@reduxjs/toolkit"
+import { client } from "app/client"
+import { Category, CollapseRequest } from "app/types"
+import { visitCategoryTree } from "app/utils"
+import { markAllEntries, markEntry } from "./entries"
+import { redirectTo } from "./redirect"
+
+interface TreeState {
+ rootCategory?: Category
+ mobileMenuOpen: boolean
+}
+
+const initialState: TreeState = {
+ mobileMenuOpen: false,
+}
+
+export const reloadTree = createAsyncThunk("tree/reload", () => client.category.getRoot().then(r => r.data))
+export const collapseTreeCategory = createAsyncThunk("tree/category/collapse", async (req: CollapseRequest) =>
+ client.category.collapse(req)
+)
+
+export const treeSlice = createSlice({
+ name: "tree",
+ initialState,
+ reducers: {
+ setMobileMenuOpen: (state, action: PayloadAction) => {
+ state.mobileMenuOpen = action.payload
+ },
+ },
+ extraReducers: builder => {
+ builder.addCase(reloadTree.fulfilled, (state, action) => {
+ state.rootCategory = action.payload
+ })
+ builder.addCase(collapseTreeCategory.pending, (state, action) => {
+ if (!state.rootCategory) return
+ visitCategoryTree(state.rootCategory, c => {
+ if (+c.id === action.meta.arg.id) c.expanded = !action.meta.arg.collapse
+ })
+ })
+ builder.addCase(markEntry.pending, (state, action) => {
+ if (!state.rootCategory) return
+ visitCategoryTree(state.rootCategory, c =>
+ c.feeds
+ .filter(f => f.id === +action.meta.arg.entry.feedId)
+ .forEach(f => {
+ f.unread = action.meta.arg.read ? f.unread - 1 : f.unread + 1
+ })
+ )
+ })
+ builder.addCase(markAllEntries.pending, (state, action) => {
+ if (!state.rootCategory) return
+ const { sourceType } = action.meta.arg
+ const sourceId = action.meta.arg.req.id
+ visitCategoryTree(state.rootCategory, c => {
+ if (sourceType === "category" && c.id === sourceId) {
+ visitCategoryTree(c, c2 =>
+ c2.feeds.forEach(f => {
+ f.unread = 0
+ })
+ )
+ } else if (sourceType === "feed") {
+ c.feeds
+ .filter(f => f.id === +sourceId)
+ .forEach(f => {
+ f.unread = 0
+ })
+ }
+ })
+ })
+ builder.addCase(redirectTo, state => {
+ state.mobileMenuOpen = false
+ })
+ },
+})
+
+export const { setMobileMenuOpen } = treeSlice.actions
+export default treeSlice.reducer
diff --git a/commafeed-client/src/app/slices/user.ts b/commafeed-client/src/app/slices/user.ts
new file mode 100644
index 00000000..26c5cc0d
--- /dev/null
+++ b/commafeed-client/src/app/slices/user.ts
@@ -0,0 +1,80 @@
+import { t } from "@lingui/macro"
+import { showNotification } from "@mantine/notifications"
+import { createAsyncThunk, createSlice, isAnyOf } from "@reduxjs/toolkit"
+import { client } from "app/client"
+import { RootState } from "app/store"
+import { ReadingMode, ReadingOrder, Settings, UserModel } from "app/types"
+
+interface UserState {
+ settings?: Settings
+ profile?: UserModel
+}
+
+const initialState: UserState = {}
+
+export const reloadSettings = createAsyncThunk("settings/reload", () => client.user.getSettings().then(r => r.data))
+export const reloadProfile = createAsyncThunk("profile/reload", () => client.user.getProfile().then(r => r.data))
+export const changeReadingMode = createAsyncThunk(
+ "settings/readingMode",
+ (readingMode, thunkApi) => {
+ const { settings } = thunkApi.getState().user
+ if (!settings) return
+ client.user.saveSettings({ ...settings, readingMode })
+ }
+)
+export const changeReadingOrder = createAsyncThunk(
+ "settings/readingOrder",
+ (readingOrder, thunkApi) => {
+ const { settings } = thunkApi.getState().user
+ if (!settings) return
+ client.user.saveSettings({ ...settings, readingOrder })
+ }
+)
+export const changeLanguage = createAsyncThunk("settings/language", (language, thunkApi) => {
+ const { settings } = thunkApi.getState().user
+ if (!settings) return
+ client.user.saveSettings({ ...settings, language })
+})
+export const changeScrollSpeed = createAsyncThunk("settings/scrollSpeed", (speed, thunkApi) => {
+ const { settings } = thunkApi.getState().user
+ if (!settings) return
+ client.user.saveSettings({ ...settings, scrollSpeed: speed ? 400 : 0 })
+})
+
+export const userSlice = createSlice({
+ name: "user",
+ initialState,
+ reducers: {},
+ extraReducers: builder => {
+ builder.addCase(reloadSettings.fulfilled, (state, action) => {
+ state.settings = action.payload
+ })
+ builder.addCase(reloadProfile.fulfilled, (state, action) => {
+ state.profile = action.payload
+ })
+ builder.addCase(changeReadingMode.pending, (state, action) => {
+ if (!state.settings) return
+ state.settings.readingMode = action.meta.arg
+ })
+ builder.addCase(changeReadingOrder.pending, (state, action) => {
+ if (!state.settings) return
+ state.settings.readingOrder = action.meta.arg
+ })
+ builder.addCase(changeLanguage.pending, (state, action) => {
+ if (!state.settings) return
+ state.settings.language = action.meta.arg
+ })
+ builder.addCase(changeScrollSpeed.pending, (state, action) => {
+ if (!state.settings) return
+ state.settings.scrollSpeed = action.meta.arg ? 400 : 0
+ })
+ builder.addMatcher(isAnyOf(changeLanguage.fulfilled, changeScrollSpeed.fulfilled), () => {
+ showNotification({
+ message: t`Settings saved.`,
+ color: "green",
+ })
+ })
+ },
+})
+
+export default userSlice.reducer
diff --git a/commafeed-client/src/app/store.ts b/commafeed-client/src/app/store.ts
new file mode 100644
index 00000000..b05becce
--- /dev/null
+++ b/commafeed-client/src/app/store.ts
@@ -0,0 +1,26 @@
+import { configureStore } from "@reduxjs/toolkit"
+import { setupListeners } from "@reduxjs/toolkit/query"
+import { TypedUseSelectorHook, useDispatch, useSelector } from "react-redux"
+import entriesReducer from "./slices/entries"
+import redirectReducer from "./slices/redirect"
+import serverReducer from "./slices/server"
+import treeReducer from "./slices/tree"
+import userReducer from "./slices/user"
+
+export const reducers = {
+ entries: entriesReducer,
+ redirect: redirectReducer,
+ tree: treeReducer,
+ server: serverReducer,
+ user: userReducer,
+}
+
+export const store = configureStore({ reducer: reducers })
+
+setupListeners(store.dispatch)
+
+export type RootState = ReturnType
+export type AppDispatch = typeof store.dispatch
+
+export const useAppDispatch: () => AppDispatch = useDispatch
+export const useAppSelector: TypedUseSelectorHook = useSelector
diff --git a/commafeed-client/src/app/types.ts b/commafeed-client/src/app/types.ts
new file mode 100644
index 00000000..ae2cbecd
--- /dev/null
+++ b/commafeed-client/src/app/types.ts
@@ -0,0 +1,261 @@
+export interface AddCategoryRequest {
+ name: string
+ parentId?: string
+}
+
+export interface ApplicationSettings {
+ publicUrl: string
+ allowRegistrations: boolean
+ createDemoAccount: boolean
+ googleAnalyticsTrackingCode?: string
+ googleAuthKey?: string
+ backgroundThreads: number
+ databaseUpdateThreads: number
+ smtpHost?: string
+ smtpPort?: number
+ smtpTls?: boolean
+ smtpUserName?: string
+ smtpPassword?: string
+ smtpFromAddress?: string
+ graphiteEnabled?: boolean
+ graphitePrefix?: string
+ graphiteHost?: string
+ graphitePort?: number
+ graphiteInterval?: number
+ heavyLoad: boolean
+ pubsubhubbub: boolean
+ imageProxyEnabled: boolean
+ queryTimeout: number
+ keepStatusDays: number
+ maxFeedCapacity: number
+ refreshIntervalMinutes: number
+ cache: ApplicationSettingsCache
+ announcement?: string
+ userAgent?: string
+ unreadThreshold?: Date
+}
+
+export interface Category {
+ id: string
+ parentId?: string
+ name: string
+ children: Category[]
+ feeds: Subscription[]
+ expanded: boolean
+ position: number
+}
+
+export interface CategoryModificationRequest {
+ id: number
+ name?: string
+ parentId?: string
+ position?: number
+}
+
+export interface CollapseRequest {
+ id: number
+ collapse: boolean
+}
+
+export interface Entries {
+ name: string
+ message?: string
+ errorCount: number
+ feedLink: string
+ timestamp: number
+ hasMore: boolean
+ offset?: number
+ limit?: number
+ entries: Entry[]
+ ignoredReadStatus: boolean
+}
+
+export interface Entry {
+ id: string
+ guid: string
+ title: string
+ content: string
+ categories?: string
+ rtl: boolean
+ author?: string
+ enclosureUrl?: string
+ enclosureType?: string
+ mediaDescription?: string
+ mediaThumbnailUrl?: string
+ mediaThumbnailWidth?: number
+ mediaThumbnailHeight?: number
+ date: number
+ insertedDate: number
+ feedId: string
+ feedName: string
+ feedUrl: string
+ feedLink: string
+ iconUrl: string
+ url: string
+ read: boolean
+ starred: boolean
+ markable: boolean
+ tags: string[]
+}
+
+export interface FeedInfo {
+ url: string
+ title: string
+}
+
+export interface FeedInfoRequest {
+ url: string
+}
+
+export interface FeedModificationRequest {
+ id: number
+ name?: string
+ categoryId?: string
+ position?: number
+ filter?: string
+}
+
+export interface IDRequest {
+ id: number
+}
+
+export interface LoginRequest {
+ name: string
+ password: string
+}
+
+export interface MarkRequest {
+ id: string
+ read: boolean
+ olderThan?: number
+ keywords?: string
+ excludedSubscriptions?: number[]
+}
+
+export interface MultipleMarkRequest {
+ requests: MarkRequest[]
+}
+
+export interface PasswordResetRequest {
+ email: string
+}
+
+export interface ProfileModificationRequest {
+ currentPassword: string
+ email: string
+ newPassword?: string
+ newApiKey?: boolean
+}
+
+export interface RegistrationRequest {
+ name: string
+ password: string
+ email: string
+}
+
+export interface ServerInfo {
+ announcement?: string
+ version: string
+ gitCommit: string
+ allowRegistrations: boolean
+ googleAnalyticsCode?: string
+ smtpEnabled: boolean
+}
+
+export interface Settings {
+ language: string
+ readingMode: ReadingMode
+ readingOrder: ReadingOrder
+ viewMode: ViewMode
+ showRead: boolean
+ scrollMarks: boolean
+ theme?: string
+ customCss?: string
+ scrollSpeed: number
+ email: boolean
+ gmail: boolean
+ facebook: boolean
+ twitter: boolean
+ googleplus: boolean
+ tumblr: boolean
+ pocket: boolean
+ instapaper: boolean
+ buffer: boolean
+ readability: boolean
+}
+
+export interface StarRequest {
+ id: string
+ feedId: number
+ starred: boolean
+}
+
+export interface SubscribeRequest {
+ url: string
+ title: string
+ categoryId?: string
+}
+
+export interface Subscription {
+ id: number
+ name: string
+ message?: string
+ errorCount: number
+ lastRefresh?: number
+ nextRefresh?: number
+ feedUrl: string
+ feedLink: string
+ iconUrl: string
+ unread: number
+ categoryId?: string
+ position?: number
+ newestItemTime?: number
+ filter?: string
+}
+
+export interface TagRequest {
+ entryId: number
+ tags: string[]
+}
+
+export interface GetEntriesRequest {
+ id: string
+ readType?: ReadingMode
+ newerThan?: number
+ order?: ReadingOrder
+ keywords?: string
+ onlyIds?: boolean
+ excludedSubscriptionIds?: string
+ tag?: string
+}
+
+export interface GetEntriesPaginatedRequest extends GetEntriesRequest {
+ offset: number
+ limit: number
+}
+
+export interface UnreadCount {
+ feedId?: number
+ unreadCount?: number
+ newestItemTime?: number
+}
+
+export interface UserModel {
+ id: number
+ name: string
+ email?: string
+ apiKey?: string
+ password?: string
+ enabled: boolean
+ created: number
+ lastLogin?: number
+ admin: boolean
+}
+
+export type ApplicationSettingsCache = "NOOP" | "REDIS"
+
+export type ReadingMode = "all" | "unread"
+
+export type ReadingOrder = "asc" | "desc"
+
+export type ViewMode = "title" | "expanded"
diff --git a/commafeed-client/src/app/utils.ts b/commafeed-client/src/app/utils.ts
new file mode 100644
index 00000000..7d9cf323
--- /dev/null
+++ b/commafeed-client/src/app/utils.ts
@@ -0,0 +1,21 @@
+import { Category } from "./types"
+
+export function visitCategoryTree(category: Category, visitor: (category: Category) => void): void {
+ visitor(category)
+ category.children.forEach(child => visitCategoryTree(child, visitor))
+}
+
+export function flattenCategoryTree(category: Category): Category[] {
+ const categories: Category[] = []
+ visitCategoryTree(category, c => categories.push(c))
+ return categories
+}
+
+export function categoryUnreadCount(category?: Category): number {
+ if (!category) return 0
+
+ return flattenCategoryTree(category)
+ .flatMap(c => c.feeds)
+ .map(f => f.unread)
+ .reduce((total, current) => total + current, 0)
+}
diff --git a/commafeed-client/src/main/app/app-icon.svg b/commafeed-client/src/assets/logo.svg
similarity index 100%
rename from commafeed-client/src/main/app/app-icon.svg
rename to commafeed-client/src/assets/logo.svg
diff --git a/commafeed-client/src/components/ActionButtton.tsx b/commafeed-client/src/components/ActionButtton.tsx
new file mode 100644
index 00000000..66fe33df
--- /dev/null
+++ b/commafeed-client/src/components/ActionButtton.tsx
@@ -0,0 +1,28 @@
+import { ActionIcon, Button, useMantineTheme } from "@mantine/core"
+import { useMediaQuery } from "@mantine/hooks"
+import { forwardRef } from "react"
+
+interface ActionButtonProps {
+ className?: string
+ icon?: React.ReactNode
+ label?: string
+ onClick?: React.MouseEventHandler
+}
+
+/**
+ * Switches between Button with label (desktop) and ActionIcon (mobile)
+ */
+export const ActionButton = forwardRef((props: ActionButtonProps, ref) => {
+ const theme = useMantineTheme()
+ const mobile = !useMediaQuery(`(min-width: ${theme.breakpoints.lg}px)`)
+ return mobile ? (
+
+ {props.icon}
+
+ ) : (
+
+ )
+})
+ActionButton.displayName = "HeaderButton"
diff --git a/commafeed-client/src/components/Alert.tsx b/commafeed-client/src/components/Alert.tsx
new file mode 100644
index 00000000..366ce7c1
--- /dev/null
+++ b/commafeed-client/src/components/Alert.tsx
@@ -0,0 +1,48 @@
+import { t } from "@lingui/macro"
+import { Alert as MantineAlert, Box } from "@mantine/core"
+import { Fragment } from "react"
+import { TbAlertCircle, TbAlertTriangle, TbCircleCheck } from "react-icons/tb"
+
+type Level = "error" | "warning" | "success"
+export interface ErrorsAlertProps {
+ level?: Level
+ messages: string[]
+}
+
+export function Alert(props: ErrorsAlertProps) {
+ let title: string
+ let color: string
+ let icon: React.ReactNode
+
+ const level = props.level ?? "error"
+ switch (level) {
+ case "error":
+ title = t`Error`
+ color = "red"
+ icon =
+ break
+ case "warning":
+ title = t`Warning`
+ color = "orange"
+ icon =
+ break
+ case "success":
+ title = t`Success`
+ color = "green"
+ icon =
+ break
+ default:
+ throw Error(`unsupported level: ${level}`)
+ }
+
+ return (
+
+ {props.messages.map((m, i) => (
+
+ {m}
+ {i !== props.messages.length - 1 &&
}
+
+ ))}
+
+ )
+}
diff --git a/commafeed-client/src/components/Loader.tsx b/commafeed-client/src/components/Loader.tsx
new file mode 100644
index 00000000..b19df5ac
--- /dev/null
+++ b/commafeed-client/src/components/Loader.tsx
@@ -0,0 +1,9 @@
+import { Center, Loader as MantineLoader } from "@mantine/core"
+
+export function Loader() {
+ return (
+
+
+
+ )
+}
diff --git a/commafeed-client/src/components/Logo.tsx b/commafeed-client/src/components/Logo.tsx
new file mode 100644
index 00000000..ffd015cf
--- /dev/null
+++ b/commafeed-client/src/components/Logo.tsx
@@ -0,0 +1,10 @@
+import { Image } from "@mantine/core"
+import logo from "assets/logo.svg"
+
+export interface LogoProps {
+ size: number
+}
+
+export function Logo(props: LogoProps) {
+ return
+}
diff --git a/commafeed-client/src/components/RelativeDate.tsx b/commafeed-client/src/components/RelativeDate.tsx
new file mode 100644
index 00000000..67129755
--- /dev/null
+++ b/commafeed-client/src/components/RelativeDate.tsx
@@ -0,0 +1,14 @@
+import { Trans } from "@lingui/macro"
+import dayjs from "dayjs"
+import { useEffect, useState } from "react"
+
+export function RelativeDate(props: { date: Date | number | undefined }) {
+ const [now, setNow] = useState(new Date())
+ useEffect(() => {
+ const interval = setInterval(() => setNow(new Date()), 60 * 1000)
+ return () => clearInterval(interval)
+ }, [])
+
+ if (!props.date) return N/A
+ return <>{dayjs(props.date).from(dayjs(now))}>
+}
diff --git a/commafeed-client/src/components/admin/UserEdit.tsx b/commafeed-client/src/components/admin/UserEdit.tsx
new file mode 100644
index 00000000..178bf072
--- /dev/null
+++ b/commafeed-client/src/components/admin/UserEdit.tsx
@@ -0,0 +1,51 @@
+import { t, Trans } from "@lingui/macro"
+import { Box, Button, Checkbox, Group, PasswordInput, Stack, TextInput } from "@mantine/core"
+import { useForm } from "@mantine/form"
+import { client, errorToStrings } from "app/client"
+import { UserModel } from "app/types"
+import { Alert } from "components/Alert"
+import { TbDeviceFloppy } from "react-icons/tb"
+import useMutation from "use-mutation"
+
+interface UserEditProps {
+ user?: UserModel
+ onCancel: () => void
+ onSave: () => void
+}
+
+export function UserEdit(props: UserEditProps) {
+ const form = useForm({
+ initialValues: props.user ?? ({ enabled: true } as UserModel),
+ })
+ const [saveUser, saveUserResult] = useMutation(client.admin.saveUser, { onSuccess: props.onSave })
+ const errors = errorToStrings(saveUserResult.error)
+
+ return (
+ <>
+ {errors.length > 0 && (
+
+
+
+ )}
+
+
+ >
+ )
+}
diff --git a/commafeed-client/src/components/content/Content.tsx b/commafeed-client/src/components/content/Content.tsx
new file mode 100644
index 00000000..80080cb9
--- /dev/null
+++ b/commafeed-client/src/components/content/Content.tsx
@@ -0,0 +1,30 @@
+import { createStyles, Text } from "@mantine/core"
+
+export interface ContentProps {
+ content: string
+}
+
+const useStyles = createStyles(theme => ({
+ content: {
+ // break long links or long words
+ overflowWrap: "anywhere",
+ "& a": {
+ color: theme.fn.variant({ color: theme.primaryColor, variant: "subtle" }).color,
+ },
+ "& img": {
+ maxWidth: "100%",
+ height: "auto",
+ },
+ "& iframe": {
+ maxWidth: "100%",
+ },
+ "& pre, & code": {
+ whiteSpace: "pre-wrap",
+ },
+ },
+}))
+
+export function Content(props: ContentProps) {
+ const { classes } = useStyles()
+ return
+}
diff --git a/commafeed-client/src/components/content/Enclosure.tsx b/commafeed-client/src/components/content/Enclosure.tsx
new file mode 100644
index 00000000..5b6641b2
--- /dev/null
+++ b/commafeed-client/src/components/content/Enclosure.tsx
@@ -0,0 +1,32 @@
+import { createStyles } from "@mantine/core"
+
+const useStyles = createStyles(() => ({
+ enclosureImage: {
+ maxWidth: "100%",
+ height: "auto",
+ },
+}))
+
+export function Enclosure(props: { enclosureType?: string; enclosureUrl?: string }) {
+ const { classes } = useStyles()
+ const hasVideo = props.enclosureType && props.enclosureType.indexOf("video") === 0
+ const hasAudio = props.enclosureType && props.enclosureType.indexOf("audio") === 0
+ const hasImage = props.enclosureType && props.enclosureType.indexOf("image") === 0
+ return (
+ <>
+ {hasVideo && (
+ // eslint-disable-next-line jsx-a11y/media-has-caption
+
+ )}
+ {hasAudio && (
+ // eslint-disable-next-line jsx-a11y/media-has-caption
+
+ )}
+ {hasImage &&
}
+ >
+ )
+}
diff --git a/commafeed-client/src/components/content/FeedEntries.tsx b/commafeed-client/src/components/content/FeedEntries.tsx
new file mode 100644
index 00000000..6ef879ea
--- /dev/null
+++ b/commafeed-client/src/components/content/FeedEntries.tsx
@@ -0,0 +1,155 @@
+import { Constants } from "app/constants"
+import {
+ loadMoreEntries,
+ markAllEntries,
+ markEntry,
+ reloadEntries,
+ selectEntry,
+ selectNextEntry,
+ selectPreviousEntry,
+} from "app/slices/entries"
+import { redirectToRootCategory } from "app/slices/redirect"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { Loader } from "components/Loader"
+import { useMousetrap } from "hooks/useMousetrap"
+import { useEffect, useRef } from "react"
+import InfiniteScroll from "react-infinite-scroller"
+import { FeedEntry } from "./FeedEntry"
+
+export function FeedEntries() {
+ const source = useAppSelector(state => state.entries.source)
+ const entries = useAppSelector(state => state.entries.entries)
+ const entriesTimestamp = useAppSelector(state => state.entries.timestamp)
+ const selectedEntryId = useAppSelector(state => state.entries.selectedEntryId)
+ const hasMore = useAppSelector(state => state.entries.hasMore)
+ const dispatch = useAppDispatch()
+
+ const selectedEntry = entries.find(e => e.id === selectedEntryId)
+
+ // references to entries html elements
+ const refs = useRef<{ [id: string]: HTMLDivElement }>({})
+ useEffect(() => {
+ // remove refs that are not in entries anymore
+ Object.keys(refs.current).forEach(k => {
+ const found = entries.some(e => e.id === k)
+ if (!found) delete refs.current[k]
+ })
+ }, [entries])
+
+ useMousetrap("r", () => {
+ dispatch(reloadEntries())
+ })
+ useMousetrap("j", () => {
+ dispatch(selectNextEntry())
+ })
+ useMousetrap("k", () => {
+ dispatch(selectPreviousEntry())
+ })
+ useMousetrap("space", () => {
+ if (selectedEntry) {
+ if (selectedEntry.expanded) {
+ const ref = refs.current[selectedEntry.id]
+ const bottomVisible = ref.getBoundingClientRect().bottom <= window.innerHeight
+ if (bottomVisible) {
+ dispatch(selectNextEntry())
+ } else {
+ const scrollArea = document.getElementById(Constants.dom.mainScrollAreaId)
+ scrollArea?.scrollTo({
+ top: scrollArea.scrollTop + scrollArea.clientHeight * 0.8,
+ behavior: "smooth",
+ })
+ }
+ } else {
+ dispatch(selectEntry(selectedEntry))
+ }
+ } else {
+ dispatch(selectNextEntry())
+ }
+ })
+ useMousetrap("shift+space", () => {
+ if (selectedEntry) {
+ if (selectedEntry.expanded) {
+ const ref = refs.current[selectedEntry.id]
+ const topVisible = ref.getBoundingClientRect().top >= Constants.layout.headerHeight
+ if (topVisible) {
+ dispatch(selectPreviousEntry())
+ } else {
+ const scrollArea = document.getElementById(Constants.dom.mainScrollAreaId)
+ scrollArea?.scrollTo({
+ top: scrollArea.scrollTop - scrollArea.clientHeight * 0.8,
+ behavior: "smooth",
+ })
+ }
+ } else {
+ dispatch(selectPreviousEntry())
+ }
+ }
+ })
+ useMousetrap(["o", "enter"], () => {
+ // toggle expanded status
+ if (!selectedEntry) return
+ dispatch(selectEntry(selectedEntry))
+ })
+ useMousetrap("v", () => {
+ // open tab in foreground
+ if (!selectedEntry) return
+ window.open(selectedEntry.url, "_blank", "noreferrer")
+ })
+ useMousetrap("b", () => {
+ // simulate ctrl+click to open tab in background
+ if (!selectedEntry) return
+ const a = document.createElement("a")
+ a.href = selectedEntry.url
+ a.rel = "noreferrer"
+ a.dispatchEvent(
+ new MouseEvent("click", {
+ ctrlKey: true,
+ metaKey: true,
+ })
+ )
+ })
+ useMousetrap("m", () => {
+ // toggle read status
+ if (!selectedEntry) return
+ dispatch(markEntry({ entry: selectedEntry, read: !selectedEntry.read }))
+ })
+ useMousetrap("shift+a", () => {
+ // mark all entries as read
+ dispatch(
+ markAllEntries({
+ sourceType: source.type,
+ req: {
+ id: source.id,
+ read: true,
+ olderThan: entriesTimestamp,
+ },
+ })
+ )
+ })
+ useMousetrap("g a", () => {
+ dispatch(redirectToRootCategory())
+ })
+
+ if (!entries) return
+ return (
+ dispatch(loadMoreEntries())}
+ hasMore={hasMore}
+ loader={}
+ useWindow={false}
+ getScrollParent={() => document.getElementById(Constants.dom.mainScrollAreaId)}
+ >
+ {entries.map(e => (
+ {
+ refs.current[e.id] = el!
+ }}
+ >
+
+
+ ))}
+
+ )
+}
diff --git a/commafeed-client/src/components/content/FeedEntry.tsx b/commafeed-client/src/components/content/FeedEntry.tsx
new file mode 100644
index 00000000..72d0ae08
--- /dev/null
+++ b/commafeed-client/src/components/content/FeedEntry.tsx
@@ -0,0 +1,97 @@
+import { Anchor, Box, createStyles, Divider, Paper } from "@mantine/core"
+import { Constants } from "app/constants"
+import { markEntry, selectEntry } from "app/slices/entries"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { Entry } from "app/types"
+import React, { useEffect, useRef } from "react"
+import { FeedEntryBody } from "./FeedEntryBody"
+import { FeedEntryFooter } from "./FeedEntryFooter"
+import { FeedEntryHeader } from "./FeedEntryHeader"
+
+interface FeedEntryProps {
+ entry: Entry
+ expanded: boolean
+}
+
+const useStyles = createStyles((theme, props: FeedEntryProps) => {
+ let backgroundColor
+ if (theme.colorScheme === "dark") backgroundColor = props.entry.read ? "inherit" : theme.colors.dark[5]
+ else backgroundColor = props.entry.read && !props.expanded ? theme.colors.gray[0] : "inherit"
+
+ return {
+ paper: {
+ backgroundColor,
+ marginTop: theme.spacing.xs,
+ marginBottom: theme.spacing.xs,
+ [theme.fn.smallerThan(Constants.layout.mobileBreakpoint)]: {
+ marginTop: "6px",
+ marginBottom: "6px",
+ },
+ },
+ body: {
+ maxWidth: "650px",
+ },
+ }
+})
+
+export function FeedEntry(props: FeedEntryProps) {
+ const { classes } = useStyles(props)
+ const scrollSpeed = useAppSelector(state => state.user.settings?.scrollSpeed)
+ const dispatch = useAppDispatch()
+
+ const headerClicked = (e: React.MouseEvent) => {
+ if (e.button === 1 || e.ctrlKey || e.metaKey) {
+ // middle click
+ dispatch(markEntry({ entry: props.entry, read: true }))
+ } else if (e.button === 0) {
+ // main click
+ // don't trigger the link
+ e.preventDefault()
+
+ dispatch(selectEntry(props.entry))
+ }
+ }
+
+ // scroll to entry when expanded
+ const ref = useRef(null)
+ useEffect(() => {
+ setTimeout(() => {
+ if (!ref.current) return
+ if (!props.expanded) return
+
+ document.getElementById(Constants.dom.mainScrollAreaId)?.scrollTo({
+ // having a small gap between the top of the content and the top of the page is sexier
+ top: ref.current.offsetTop - 3,
+ behavior: scrollSpeed && scrollSpeed > 0 ? "smooth" : "auto",
+ })
+ })
+ }, [props.expanded, scrollSpeed])
+
+ return (
+
+
+
+
+
+
+
+ {props.expanded && (
+
+
+
+
+
+
+
+ )}
+
+
+ )
+}
diff --git a/commafeed-client/src/components/content/FeedEntryBody.tsx b/commafeed-client/src/components/content/FeedEntryBody.tsx
new file mode 100644
index 00000000..b1b53433
--- /dev/null
+++ b/commafeed-client/src/components/content/FeedEntryBody.tsx
@@ -0,0 +1,35 @@
+import { Box } from "@mantine/core"
+import { Entry } from "app/types"
+import { Content } from "./Content"
+import { Enclosure } from "./Enclosure"
+import { Media } from "./Media"
+
+export interface FeedEntryBodyProps {
+ entry: Entry
+}
+
+export function FeedEntryBody(props: FeedEntryBodyProps) {
+ return (
+
+
+
+
+ {props.entry.enclosureUrl && (
+
+
+
+ )}
+ {/* show media only if we don't have content to avoid duplicate content */}
+ {!props.entry.content && props.entry.mediaThumbnailUrl && (
+
+
+
+ )}
+
+ )
+}
diff --git a/commafeed-client/src/components/content/FeedEntryFooter.tsx b/commafeed-client/src/components/content/FeedEntryFooter.tsx
new file mode 100644
index 00000000..79ba3a26
--- /dev/null
+++ b/commafeed-client/src/components/content/FeedEntryFooter.tsx
@@ -0,0 +1,35 @@
+import { t } from "@lingui/macro"
+import { Checkbox, Group } from "@mantine/core"
+import { markEntry } from "app/slices/entries"
+import { useAppDispatch } from "app/store"
+import { Entry } from "app/types"
+import { ActionButton } from "components/ActionButtton"
+import { TbExternalLink } from "react-icons/tb"
+
+interface FeedEntryFooterProps {
+ entry: Entry
+}
+
+export function FeedEntryFooter(props: FeedEntryFooterProps) {
+ const dispatch = useAppDispatch()
+ const readStatusCheckboxClicked = () => dispatch(markEntry({ entry: props.entry, read: !props.entry.read }))
+
+ return (
+
+ {props.entry.markable && (
+
+ )}
+
+ } label={t`Open link`} />
+
+
+ )
+}
diff --git a/commafeed-client/src/components/content/FeedEntryHeader.tsx b/commafeed-client/src/components/content/FeedEntryHeader.tsx
new file mode 100644
index 00000000..22e4b51f
--- /dev/null
+++ b/commafeed-client/src/components/content/FeedEntryHeader.tsx
@@ -0,0 +1,56 @@
+import { Box, createStyles, Image, Text } from "@mantine/core"
+import { Entry } from "app/types"
+import { RelativeDate } from "components/RelativeDate"
+
+export interface FeedEntryHeaderProps {
+ entry: Entry
+ expanded: boolean
+}
+
+const useStyles = createStyles((theme, props: FeedEntryHeaderProps) => ({
+ headerText: {
+ fontWeight: theme.colorScheme === "light" && !props.entry.read ? "bold" : "inherit",
+ whiteSpace: props.expanded ? "inherit" : "nowrap",
+ overflow: "hidden",
+ textOverflow: "ellipsis",
+ },
+ headerSubtext: {
+ display: "flex",
+ alignItems: "center",
+ fontSize: "90%",
+ whiteSpace: props.expanded ? "inherit" : "nowrap",
+ overflow: "hidden",
+ textOverflow: "ellipsis",
+ },
+}))
+export function FeedEntryHeader(props: FeedEntryHeaderProps) {
+ const { classes } = useStyles(props)
+ return (
+
+ {props.entry.title}
+
+
+
+
+
+ {props.entry.feedName}
+
+
+
+ ·
+
+
+
+
+ {props.expanded && (
+
+
+ {props.entry.author && by {props.entry.author}}
+ {props.entry.author && props.entry.categories && · }
+ {props.entry.categories && {props.entry.categories}}
+
+
+ )}
+
+ )
+}
diff --git a/commafeed-client/src/components/content/Media.tsx b/commafeed-client/src/components/content/Media.tsx
new file mode 100644
index 00000000..010ab622
--- /dev/null
+++ b/commafeed-client/src/components/content/Media.tsx
@@ -0,0 +1,36 @@
+import { Box, createStyles } from "@mantine/core"
+import { Content } from "./Content"
+
+export interface MediaProps {
+ thumbnailUrl: string
+ thumbnailWidth?: number
+ thumbnailHeight?: number
+ description?: string
+}
+
+const useStyles = createStyles(() => ({
+ image: {
+ maxWidth: "100%",
+ height: "auto",
+ },
+}))
+
+export function Media(props: MediaProps) {
+ const { classes } = useStyles()
+ return (
+ <>
+
+ {props.description && (
+
+
+
+ )}
+ >
+ )
+}
diff --git a/commafeed-client/src/components/content/add/AddCategory.tsx b/commafeed-client/src/components/content/add/AddCategory.tsx
new file mode 100644
index 00000000..58527d40
--- /dev/null
+++ b/commafeed-client/src/components/content/add/AddCategory.tsx
@@ -0,0 +1,51 @@
+import { t, Trans } from "@lingui/macro"
+import { Box, Button, Group, Stack, TextInput } from "@mantine/core"
+import { useForm } from "@mantine/form"
+import { client, errorToStrings } from "app/client"
+import { redirectToSelectedSource } from "app/slices/redirect"
+import { reloadTree } from "app/slices/tree"
+import { useAppDispatch } from "app/store"
+import { AddCategoryRequest } from "app/types"
+import { Alert } from "components/Alert"
+import { TbFolderPlus } from "react-icons/tb"
+import useMutation from "use-mutation"
+import { CategorySelect } from "./CategorySelect"
+
+export function AddCategory() {
+ const dispatch = useAppDispatch()
+
+ const form = useForm()
+
+ const [addCategory, addCategoryResult] = useMutation(client.category.add, {
+ onSuccess: () => {
+ dispatch(reloadTree())
+ dispatch(redirectToSelectedSource())
+ },
+ })
+ const errors = errorToStrings(addCategoryResult.error)
+
+ return (
+ <>
+ {errors.length > 0 && (
+
+
+
+ )}
+
+
+ >
+ )
+}
diff --git a/commafeed-client/src/components/content/add/CategorySelect.tsx b/commafeed-client/src/components/content/add/CategorySelect.tsx
new file mode 100644
index 00000000..3a53972b
--- /dev/null
+++ b/commafeed-client/src/components/content/add/CategorySelect.tsx
@@ -0,0 +1,18 @@
+import { Select, SelectItem, SelectProps } from "@mantine/core"
+import { Constants } from "app/constants"
+import { useAppSelector } from "app/store"
+import { flattenCategoryTree } from "app/utils"
+
+export function CategorySelect(props: Partial) {
+ const rootCategory = useAppSelector(state => state.tree.rootCategory)
+ const categories = rootCategory && flattenCategoryTree(rootCategory)
+ const selectData: SelectItem[] | undefined = categories
+ ?.filter(c => c.id !== Constants.categoryIds.all)
+ .sort((c1, c2) => c1.name.localeCompare(c2.name))
+ .map(c => ({
+ label: c.name,
+ value: c.id,
+ }))
+
+ return
+}
diff --git a/commafeed-client/src/components/content/add/ImportOpml.tsx b/commafeed-client/src/components/content/add/ImportOpml.tsx
new file mode 100644
index 00000000..122dfa22
--- /dev/null
+++ b/commafeed-client/src/components/content/add/ImportOpml.tsx
@@ -0,0 +1,59 @@
+import { t, Trans } from "@lingui/macro"
+import { Box, Button, FileInput, Group, Stack } from "@mantine/core"
+import { useForm } from "@mantine/form"
+import { client, errorToStrings } from "app/client"
+import { redirectToSelectedSource } from "app/slices/redirect"
+import { reloadTree } from "app/slices/tree"
+import { useAppDispatch } from "app/store"
+import { Alert } from "components/Alert"
+import { TbFileImport } from "react-icons/tb"
+import useMutation from "use-mutation"
+
+export function ImportOpml() {
+ const dispatch = useAppDispatch()
+
+ const form = useForm<{ file: File }>({
+ validate: {
+ file: v => (v ? null : t`file is required`),
+ },
+ })
+
+ const [importOpml, importOpmlResult] = useMutation(client.feed.importOpml, {
+ onSuccess: () => {
+ dispatch(reloadTree())
+ dispatch(redirectToSelectedSource())
+ },
+ })
+ const errors = errorToStrings(importOpmlResult.error)
+
+ return (
+ <>
+ {errors.length > 0 && (
+
+
+
+ )}
+
+
+ >
+ )
+}
diff --git a/commafeed-client/src/components/content/add/Subscribe.tsx b/commafeed-client/src/components/content/add/Subscribe.tsx
new file mode 100644
index 00000000..ba651f66
--- /dev/null
+++ b/commafeed-client/src/components/content/add/Subscribe.tsx
@@ -0,0 +1,116 @@
+import { t, Trans } from "@lingui/macro"
+import { Box, Button, Group, Stack, Stepper, TextInput } from "@mantine/core"
+import { useForm } from "@mantine/form"
+import { client, errorsToStrings, errorToStrings } from "app/client"
+import { Constants } from "app/constants"
+import { redirectToSelectedSource } from "app/slices/redirect"
+import { reloadTree } from "app/slices/tree"
+import { useAppDispatch } from "app/store"
+import { FeedInfoRequest, SubscribeRequest } from "app/types"
+import { Alert } from "components/Alert"
+import { useState } from "react"
+import { TbRss } from "react-icons/tb"
+import useMutation from "use-mutation"
+import { CategorySelect } from "./CategorySelect"
+
+export function Subscribe() {
+ const [activeStep, setActiveStep] = useState(0)
+ const dispatch = useAppDispatch()
+
+ const step0Form = useForm({
+ initialValues: {
+ url: "",
+ },
+ })
+
+ const step1Form = useForm({
+ initialValues: {
+ url: "",
+ title: "",
+ categoryId: Constants.categoryIds.all,
+ },
+ })
+
+ const [fetchFeed, fetchFeedResult] = useMutation(client.feed.fetchFeed, {
+ onSuccess: ({ data }) => {
+ step1Form.setFieldValue("url", data.data.url)
+ step1Form.setFieldValue("title", data.data.title)
+ setActiveStep(step => step + 1)
+ },
+ })
+ const [subscribe, subscribeResult] = useMutation(client.feed.subscribe, {
+ onSuccess: () => {
+ dispatch(reloadTree())
+ dispatch(redirectToSelectedSource())
+ },
+ })
+ const errors = errorsToStrings([fetchFeedResult.error, errorToStrings(subscribeResult.error)])
+
+ const previousStep = () => {
+ if (activeStep === 0) dispatch(redirectToSelectedSource())
+ else setActiveStep(activeStep - 1)
+ }
+ const nextStep = (e: React.FormEvent) => {
+ if (activeStep === 0) {
+ step0Form.onSubmit(fetchFeed)(e)
+ } else if (activeStep === 1) {
+ step1Form.onSubmit(subscribe)(e)
+ }
+ }
+
+ return (
+ <>
+ {errors.length > 0 && (
+
+
+
+ )}
+
+
+ >
+ )
+}
diff --git a/commafeed-client/src/components/header/Header.tsx b/commafeed-client/src/components/header/Header.tsx
new file mode 100644
index 00000000..923807d6
--- /dev/null
+++ b/commafeed-client/src/components/header/Header.tsx
@@ -0,0 +1,77 @@
+import { t, Trans } from "@lingui/macro"
+import { Center, Code, Divider, Group, Text } from "@mantine/core"
+import { openConfirmModal } from "@mantine/modals"
+import { markAllEntries, reloadEntries } from "app/slices/entries"
+import { changeReadingMode, changeReadingOrder } from "app/slices/user"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { ActionButton } from "components/ActionButtton"
+import { Loader } from "components/Loader"
+import { TbArrowDown, TbArrowUp, TbChecks, TbEye, TbEyeOff, TbRefresh, TbUser } from "react-icons/tb"
+import { ProfileMenu } from "./ProfileMenu"
+
+function HeaderDivider() {
+ return
+}
+
+const iconSize = 18
+
+export function Header() {
+ const source = useAppSelector(state => state.entries.source)
+ const sourceLabel = useAppSelector(state => state.entries.sourceLabel)
+ const entriesTimestamp = useAppSelector(state => state.entries.timestamp)
+ const settings = useAppSelector(state => state.user.settings)
+ const profile = useAppSelector(state => state.user.profile)
+ const dispatch = useAppDispatch()
+
+ const openMarkAllEntriesModal = () =>
+ openConfirmModal({
+ title: t`Mark all entries as read`,
+ children: (
+
+
+ Are you sure you want to mark all entries of {sourceLabel} as read?
+
+
+ ),
+ labels: { confirm: t`Confirm`, cancel: t`Cancel` },
+ confirmProps: { color: "red" },
+ onConfirm: () =>
+ dispatch(
+ markAllEntries({
+ sourceType: source.type,
+ req: {
+ id: source.id,
+ read: true,
+ olderThan: entriesTimestamp,
+ },
+ })
+ ),
+ })
+
+ if (!settings) return
+ return (
+
+
+ } label={t`Refresh`} onClick={() => dispatch(reloadEntries())} />
+ } label={t`Mark all as read`} onClick={openMarkAllEntriesModal} />
+
+
+
+ : }
+ label={settings.readingMode === "all" ? t`All` : t`Unread`}
+ onClick={() => dispatch(changeReadingMode(settings.readingMode === "all" ? "unread" : "all"))}
+ />
+ : }
+ label={settings.readingOrder === "asc" ? t`Asc` : t`Desc`}
+ onClick={() => dispatch(changeReadingOrder(settings.readingOrder === "asc" ? "desc" : "asc"))}
+ />
+
+
+
+ } label={profile?.name} />} />
+
+
+ )
+}
diff --git a/commafeed-client/src/components/header/ProfileMenu.tsx b/commafeed-client/src/components/header/ProfileMenu.tsx
new file mode 100644
index 00000000..897583f3
--- /dev/null
+++ b/commafeed-client/src/components/header/ProfileMenu.tsx
@@ -0,0 +1,65 @@
+import { Trans } from "@lingui/macro"
+import { Divider, Menu, useMantineColorScheme } from "@mantine/core"
+import { redirectToAdminUsers, redirectToSettings } from "app/slices/redirect"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { useState } from "react"
+import { TbMoon, TbPower, TbSettings, TbSun, TbUsers } from "react-icons/tb"
+
+interface ProfileMenuProps {
+ control: React.ReactElement
+}
+
+export function ProfileMenu(props: ProfileMenuProps) {
+ const [opened, setOpened] = useState(false)
+ const admin = useAppSelector(state => state.user.profile?.admin)
+ const dispatch = useAppDispatch()
+ const { colorScheme, toggleColorScheme } = useMantineColorScheme()
+ const dark = colorScheme === "dark"
+
+ const logout = () => {
+ window.location.href = "logout"
+ }
+
+ return (
+
+ )
+}
diff --git a/commafeed-client/src/components/responsive/OnDesktop.tsx b/commafeed-client/src/components/responsive/OnDesktop.tsx
new file mode 100644
index 00000000..156338d5
--- /dev/null
+++ b/commafeed-client/src/components/responsive/OnDesktop.tsx
@@ -0,0 +1,11 @@
+import { Box, MediaQuery } from "@mantine/core"
+import { Constants } from "app/constants"
+import React from "react"
+
+export function OnDesktop(props: { children: React.ReactNode }) {
+ return (
+
+ {props.children}
+
+ )
+}
diff --git a/commafeed-client/src/components/responsive/OnMobile.tsx b/commafeed-client/src/components/responsive/OnMobile.tsx
new file mode 100644
index 00000000..bf7a369d
--- /dev/null
+++ b/commafeed-client/src/components/responsive/OnMobile.tsx
@@ -0,0 +1,11 @@
+import { Box, MediaQuery } from "@mantine/core"
+import { Constants } from "app/constants"
+import React from "react"
+
+export function OnMobile(props: { children: React.ReactNode }) {
+ return (
+
+ {props.children}
+
+ )
+}
diff --git a/commafeed-client/src/components/settings/DisplaySettings.tsx b/commafeed-client/src/components/settings/DisplaySettings.tsx
new file mode 100644
index 00000000..701403b5
--- /dev/null
+++ b/commafeed-client/src/components/settings/DisplaySettings.tsx
@@ -0,0 +1,31 @@
+import { t } from "@lingui/macro"
+import { Select, Stack, Switch } from "@mantine/core"
+import { changeLanguage, changeScrollSpeed } from "app/slices/user"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { locales } from "i18n"
+
+export function DisplaySettings() {
+ const language = useAppSelector(state => state.user.settings?.language)
+ const scrollSpeed = useAppSelector(state => state.user.settings?.scrollSpeed)
+ const dispatch = useAppDispatch()
+
+ return (
+
+
+ )
+}
diff --git a/commafeed-client/src/components/settings/ProfileSettings.tsx b/commafeed-client/src/components/settings/ProfileSettings.tsx
new file mode 100644
index 00000000..afd4bbd8
--- /dev/null
+++ b/commafeed-client/src/components/settings/ProfileSettings.tsx
@@ -0,0 +1,125 @@
+import { t, Trans } from "@lingui/macro"
+import { Anchor, Box, Button, Checkbox, Divider, Group, Input, PasswordInput, Stack, Text, TextInput } from "@mantine/core"
+import { useForm } from "@mantine/form"
+import { openConfirmModal } from "@mantine/modals"
+import { client, errorsToStrings } from "app/client"
+import { redirectToLogin, redirectToSelectedSource } from "app/slices/redirect"
+import { reloadProfile } from "app/slices/user"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { ProfileModificationRequest } from "app/types"
+import { Alert } from "components/Alert"
+import { useEffect } from "react"
+import { TbDeviceFloppy, TbTrash } from "react-icons/tb"
+import useMutation from "use-mutation"
+
+interface FormData extends ProfileModificationRequest {
+ newPasswordConfirmation?: string
+}
+
+export function ProfileSettings() {
+ const profile = useAppSelector(state => state.user.profile)
+ const dispatch = useAppDispatch()
+
+ const form = useForm({
+ validate: {
+ newPasswordConfirmation: (value: string, values: FormData) => (value !== values.newPassword ? t`Passwords do not match` : null),
+ },
+ })
+ const { setValues } = form
+
+ const [saveProfile, saveProfileResult] = useMutation(client.user.saveProfile, {
+ onSuccess: () => {
+ dispatch(reloadProfile())
+ dispatch(redirectToSelectedSource())
+ },
+ })
+ const [deleteProfile, deleteProfileResult] = useMutation(client.user.deleteProfile, {
+ onSuccess: () => {
+ dispatch(redirectToLogin())
+ },
+ })
+ const errors = errorsToStrings([saveProfileResult.error, deleteProfileResult.error])
+
+ const openDeleteProfileModal = () =>
+ openConfirmModal({
+ title: t`Delete account`,
+ children: (
+
+ Are you sure you want to delete your account? There's no turning back!
+
+ ),
+ labels: { confirm: t`Confirm`, cancel: t`Cancel` },
+ confirmProps: { color: "red" },
+ onConfirm: () => deleteProfile({}),
+ })
+
+ useEffect(() => {
+ if (!profile) return
+ setValues({
+ currentPassword: "",
+ email: profile.email ?? "",
+ newApiKey: false,
+ })
+ }, [setValues, profile])
+
+ return (
+ <>
+ {errors.length > 0 && (
+
+
+
+ )}
+
+
+ >
+ )
+}
diff --git a/commafeed-client/src/components/sidebar/Tree.tsx b/commafeed-client/src/components/sidebar/Tree.tsx
new file mode 100644
index 00000000..47c5a435
--- /dev/null
+++ b/commafeed-client/src/components/sidebar/Tree.tsx
@@ -0,0 +1,118 @@
+import { t } from "@lingui/macro"
+import { Box, Stack } from "@mantine/core"
+import { Constants } from "app/constants"
+import { redirectToCategory, redirectToCategoryDetails, redirectToFeed, redirectToFeedDetails } from "app/slices/redirect"
+import { collapseTreeCategory } from "app/slices/tree"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { Category, Subscription } from "app/types"
+import { categoryUnreadCount, flattenCategoryTree } from "app/utils"
+import { Loader } from "components/Loader"
+import { OnDesktop } from "components/responsive/OnDesktop"
+import React from "react"
+import { FaChevronDown, FaChevronRight, FaInbox } from "react-icons/fa"
+import { TreeNode } from "./TreeNode"
+import { TreeSearch } from "./TreeSearch"
+
+const allIcon =
+const expandedIcon =
+const collapsedIcon =
+
+const errorThreshold = 9
+export function Tree() {
+ const root = useAppSelector(state => state.tree.rootCategory)
+ const source = useAppSelector(state => state.entries.source)
+ const dispatch = useAppDispatch()
+
+ const feedClicked = (e: React.MouseEvent, id: string) => {
+ if (e.detail === 2) dispatch(redirectToFeedDetails(id))
+ else dispatch(redirectToFeed(id))
+ }
+ const categoryClicked = (e: React.MouseEvent, id: string) => {
+ if (e.detail === 2) {
+ if (id === Constants.categoryIds.all) return
+ dispatch(redirectToCategoryDetails(id))
+ } else {
+ dispatch(redirectToCategory(id))
+ }
+ }
+ const categoryIconClicked = (e: React.MouseEvent, category: Category) => {
+ e.stopPropagation()
+
+ dispatch(
+ collapseTreeCategory({
+ id: +category.id,
+ collapse: category.expanded,
+ })
+ )
+ }
+
+ const allCategoryNode = () => (
+
+ )
+
+ const categoryNode = (category: Category, level: number = 0) => {
+ const hasError = !category.expanded && flattenCategoryTree(category).some(c => c.feeds.some(f => f.errorCount > errorThreshold))
+ return (
+ categoryIconClicked(e, category)}
+ key={category.id}
+ />
+ )
+ }
+
+ const feedNode = (feed: Subscription, level: number = 0) => (
+ errorThreshold}
+ onClick={feedClicked}
+ key={feed.id}
+ />
+ )
+
+ const recursiveCategoryNode = (category: Category, level: number = 0) => (
+
+ {categoryNode(category, level)}
+ {category.expanded && category.children.map(c => recursiveCategoryNode(c, level + 1))}
+ {category.expanded && category.feeds.map(f => feedNode(f, level + 1))}
+
+ )
+
+ if (!root) return
+ const feeds = flattenCategoryTree(root).flatMap(c => c.feeds)
+ return (
+
+
+
+
+
+ {allCategoryNode()}
+ {root.children.map(c => recursiveCategoryNode(c))}
+ {root.feeds.map(f => feedNode(f))}
+
+
+ )
+}
diff --git a/commafeed-client/src/components/sidebar/TreeNode.tsx b/commafeed-client/src/components/sidebar/TreeNode.tsx
new file mode 100644
index 00000000..d63f041d
--- /dev/null
+++ b/commafeed-client/src/components/sidebar/TreeNode.tsx
@@ -0,0 +1,62 @@
+import { Box, createStyles, Image } from "@mantine/core"
+import React, { ReactNode } from "react"
+import { UnreadCount } from "./UnreadCount"
+
+interface TreeNodeProps {
+ id: string
+ name: string
+ icon: ReactNode | string
+ unread: number
+ selected: boolean
+ expanded?: boolean
+ level: number
+ hasError: boolean
+ onClick: (e: React.MouseEvent, id: string) => void
+ onIconClick?: (e: React.MouseEvent, id: string) => void
+}
+
+const useStyles = createStyles((theme, props: TreeNodeProps) => {
+ let backgroundColor = "inherit"
+ if (props.selected) backgroundColor = theme.colorScheme === "dark" ? theme.colors.dark[4] : theme.colors.gray[3]
+
+ let color
+ if (props.hasError) color = theme.colors.red[6]
+ else if (theme.colorScheme === "dark") color = props.unread > 0 ? theme.colors.dark[0] : theme.colors.dark[3]
+ else color = props.unread > 0 ? theme.black : theme.colors.gray[6]
+
+ return {
+ node: {
+ display: "flex",
+ alignItems: "center",
+ cursor: "pointer",
+ color,
+ backgroundColor,
+ "&:hover": {
+ backgroundColor: theme.colorScheme === "dark" ? theme.colors.dark[6] : theme.colors.gray[0],
+ },
+ },
+ nodeText: {
+ flexGrow: 1,
+ whiteSpace: "nowrap",
+ overflow: "hidden",
+ textOverflow: "ellipsis",
+ },
+ }
+})
+
+export function TreeNode(props: TreeNodeProps) {
+ const { classes } = useStyles(props)
+ return (
+ props.onClick(e, props.id)}>
+ props.onIconClick && props.onIconClick(e, props.id)}>
+ {typeof props.icon === "string" ? : props.icon}
+
+ {props.name}
+ {!props.expanded && (
+
+
+
+ )}
+
+ )
+}
diff --git a/commafeed-client/src/components/sidebar/TreeSearch.tsx b/commafeed-client/src/components/sidebar/TreeSearch.tsx
new file mode 100644
index 00000000..51a12442
--- /dev/null
+++ b/commafeed-client/src/components/sidebar/TreeSearch.tsx
@@ -0,0 +1,60 @@
+import { t } from "@lingui/macro"
+import { Box, Center, Image, Kbd, TextInput } from "@mantine/core"
+import { openSpotlight, SpotlightAction, SpotlightProvider } from "@mantine/spotlight"
+import { redirectToFeed } from "app/slices/redirect"
+import { useAppDispatch } from "app/store"
+import { Subscription } from "app/types"
+import { useMousetrap } from "hooks/useMousetrap"
+import { TbSearch } from "react-icons/tb"
+
+export interface TreeSearchProps {
+ feeds: Subscription[]
+}
+export function TreeSearch(props: TreeSearchProps) {
+ const dispatch = useAppDispatch()
+
+ const actions: SpotlightAction[] = props.feeds
+ .sort((f1, f2) => f1.name.localeCompare(f2.name))
+ .map(f => ({
+ title: f.name,
+ icon: ,
+ onTrigger: () => dispatch(redirectToFeed(f.id)),
+ }))
+
+ const searchIcon =
+ const rightSection = (
+
+ Ctrl
+ +
+ K
+
+ )
+
+ // additional keyboard shortcut used by commafeed v1
+ useMousetrap("g u", () => openSpotlight())
+
+ return (
+
+ openSpotlight()}
+ // prevent focus
+ onFocus={e => e.target.blur()}
+ readOnly
+ />
+
+ )
+}
diff --git a/commafeed-client/src/components/sidebar/UnreadCount.tsx b/commafeed-client/src/components/sidebar/UnreadCount.tsx
new file mode 100644
index 00000000..f33705f2
--- /dev/null
+++ b/commafeed-client/src/components/sidebar/UnreadCount.tsx
@@ -0,0 +1,18 @@
+import { Badge, createStyles } from "@mantine/core"
+
+const useStyles = createStyles(() => ({
+ badge: {
+ width: "3.2rem",
+ // for some reason, mantine Badge has "cursor: 'default'"
+ cursor: "pointer",
+ },
+}))
+
+export function UnreadCount(props: { unreadCount: number }) {
+ const { classes } = useStyles()
+
+ if (props.unreadCount <= 0) return null
+
+ const count = props.unreadCount >= 1000 ? "999+" : props.unreadCount
+ return {count}
+}
diff --git a/commafeed-client/src/hooks/useAppLoading.ts b/commafeed-client/src/hooks/useAppLoading.ts
new file mode 100644
index 00000000..5c1d1dce
--- /dev/null
+++ b/commafeed-client/src/hooks/useAppLoading.ts
@@ -0,0 +1,34 @@
+import { t } from "@lingui/macro"
+import { useAppSelector } from "app/store"
+
+interface Step {
+ label: string
+ done: boolean
+}
+
+export const useAppLoading = () => {
+ const profile = useAppSelector(state => state.user.profile)
+ const settings = useAppSelector(state => state.user.settings)
+ const rootCategory = useAppSelector(state => state.tree.rootCategory)
+
+ const steps: Step[] = [
+ {
+ label: t`Loading settings...`,
+ done: !!settings,
+ },
+ {
+ label: t`Loading profile...`,
+ done: !!profile,
+ },
+ {
+ label: t`Loading subscriptions...`,
+ done: !!rootCategory,
+ },
+ ]
+
+ const loading = steps.some(s => !s.done)
+ const loadingPercentage = Math.round((100.0 * steps.filter(s => s.done).length) / steps.length)
+ const loadingStepLabel = steps.find(s => !s.done)?.label
+
+ return { steps, loading, loadingPercentage, loadingStepLabel }
+}
diff --git a/commafeed-client/src/hooks/useMousetrap.ts b/commafeed-client/src/hooks/useMousetrap.ts
new file mode 100644
index 00000000..7431fa1a
--- /dev/null
+++ b/commafeed-client/src/hooks/useMousetrap.ts
@@ -0,0 +1,22 @@
+import mousetrap, { ExtendedKeyboardEvent } from "mousetrap"
+import { useEffect, useRef } from "react"
+
+type Callback = (e: ExtendedKeyboardEvent, combo: string) => void
+
+export const useMousetrap = (key: string | string[], callback: Callback) => {
+ // use a ref to avoid unbinding/rebinding every time the callback changes
+ const callbackRef = useRef(callback)
+ callbackRef.current = callback
+
+ useEffect(() => {
+ mousetrap.bind(key, (event, combo) => {
+ callbackRef.current(event, combo)
+
+ // prevent default behavior
+ return false
+ })
+ return () => {
+ mousetrap.unbind(key)
+ }
+ }, [key])
+}
diff --git a/commafeed-client/src/i18n.ts b/commafeed-client/src/i18n.ts
new file mode 100644
index 00000000..8813d8db
--- /dev/null
+++ b/commafeed-client/src/i18n.ts
@@ -0,0 +1,56 @@
+import { i18n, Messages } from "@lingui/core"
+import { useAppSelector } from "app/store"
+import dayjs from "dayjs"
+import "dayjs/locale/en"
+import "dayjs/locale/fr"
+import { en, fr } from "make-plural"
+import { useEffect } from "react"
+import { messages as enMessages } from "./locales/en/messages"
+import { messages as frMessages } from "./locales/fr/messages"
+
+interface Locale {
+ key: string
+ label: string
+ messages: Messages
+ plurals?: (n: number | string, ord?: boolean) => string
+}
+
+// add an object to the array to add a new locale
+// don't forget to also add it to the 'locales' array in .linguirc
+export const locales: Locale[] = [
+ {
+ key: "en",
+ label: "English",
+ messages: enMessages,
+ plurals: en,
+ },
+ {
+ key: "fr",
+ label: "Français",
+ messages: frMessages,
+ plurals: fr,
+ },
+]
+
+locales.forEach(l => {
+ i18n.loadLocaleData({
+ [l.key]: {
+ plurals: l.plurals,
+ },
+ })
+ i18n.load({
+ [l.key]: l.messages,
+ })
+})
+
+function activateLocale(locale: string) {
+ i18n.activate(locale)
+ dayjs.locale(locale)
+}
+
+export const useI18n = () => {
+ const locale = useAppSelector(state => state.user.settings?.language)
+ useEffect(() => {
+ activateLocale(locale ?? "en")
+ }, [locale])
+}
diff --git a/commafeed-client/src/locales/en/messages.po b/commafeed-client/src/locales/en/messages.po
new file mode 100644
index 00000000..5e856b21
--- /dev/null
+++ b/commafeed-client/src/locales/en/messages.po
@@ -0,0 +1,503 @@
+msgid ""
+msgstr ""
+"POT-Creation-Date: 2022-08-04 18:51+0200\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: @lingui/cli\n"
+"Language: en\n"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Plural-Forms: \n"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "<0>Complete available syntax is available 0><1>here1>."
+msgstr "<0>Complete available syntax is available 0><1>here1>."
+
+#: src/pages/auth/RegistrationPage.tsx
+msgid "<0>Have an account?0><1>Log in!1>"
+msgstr "<0>Have an account?0><1>Log in!1>"
+
+#: src/pages/auth/LoginPage.tsx
+msgid "<0>Need an account?0><1>Sign up!1>"
+msgstr "<0>Need an account?0><1>Sign up!1>"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "API key"
+msgstr "API key"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Actions"
+msgstr "Actions"
+
+#: src/components/content/add/AddCategory.tsx
+msgid "Add"
+msgstr "Add"
+
+#: src/pages/app/AddPage.tsx
+msgid "Add category"
+msgstr "Add category"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Add user"
+msgstr "Add user"
+
+#: src/components/admin/UserEdit.tsx
+#: src/components/header/ProfileMenu.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Admin"
+msgstr "Admin"
+
+#: src/components/header/Header.tsx
+#: src/components/sidebar/Tree.tsx
+msgid "All"
+msgstr "All"
+
+#: src/pages/auth/PasswordRecoveryPage.tsx
+msgid "An email has been sent if this address was registered. Check your inbox."
+msgstr "An email has been sent if this address was registered. Check your inbox."
+
+#: src/components/content/add/ImportOpml.tsx
+msgid "An opml file is an XML file containing feed URLs and categories. You can get an OPML file by exporting your data from other feed reading services."
+msgstr "An opml file is an XML file containing feed URLs and categories. You can get an OPML file by exporting your data from other feed reading services."
+
+#: src/components/content/add/Subscribe.tsx
+msgid "Analyze feed"
+msgstr "Analyze feed"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+msgid "Are you sure you want to delete category <0>{categoryName}0>?"
+msgstr "Are you sure you want to delete category <0>{categoryName}0>?"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Are you sure you want to delete user <0>{userName}0> ?"
+msgstr "Are you sure you want to delete user <0>{userName}0> ?"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Are you sure you want to delete your account? There's no turning back!"
+msgstr "Are you sure you want to delete your account? There's no turning back!"
+
+#: src/components/header/Header.tsx
+msgid "Are you sure you want to mark all entries of <0>{sourceLabel}0> as read?"
+msgstr "Are you sure you want to mark all entries of <0>{sourceLabel}0> as read?"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Are you sure you want to unsubscribe from <0>{feedName}0>?"
+msgstr "Are you sure you want to unsubscribe from <0>{feedName}0>?"
+
+#: src/components/header/Header.tsx
+msgid "Asc"
+msgstr "Asc"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
+msgstr "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
+
+#: src/components/content/add/Subscribe.tsx
+msgid "Back"
+msgstr "Back"
+
+#: src/pages/auth/PasswordRecoveryPage.tsx
+msgid "Back to log in"
+msgstr "Back to log in"
+
+#: src/components/admin/UserEdit.tsx
+#: src/components/content/add/AddCategory.tsx
+#: src/components/content/add/ImportOpml.tsx
+#: src/components/header/Header.tsx
+#: src/components/settings/ProfileSettings.tsx
+#: src/components/settings/ProfileSettings.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Cancel"
+msgstr "Cancel"
+
+#: src/components/content/add/AddCategory.tsx
+#: src/components/content/add/AddCategory.tsx
+#: src/components/content/add/Subscribe.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Category"
+msgstr "Category"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Changing password will generate a new API key"
+msgstr "Changing password will generate a new API key"
+
+#: src/components/content/add/Subscribe.tsx
+msgid "Check that the feed is working"
+msgstr "Check that the feed is working"
+
+#: src/components/header/Header.tsx
+#: src/components/settings/ProfileSettings.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Confirm"
+msgstr "Confirm"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Confirm password"
+msgstr "Confirm password"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Current password"
+msgstr "Current password"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Date created"
+msgstr "Date created"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+msgid "Delete"
+msgstr "Delete"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+msgid "Delete Category"
+msgstr "Delete Category"
+
+#: src/components/settings/ProfileSettings.tsx
+#: src/components/settings/ProfileSettings.tsx
+msgid "Delete account"
+msgstr "Delete account"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Delete user"
+msgstr "Delete user"
+
+#: src/components/header/Header.tsx
+msgid "Desc"
+msgstr "Desc"
+
+#: src/pages/app/SettingsPage.tsx
+msgid "Display"
+msgstr "Display"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Download"
+msgstr "Download"
+
+#: src/components/admin/UserEdit.tsx
+#: src/components/settings/ProfileSettings.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+#: src/pages/auth/PasswordRecoveryPage.tsx
+#: src/pages/auth/PasswordRecoveryPage.tsx
+msgid "E-mail"
+msgstr "E-mail"
+
+#: src/pages/auth/RegistrationPage.tsx
+#: src/pages/auth/RegistrationPage.tsx
+msgid "E-mail address"
+msgstr "E-mail address"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Edit user"
+msgstr "Edit user"
+
+#: src/components/admin/UserEdit.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Enabled"
+msgstr "Enabled"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Enter your current password to change profile settings"
+msgstr "Enter your current password to change profile settings"
+
+#: src/components/Alert.tsx
+msgid "Error"
+msgstr "Error"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Example: {example}."
+msgstr "Example: {example}."
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
+msgstr "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
+
+#: src/components/content/add/Subscribe.tsx
+#: src/components/content/add/Subscribe.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Feed URL"
+msgstr "Feed URL"
+
+#: src/components/content/add/Subscribe.tsx
+msgid "Feed name"
+msgstr "Feed name"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Filtering expression"
+msgstr "Filtering expression"
+
+#: src/pages/auth/LoginPage.tsx
+msgid "Forgot password?"
+msgstr "Forgot password?"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Generate an API key in your profile first."
+msgstr "Generate an API key in your profile first."
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Generate new API key"
+msgstr "Generate new API key"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Generated feed url"
+msgstr "Generated feed url"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Id"
+msgstr "Id"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
+msgstr "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
+
+#: src/components/content/add/ImportOpml.tsx
+msgid "Import"
+msgstr "Import"
+
+#: src/components/content/FeedEntryFooter.tsx
+msgid "Keep unread"
+msgstr "Keep unread"
+
+#: src/components/settings/DisplaySettings.tsx
+msgid "Language"
+msgstr "Language"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Last login date"
+msgstr "Last login date"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Last refresh"
+msgstr "Last refresh"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Last refresh message"
+msgstr "Last refresh message"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Link"
+msgstr "Link"
+
+#: src/hooks/useAppLoading.ts
+msgid "Loading profile..."
+msgstr "Loading profile..."
+
+#: src/hooks/useAppLoading.ts
+msgid "Loading settings..."
+msgstr "Loading settings..."
+
+#: src/hooks/useAppLoading.ts
+msgid "Loading subscriptions..."
+msgstr "Loading subscriptions..."
+
+#: src/pages/auth/LoginPage.tsx
+#: src/pages/auth/LoginPage.tsx
+msgid "Log in"
+msgstr "Log in"
+
+#: src/components/header/ProfileMenu.tsx
+msgid "Logout"
+msgstr "Logout"
+
+#: src/components/header/ProfileMenu.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Manage users"
+msgstr "Manage users"
+
+#: src/components/header/Header.tsx
+msgid "Mark all as read"
+msgstr "Mark all as read"
+
+#: src/components/header/Header.tsx
+msgid "Mark all entries as read"
+msgstr "Mark all entries as read"
+
+#: src/components/RelativeDate.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "N/A"
+msgstr "N/A"
+
+#: src/components/admin/UserEdit.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Name"
+msgstr "Name"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "New password"
+msgstr "New password"
+
+#: src/components/content/add/Subscribe.tsx
+msgid "Next"
+msgstr "Next"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Next refresh"
+msgstr "Next refresh"
+
+#: src/pages/app/FeedEntriesPage.tsx
+msgid "No more entries"
+msgstr "No more entries"
+
+#: src/components/sidebar/TreeSearch.tsx
+msgid "Nothing found"
+msgstr "Nothing found"
+
+#: src/pages/app/AddPage.tsx
+msgid "OPML"
+msgstr "OPML"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "OPML export"
+msgstr "OPML export"
+
+#: src/components/content/add/ImportOpml.tsx
+#: src/components/content/add/ImportOpml.tsx
+msgid "OPML file"
+msgstr "OPML file"
+
+#: src/components/content/FeedEntryFooter.tsx
+msgid "Open link"
+msgstr "Open link"
+
+#: src/components/content/add/AddCategory.tsx
+msgid "Parent"
+msgstr "Parent"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+msgid "Parent Category"
+msgstr "Parent Category"
+
+#: src/components/admin/UserEdit.tsx
+#: src/pages/auth/LoginPage.tsx
+#: src/pages/auth/LoginPage.tsx
+#: src/pages/auth/RegistrationPage.tsx
+#: src/pages/auth/RegistrationPage.tsx
+msgid "Password"
+msgstr "Password"
+
+#: src/pages/auth/PasswordRecoveryPage.tsx
+msgid "Password Recovery"
+msgstr "Password Recovery"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Passwords do not match"
+msgstr "Passwords do not match"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Position"
+msgstr "Position"
+
+#: src/pages/app/SettingsPage.tsx
+msgid "Profile"
+msgstr "Profile"
+
+#: src/pages/auth/PasswordRecoveryPage.tsx
+msgid "Recover password"
+msgstr "Recover password"
+
+#: src/components/header/Header.tsx
+msgid "Refresh"
+msgstr "Refresh"
+
+#: src/pages/auth/RegistrationPage.tsx
+msgid "Registrations are closed on this CommaFeed instance"
+msgstr "Registrations are closed on this CommaFeed instance"
+
+#: src/components/admin/UserEdit.tsx
+#: src/components/settings/ProfileSettings.tsx
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Save"
+msgstr "Save"
+
+#: src/components/settings/DisplaySettings.tsx
+msgid "Scroll smoothly when navigating between entries"
+msgstr "Scroll smoothly when navigating between entries"
+
+#: src/components/sidebar/TreeSearch.tsx
+#: src/components/sidebar/TreeSearch.tsx
+msgid "Search"
+msgstr "Search"
+
+#: src/components/header/ProfileMenu.tsx
+msgid "Settings"
+msgstr "Settings"
+
+#: src/app/slices/user.ts
+msgid "Settings saved."
+msgstr "Settings saved."
+
+#: src/pages/auth/RegistrationPage.tsx
+#: src/pages/auth/RegistrationPage.tsx
+msgid "Sign up"
+msgstr "Sign up"
+
+#: src/components/content/add/Subscribe.tsx
+#: src/components/content/add/Subscribe.tsx
+#: src/pages/app/AddPage.tsx
+msgid "Subscribe"
+msgstr "Subscribe"
+
+#: src/components/content/add/Subscribe.tsx
+msgid "Subscribe to the feed"
+msgstr "Subscribe to the feed"
+
+#: src/components/Alert.tsx
+msgid "Success"
+msgstr "Success"
+
+#: src/components/content/add/Subscribe.tsx
+msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
+msgstr "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
+
+#: src/components/header/ProfileMenu.tsx
+msgid "Theme"
+msgstr "Theme"
+
+#: src/components/header/Header.tsx
+msgid "Unread"
+msgstr "Unread"
+
+#: src/pages/app/FeedDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Unsubscribe"
+msgstr "Unsubscribe"
+
+#: src/pages/auth/LoginPage.tsx
+#: src/pages/auth/LoginPage.tsx
+msgid "User Name or E-mail"
+msgstr "User Name or E-mail"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "User name"
+msgstr "User name"
+
+#: src/components/Alert.tsx
+msgid "Warning"
+msgstr "Warning"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Website"
+msgstr "Website"
+
+#: src/pages/app/FeedEntriesPage.tsx
+msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
+msgstr "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
+
+#: src/components/content/add/ImportOpml.tsx
+msgid "file is required"
+msgstr "file is required"
diff --git a/commafeed-client/src/locales/fr/messages.po b/commafeed-client/src/locales/fr/messages.po
new file mode 100644
index 00000000..dcbdaddb
--- /dev/null
+++ b/commafeed-client/src/locales/fr/messages.po
@@ -0,0 +1,503 @@
+msgid ""
+msgstr ""
+"POT-Creation-Date: 2022-08-04 18:51+0200\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: @lingui/cli\n"
+"Language: fr\n"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Plural-Forms: \n"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "<0>Complete available syntax is available 0><1>here1>."
+msgstr "<0>La syntaxe complète est disponible 0><1>ici1>."
+
+#: src/pages/auth/RegistrationPage.tsx
+msgid "<0>Have an account?0><1>Log in!1>"
+msgstr "<0>Déjà un compte ?0><1>Connectez-vous !1>"
+
+#: src/pages/auth/LoginPage.tsx
+msgid "<0>Need an account?0><1>Sign up!1>"
+msgstr "<0>Besoin d'un compte ?0><1>Enregistrez-vous !1>"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "API key"
+msgstr "Clé API"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Actions"
+msgstr "Actions"
+
+#: src/components/content/add/AddCategory.tsx
+msgid "Add"
+msgstr "Ajouter"
+
+#: src/pages/app/AddPage.tsx
+msgid "Add category"
+msgstr "Ajouter une catégorie"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Add user"
+msgstr "Ajouter un utilisateur"
+
+#: src/components/admin/UserEdit.tsx
+#: src/components/header/ProfileMenu.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Admin"
+msgstr "Administrateur"
+
+#: src/components/header/Header.tsx
+#: src/components/sidebar/Tree.tsx
+msgid "All"
+msgstr "Tout"
+
+#: src/pages/auth/PasswordRecoveryPage.tsx
+msgid "An email has been sent if this address was registered. Check your inbox."
+msgstr "Un e-mail a été envoyé si cette adresse est enregistrée. Vérifiez votre boîte de réception."
+
+#: src/components/content/add/ImportOpml.tsx
+msgid "An opml file is an XML file containing feed URLs and categories. You can get an OPML file by exporting your data from other feed reading services."
+msgstr "Un fichier OPML est un fichier XML contenant des URL de flux et des catégories. Vous pouvez obtenir un fichier OPML en exportant vos données à partir d'autres services de lecture de flux."
+
+#: src/components/content/add/Subscribe.tsx
+msgid "Analyze feed"
+msgstr "Analyser le flux"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+msgid "Are you sure you want to delete category <0>{categoryName}0>?"
+msgstr "Etes-vous sûr de vouloir supprimer la catégorie <0>{categoryName}0>?"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Are you sure you want to delete user <0>{userName}0> ?"
+msgstr "Etes-vous sûr de vouloir supprimer l'utilisateur <0>{userName}0> ?"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Are you sure you want to delete your account? There's no turning back!"
+msgstr "Êtes-vous sûr de vouloir supprimer définitivement votre compte ?"
+
+#: src/components/header/Header.tsx
+msgid "Are you sure you want to mark all entries of <0>{sourceLabel}0> as read?"
+msgstr "Etes-vous sûr de vouloir marquer toutes les entrées de <0>{sourceLabel}0> comme lues?"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Are you sure you want to unsubscribe from <0>{feedName}0>?"
+msgstr "Etes-vous sûr de vouloir vous désabonner de <0>{feedName}0>?"
+
+#: src/components/header/Header.tsx
+msgid "Asc"
+msgstr "Ascendant"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison."
+msgstr "Les variables disponibles sont 'title', 'content', 'url' 'author' et 'categories' et leur contenu est converti en minuscules pour faciliter la comparaison de chaînes."
+
+#: src/components/content/add/Subscribe.tsx
+msgid "Back"
+msgstr "Retour"
+
+#: src/pages/auth/PasswordRecoveryPage.tsx
+msgid "Back to log in"
+msgstr "Retour à la connexion"
+
+#: src/components/admin/UserEdit.tsx
+#: src/components/content/add/AddCategory.tsx
+#: src/components/content/add/ImportOpml.tsx
+#: src/components/header/Header.tsx
+#: src/components/settings/ProfileSettings.tsx
+#: src/components/settings/ProfileSettings.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Cancel"
+msgstr "Annuler"
+
+#: src/components/content/add/AddCategory.tsx
+#: src/components/content/add/AddCategory.tsx
+#: src/components/content/add/Subscribe.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Category"
+msgstr "Catégorie"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Changing password will generate a new API key"
+msgstr "Changer de mot de passe générera une nouvelle clé API"
+
+#: src/components/content/add/Subscribe.tsx
+msgid "Check that the feed is working"
+msgstr "Vérifie que le flux fonctionne"
+
+#: src/components/header/Header.tsx
+#: src/components/settings/ProfileSettings.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Confirm"
+msgstr "Confirmer"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Confirm password"
+msgstr "Confirmer le mot de passe"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Current password"
+msgstr "Mot de passe actuel"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Date created"
+msgstr "Date de création"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+msgid "Delete"
+msgstr "Effacer"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+msgid "Delete Category"
+msgstr "Effacer la catégorie"
+
+#: src/components/settings/ProfileSettings.tsx
+#: src/components/settings/ProfileSettings.tsx
+msgid "Delete account"
+msgstr "Effacer le compte"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Delete user"
+msgstr "Effacer l'utilisateur"
+
+#: src/components/header/Header.tsx
+msgid "Desc"
+msgstr "Descendant"
+
+#: src/pages/app/SettingsPage.tsx
+msgid "Display"
+msgstr "Affichage"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Download"
+msgstr "Télécharger"
+
+#: src/components/admin/UserEdit.tsx
+#: src/components/settings/ProfileSettings.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+#: src/pages/auth/PasswordRecoveryPage.tsx
+#: src/pages/auth/PasswordRecoveryPage.tsx
+msgid "E-mail"
+msgstr "E-mail"
+
+#: src/pages/auth/RegistrationPage.tsx
+#: src/pages/auth/RegistrationPage.tsx
+msgid "E-mail address"
+msgstr "Adresse e-mail"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Edit user"
+msgstr "Modifier un utilisateur"
+
+#: src/components/admin/UserEdit.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Enabled"
+msgstr "Actif"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Enter your current password to change profile settings"
+msgstr "Entrez votre mot de passe actuel pour changer les paramètres du profil"
+
+#: src/components/Alert.tsx
+msgid "Error"
+msgstr "Erreur"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Example: {example}."
+msgstr "Exemple : {example}."
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Export your subscriptions and categories as an OPML file that can be imported in other feed reading services"
+msgstr "Exporter vos abonnements et catégories en tant que fichier OPML qui peut être importé dans d'autres services de lecture de flux"
+
+#: src/components/content/add/Subscribe.tsx
+#: src/components/content/add/Subscribe.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Feed URL"
+msgstr "URL du flux"
+
+#: src/components/content/add/Subscribe.tsx
+msgid "Feed name"
+msgstr "Nom du flux"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Filtering expression"
+msgstr "Expression de filtrage"
+
+#: src/pages/auth/LoginPage.tsx
+msgid "Forgot password?"
+msgstr "Mot de passe oublié ?"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Generate an API key in your profile first."
+msgstr "Générez d'abord une clé API dans votre profil."
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Generate new API key"
+msgstr "Générer une nouvelle clé API"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Generated feed url"
+msgstr "URL du flux généré"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Id"
+msgstr "Identifiant"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically."
+msgstr "Si non vide, une expression évaluant à 'vrai' ou 'faux'. Si faux, les nouvelles entrées de ce flux seront marquées comme lues automatiquement."
+
+#: src/components/content/add/ImportOpml.tsx
+msgid "Import"
+msgstr "Importer"
+
+#: src/components/content/FeedEntryFooter.tsx
+msgid "Keep unread"
+msgstr "Garder non lu"
+
+#: src/components/settings/DisplaySettings.tsx
+msgid "Language"
+msgstr "Langue"
+
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Last login date"
+msgstr "Dernière connexion"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Last refresh"
+msgstr "Dernière mise à jour"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Last refresh message"
+msgstr "Dernier message de mise à jour"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Link"
+msgstr "Lien"
+
+#: src/hooks/useAppLoading.ts
+msgid "Loading profile..."
+msgstr "Chargement du profil ..."
+
+#: src/hooks/useAppLoading.ts
+msgid "Loading settings..."
+msgstr "Chargement des paramètres ..."
+
+#: src/hooks/useAppLoading.ts
+msgid "Loading subscriptions..."
+msgstr "Chargement des abonnements ..."
+
+#: src/pages/auth/LoginPage.tsx
+#: src/pages/auth/LoginPage.tsx
+msgid "Log in"
+msgstr "Connexion"
+
+#: src/components/header/ProfileMenu.tsx
+msgid "Logout"
+msgstr "Déconnexion"
+
+#: src/components/header/ProfileMenu.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+msgid "Manage users"
+msgstr "Gestion des utilisateurs"
+
+#: src/components/header/Header.tsx
+msgid "Mark all as read"
+msgstr "Tout marquer comme lu"
+
+#: src/components/header/Header.tsx
+msgid "Mark all entries as read"
+msgstr "Marquer toutes les entrées comme lues"
+
+#: src/components/RelativeDate.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "N/A"
+msgstr "N/A"
+
+#: src/components/admin/UserEdit.tsx
+#: src/pages/admin/AdminUsersPage.tsx
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Name"
+msgstr "Nom"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "New password"
+msgstr "Nouveau mot de passe"
+
+#: src/components/content/add/Subscribe.tsx
+msgid "Next"
+msgstr "Suivant"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Next refresh"
+msgstr "Prochaine mise à jour"
+
+#: src/pages/app/FeedEntriesPage.tsx
+msgid "No more entries"
+msgstr "Plus d'entrées"
+
+#: src/components/sidebar/TreeSearch.tsx
+msgid "Nothing found"
+msgstr "Aucun résultat"
+
+#: src/pages/app/AddPage.tsx
+msgid "OPML"
+msgstr "OPML"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "OPML export"
+msgstr "Export du fichier OPML"
+
+#: src/components/content/add/ImportOpml.tsx
+#: src/components/content/add/ImportOpml.tsx
+msgid "OPML file"
+msgstr "Fichier OPML"
+
+#: src/components/content/FeedEntryFooter.tsx
+msgid "Open link"
+msgstr "Ouvrir le lien"
+
+#: src/components/content/add/AddCategory.tsx
+msgid "Parent"
+msgstr "Parent"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+msgid "Parent Category"
+msgstr "Catégorie parente"
+
+#: src/components/admin/UserEdit.tsx
+#: src/pages/auth/LoginPage.tsx
+#: src/pages/auth/LoginPage.tsx
+#: src/pages/auth/RegistrationPage.tsx
+#: src/pages/auth/RegistrationPage.tsx
+msgid "Password"
+msgstr "Mot de passe"
+
+#: src/pages/auth/PasswordRecoveryPage.tsx
+msgid "Password Recovery"
+msgstr "Récupération de mot de passe"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "Passwords do not match"
+msgstr "Les mots de passe ne correspondent pas"
+
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Position"
+msgstr "Position"
+
+#: src/pages/app/SettingsPage.tsx
+msgid "Profile"
+msgstr "Profil"
+
+#: src/pages/auth/PasswordRecoveryPage.tsx
+msgid "Recover password"
+msgstr "Récupérer le mot de passe"
+
+#: src/components/header/Header.tsx
+msgid "Refresh"
+msgstr "Rafraîchir"
+
+#: src/pages/auth/RegistrationPage.tsx
+msgid "Registrations are closed on this CommaFeed instance"
+msgstr "Les inscriptions sont fermées sur cette instance de CommaFeed"
+
+#: src/components/admin/UserEdit.tsx
+#: src/components/settings/ProfileSettings.tsx
+#: src/pages/app/CategoryDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Save"
+msgstr "Enregistrer"
+
+#: src/components/settings/DisplaySettings.tsx
+msgid "Scroll smoothly when navigating between entries"
+msgstr "Défilement animé lors de la navigation entre les entrées"
+
+#: src/components/sidebar/TreeSearch.tsx
+#: src/components/sidebar/TreeSearch.tsx
+msgid "Search"
+msgstr "Rechercher"
+
+#: src/components/header/ProfileMenu.tsx
+msgid "Settings"
+msgstr "Réglages"
+
+#: src/app/slices/user.ts
+msgid "Settings saved."
+msgstr "Réglages enregistrés."
+
+#: src/pages/auth/RegistrationPage.tsx
+#: src/pages/auth/RegistrationPage.tsx
+msgid "Sign up"
+msgstr "Créer un compte"
+
+#: src/components/content/add/Subscribe.tsx
+#: src/components/content/add/Subscribe.tsx
+#: src/pages/app/AddPage.tsx
+msgid "Subscribe"
+msgstr "S'abonner"
+
+#: src/components/content/add/Subscribe.tsx
+msgid "Subscribe to the feed"
+msgstr "S'abonner au flux"
+
+#: src/components/Alert.tsx
+msgid "Success"
+msgstr "Succès"
+
+#: src/components/content/add/Subscribe.tsx
+msgid "The URL for the feed you want to subscribe to. You can also use the website's url directly and CommaFeed will try to find the feed in the page."
+msgstr "L'URL du flux auquel vous souhaitez vous abonner. Vous pouvez aussi utiliser l'URL du site directement et CommaFeed va essayer de trouver le flux dans la page."
+
+#: src/components/header/ProfileMenu.tsx
+msgid "Theme"
+msgstr "Thème"
+
+#: src/components/header/Header.tsx
+msgid "Unread"
+msgstr "Non lu"
+
+#: src/pages/app/FeedDetailsPage.tsx
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Unsubscribe"
+msgstr "Se désabonner"
+
+#: src/pages/auth/LoginPage.tsx
+#: src/pages/auth/LoginPage.tsx
+msgid "User Name or E-mail"
+msgstr "Nom d'utilisateur ou e-mail"
+
+#: src/components/settings/ProfileSettings.tsx
+msgid "User name"
+msgstr "Nom"
+
+#: src/components/Alert.tsx
+msgid "Warning"
+msgstr "Attention"
+
+#: src/pages/app/FeedDetailsPage.tsx
+msgid "Website"
+msgstr "Site web"
+
+#: src/pages/app/FeedEntriesPage.tsx
+msgid "You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?"
+msgstr "Vous n'avez pas encore d'abonnements. Pourquoi ne pas essayer d'en ajouter un en cliquant sur le signe + en haut de la page ?"
+
+#: src/components/content/add/ImportOpml.tsx
+msgid "file is required"
+msgstr "fichier requis"
diff --git a/commafeed-client/src/main.tsx b/commafeed-client/src/main.tsx
new file mode 100644
index 00000000..be7c85de
--- /dev/null
+++ b/commafeed-client/src/main.tsx
@@ -0,0 +1,18 @@
+import "@fontsource/open-sans"
+import { store } from "app/store"
+import dayjs from "dayjs"
+import relativeTime from "dayjs/plugin/relativeTime"
+import React from "react"
+import ReactDOM from "react-dom/client"
+import { Provider } from "react-redux"
+import { App } from "./App"
+
+dayjs.extend(relativeTime)
+
+ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
+
+
+
+
+
+)
diff --git a/commafeed-client/src/main/app/api/index.html b/commafeed-client/src/main/app/api/index.html
deleted file mode 100644
index 9bd7ed8d..00000000
--- a/commafeed-client/src/main/app/api/index.html
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
- Swagger UI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/commafeed-client/src/main/app/app-icon-128.png b/commafeed-client/src/main/app/app-icon-128.png
deleted file mode 100644
index 321c2d77..00000000
Binary files a/commafeed-client/src/main/app/app-icon-128.png and /dev/null differ
diff --git a/commafeed-client/src/main/app/app-icon-16.png b/commafeed-client/src/main/app/app-icon-16.png
deleted file mode 100644
index 874cf46f..00000000
Binary files a/commafeed-client/src/main/app/app-icon-16.png and /dev/null differ
diff --git a/commafeed-client/src/main/app/app-icon-195.png b/commafeed-client/src/main/app/app-icon-195.png
deleted file mode 100644
index 54e84679..00000000
Binary files a/commafeed-client/src/main/app/app-icon-195.png and /dev/null differ
diff --git a/commafeed-client/src/main/app/app-icon-256.png b/commafeed-client/src/main/app/app-icon-256.png
deleted file mode 100644
index 186e0693..00000000
Binary files a/commafeed-client/src/main/app/app-icon-256.png and /dev/null differ
diff --git a/commafeed-client/src/main/app/app-icon-32.png b/commafeed-client/src/main/app/app-icon-32.png
deleted file mode 100644
index 89cf6f39..00000000
Binary files a/commafeed-client/src/main/app/app-icon-32.png and /dev/null differ
diff --git a/commafeed-client/src/main/app/app-icon-512.png b/commafeed-client/src/main/app/app-icon-512.png
deleted file mode 100644
index 60ffa0fe..00000000
Binary files a/commafeed-client/src/main/app/app-icon-512.png and /dev/null differ
diff --git a/commafeed-client/src/main/app/app-icon-57.png b/commafeed-client/src/main/app/app-icon-57.png
deleted file mode 100644
index 016d7060..00000000
Binary files a/commafeed-client/src/main/app/app-icon-57.png and /dev/null differ
diff --git a/commafeed-client/src/main/app/app-icon-64.png b/commafeed-client/src/main/app/app-icon-64.png
deleted file mode 100644
index e6833da0..00000000
Binary files a/commafeed-client/src/main/app/app-icon-64.png and /dev/null differ
diff --git a/commafeed-client/src/main/app/i18n/ar.js b/commafeed-client/src/main/app/i18n/ar.js
deleted file mode 100644
index 0c587a12..00000000
--- a/commafeed-client/src/main/app/i18n/ar.js
+++ /dev/null
@@ -1,181 +0,0 @@
-{
- "global" : {
- "save" : "حفظ",
- "cancel" : "إلغاء",
- "delete" : "حذف",
- "required" : "مطلوب",
- "download" : "تحميل",
- "link" : "رابط",
- "bookmark" : "مرجعية",
- "close" : "أغلق",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe" : "اشترك",
- "import" : "استورد",
- "new_category" : "فئة جديدة",
- "all" : "الكل",
- "starred" : "المفضل"
- },
- "subscribe" : {
- "feed_url" : "رابط المغذي",
- "feed_name" : "اسم المغذي",
- "category" : "فئة"
- },
- "import" : {
- "google_reader_prefix" : "اسمح لي استيرا المغذيات الخاص بك",
- "google_reader_suffix" : "حساب.",
- "google_download" : "بدلا من ذلك، يمكنك تحميل ملف subscriptions.xml الخاص بك.",
- "google_download_link" : "تحميل من هنا.",
- "xml_file" : "ملف OPML"
- },
- "new_category" : {
- "name" : "الإ سم",
- "parent" : "الأصل"
- },
- "toolbar" : {
- "unread" : "غير مقروء",
- "all" : "الكل",
- "previous_entry" : "الإدخال السابقة",
- "next_entry" : "الإدخال التالي",
- "refresh" : "إعادة انعاش",
- "refresh_all" : "Force refresh all my feeds ",
- "sort_by_asc_desc" : "الترتيب حسب التاريخ تصاعدي / تنازلي",
- "titles_only" : "العناوين فقط",
- "expanded_view" : "عرض موسع",
- "mark_all_as_read" : "اعتبر الكل مقروء",
- "mark_all_older_12_hours" : "Items older than 12 hours ",
- "mark_all_older_day" : "العناصر الأقدم من يوم",
- "mark_all_older_week" : "العناصر الأقدم من أسبوع",
- "mark_all_older_two_weeks" : "العناصر الأقدم من أسبوعين",
- "settings" : "إعدادات",
- "profile" : "الملف الشخصي",
- "admin" : "المشرف",
- "about" : "معلومات حول",
- "logout" : "تسجيل الخروج",
- "donate" : "تبرع"
- },
- "view" : {
- "entry_source" : "from ",
- "entry_author" : "by ",
- "error_while_loading_feed" : "خطأ أثناء تحميل هذه التغذية",
- "keep_unread" : "إبقائه غير مقروء",
- "no_unread_items" : "لا يحتوي عناصر غير مقروءة.",
- "mark_up_to_here" : "Mark as read up to here ",
- "search_for" : "searching for: ",
- "no_search_results" : "No match found for the requested keywords "
- },
- "feedsearch" : {
- "hint" : "أدخل اشتراك ...",
- "help" : "استخدام مفتاح العودة للاختيار ومفاتيح الأسهم للتنقل.",
- "result_prefix" : "الاشتراكات الخاصة بك:"
- },
- "settings" : {
- "general" : {
- "value" : "General",
- "language" : "Language",
- "language_contribute" : "Contribute with translations",
- "show_unread" : "Show feeds and categories with no unread entries",
- "social_buttons" : "Show social sharing buttons",
- "scroll_marks" : "In expanded view, scrolling through entries mark them as read"
- },
- "appearance" : "Appearance",
- "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ",
- "scroll_speed_help" : "set to 0 to disable ",
- "theme" : "Theme",
- "submit_your_theme" : "Submit your theme",
- "custom_css" : "Custom CSS"
- },
- "details" : {
- "feed_details" : "Feed details",
- "url" : "URL",
- "website" : "Website ",
- "name" : "Name",
- "category" : "Category",
- "position" : "Position",
- "last_refresh" : "Last refresh",
- "message" : "Last refresh message ",
- "next_refresh" : "Next refresh",
- "queued_for_refresh" : "Queued for refresh",
- "feed_url" : "Feed URL",
- "generate_api_key_first" : "Generate an API key in your profile first.",
- "unsubscribe" : "Unsubscribe",
- "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ",
- "delete_category_confirmation" : "Are you sure you want to delete this category? ",
- "category_details" : "Category details",
- "tag_details" : "Tag details ",
- "parent_category" : "Parent category"
- },
- "profile" : {
- "user_name" : "User name",
- "email" : "E-mail",
- "change_password" : "Change password",
- "confirm_password" : "Confirm password",
- "minimum_8_chars" : "Minimum 8 characters",
- "passwords_do_not_match" : "Passwords do not match",
- "api_key" : "API key",
- "api_key_not_generated" : "Not generated yet",
- "generate_new_api_key" : "Generate new API key",
- "generate_new_api_key_info" : "Changing password will generate a new API key",
- "opml_export" : "OPML export",
- "delete_account" : "Delete account",
- "delete_account_confirmation" : "Delete your acount? There's no turning back! "
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed is built on top of JAX-RS and AngularJS. As such, a REST API is available.",
- "link_to_documentation" : "Link to the documentation."
- },
- "keyboard_shortcuts" : "Keyboard shortcuts",
- "version" : "CommaFeed version ",
- "line1_prefix" : "CommaFeed is an open-source project. Sources are hosted on ",
- "line1_suffix" : ".",
- "line2_prefix" : "If you encounter an issue, please report it on the issues page of the ",
- "line2_suffix" : " project.",
- "line3" : "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online.",
- "line4" : "For those of you who prefer bitcoin, here is the address",
- "goodies" : {
- "value" : "Goodies",
- "android_app" : "Android app ",
- "subscribe_url" : "Subscribe URL",
- "chrome_extension" : "Chrome extension",
- "firefox_extension" : "Firefox extension",
- "opera_extension" : "Opera extension",
- "subscribe_bookmarklet" : "Add subscription bookmarklet (click)",
- "subscribe_bookmarklet_asc" : "Oldest first ",
- "subscribe_bookmarklet_desc" : "Newest first ",
- "next_unread_bookmarklet" : "Next unread item bookmarklet (drag to bookmark bar)"
- },
- "translation" : {
- "value" : "Translation",
- "message" : "We need your help to translate CommaFeed.",
- "link" : "See how to contribute with translations."
- },
- "announcements" : "Announcements",
- "shortcuts" : {
- "mouse_middleclick" : "mouse middleclick",
- "open_next_entry" : "open next entry",
- "open_previous_entry" : "open previous entry",
- "spacebar" : "space/shift+space ",
- "move_page_down_up" : "moves the page down/up ",
- "focus_next_entry" : "set focus on next entry without opening it",
- "focus_previous_entry" : "set focus on previous entry without opening it",
- "open_next_feed" : "open next feed or category",
- "open_previous_feed" : "open previous feed or category",
- "open_close_current_entry" : "open/close current entry",
- "open_current_entry_in_new_window" : "open current entry in a new window",
- "open_current_entry_in_new_window_background" : "open current entry in a new window in the background",
- "star_unstar" : "star/unstar current entry",
- "mark_current_entry" : "mark as read/unread current entry",
- "mark_all_as_read" : "mark all entries as read",
- "open_in_new_tab_mark_as_read" : "open entry in new tab and mark as read",
- "fullscreen" : "toggle full screen mode ",
- "font_size" : "increase/decrease font size of the current entry ",
- "go_to_all" : "go to the All view ",
- "go_to_starred" : "go to the Starred view ",
- "feed_search" : "navigate to a subscription by entering the subscription name",
- "refresh": "refresh"
- }
- }
-}
diff --git a/commafeed-client/src/main/app/i18n/ca.js b/commafeed-client/src/main/app/i18n/ca.js
deleted file mode 100644
index 5dd5e3a9..00000000
--- a/commafeed-client/src/main/app/i18n/ca.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Desa",
- "cancel" : "Cancel·la",
- "delete" : "Esborra",
- "required" : "Requerit",
- "download" : "Descarrega",
- "link" : "Enllaç",
- "bookmark" : "Adreça d'interès",
- "close" : "Tancar",
- "tags" : "Etiquetes"
- },
- "tree" : {
- "subscribe" : "Subscriure",
- "import" : "Importa",
- "new_category" : "Nova categoria",
- "all" : "Tot",
- "starred" : "Destacats"
- },
- "subscribe" : {
- "feed_url" : "URL del canal",
- "feed_name" : "Nom del canal",
- "category" : "Categoria"
- },
- "import" : {
- "google_reader_prefix" : "Importaré els canals del teu",
- "google_reader_suffix" : " compte.",
- "google_download" : "O be, carrega el teu fitxer subscriptions.xml.",
- "google_download_link" : "Descarrega'l d'aquí.",
- "xml_file" : "Fitxer OPML "
- },
- "new_category" : {
- "name" : "Nom",
- "parent" : "Arrel"
- },
- "toolbar" : {
- "unread" : "Per llegir",
- "all" : "Tots",
- "previous_entry" : "Entrada prèvia",
- "next_entry" : "Entrada següent",
- "refresh" : "Actualitzar",
- "refresh_all" : "Força l'actualització de tots els canals",
- "sort_by_asc_desc" : "Ordenar per data asc/desc",
- "titles_only" : "Només títols",
- "expanded_view" : "Vista ampliada",
- "mark_all_as_read" : "Marcar tots llegits",
- "mark_all_older_12_hours" : "Ítems més vells de 12 hores",
- "mark_all_older_day" : "Ítems més vells d'un dia",
- "mark_all_older_week" : "Ítems més vells d'una setmana",
- "mark_all_older_two_weeks" : "Ítems més vells de dues setmanes",
- "settings" : "Configuració",
- "profile" : "Perfil",
- "admin" : "Admin",
- "about" : "Quant a",
- "logout" : "Desconnecta't",
- "donate" : "Donació"
- },
- "view" : {
- "entry_source" : "de ",
- "entry_author" : "per ",
- "error_while_loading_feed" : "Error carregant el canal",
- "keep_unread" : "Conserva com a no llegit",
- "no_unread_items" : "no té ítems sense llegir.",
- "mark_up_to_here" : "Marcar com a llegit fins aquí",
- "search_for" : "cercant: ",
- "no_search_results" : "No hi ha coincidències per les paraules clau sol·licitades"
- },
- "feedsearch" : {
- "hint" : "Introdueix una subscripció...",
- "help" : "Utilitza la tecla de retorn per seleccionar i les tecles de cursor per navegar.",
- "result_prefix" : "Les teves subscripcions:"
- },
- "settings" : {
- "general" : {
- "value" : "General",
- "language" : "Idioma",
- "language_contribute" : "Contribueix amb traduccions",
- "show_unread" : "Mostrar canals i categories amb entrades sense llegir",
- "social_buttons" : "Mostrar botons per compartir en xarxes socials",
- "scroll_marks" : "A la vista ampliada si et desplaces per les entrades les marques com a llegides"
- },
- "appearance" : "Aparença",
- "scroll_speed" : "Velocitat de desplaçament quan navegues entre entrades (en mil·lisegons)",
- "scroll_speed_help" : "Fixa a 0 per desactivar",
- "theme" : "Tema",
- "submit_your_theme" : "Envia un tema",
- "custom_css" : "CSS personalitzat"
- },
- "details" : {
- "feed_details" : "Detalls del canal",
- "url" : "URL",
- "website" : "Lloc web",
- "name" : "Nom",
- "category" : "Categoria",
- "position" : "Posició",
- "last_refresh" : "Darrera actualització",
- "message" : "Darrer missatge d'actualització",
- "next_refresh" : "Propera actualització",
- "queued_for_refresh" : "A la cua d'actualització",
- "feed_url" : "URL del canal",
- "generate_api_key_first" : "Abans cal que generis una clau API en el teu perfil.",
- "unsubscribe" : "Cancel·la la subscripció",
- "unsubscribe_confirmation" : "Segur que vols cancel·lar la subscripció del canal?",
- "delete_category_confirmation" : "Segur que vols esborrar la categoria?",
- "category_details" : "Detalls de la categoria",
- "tag_details" : "Detalls de l'etiqueta",
- "parent_category" : "Categoria arrel"
- },
- "profile" : {
- "user_name" : "Nom d'usuari",
- "email" : "Adreça electrònica",
- "change_password" : "Canvia la contrasenya ",
- "confirm_password" : "Confirma la contrasenya",
- "minimum_8_chars" : "Mínim de 8 caracters",
- "passwords_do_not_match" : "Les contrasenyes no coincideixen",
- "api_key" : "Clau API ",
- "api_key_not_generated" : "Encara no s'ha generat",
- "generate_new_api_key" : "Genera una nova clau API ",
- "generate_new_api_key_info" : "El canvi de contrasenya generarà una nova clau API",
- "opml_export" : "Exporta OPML ",
- "delete_account" : "Esborra el compte ",
- "delete_account_confirmation" : "Vols esborrar el teu compte? No ho podràs desfer!"
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed funciona amb JAX-RS i AngularJS. Per tant, té disponible una API REST.",
- "link_to_documentation" : "Enllaç a la documentació."
- },
- "keyboard_shortcuts" : "Dreceres de teclat",
- "version" : "Versió de CommaFeed ",
- "line1_prefix" : "CommaFeed és un projecte de codi font obert. El codi font és hostatjat a ",
- "line1_suffix" : ".",
- "line2_prefix" : "Si trobes un problema, si us plau informa'n a la pàgina de problemes del ",
- "line2_suffix" : " projecte.",
- "line3" : "Si t'agrada el projecte, pensa en fer un donatiu per recolzar el desenvolupador i per ajudar amb les despeses de l'hostatge del lloc web. ",
- "line4" : "I pels que preferiu bitcoin, aquí teniu l'adreça",
- "goodies" : {
- "value" : "Afegitons",
- "android_app" : "App Android",
- "subscribe_url" : "URL de subscripció",
- "chrome_extension" : "Extensió del Chrome ",
- "firefox_extension" : "Extensió del Firefox",
- "opera_extension" : "Extensió de l'Opera",
- "subscribe_bookmarklet" : "Afegeix bookmarklet de subscripció (clica)",
- "subscribe_bookmarklet_asc" : "Primer els vells",
- "subscribe_bookmarklet_desc" : "Primer els nous",
- "next_unread_bookmarklet" : "Bookmarklet del proper ítem sense llegir (arrosega a la barra d'adreces d'interès)"
- },
- "translation" : {
- "value" : "Traducció",
- "message" : "Necessitem la teva ajuda per traduir CommaFeed.",
- "link" : "Informació per contribuir amb traduccions."
- },
- "announcements" : "Anuncis",
- "shortcuts" : {
- "mouse_middleclick" : "Clic amb el botó del mig",
- "open_next_entry" : "obrir entrada següent",
- "open_previous_entry" : "obrir entrada prèvia",
- "spacebar" : "espai/majúscula+espai",
- "move_page_down_up" : "mou la pàgina avall/amunt",
- "focus_next_entry" : "fixa el focus en l'entrada següent entrada sense obrir-la",
- "focus_previous_entry" : "fixa el focus en l'entrada prèvia sense obrir-la",
- "open_next_feed" : "obrir canal o categoria següent",
- "open_previous_feed" : "obrir canal o categoria prèvia",
- "open_close_current_entry" : "obre/tanca entrada actual",
- "open_current_entry_in_new_window" : "obrir entrada actual en una finestra nova",
- "open_current_entry_in_new_window_background" : "obrir entrada actual en una finestra nova en segon pla",
- "star_unstar" : "destacar/treure destacat a l'entrada actual ",
- "mark_current_entry" : "marcar com a llegida/no llegida l'entrada actual",
- "mark_all_as_read" : "marcar totes les entrades com a llegides",
- "open_in_new_tab_mark_as_read" : "obrir entrada en una pestanya nova i marcar com a llegida ",
- "fullscreen" : "commutar el mode de pantalla completa",
- "font_size" : "incrementar/reduir la mida de la font de l'entrada actual",
- "go_to_all" : "anar a la vista de Tot ",
- "go_to_starred" : "anar a la vista de Destacats",
- "feed_search" : "navegar a una subscripció introduint-ne el nom"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/cs.js b/commafeed-client/src/main/app/i18n/cs.js
deleted file mode 100644
index a887fa32..00000000
--- a/commafeed-client/src/main/app/i18n/cs.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save " : " Uložit",
- "cancel " : " Zrušit",
- "delete " : " Odstranit",
- "required " : " Povinné",
- "download " : " Stáhnout",
- "link " : " Odkaz",
- "bookmark " : " Záložky",
- "close " : " Zavřít",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe " : " Nový odběr",
- "import " : " Importovat",
- "new_category " : " Nová kategorie",
- "all " : " Vše",
- "starred " : " Oblíbené"
- },
- "subscribe" : {
- "feed_url " : " URL RSS zdroje",
- "feed_name " : " Název",
- "category " : " Kategorie"
- },
- "import" : {
- "google_reader_prefix " : " Importujte si RSS zdroje s vašeho",
- "google_reader_suffix " : " účtu.",
- "google_download " : " Anebo můžete nahrát váš subscriptions.xml soubor",
- "google_download_link " : " Stáhnout jej múžete odtud",
- "xml_file" : "Soubor OPML"
- },
- "new_category" : {
- "name " : " Název",
- "parent " : " Hlavní"
- },
- "toolbar" : {
- "unread " : " Nepřečtené ",
- "all " : " Vše",
- "previous_entry " : " Předchozí položka",
- "next_entry " : " Následující položka",
- "refresh " : " Obnovit",
- "refresh_all" : "Force refresh all my feeds ",
- "sort_by_asc_desc " : " Seřadit podle nejnovějšího/nejstaršího",
- "titles_only " : " Zobrazit jenom titulky",
- "expanded_view " : " Rozšířený náhled",
- "mark_all_as_read " : " Označit vše jako přečtené",
- "mark_all_older_12_hours" : "Items older than 12 hours ",
- "mark_all_older_day " : " Položky starší než den",
- "mark_all_older_week " : " Položky starší než týden",
- "mark_all_older_two_weeks " : " Položky starší než dva týdny",
- "settings " : " Nastavení",
- "profile " : " Profil",
- "admin " : " Admin",
- "about " : " O CommaFeed",
- "logout " : " Odhlásit",
- "donate " : " Donate"
- },
- "view" : {
- "entry_source " : " s",
- "entry_author " : " od",
- "error_while_loading_feed " : " Během načítání se vyskytla chyba",
- "keep_unread " : " Označit jako nepřečtené",
- "no_unread_items " : " nemá žádné nepřečtené položky.",
- "mark_up_to_here " : " Až potud označit položky jako přečtené",
- "search_for" : "searching for: ",
- "no_search_results" : "No match found for the requested keywords "
- },
- "feedsearch" : {
- "hint " : " Zadejte název pro nový odběr ...",
- "help " : " Použijte klávesu enter pro výběr a směrové klávesy pro navigaci.",
- "result_prefix " : " Vaše odebírání:"
- },
- "settings" : {
- "general" : {
- "value " : " Všeobecné",
- "language " : " Jazyk",
- "language_contribute " : " Zapojte se a pomozte z překladem",
- "show_unread " : " Zobrazit položky a kategorie z přečtenými položkami",
- "social_buttons " : " Zobrazit možnosti sdílení",
- "scroll_marks " : " Skrolování v rozšířeném náhledu označí položky jako přečtené"
- },
- "appearance " : " Vzhled",
- "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ",
- "scroll_speed_help" : "set to 0 to disable ",
- "theme " : " Motiv",
- "submit_your_theme " : " Nahrát vlastní motiv",
- "custom_css " : " Vlastní motiv (CSS)"
- },
- "details" : {
- "feed_details " : " Detail odběru",
- "url " : " URL odkaz",
- "website " : " Web stránka",
- "name " : " Název",
- "category " : " Kategorie",
- "position " : " Pozice",
- "last_refresh " : " Poslední obnovení",
- "message" : "Last refresh message ",
- "next_refresh " : " Nadcházející obnovení",
- "queued_for_refresh " : " Ve frontě na obnovu",
- "feed_url " : " URL RSS zdroje",
- "generate_api_key_first " : " Vygenerujte si API klíč na stránce vašeho profilu.",
- "unsubscribe " : " Odhlásit odběr.",
- "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ",
- "delete_category_confirmation" : "Are you sure you want to delete this category? ",
- "category_details " : " Detail kategorie",
- "tag_details" : "Tag details ",
- "parent_category " : " Hlavní kategorie"
- },
- "profile" : {
- "user_name " : " Uživatelské jméno",
- "email " : " E-mail",
- "change_password " : " Změnit heslo",
- "confirm_password " : " Potvrdit heslo",
- "minimum_8_chars " : " Minimum je 8 znaků",
- "passwords_do_not_match " : " Hesla se neshodují",
- "api_key " : " API klíč",
- "api_key_not_generated " : " Není vygenerován",
- "generate_new_api_key " : " Vygenerovat nový API klíč",
- "generate_new_api_key_info " : " Změnou hesla vygenerujete nový API klíč",
- "opml_export " : " exportovat do formátu OPML",
- "delete_account " : " Odstranit účet",
- "delete_account_confirmation" : "Delete your acount? There's no turning back! "
- },
- "about" : {
- "rest_api" : {
- "value " : " REST API",
- "line1 " : " CommaFeed je postaven na JAX-RS a AngularJS. Dostupná je REST API.",
- "link_to_documentation " : " Dokumentace."
- },
- "keyboard_shortcuts " : " Klávesové zkratky",
- "version" : "CommaFeed version ",
- "line1_prefix " : " CommaFeed je open source projekt. Zdrojový kód je dostupný na",
- "line1_suffix " : ".",
- "line2_prefix " : " V případě, že narazíte na problém, ohlaste ho prosím na stránkách",
- "line2_suffix " : " projektu.",
- "line3 " : " V případě, že se vám líbí CommaFeed, zvažte prosím finanční příspěvek. Podpoříte tak budoucí vývoj a také pomůžete udržet web stránky online.",
- "line4 " : " Bitcoin",
- "goodies" : {
- "value " : " Rozšíření",
- "android_app " : " Aplikace pro zařízení Android",
- "subscribe_url " : " URL",
- "chrome_extension " : " Rozšíření pro prohlížeč Chrome",
- "firefox_extension " : " Rozšíření pro prohlížeč Firefox",
- "opera_extension " : " Rozšíření pro prohlížeč Opera",
- "subscribe_bookmarklet " : " Bookmarklet (klikněte)",
- "subscribe_bookmarklet_asc " : " Seřadit od nejstaršího k nejnovějšímu",
- "subscribe_bookmarklet_desc " : " Seřadit od nejnovějšího k nejstaršímu",
- "next_unread_bookmarklet " : " Záložka následující nepřečtené položky (protáhnout k záložkám)"
- },
- "translation" : {
- "value " : " Překlad",
- "message " : " Pomozte z překladem CommaFeed.",
- "link " : " Zjistěte jak můžete pomoct s překladem."
- },
- "announcements " : " Oznámení",
- "shortcuts" : {
- "mouse_middleclick " : " klik prostředním tlačítkem",
- "open_next_entry " : " zobrazit následující položku",
- "open_previous_entry " : " zobrazit předchozí položku",
- "spacebar " : " space / shift + mezerník",
- "move_page_down_up " : " pohyb směrem dolů/nahoru",
- "focus_next_entry " : " přesun na následující položku bez jejího zobrazení",
- "focus_previous_entry " : " přesun na předchozí položku bez jejího zobrazení",
- "open_next_feed " : " přesun na následující odběr/kategorii",
- "open_previous_feed " : " přesun na předchozí odběr/kategorii",
- "open_close_current_entry " : " zobrazit/zavřít vybranou položku",
- "open_current_entry_in_new_window " : " otevřít vybranou položku v novém okně",
- "open_current_entry_in_new_window_background " : " otevřít vybranou položku na pozadí",
- "star_unstar " : " označit vybranou položku jako oblíbenou/neoblíbenou",
- "mark_current_entry " : " označit vybrané položky jako přečtené/nepřečtené",
- "mark_all_as_read " : " označit všechny položky jako přečtené!",
- "open_in_new_tab_mark_as_read " : " otevřít položku na nové kartě a označit ji jako přečtenou",
- "fullscreen " : " přepnout zobrazení na celou obrazovku",
- "font_size " : " zvětšit/zmenšit velikost písma pro vybranou položku",
- "go_to_all" : "go to the All view ",
- "go_to_starred" : "go to the Starred view ",
- "feed_search " : " přejít na odběr vložením jeho názvu"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/cy.js b/commafeed-client/src/main/app/i18n/cy.js
deleted file mode 100644
index a5009997..00000000
--- a/commafeed-client/src/main/app/i18n/cy.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Cadw",
- "cancel" : "Diddymu",
- "delete" : "Dileu",
- "required" : "Gofynnol",
- "download" : "Lawrlwytho",
- "link" : "Dolen",
- "bookmark" : "Nod tudalen",
- "close" : "Cau",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe" : "Tanysgrifio",
- "import" : "Mewnforio",
- "new_category" : "Categori newydd",
- "all" : "Popeth",
- "starred" : "Serennwyd"
- },
- "subscribe" : {
- "feed_url" : "URL Ffrwd",
- "feed_name" : "Enw Ffrwd",
- "category" : "Categori"
- },
- "import" : {
- "google_reader_prefix" : "Gad i mi fewnforio dy ffrydiau o dy ",
- "google_reader_suffix" : " gyfrif.",
- "google_download" : "Fel arall, lanlwytha dy ffeil tanysgrifiadau.xml",
- "google_download_link" : "Lawrlwytha fe yma.",
- "xml_file" : "Ffeil OPML"
- },
- "new_category" : {
- "name" : "Enw",
- "parent" : "Rhiant"
- },
- "toolbar" : {
- "unread" : "Heb ddarllen",
- "all" : "Popeth",
- "previous_entry" : "Eitem blaenorol",
- "next_entry" : "Eitem nesaf",
- "refresh" : "Adnewyddu",
- "refresh_all" : "Gorfodi ail-lwytho pob ffrwd",
- "sort_by_asc_desc" : "Trefnu yn ôl dyddiad",
- "titles_only" : "Teitlau yn unig",
- "expanded_view" : "Golwg estynedig",
- "mark_all_as_read" : "Nodi'r cyfan fel wedi ei ddarllen",
- "mark_all_older_12_hours" : "Items older than 12 hours ",
- "mark_all_older_day" : "Eitemau hyn na diwrnod",
- "mark_all_older_week" : "Eitemau hyn nag wythnos",
- "mark_all_older_two_weeks" : "Eitemau hyn na phythefnos",
- "settings" : "Gosodiadau",
- "profile" : "Proffil",
- "admin" : "Gweinyddwr",
- "about" : "Ynghylch",
- "logout" : "Allgofnodi",
- "donate" : "Rhoddi"
- },
- "view" : {
- "entry_source" : "o",
- "entry_author" : "gan",
- "error_while_loading_feed" : "Gwall wrth lwytho'r ffrwd",
- "keep_unread" : "Parhau i'w nodi fel heb ei ddarllen",
- "no_unread_items" : ": Dim eitemau heb eu darllen ",
- "mark_up_to_here" : "Nodi'r rhai hyd yma fel wedi eu darllen",
- "search_for" : "yn chwilio am:",
- "no_search_results" : "Ni chanfuwyd unrhyw beth gyda'r geiriau hynny"
- },
- "feedsearch" : {
- "hint" : "Rho'r tanysgrifiad...",
- "help" : "Defnyddia'r dychwelwr i ddethol a saethau i lywio",
- "result_prefix" : "Dy danysgrifiadau:"
- },
- "settings" : {
- "general" : {
- "value" : "Cyffredinol",
- "language" : "Iaith",
- "language_contribute" : "Cyfrannu drwy gyfieithu",
- "show_unread" : "Dangos ffrydiau a chategoriau gyda dim eitemau heb eu darllen",
- "social_buttons" : "Dangos botymau rhannu",
- "scroll_marks" : "Marcio eitemau fel wedi eu darllen wrth sgrolio drwyddynt yn y golwg estynedig "
- },
- "appearance" : "Golwg",
- "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ",
- "scroll_speed_help" : "set to 0 to disable ",
- "theme" : "Thema",
- "submit_your_theme" : "Cyflwyna dy thema",
- "custom_css" : "CSS wedi'i addasu"
- },
- "details" : {
- "feed_details" : "Manylion ffrwd",
- "url" : "URL",
- "website" : "Gwefan",
- "name" : "Enw",
- "category" : "Categori",
- "position" : "Safle",
- "last_refresh" : "Adnewyddiad diwethaf",
- "message" : "Neges adnewyddiad diwethaf",
- "next_refresh" : "Adnewyddiad nesaf",
- "queued_for_refresh" : "Ciwiwyd i'w adnewyddu",
- "feed_url" : "URL Ffrwd",
- "generate_api_key_first" : "Rhaid creu allwedd API yn dy broffil yn gyntaf.",
- "unsubscribe" : "Dad-danysgrifio",
- "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ",
- "delete_category_confirmation" : "Are you sure you want to delete this category? ",
- "category_details" : "Manylion categori",
- "tag_details" : "Tag details ",
- "parent_category" : "Categori rhiant"
- },
- "profile" : {
- "user_name" : "Enw defnyddiwr",
- "email" : "E-bost",
- "change_password" : "Newid cyfrinair",
- "confirm_password" : "Cadarnhau cyfrinair",
- "minimum_8_chars" : "Isafswm 8 nod",
- "passwords_do_not_match" : "Mae'r cyfrineiriau yn wahanol",
- "api_key" : "Allwedd API",
- "api_key_not_generated" : "Heb ei gynhyrchu eto",
- "generate_new_api_key" : "Creu allwedd API newydd",
- "generate_new_api_key_info" : "Mae newid cyfrinair yn creu allwedd API newydd",
- "opml_export" : "Allforio OPML",
- "delete_account" : "Dileu cyfrif",
- "delete_account_confirmation" : "Delete your acount? There's no turning back! "
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "Adeiladir CommaFeed ar JAX-RS ac AngularJS. Mae REST API ar gael.",
- "link_to_documentation" : "Dolen i'r ddogfennaeth."
- },
- "keyboard_shortcuts" : "Llwybr byr bysellfwrdd",
- "version" : "Fersiwn CommaFeed: ",
- "line1_prefix" : "Mae CommaFeed yn prosiect cod agored. Mae'r cod ar ",
- "line1_suffix" : ".",
- "line2_prefix" : "Os wyt ti'n ffeindio problem, plîs gad wybod amdano ar dudalen problemau o'r ",
- "line2_suffix" : " prosiect.",
- "line3" : "Os wyt ti'n hoffi'r prosiect, plîs ystyria cyfrannu i gefnogi'r datblygwr a helpu gyda chynnal a chadw'r wefan hon.",
- "line4" : "I'r rhai sy'n hoff o Bitcoin, dyma'r cyfeiriad",
- "goodies" : {
- "value" : "Goodies",
- "android_app" : "Ap Android",
- "subscribe_url" : "URL Tanysgrifio",
- "chrome_extension" : "estyniad Chrome",
- "firefox_extension" : "estyniad Firefox",
- "opera_extension" : "estyniad Opera",
- "subscribe_bookmarklet" : "Ychwanegu botwm tanysgrifio ",
- "subscribe_bookmarklet_asc" : "Hynaf yn gyntaf",
- "subscribe_bookmarklet_desc" : "Diweddaraf yn gyntaf",
- "next_unread_bookmarklet" : "Botwm eitem nesaf heb ei ddarllen (llusgo i far nodau)"
- },
- "translation" : {
- "value" : "Cyfieithiad",
- "message" : "Rydym angen dy help i gyfieithu CommaFeed.",
- "link" : "Gweler sut i gyfrannu i gyfieithiadau."
- },
- "announcements" : "Datganiadau",
- "shortcuts" : {
- "mouse_middleclick" : "clic botwm canol llygoden",
- "open_next_entry" : "agor yr eitem nesaf",
- "open_previous_entry" : "agor yr eitem flaenorol",
- "spacebar" : "space/shift+space",
- "move_page_down_up" : "symud y tudalen i lawr/fyny",
- "focus_next_entry" : "newid ffocws i'r eitem nesaf heb ei hagor",
- "focus_previous_entry" : "newid ffocws i'r eitem flaenorol heb ei hagor",
- "open_next_feed" : "agor y ffrwd neu gategori nesaf",
- "open_previous_feed" : "agor y ffrwd neu gategori blaenorol",
- "open_close_current_entry" : "agor/cau yr eitem gyfredol",
- "open_current_entry_in_new_window" : "agor yr eitem gyfredol mewn ffenestr newydd",
- "open_current_entry_in_new_window_background" : "agor yr eitem gyfredol mewn ffenestr newydd yn y cefndir",
- "star_unstar" : "serennu/dadserennu'r eitem gyfredol",
- "mark_current_entry" : "marcio'r eitem gyfredol fel wedi/heb ei ddarllen",
- "mark_all_as_read" : "marcio popeth fel wedi ei ddarllen",
- "open_in_new_tab_mark_as_read" : "agor yr eitem mewn tab newydd a'i farcio fel wedi ei ddarllen",
- "fullscreen" : "toglo'r golwg sgrin lawn",
- "font_size" : "cynyddu/lleihau maint ffont yr eitem gyfredol",
- "go_to_all" : "newid i olwg 'Popeth'",
- "go_to_starred" : "newid i olwg 'Serennwyd'",
- "feed_search" : "llywio i danysgrifiad gan roi ei enw mewn"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/da.js b/commafeed-client/src/main/app/i18n/da.js
deleted file mode 100644
index 42bc4c7d..00000000
--- a/commafeed-client/src/main/app/i18n/da.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Gem",
- "cancel" : "Annuller",
- "delete" : "Slet",
- "required" : "Påkrævet",
- "download" : "Hent",
- "link" : "Link",
- "bookmark" : "Bogmærke",
- "close" : "Luk",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe" : "Abonner",
- "import" : "Importer",
- "new_category" : "Ny kategori",
- "all" : "Alle",
- "starred" : "Favoritter"
- },
- "subscribe" : {
- "feed_url" : "URL for abonnement ",
- "feed_name" : "Abonnementsnavn",
- "category" : "Kategori"
- },
- "import" : {
- "google_reader_prefix" : "Lad mig importere dine abonnementer fra ",
- "google_reader_suffix" : " konto.",
- "google_download" : "Alternativt, upload din subscriptions.xml fil.",
- "google_download_link" : "Hent den herfra.",
- "xml_file" : "OPML fil"
- },
- "new_category" : {
- "name" : "Navn",
- "parent" : "Overordnet"
- },
- "toolbar" : {
- "unread" : "Ulæst",
- "all" : "Alle",
- "previous_entry" : "Forrige artikkel",
- "next_entry" : "Næste artikkel",
- "refresh" : "Opdater",
- "refresh_all" : "Force refresh all my feeds ",
- "sort_by_asc_desc" : "Sorter efter dato ny/gammel",
- "titles_only" : "Kun titler",
- "expanded_view" : "Udvidet visning",
- "mark_all_as_read" : "Marker alle som læst",
- "mark_all_older_12_hours" : "Items older than 12 hours ",
- "mark_all_older_day" : "Artikler ældere end én dag",
- "mark_all_older_week" : "Artikler ældere end én uge",
- "mark_all_older_two_weeks" : "Artikler ældere end to uger",
- "settings" : "Indstillinger",
- "profile" : "Profil",
- "admin" : "Admin",
- "about" : "Om",
- "logout" : "Log ud",
- "donate" : "Donér"
- },
- "view" : {
- "entry_source" : "from ",
- "entry_author" : "af ",
- "error_while_loading_feed" : "Fejl under indlæsning af artikel",
- "keep_unread" : "Behold som ulæst",
- "no_unread_items" : "har ingen ulæste artikler.",
- "mark_up_to_here" : "Mark as read up to here ",
- "search_for" : "searching for: ",
- "no_search_results" : "No match found for the requested keywords "
- },
- "feedsearch" : {
- "hint" : "Angiv et abonnement...",
- "help" : "Brug enter tasten til at vælge og piltasterne til at navigere.",
- "result_prefix" : "Dine abonnementer:"
- },
- "settings" : {
- "general" : {
- "value" : "Generelt",
- "language" : "Sprog",
- "language_contribute" : "Kontribuer med en oversættelse",
- "show_unread" : "Vis abonnomenter og kategorier med læste artikler",
- "social_buttons" : "Vis delingsknapper",
- "scroll_marks" : "I udvidet visning, marker artikler som læste når der rulles forbi dem"
- },
- "appearance" : "Udseende",
- "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ",
- "scroll_speed_help" : "set to 0 to disable ",
- "theme" : "Tema",
- "submit_your_theme" : "Indsend dit tema",
- "custom_css" : "Brugerdefineret CSS"
- },
- "details" : {
- "feed_details" : "Abonnementsdetaljer",
- "url" : "URL",
- "website" : "Website ",
- "name" : "Navn",
- "category" : "Kategori",
- "position" : "Position",
- "last_refresh" : "Sidste opdatering",
- "message" : "Last refresh message ",
- "next_refresh" : "Næste opdatering",
- "queued_for_refresh" : "I kø til opdatering",
- "feed_url" : "URL for abonnement",
- "generate_api_key_first" : "Generer en API nøgle i din profil først.",
- "unsubscribe" : "Afmeld abonnement",
- "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ",
- "delete_category_confirmation" : "Are you sure you want to delete this category? ",
- "category_details" : "Kategori detaljer",
- "tag_details" : "Tag details ",
- "parent_category" : "Overordnet kategori"
- },
- "profile" : {
- "user_name" : "Brugernavn",
- "email" : "E-mail",
- "change_password" : "Skift adgangskode",
- "confirm_password" : "Bekræft adgangskode",
- "minimum_8_chars" : "Minimum 8 karakter",
- "passwords_do_not_match" : "Adgangskoderne er ikke ens",
- "api_key" : "API nøgle",
- "api_key_not_generated" : "Ikke genereret endnu",
- "generate_new_api_key" : "Generer ny API nøgle",
- "generate_new_api_key_info" : "Ændring af adgangskode vil generere en ny API nøgle",
- "opml_export" : "OPML eksport",
- "delete_account" : "Slet konto",
- "delete_account_confirmation" : "Delete your acount? There's no turning back! "
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed er bygget oven på JAX-RS og AngularJS. Hvilket gør et REST API tilgængeligt.",
- "link_to_documentation" : "Link til dokumentationen."
- },
- "keyboard_shortcuts" : "Tastaturgenveje",
- "version" : "CommaFeed version ",
- "line1_prefix" : "CommaFeed er et open-source project. Kildekoden kan findes på ",
- "line1_suffix" : ".",
- "line2_prefix" : "Hvis du opdager et problem, så rapporter det venligst på ",
- "line2_suffix" : " projekt.",
- "line3" : "Hvis du syntes om projektet, overvej venligst at donere for at hjælpe udviklerne og dække omkostningerne til drift af hjemmesiden.",
- "line4" : "Til dig der foretrækker bitcoin, her er adressen",
- "goodies" : {
- "value" : "Godter",
- "android_app" : "Android app ",
- "subscribe_url" : "Abonner URL",
- "chrome_extension" : "Chrome udvidelse",
- "firefox_extension" : "Firefox udvidelse",
- "opera_extension" : "Opera udvidelse",
- "subscribe_bookmarklet" : "Tilføj abonnoment bogmærkeprogram (click)",
- "subscribe_bookmarklet_asc" : "Oldest first ",
- "subscribe_bookmarklet_desc" : "Newest first ",
- "next_unread_bookmarklet" : "Næste ulæste artikel bogmærkeprogram (træk til bogmærkebaren)"
- },
- "translation" : {
- "value" : "Oversættelse",
- "message" : "Vi har brug for din hjælp til at oversætte CommaFeed.",
- "link" : "Se hvordan du kan kontribuere med oversættelser."
- },
- "announcements" : "Meddelelser",
- "shortcuts" : {
- "mouse_middleclick" : "mellemmuseklik",
- "open_next_entry" : "åben næste artikel",
- "open_previous_entry" : "åben forrige artikel",
- "spacebar" : "space/shift+space ",
- "move_page_down_up" : "moves the page down/up ",
- "focus_next_entry" : "sæt fokus på næste arktiel uden at åbne den",
- "focus_previous_entry" : "sæt fokus på forrige artikel uden at åbne den",
- "open_next_feed" : "åben næste artikel eller kategori",
- "open_previous_feed" : "åben forrige artikel eller kategori",
- "open_close_current_entry" : "åben/luk nuværende artikel",
- "open_current_entry_in_new_window" : "åben nuværende artikel i et nyt vindue",
- "open_current_entry_in_new_window_background" : "åben nuværende artikel i et nyt vindue i baggrunden",
- "star_unstar" : "marker/fjern favorit",
- "mark_current_entry" : "marker som læst/ulæst",
- "mark_all_as_read" : "marker alle artikler som læste",
- "open_in_new_tab_mark_as_read" : "åben artikel i ny fane og marker som læst",
- "fullscreen" : "toggle full screen mode ",
- "font_size" : "increase/decrease font size of the current entry ",
- "go_to_all" : "go to the All view ",
- "go_to_starred" : "go to the Starred view ",
- "feed_search" : "naviger til et abonnoment ved at skrive dets navn"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/de.js b/commafeed-client/src/main/app/i18n/de.js
deleted file mode 100644
index 6a1ce51e..00000000
--- a/commafeed-client/src/main/app/i18n/de.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Speichern",
- "cancel" : "Abbrechen",
- "delete" : "Löschen",
- "required" : "Erforderlich",
- "download" : "Herunterladen",
- "link" : "Link",
- "bookmark" : "Lesezeichen",
- "close" : "Schließen",
- "tags" : "Tags"
- },
- "tree" : {
- "subscribe" : "Abonnieren",
- "import" : "Importieren",
- "new_category" : "Neue Kategorie",
- "all" : "Alles",
- "starred" : "Favoriten"
- },
- "subscribe" : {
- "feed_url" : "Feed Adresse",
- "feed_name" : "Feed Name",
- "category" : "Kategorie"
- },
- "import" : {
- "google_reader_prefix" : "Importiere die Feeds von deinem",
- "google_reader_suffix" : " Konto.",
- "google_download" : "Alternativ kannst du eine XML-Datei hochladen.",
- "google_download_link" : "Lade sie hier herunter.",
- "xml_file" : "OPML Datei"
- },
- "new_category" : {
- "name" : "Name",
- "parent" : "Übergeordnet"
- },
- "toolbar" : {
- "unread" : "Ungelesen",
- "all" : "Alles",
- "previous_entry" : "Vorheriger Artikel",
- "next_entry" : "Nächster Artikel",
- "refresh" : "Aktualisieren",
- "refresh_all" : "Erzwinge Aktualisierung aller Feeds",
- "sort_by_asc_desc" : "Nach Datum sortieren (auf-/absteigend)",
- "titles_only" : "Nur Überschriften",
- "expanded_view" : "Ausgedehnte Ansicht",
- "mark_all_as_read" : "Alle Artikel als gelesen markieren",
- "mark_all_older_12_hours" : "Artikel älter als 12 Stunden",
- "mark_all_older_day" : "Artikel älter als ein Tag",
- "mark_all_older_week" : "Artikel älter als eine Woche",
- "mark_all_older_two_weeks" : "Artikel älter als zwei Wochen",
- "settings" : "Einstellungen",
- "profile" : "Profil",
- "admin" : "Admin",
- "about" : "Über",
- "logout" : "Abmelden",
- "donate" : "Spenden"
- },
- "view" : {
- "entry_source" : "von",
- "entry_author" : "von ",
- "error_while_loading_feed" : "Fehler beim Laden des Feeds",
- "keep_unread" : "Als ungelesen behalten",
- "no_unread_items" : "hat keine ungelesenen Einträge.",
- "mark_up_to_here" : "Bis hier alle als gelesen markieren",
- "search_for" : "Suche nach:",
- "no_search_results" : "Kein Treffer bei der Suche nach den angegebenen Stichworten"
- },
- "feedsearch" : {
- "hint" : "Gib einen Feednamen ein...",
- "help" : "Drück Enter zum Auswählen und die Pfeiltasten zum Navigieren.",
- "result_prefix" : "Deine Feeds:"
- },
- "settings" : {
- "general" : {
- "value" : "Allgemein",
- "language" : "Sprache",
- "language_contribute" : "Beteilige dich mit Übersetzungen",
- "show_unread" : "Zeige Feeds und Kategorien mit ungelesenen Einträgen",
- "social_buttons" : "Zeige Buttons zum Teilen von Inhalten über soziale Netzwerke",
- "scroll_marks" : "In der ausgedehnten Ansicht werden Artikel beim Scrollen als gelesen markiert"
- },
- "appearance" : "Aussehen",
- "scroll_speed" : "Geschwindigkeit beim scrollen zwischen Einträgen (in Millisekunden)",
- "scroll_speed_help" : "setze auf 0 zum deaktivieren",
- "theme" : "Theme",
- "submit_your_theme" : "Füg dein Theme hinzu",
- "custom_css" : "Eigenes CSS"
- },
- "details" : {
- "feed_details" : "Feed details",
- "url" : "URL",
- "website" : "Webseite",
- "name" : "Name",
- "category" : "Kategorie",
- "position" : "Position",
- "last_refresh" : "Letzte Aktualisierung",
- "message" : "Nachricht der letzten Aktualisierung",
- "next_refresh" : "Nächste Aktualisierung",
- "queued_for_refresh" : "Wartet auf Aktualisierung",
- "feed_url" : "Feed Adresse",
- "generate_api_key_first" : "Generiere zuerst einen API Schlüssel in deinem Profil.",
- "unsubscribe" : "Kündigen",
- "unsubscribe_confirmation" : "Bist du sicher das du diesen Feed kündigen möchtest?",
- "delete_category_confirmation" : "Bist du sicher das du diese Kategorie löschen möchtest?",
- "category_details" : "Kategoriedetails",
- "tag_details" : "Tag Details",
- "parent_category" : "Übergeordnete Kategorie"
- },
- "profile" : {
- "user_name" : "Benutzername",
- "email" : "E-mail",
- "change_password" : "Passwort ändern",
- "confirm_password" : "Passwort bestätigen",
- "minimum_8_chars" : "Mindestens 8 Zeichen",
- "passwords_do_not_match" : "Passwörter stimmen nicht überein",
- "api_key" : "API Schlüssel",
- "api_key_not_generated" : "Noch nicht generiert",
- "generate_new_api_key" : "Generiere einen neuen API key",
- "generate_new_api_key_info" : "Das Ändern des Passwortes erzeugt einen neuen API Schlüssel",
- "opml_export" : "OPML exportieren",
- "delete_account" : "Konto löschen",
- "delete_account_confirmation" : "Dein Konto löschen? Es gibt kein Zurück!"
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed basiert auf JAX-RS und AngularJS. Daher ist eine REST API verfügbar.",
- "link_to_documentation" : "Link zur Dokumentation."
- },
- "keyboard_shortcuts" : "Tastatur Kurzbefehle",
- "version" : "CommaFeed Version",
- "line1_prefix" : "CommaFeed ist ein quell-offenes Projekt. Quellen werden auf ",
- "line1_suffix" : " gehosted.",
- "line2_prefix" : "Wenn Probleme auftauchen, melde diese bitte auf dem ",
- "line2_suffix" : " Projekt.",
- "line3" : "Wenn dir dieses Projekt gefällt, würde ich mich über eine kleine Spende zur Deckung der Serverkosten freuen.",
- "line4" : "Für diejenigen, die Bitcoin bevorzugen ist hier meine Adresse ",
- "goodies" : {
- "value" : "Goodies",
- "android_app" : "Android app",
- "subscribe_url" : "Abonnement-URL",
- "chrome_extension" : "Chrome Erweiterung",
- "firefox_extension" : "Firefox Add-on",
- "opera_extension" : "Opera Erweiterung",
- "subscribe_bookmarklet" : "Abonnieren-bookmarklet (klicken)",
- "subscribe_bookmarklet_asc" : "Älteste zuerst",
- "subscribe_bookmarklet_desc" : "Neuste zuerst",
- "next_unread_bookmarklet" : "Nächster ungelesener Artikel-bookmarklet (in Lesezeichenleiste ziehen)"
- },
- "translation" : {
- "value" : "Übersetzung",
- "message" : "Wir brauchen deine Hilfe zur Übersetzung von CommaFeed.",
- "link" : "Wie du uns dabei helfen kannst"
- },
- "announcements" : "Neuigkeiten",
- "shortcuts" : {
- "mouse_middleclick" : "Mittlere Maustaste",
- "open_next_entry" : "nächsten Artikel öffnen",
- "open_previous_entry" : "vorherigen Artikels öffnen",
- "spacebar" : "Leertaste/Shift+Leertaste",
- "move_page_down_up" : "Bewegt die Seite hoch/runter",
- "focus_next_entry" : "nächsten Artikel fokussieren ohne ihn zu öffnen",
- "focus_previous_entry" : "vorherigen Artikel fokussieren ohne ihn zu öffnen",
- "open_next_feed" : "nächsten Feed oder Kategorie öffnen",
- "open_previous_feed" : "vorherigen Feed oder Kategorie öffnen",
- "open_close_current_entry" : "aktuellen Artikels öffnen/schließen",
- "open_current_entry_in_new_window" : "aktuellen Artikel in neuem Fenster öffnen",
- "open_current_entry_in_new_window_background" : "aktuellen Artikel in neuem Fenster im Hintergrund öffnen",
- "star_unstar" : "de-/favorisieren des aktuellen Artikels",
- "mark_current_entry" : "aktuellen Artikel als gelesen/ungelesen markieren",
- "mark_all_as_read" : "alle Artikel als gelesen markieren",
- "open_in_new_tab_mark_as_read" : "öffnen des Artikels in einem neuen Tab und als gelesen markieren",
- "fullscreen" : "Vollbildmodus an-/ausschalten",
- "font_size" : "Schriftgröße des aktuellen Artikels vergrößern/verkleinern",
- "go_to_all" : "Gehe zur Ansicht \"Alle\"",
- "go_to_starred" : "Gehe zur Ansicht \"Favoriten\"",
- "feed_search" : "zu einem Feed springen durch durch eingeben seines Namens"
- }
- }
-}
diff --git a/commafeed-client/src/main/app/i18n/en.js b/commafeed-client/src/main/app/i18n/en.js
deleted file mode 100644
index 7464a15f..00000000
--- a/commafeed-client/src/main/app/i18n/en.js
+++ /dev/null
@@ -1,184 +0,0 @@
-{
- "global" : {
- "save" : "Save",
- "cancel" : "Cancel",
- "delete" : "Delete",
- "required" : "Required",
- "download" : "Download",
- "link" : "Link",
- "bookmark" : "Bookmark",
- "close" : "Close",
- "tags" : "Tags"
- },
- "tree" : {
- "subscribe" : "Subscribe",
- "import" : "Import",
- "new_category" : "New category",
- "all" : "All",
- "starred" : "Starred"
- },
- "subscribe" : {
- "feed_url" : "Feed URL",
- "feed_name" : "Feed Name",
- "category" : "Category"
- },
- "import" : {
- "google_reader_prefix" : "Let me import your feeds from your ",
- "google_reader_suffix" : " account.",
- "google_download" : "Alternatively, upload your subscriptions.xml file.",
- "google_download_link" : "Download it from here.",
- "xml_file" : "OPML File"
- },
- "new_category" : {
- "name" : "Name",
- "parent" : "Parent"
- },
- "toolbar" : {
- "unread" : "Unread",
- "all" : "All",
- "previous_entry" : "Previous entry",
- "next_entry" : "Next entry",
- "refresh" : "Refresh",
- "refresh_all" : "Force refresh all my feeds",
- "sort_by_asc_desc" : "Sort by date asc/desc",
- "titles_only" : "Titles only",
- "expanded_view" : "Expanded view",
- "mark_all_as_read" : "Mark all as read",
- "mark_all_older_12_hours" : "Items older than 12 hours",
- "mark_all_older_day" : "Items older than a day",
- "mark_all_older_week" : "Items older than a week",
- "mark_all_older_two_weeks" : "Items older than two weeks",
- "settings" : "Settings",
- "profile" : "Profile",
- "admin" : "Admin",
- "about" : "About",
- "logout" : "Logout",
- "donate" : "Donate"
- },
- "view" : {
- "entry_source" : "from ",
- "entry_author" : "by ",
- "error_while_loading_feed" : "Error while loading this feed",
- "keep_unread" : "Keep unread",
- "no_unread_items" : "has no unread items.",
- "mark_up_to_here" : "Mark as read up to here",
- "search_for" : "searching for: ",
- "no_search_results" : "No match found for the requested keywords"
- },
- "feedsearch" : {
- "hint" : "Type in a subscription...",
- "help" : "Use the return key to select and arrow keys to navigate.",
- "result_prefix" : "Your subscriptions:"
- },
- "settings" : {
- "general" : {
- "value" : "General",
- "language" : "Language",
- "language_contribute" : "Contribute with translations",
- "show_unread" : "Show feeds and categories with no unread entries",
- "social_buttons" : "Show social sharing buttons",
- "scroll_marks" : "In expanded view, scrolling through entries mark them as read"
- },
- "appearance" : "Appearance",
- "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds)",
- "scroll_speed_help" : "set to 0 to disable",
- "theme" : "Theme",
- "submit_your_theme" : "Submit your theme",
- "custom_css" : "Custom CSS"
- },
- "details" : {
- "feed_details" : "Feed details",
- "url" : "URL",
- "website" : "Website",
- "name" : "Name",
- "category" : "Category",
- "position" : "Position",
- "last_refresh" : "Last refresh",
- "message" : "Last refresh message",
- "next_refresh" : "Next refresh",
- "queued_for_refresh" : "Queued for refresh",
- "feed_url" : "Feed URL",
- "filtering_expression" : "Filtering expression",
- "filtering_expression_help" : "If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read automatically.\nAvailable variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case to ease string comparison.\nExample: url.contains('youtube') or (author eq 'athou' and title.contains('github').\nComplete available syntax is available here.",
- "generate_api_key_first" : "Generate an API key in your profile first.",
- "unsubscribe" : "Unsubscribe",
- "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed?",
- "delete_category_confirmation" : "Are you sure you want to delete this category?",
- "category_details" : "Category details",
- "tag_details" : "Tag details",
- "parent_category" : "Parent category"
- },
- "profile" : {
- "user_name" : "User name",
- "email" : "E-mail",
- "current_password" : "Current Password",
- "change_password" : "Change password",
- "confirm_password" : "Confirm password",
- "minimum_8_chars" : "Minimum 8 characters",
- "passwords_do_not_match" : "Passwords do not match",
- "api_key" : "API key",
- "api_key_not_generated" : "Not generated yet",
- "generate_new_api_key" : "Generate new API key",
- "generate_new_api_key_info" : "Changing password will generate a new API key",
- "opml_export" : "OPML export",
- "delete_account" : "Delete account",
- "delete_account_confirmation" : "Delete your account? There's no turning back!"
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed is built on top of JAX-RS and AngularJS. As such, a REST API is available.",
- "link_to_documentation" : "Link to the documentation."
- },
- "keyboard_shortcuts" : "Keyboard shortcuts",
- "version" : "CommaFeed version",
- "line1_prefix" : "CommaFeed is an open-source project. Sources are hosted on ",
- "line1_suffix" : ".",
- "line2_prefix" : "If you encounter an issue, please report it on the issues page of the ",
- "line2_suffix" : " project.",
- "line3" : "If you like this project, please consider a donation to support the developer and help cover the costs of keeping this website online.",
- "line4" : "For those of you who prefer bitcoin, here is the address",
- "goodies" : {
- "value" : "Goodies",
- "android_app" : "Android app",
- "subscribe_url" : "Subscribe URL",
- "chrome_extension" : "Chrome extension",
- "firefox_extension" : "Firefox extension",
- "opera_extension" : "Opera extension",
- "subscribe_bookmarklet" : "Add subscription bookmarklet (click)",
- "subscribe_bookmarklet_asc" : "Oldest first",
- "subscribe_bookmarklet_desc" : "Newest first",
- "next_unread_bookmarklet" : "Next unread item bookmarklet (drag to bookmark bar)"
- },
- "translation" : {
- "value" : "Translation",
- "message" : "We need your help to translate CommaFeed.",
- "link" : "See how to contribute with translations."
- },
- "announcements" : "Announcements",
- "shortcuts" : {
- "mouse_middleclick" : "mouse middleclick",
- "open_next_entry" : "open next entry",
- "open_previous_entry" : "open previous entry",
- "spacebar" : "space/shift+space",
- "move_page_down_up" : "moves the page down/up",
- "focus_next_entry" : "set focus on next entry without opening it",
- "focus_previous_entry" : "set focus on previous entry without opening it",
- "open_next_feed" : "open next feed or category",
- "open_previous_feed" : "open previous feed or category",
- "open_close_current_entry" : "open/close current entry",
- "open_current_entry_in_new_window" : "open current entry in a new window",
- "open_current_entry_in_new_window_background" : "open current entry in a new window in the background",
- "star_unstar" : "star/unstar current entry",
- "mark_current_entry" : "mark as read/unread current entry",
- "mark_all_as_read" : "mark all entries as read",
- "open_in_new_tab_mark_as_read" : "open entry in new tab and mark as read",
- "fullscreen" : "toggle full screen mode",
- "font_size" : "increase/decrease font size of the current entry",
- "go_to_all" : "go to the All view",
- "go_to_starred" : "go to the Starred view",
- "feed_search" : "navigate to a subscription by entering the subscription name",
- "refresh": "refresh"
- }
- }
-}
diff --git a/commafeed-client/src/main/app/i18n/es.js b/commafeed-client/src/main/app/i18n/es.js
deleted file mode 100644
index af648dd5..00000000
--- a/commafeed-client/src/main/app/i18n/es.js
+++ /dev/null
@@ -1,182 +0,0 @@
-{
- "global" : {
- "save" : "Guardar",
- "cancel" : "Cancelar",
- "delete" : "Eliminar",
- "required" : "Requerido",
- "download" : "Descargar",
- "link" : "Enlace",
- "bookmark" : "Marcador",
- "close" : "Cerrar",
- "tags" : "Etiquetas"
- },
- "tree" : {
- "subscribe" : "Suscribirse",
- "import" : "Importar",
- "new_category" : "Nueva categoría",
- "all" : "Todos",
- "starred" : "Destacados"
- },
- "subscribe" : {
- "feed_url" : "URL del canal",
- "filtering_expression" : "Expresión de filtrado",
- "filtering_expression_help" : "Si no está vacía, una expresión se evalúa como 'cierta' o 'falsa'. Si es falsa, las nueva entradas de este canal se marcarán como leídas automáticamente.\nLas variables disponibles son 'title' (título), 'content'(contenido), 'url' (URL), 'author' (autor), y 'categories' (categorías) y sus contenidos son convertidos a minúsculas para facilitar la comparación de strings (cadenas de texto).\nEjemplo: url.contains('youtube') or (author eq 'athou' and title.contains('github').\nLa sintaxis completa está disponible aquí.",
- "feed_name" : "Nombre del canal",
- "category" : "Categoría"
- },
- "import" : {
- "google_reader_prefix" : "Déjame importar tus canales de tu cuenta ",
- "google_reader_suffix" : ".",
- "google_download" : "También puedes subir tu archivo subscriptions.xml.",
- "google_download_link" : "Descárgalo de aquí.",
- "xml_file" : "Archivo OPML"
- },
- "new_category" : {
- "name" : "Nombre",
- "parent" : "Padre"
- },
- "toolbar" : {
- "unread" : "No leídos",
- "all" : "Todos",
- "previous_entry" : "Entrada anterior",
- "next_entry" : "Entrada siguiente",
- "refresh" : "Actualizar",
- "refresh_all" : "Forzar la actualización de todos mis canales.",
- "sort_by_asc_desc" : "Ordenar por fecha asc/desc.",
- "titles_only" : "Sólo títulos",
- "expanded_view" : "Vista expandida",
- "mark_all_as_read" : "Marcar todos como leído",
- "mark_all_older_12_hours" : "Entradas anteriores a 12 horas.",
- "mark_all_older_day" : "Entradas anteriores a un día.",
- "mark_all_older_week" : "Entradas anteriores a una semana.",
- "mark_all_older_two_weeks" : "Entradas anteriores a 2 semanas.",
- "settings" : "Ajustes",
- "profile" : "Perfil",
- "admin" : "Admin",
- "about" : "Acerca de...",
- "logout" : "Cerrar sesión",
- "donate" : "Donar"
- },
- "view" : {
- "entry_source" : "de ",
- "entry_author" : "por ",
- "error_while_loading_feed" : "Error mientras se cargaba este canal.",
- "keep_unread" : "Mantener como no leído.",
- "no_unread_items" : "no tiene entradas sin leer.",
- "mark_up_to_here" : "Marcar como leídos hasta aquí.",
- "search_for" : "buscando: ",
- "no_search_results" : "No se han encontrado resultados para las palabras clave especificadas."
- },
- "feedsearch" : {
- "hint" : "Introduce una suscripción...",
- "help" : "Usa la tecla Intro para seleccionar y las teclas de flecha para navegar.",
- "result_prefix" : "Tus suscripciones:"
- },
- "settings" : {
- "general" : {
- "value" : "General",
- "language" : "Idioma",
- "language_contribute" : "Contribuye con traducciones.",
- "show_unread" : "Mostrar canales y categorías sin entradas no leídas.",
- "social_buttons" : "Mostrar botones para compartir de redes sociales.",
- "scroll_marks" : "En vista expandida, el desplazamiento por las entradas las marca como leídas."
- },
- "appearance" : "Apariencia",
- "scroll_speed" : "Velocidad de desplazamiento al navegar entre entradas (en milisegundos)",
- "scroll_speed_help" : "ponlo a 0 para desactivarlo",
- "theme" : "Tema",
- "submit_your_theme" : "Envía tu tema ",
- "custom_css" : "CSS personalizado"
- },
- "details" : {
- "feed_details" : "Detalles del canal",
- "url" : "URL",
- "website" : "Sitio web",
- "name" : "Nombre",
- "category" : "Categoría",
- "position" : "Posición",
- "last_refresh" : "Última actualización",
- "message" : "Último mensaje de actualización",
- "next_refresh" : "Próxima actualización",
- "queued_for_refresh" : "En cola para actualizar",
- "feed_url" : "URL del canal",
- "generate_api_key_first" : "Genera una clave API en tu perfil primero.",
- "unsubscribe" : "Terminar suscripción",
- "unsubscribe_confirmation" : "¿Estás seguro de querer terminar tu suscripción a este canal?",
- "delete_category_confirmation" : "¿Estás seguro de querer eliminar esta categoría?",
- "category_details" : "Detalles de la categoría",
- "tag_details" : "Detalles de las etiquetas ",
- "parent_category" : "Categoría principal"
- },
- "profile" : {
- "user_name" : "Nombre de usuario",
- "email" : "Correo electrónico",
- "change_password" : "Cambiar contraseña",
- "confirm_password" : "Confirmar contraseña",
- "minimum_8_chars" : "Mínimo 8 caracteres",
- "passwords_do_not_match" : "Las contraseñas no coinciden",
- "api_key" : "Clave API",
- "api_key_not_generated" : "No generado todavía",
- "generate_new_api_key" : "Generar nueva clave API",
- "generate_new_api_key_info" : "Al cambiar la contraseña se generará una nueva clave API.",
- "opml_export" : "Exportación de OPML",
- "delete_account" : "Eliminar cuenta",
- "delete_account_confirmation" : "¿Eliminar tu cuenta? ¡No habrá vuelta atrás! "
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed está construido sobre JAX-RS y AngularJS. Por lo tanto, una REST API está disponible.",
- "link_to_documentation" : "Enlace a la documentación."
- },
- "keyboard_shortcuts" : "Atajos de teclado",
- "version" : "Versión de CommaFeed",
- "line1_prefix" : "CommaFeed es un proyecto de código abierto. El código se encuentra en ",
- "line1_suffix" : ".",
- "line2_prefix" : "Si encuentras un problema, por favor repórtalo en la página de problemas de ",
- "line2_suffix" : " del proyecto.",
- "line3" : "Si te gusta este proyecto, por favor considera realizar una donación para apoyar al desarrollador y ayudar a cubrir los costes de mantenimiento.",
- "line4" : "Para aquellos de vosotros que prefieran bitcoin, aquí está la dirección ",
- "goodies" : {
- "value" : "Extras",
- "android_app" : "Apps para Android",
- "subscribe_url" : "URL para suscribirse ",
- "chrome_extension" : "Extensión para Chrome.",
- "firefox_extension" : "Extensión para Firefox.",
- "opera_extension" : "Extensón para Opera.",
- "subscribe_bookmarklet" : "Añadir marcador de suscripción (clic).",
- "subscribe_bookmarklet_asc" : "Más antiguos primero",
- "subscribe_bookmarklet_desc" : "Más recientes primero",
- "next_unread_bookmarklet" : "Marcador a la siguiente entrada no leída (arástralo a la barra de marcadores) "
- },
- "translation" : {
- "value" : "Traducción",
- "message" : "Necesitamos tu ayuda para ayudar a traducir CommaFeed.",
- "link" : "Ver cómo contribuir con traducciones."
- },
- "announcements" : "Anuncios",
- "shortcuts" : {
- "mouse_middleclick" : "click medio",
- "open_next_entry" : "abrir la siguiente entrada",
- "open_previous_entry" : "abrir la entrada anterior",
- "spacebar" : "espacio/mayúsculas+espacio",
- "move_page_down_up" : "mueve la página arriba/abajo",
- "focus_next_entry" : "establecer el foco en la siguiente entrada sin abrirla",
- "focus_previous_entry" : "establecer el foco en la entrada anterior sin abrirla",
- "open_next_feed" : "abrir el siguiente canal o categoría",
- "open_previous_feed" : "abrir el canal o categoría previo",
- "open_close_current_entry" : "abrir/cerrar la entrada actual",
- "open_current_entry_in_new_window" : "abrir la entrada actual en una nueva ventana",
- "open_current_entry_in_new_window_background" : "abrir la entrada actual en una nueva ventana en segundo plano",
- "star_unstar" : "destacar la entrada actual",
- "mark_current_entry" : "marcar la entrada actual como leída/no la leída",
- "mark_all_as_read" : "marcar todas las entradas como leídas",
- "open_in_new_tab_mark_as_read" : "abrir entrada en una nueva pestaña y marcar como leída",
- "fullscreen" : "activar/desactivar el modo pantalla completa ",
- "font_size" : "aumentar/reducir el tamaño de la fuente de la entrada actual",
- "go_to_all" : "ver Todos",
- "go_to_starred" : "ver Destacados",
- "feed_search" : "navega a una suscripción al introducir su nombre"
- }
- }
-}
diff --git a/commafeed-client/src/main/app/i18n/fa.js b/commafeed-client/src/main/app/i18n/fa.js
deleted file mode 100644
index 2c7e8453..00000000
--- a/commafeed-client/src/main/app/i18n/fa.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "ذخیره",
- "cancel" : "لغو",
- "delete" : "حذف",
- "required" : "لازم",
- "download" : "بارگیری",
- "link" : "پیوند",
- "bookmark" : "بوکمارک",
- "close" : "بستن",
- "tags" : "برجسپها"
- },
- "tree" : {
- "subscribe" : "مشترک شوید",
- "import" : "درونریزی",
- "new_category" : "ردهٔ جدید",
- "all" : "کل مطالب",
- "starred" : "ستارهدار"
- },
- "subscribe" : {
- "feed_url" : "نشانی خوراک",
- "feed_name" : "نام خوراک",
- "category" : "دسته"
- },
- "import" : {
- "google_reader_prefix" : "اجازه بده خوراکهایتان را از حساب",
- "google_reader_suffix" : "وارد سازم.",
- "google_download" : "یا به جای آن، پروندهٔ subscriptions.xml خود را بارگذاری کنید.",
- "google_download_link" : "آن را اینجا بارگیری کنید.",
- "xml_file" : "پروندهٔ OPML"
- },
- "new_category" : {
- "name" : "نام",
- "parent" : "پدر"
- },
- "toolbar" : {
- "unread" : "خواندهنشده",
- "all" : "همه",
- "previous_entry" : "مطلب قبلی",
- "next_entry" : "مطلب بعدی",
- "refresh" : "تازهسازی",
- "refresh_all" : "مجبورکردن تازهسازی همهٔ خوراکها",
- "sort_by_asc_desc" : "مرتبکردن بر اساس تاریخ بهصورت صعودی/نزولی",
- "titles_only" : "فقط عنوانها",
- "expanded_view" : "نمای گسترشیافته",
- "mark_all_as_read" : "علامتگذاری تمامی مطالب بهعنوان خواندهشده",
- "mark_all_older_12_hours" : "مطالب قدیمیتر از ۱۲ ساعت",
- "mark_all_older_day" : "مطالب قدیمیتر از یک روز",
- "mark_all_older_week" : "مطالب قدیمیتر از یک هفته",
- "mark_all_older_two_weeks" : "مطالب قدیمی تر از چند هفته قیل",
- "settings" : "تنظیمات",
- "profile" : "نمایه",
- "admin" : "مدیریت",
- "about" : "درباره",
- "logout" : "خروج",
- "donate" : "کمک مالی"
- },
- "view" : {
- "entry_source" : "از",
- "entry_author" : "توسط",
- "error_while_loading_feed" : "متأسفانه، هنگام بارگیری این خوراک خطایی رخدادهاست.",
- "keep_unread" : "خواندهنشده نگهدار",
- "no_unread_items" : "هیچ مطلب خواندهنشدهای ندارد.",
- "mark_up_to_here" : "تا اینجا را خواندهشده در نظر بگیر",
- "search_for" : "جستجو برای:",
- "no_search_results" : "هیج نتیجهای برای کلیدواژههای درخواستی یافت نشد"
- },
- "feedsearch" : {
- "hint" : "نوشتن بر روی یک اشتراک...",
- "help" : "دکمهٔ بازگشت برای انتخاب و دکمههای جهتدار را برای ناوبری استفاده کن.",
- "result_prefix" : "اشتراکهای شما:"
- },
- "settings" : {
- "general" : {
- "value" : "همگانی",
- "language" : "زبان",
- "language_contribute" : "مشارکت در ترجمه",
- "show_unread" : "تنها خوراکها و دستههای را که دارای مطالب نخوانده هستند نمایش بده.",
- "social_buttons" : "نشاندادن دکمههای اشتراکگذاری در شبکههای اجتماعی",
- "scroll_marks" : "در نمای گسترشیافته، لغزیدن بر روی مطالب بهعنوان نشانهگذاری بهعنوان خواندهشده در نظر گرفتهشوند."
- },
- "appearance" : "ظاهر",
- "scroll_speed" : "سرعت لغزش هنگام گشتن بین مدخلها (به میلیثانیه)",
- "scroll_speed_help" : "قراردادن به ۰ برای غیرفعالکردن",
- "theme" : "پوسته",
- "submit_your_theme" : "پوستهٔ خود را ارسالکنید",
- "custom_css" : "سیاساس شخصیسازیشده"
- },
- "details" : {
- "feed_details" : "جزئیات خوراک",
- "url" : "نشانی",
- "website" : "وبگاه",
- "name" : "نام",
- "category" : "دسته",
- "position" : "موقعیت",
- "last_refresh" : "آخرین بروزرسانی",
- "message" : "پیام آخرین تازهسازی",
- "next_refresh" : "بروزرسانی بعدی",
- "queued_for_refresh" : "منتظر برای بروزرسانی",
- "feed_url" : "نشانی خوراک",
- "generate_api_key_first" : "ابتدا یک کلید API در نمایهٔ خود ایجاد کنید.",
- "unsubscribe" : "لغو اشتراک",
- "unsubscribe_confirmation" : "مطمئنید میخواهید از این این لغو اشتراک کنید؟",
- "delete_category_confirmation" : "مطمئنید میخواهید این رده را حذف کنید؟",
- "category_details" : "جزئیات دسته",
- "tag_details" : "جزئیات برچسپ",
- "parent_category" : "ردهٔ پدر"
- },
- "profile" : {
- "user_name" : "نام کاربری",
- "email" : "رایانامه",
- "change_password" : "تغییر گذرواژه",
- "confirm_password" : "تأیید گذرواژه",
- "minimum_8_chars" : "حداقل ۸ نویسه",
- "passwords_do_not_match" : "گذرواژهها انطباق ندارند",
- "api_key" : "کلید API",
- "api_key_not_generated" : "هنوز ایجاد نشدهاست",
- "generate_new_api_key" : "ایجاد کلید جدید API",
- "generate_new_api_key_info" : "تغییر گذرواژه کلید API بهوجود خواهد آورد.",
- "opml_export" : "خارجسازی OPML",
- "delete_account" : "حذف حساب کاربری",
- "delete_account_confirmation" : "حذف حسابتان؟ بازگشتی وجود ندارد!"
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "کامافید بر روی JAX-RS و AngularJS ساختهشدهاست. به همین دلیل API REST موجود است.",
- "link_to_documentation" : "پیوند به مستندات."
- },
- "keyboard_shortcuts" : "کلیدهای میانبر",
- "version" : "نسخهٔ کامافید",
- "line1_prefix" : "کامافید یک پروژه متنباز است. مخازن آن در ",
- "line1_suffix" : "میزبانی میشود.",
- "line2_prefix" : "اگر شما به مسئلهای برخورده اید، لطفاً آن را در صفحه مسائل گزارش دهید ",
- "line2_suffix" : " پروژه.",
- "line3" : "در صورتی که شما به این پروژه علاقمندید، لطفاً مبلغی را هرچند ناچیزه برای حمایت از توسعهدهنده و کمک به تأمین هزینههای نگهداری این وبگاه کمک کنید.",
- "line4" : "برای کسانی که بیتکوین را ترجیح میدهند، نشانی آن اینجاست",
- "goodies" : {
- "value" : "افزونهها",
- "android_app" : "برنامهٔ اندرویدی",
- "subscribe_url" : "اشتراک در نشانی",
- "chrome_extension" : "افزونهٔ کروم",
- "firefox_extension" : "افزونهٔ فایرفاکس",
- "opera_extension" : "افزونهٔ اپرا",
- "subscribe_bookmarklet" : "افزودن بوکمارکلت اشتراک (با کلیک)",
- "subscribe_bookmarklet_asc" : "اول قدیمیترینها",
- "subscribe_bookmarklet_desc" : "اول جدیدترینها",
- "next_unread_bookmarklet" : "بوکمارکلت مطلب خوانده نشدهٔ بعدی(با کشیدن و رهاکردن در نوار بوکمارکلت)"
- },
- "translation" : {
- "value" : "ترجمه",
- "message" : "ما به کمک شما برای ترجمهٔ کامافید نیازمدیم.",
- "link" : "ببینید چگونه میتوان در ترجمههای مشارکت نمود."
- },
- "announcements" : "اطلاعیهها",
- "shortcuts" : {
- "mouse_middleclick" : "کلیک وسطی موشواره",
- "open_next_entry" : "بازکردن مطلب بعدی",
- "open_previous_entry" : "بازکردن مطلب قبلی",
- "spacebar" : "space/shift+space",
- "move_page_down_up" : "صفحه را بالا/پایین انتقال میدهد",
- "focus_next_entry" : "رفتن بر روی مطلب بعدی بدون بازکردن کامل آن",
- "focus_previous_entry" : "رفتن بر روی مطلب بعدی قبلی بازکردن کامل آن",
- "open_next_feed" : "بازکردن خوراک یا دستهٔ بعدی",
- "open_previous_feed" : "بازکردن خوراک یا دستهٔ بعدی",
- "open_close_current_entry" : "باز/بستن مطلب جاری",
- "open_current_entry_in_new_window" : "بازکردن مطلب جاری در پنجرهای جدید",
- "open_current_entry_in_new_window_background" : "بازکردن مطلب جاری در پنجرهای جدید در پسزمینه",
- "star_unstar" : "نشانهدارکردن/نکردن مطلب جاری",
- "mark_current_entry" : "علامتگذاری مطلب جاری بهعنوان خواندهشده/نشده",
- "mark_all_as_read" : "علامتگذاری تمامی مطالب بهعنوان خواندهشده",
- "open_in_new_tab_mark_as_read" : "بازکردن مطلب در سربرگ جدید و علامتگذاری آن بهعنوان خواندهشده",
- "fullscreen" : "فعال/غیرفعالکردن حالت تمام صفحه",
- "font_size" : "افزایش/کاهش اندازهٔ قلم مدخل فعلی",
- "go_to_all" : "رفتن به نمای همه",
- "go_to_starred" : "رفتن به نمای ستاره دادهشدهها",
- "feed_search" : "ناوبری به یک اشتراک با نوشتن نام اشتراک"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/fi.js b/commafeed-client/src/main/app/i18n/fi.js
deleted file mode 100644
index 3a74f0c6..00000000
--- a/commafeed-client/src/main/app/i18n/fi.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Tallenna",
- "cancel" : "Peruuta",
- "delete" : "Poista",
- "required" : "Pakollinen",
- "download" : "Lataa",
- "link" : "Linkki",
- "bookmark" : "Kirjanmerkki",
- "close" : "Sulje",
- "tags" : "Tagit"
- },
- "tree" : {
- "subscribe" : "Tilaa syöte",
- "import" : "Tuo",
- "new_category" : "Uusi kansio",
- "all" : "Kaikki",
- "starred" : "Tähdelliset"
- },
- "subscribe" : {
- "feed_url" : "Syötteen osoite",
- "feed_name" : "Syötteen nimi",
- "category" : "Kansio"
- },
- "import" : {
- "google_reader_prefix" : "Tuo tilaukset",
- "google_reader_suffix" : "-tunnukseltasi.",
- "google_download" : "Vaihtoehtoisesti voit tuoda tilaukset subscriptions.xml -tiedostolla.",
- "google_download_link" : "Lataa se täältä.",
- "xml_file" : "OPML-tiedosto"
- },
- "new_category" : {
- "name" : "Nimi",
- "parent" : "Yläkansio"
- },
- "toolbar" : {
- "unread" : "Lukemattomat",
- "all" : "Kaikki",
- "previous_entry" : "Edellinen otsikko",
- "next_entry" : "Seuraava otsikko",
- "refresh" : "Päivitä",
- "refresh_all" : "Pakota kaikkien syötteiden päivitys",
- "sort_by_asc_desc" : "Järjestä päivämäärän mukaan nousevasti/laskevasti",
- "titles_only" : "Näytä vain otsikot",
- "expanded_view" : "Laajennettu näkymä",
- "mark_all_as_read" : "Merkitse kaikki luetuiksi",
- "mark_all_older_12_hours" : "12 tuntia vanhemmat otsikot",
- "mark_all_older_day" : "Päivää vanhemmat otsikot",
- "mark_all_older_week" : "Viikkoa vanhemmat otsikot",
- "mark_all_older_two_weeks" : "Kahta viikkoa vanhemmat otsikot",
- "settings" : "Asetukset",
- "profile" : "Profiili",
- "admin" : "Ylläpito",
- "about" : "Tietoja",
- "logout" : "Kirjaudu ulos",
- "donate" : "Lahjoita"
- },
- "view" : {
- "entry_source" : "syötteestä",
- "entry_author" : "kirjoittanut",
- "error_while_loading_feed" : "Virhe tilausta ladattaessa",
- "keep_unread" : "Pidä lukemattomana",
- "no_unread_items" : "ei sisällä lukemattomia otsikoita.",
- "mark_up_to_here" : "Merkitse luetuksi tähän asti",
- "search_for" : "Etsi sanoilla:",
- "no_search_results" : "Ei tuloksia annetuilla hakusanoilla."
- },
- "feedsearch" : {
- "hint" : "Kirjoita syötteen nimi...",
- "help" : "Siirry syötteiden välillä nuolinäppäimillä ja valitse syöte enterillä.",
- "result_prefix" : "Tilatut syötteesi:"
- },
- "settings" : {
- "general" : {
- "value" : "Yleiset",
- "language" : "Kieli",
- "language_contribute" : "Avusta käännösten tekemisessä.",
- "show_unread" : "Näytä syötteet ja kansiot, joissa ei ole lukemattomia otsikoita",
- "social_buttons" : "Näytä jakonapit",
- "scroll_marks" : "Laajennetussa näkymässä otsikoiden selaaminen merkitsee ne luetuiksi"
- },
- "appearance" : "Ulkonäkö",
- "scroll_speed" : "Vieritysnopeus otsikoiden välillä navigoidessa (millisekunneissa)",
- "scroll_speed_help" : "Aseta 0 poistaaksesi vieritys käytöstä.",
- "theme" : "Teema",
- "submit_your_theme" : "Lähetä oma teemasi",
- "custom_css" : "Oma CSS"
- },
- "details" : {
- "feed_details" : "Tilauksen tiedot",
- "url" : "Osoite",
- "website" : "Sivusto",
- "name" : "Nimi",
- "category" : "Kansio",
- "position" : "Paikka",
- "last_refresh" : "Viimeisin päivitys",
- "message" : "Viimeisimmän päivityksen viesti",
- "next_refresh" : "Seuraava päivitys",
- "queued_for_refresh" : "Jonossa päivitettäväksi",
- "feed_url" : "Syötteen osoite",
- "generate_api_key_first" : "Luo API-avain profiilissasi.",
- "unsubscribe" : "Peruuta tilaus",
- "unsubscribe_confirmation" : "Haluatko varmasti lopettaa tämän syötteen tilauksen?",
- "delete_category_confirmation" : "Haluatko varmasti poistaa tämän kansion?",
- "category_details" : "Kansion tiedot",
- "tag_details" : "Tagin tiedot",
- "parent_category" : "Yläkansio"
- },
- "profile" : {
- "user_name" : "Käyttäjänimi",
- "email" : "Sähköposti",
- "change_password" : "Vaihda salasana",
- "confirm_password" : "Vahvista uusi salasana",
- "minimum_8_chars" : "Vähintään 8 merkkiä",
- "passwords_do_not_match" : "Salasanat eivät täsmää",
- "api_key" : "API-avain",
- "api_key_not_generated" : "API-avainta ei ole vielä luotu",
- "generate_new_api_key" : "Luo uusi API-avain",
- "generate_new_api_key_info" : "Salasanan vaihtaminen luo uuden API-avaimen",
- "opml_export" : "OPML vienti",
- "delete_account" : "Poista tunnus",
- "delete_account_confirmation" : "Haluatko varmasti poistaa tunnuksesi? Tätä ei voi perua!"
- },
- "about" : {
- "rest_api" : {
- "value" : "REST-API",
- "line1" : "CommaFeed on rakennettu JAX-RS:n ja AngularJS:n avulla. REST API on myös saatavilla.",
- "link_to_documentation" : "Linkki dokumentaatioon."
- },
- "keyboard_shortcuts" : "Näppäinoikotiet",
- "version" : "CommaFeedin versio",
- "line1_prefix" : "CommaFeed on avoimen lähdekoodin projekti. Lähdekoodi on saatavilla ",
- "line1_suffix" : ":ssa.",
- "line2_prefix" : "Jos huomaat ongelmia, ilmoita niistä ",
- "line2_suffix" : "-projektin ongelmasivulla.",
- "line3" : "Jos pidät CommaFeedistä, harkitse lahjoitusta kehittäjää tukeaksesi ja auttaaksesi sivuston kulujen kattamisessa.",
- "line4" : "Tässä myös osoite bitcoin-lahjoituksia varten:",
- "goodies" : {
- "value" : "Ekstrat",
- "android_app" : "Android-sovellus",
- "subscribe_url" : "Tilausosoite",
- "chrome_extension" : "Chrome-laajennus",
- "firefox_extension" : "Firefox-laajennus",
- "opera_extension" : "Opera-laajennus",
- "subscribe_bookmarklet" : "Lisää tilaus -kirjanmerkki (klikkaa) ",
- "subscribe_bookmarklet_asc" : "Vanhin ensiksi",
- "subscribe_bookmarklet_desc" : "Uusin ensiksi",
- "next_unread_bookmarklet" : "Seuraava lukematon otsikko -kirjanmerkki (raahaa kirjanmerkkipalkkiin)"
- },
- "translation" : {
- "value" : "Kääntäminen",
- "message" : "Tarvitsemme apuasi CommaFeedin kääntämiseksi.",
- "link" : "Katso kuinka voit auttaa kännösten tekemisessä."
- },
- "announcements" : "Ilmoitukset",
- "shortcuts" : {
- "mouse_middleclick" : "hiiren keskinappi",
- "open_next_entry" : "avaa seuraava otsikko",
- "open_previous_entry" : "avaa edellinen otsikko",
- "spacebar" : "välilyönti/shift+välilyönti",
- "move_page_down_up" : "liikuta sivua ylös tai alas",
- "focus_next_entry" : "valitse seuraava otsikko sitä avaamatta",
- "focus_previous_entry" : "valitse edellinen otsikko sitä avaamatta",
- "open_next_feed" : "avaa seuraava kansio tai syöte",
- "open_previous_feed" : "avaa edellinen kansio tai syöte",
- "open_close_current_entry" : "avaa tai sulje valittu otsikko",
- "open_current_entry_in_new_window" : "avaa valittu otsikko uudessa ikkunassa",
- "open_current_entry_in_new_window_background" : "avaa valittu otsikko uudessa ikkunassa taustalla",
- "star_unstar" : "merkitse valittu otsikko tähdelliseksi",
- "mark_current_entry" : "merkitse valittu otsikko luetuksi tai lukemattomaksi",
- "mark_all_as_read" : "merkitse kaikki otsikot luetuiksi",
- "open_in_new_tab_mark_as_read" : "avaa otsikko uudessa ikkunassa ja merkitse se luetuksi",
- "fullscreen" : "siirry kokoruututilaan",
- "font_size" : "suurenna/pienennä valitun artikkelin kirjasinkokoa",
- "go_to_all" : "Siirry Kaikki-näkymään",
- "go_to_starred" : "Siirry Tähdelliset-näkymään",
- "feed_search" : "etsi tilaus sen nimen perusteella"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/fr.js b/commafeed-client/src/main/app/i18n/fr.js
deleted file mode 100644
index a5cc271b..00000000
--- a/commafeed-client/src/main/app/i18n/fr.js
+++ /dev/null
@@ -1,181 +0,0 @@
-{
- "global" : {
- "save" : "Enregistrer",
- "cancel" : "Annuler",
- "delete" : "Effacer",
- "required" : "Obligatoire",
- "download" : "Télécharger",
- "link" : "Lien",
- "bookmark" : "Favoris",
- "close" : "Fermer",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe" : "S'abonner",
- "import" : "Importer",
- "new_category" : "Nouvelle catégorie",
- "all" : "Tous",
- "starred" : "Favoris"
- },
- "subscribe" : {
- "feed_url" : "URL du flux",
- "feed_name" : "Nom du flux",
- "category" : "Catégorie"
- },
- "import" : {
- "google_reader_prefix" : "Laissez-moi importer vos flux depuis votre compte ",
- "google_reader_suffix" : ".",
- "google_download" : "Ou alors, téléchargez votre fichier subscriptions.xml.",
- "google_download_link" : "Récupérez-le ici.",
- "xml_file" : "Fichier OPML"
- },
- "new_category" : {
- "name" : "Nom",
- "parent" : "Parent"
- },
- "toolbar" : {
- "unread" : "Non lus",
- "all" : "Tous",
- "previous_entry" : "Article précédent",
- "next_entry" : "Article suivant",
- "refresh" : "Rafraîchir",
- "refresh_all" : "Rafraîchir tous les flux",
- "sort_by_asc_desc" : "Trier par date croissante/décroissante",
- "titles_only" : "Titres uniquement",
- "expanded_view" : "Vue étendue",
- "mark_all_as_read" : "Tout marquer comme lu",
- "mark_all_older_12_hours" : "Articles de plus de 12 heures",
- "mark_all_older_day" : "Articles de plus d'une journée",
- "mark_all_older_week" : "Articles de plus d'une semaine",
- "mark_all_older_two_weeks" : "Articles de plus d'un mois",
- "settings" : "Préférences",
- "profile" : "Profil",
- "admin" : "Administration",
- "about" : "À propos",
- "logout" : "Déconnexion",
- "donate" : "Faire un don"
- },
- "view" : {
- "entry_source" : "sur",
- "entry_author" : "par ",
- "error_while_loading_feed" : "Erreur durant le chargement de ce flux",
- "keep_unread" : "Garder non lu",
- "no_unread_items" : "n'a pas d'articles non lus.",
- "mark_up_to_here" : "Marquer comme lu jusqu'ici",
- "search_for" : "recherche : ",
- "no_search_results" : "Pas de résultats avec le terme indiqué."
- },
- "feedsearch" : {
- "hint" : "Tapez un nom de flux",
- "help" : "Utilisez la touche entrée pour sélectionner et les flèches pour naviguer",
- "result_prefix" : "Vos flux :"
- },
- "settings" : {
- "general" : {
- "value" : "Général",
- "language" : "Langue",
- "language_contribute" : "Contribuer aux traductions",
- "show_unread" : "Afficher les flux et les catégories pour lesquels tout est déjà lu",
- "social_buttons" : "Afficher les boutons de partage sur les réseaux sociaux",
- "scroll_marks" : "En mode de lecture étendu, marquer les éléments comme lus lorsque la fenêtre descend."
- },
- "appearance" : "Apparence",
- "scroll_speed" : "Vitesse de défilement entre les entrées (en millisecondes) ",
- "scroll_speed_help" : "Mettez 0 pour désactiver",
- "theme" : "Thème",
- "submit_your_theme" : "Soumettez votre thème.",
- "custom_css" : "CSS personnelle"
- },
- "details" : {
- "feed_details" : "Détails du flux",
- "url" : "URL",
- "website" : "Site web",
- "name" : "Nom",
- "category" : "Catégorie",
- "position" : "Position",
- "last_refresh" : "Dernière mise à jour",
- "message" : "Message de la dernière mise à jour ",
- "next_refresh" : "Prochaine mise à jour",
- "queued_for_refresh" : "En file d'attente",
- "feed_url" : "URL du flux",
- "generate_api_key_first" : "Générez d'abord une clé API dans votre profil.",
- "unsubscribe" : "Se désabonner",
- "unsubscribe_confirmation" : "Êtes-vous sûr de vouloir vous désabonner de de flux ? ",
- "delete_category_confirmation" : "Êtes-vous sûr de vouloir supprimer cette catégorie ? ",
- "category_details" : "Détails de la catégorie",
- "tag_details" : "Détails du tag",
- "parent_category" : "Catégorie parente"
- },
- "profile" : {
- "user_name" : "Nom",
- "email" : "E-mail",
- "current_password" : "Mot de passe actuel",
- "change_password" : "Changer de mot de passe",
- "confirm_password" : "Confirmer le mot de passe",
- "minimum_8_chars" : "Minimum 8 caractères",
- "passwords_do_not_match" : "Les mots de passe ne correspondent pas",
- "api_key" : "Clé API",
- "api_key_not_generated" : "Pas encore générée",
- "generate_new_api_key" : "Générer une nouvelle clé API",
- "generate_new_api_key_info" : "Changer de mot de passe générera une nouvelle clé API",
- "opml_export" : "Export du fichier OPML",
- "delete_account" : "Effacer le compte",
- "delete_account_confirmation" : "Êtes-vous sûr de vouloir supprimer définitivement votre compte ?"
- },
- "about" : {
- "rest_api" : {
- "value" : "API REST",
- "line1" : "CommaFeed utilise JAX-RS et AngularJS, une API REST est donc disponible.",
- "link_to_documentation" : "Lien vers la documentation."
- },
- "keyboard_shortcuts" : "Raccourcis clavier",
- "version" : "CommaFeed version",
- "line1_prefix" : "CommaFeed est un projet open-source. Les sources sont disponibles sur ",
- "line1_suffix" : ".",
- "line2_prefix" : "Si vous rencontrez un problème, rapportez-le sur la page du projet sur ",
- "line2_suffix" : ".",
- "line3" : "Si vous aimez ce projet, n'hésitez pas à faire un don pour encourager le développeur et aider à couvrir les coûts d'hébergement de la plate-forme.",
- "line4" : "Pour ceux qui préfèrent Bitcoin, voici l'adresse",
- "goodies" : {
- "value" : "Extensions",
- "android_app" : "App Android",
- "subscribe_url" : "URL pour s'abonner",
- "chrome_extension" : "Extension Chrome",
- "firefox_extension" : "Extension Firefox",
- "opera_extension" : "Extension Opera",
- "subscribe_bookmarklet" : "Bookmarklet d'ajout d'abonnement",
- "subscribe_bookmarklet_asc" : "Du plus ancien au plus récent",
- "subscribe_bookmarklet_desc" : "Du plus récent au plus ancien",
- "next_unread_bookmarklet" : "Bookmarklet vers le prochain article non lu"
- },
- "translation" : {
- "value" : "Traduction",
- "message" : "Nous avons besoin d'aide pour traduire CommaFeed.",
- "link" : "Cliquez ici pour voir comment vous pouvez nous aider."
- },
- "announcements" : "Annonces",
- "shortcuts" : {
- "mouse_middleclick" : "clic du milieu de la souris",
- "open_next_entry" : "Ouvrir l'article suivant",
- "open_previous_entry" : "Ouvrir l'article précédent",
- "spacebar" : "espace/shift+espace",
- "move_page_down_up" : "Faire descendre/monter la page",
- "focus_next_entry" : "Sélectionner l'article suivant sans l'ouvrir",
- "focus_previous_entry" : "Sélectionner l'article précédent sans l'ouvrir",
- "open_next_feed" : "Sélectionner le flux ou la catégorie suivante",
- "open_previous_feed" : "Sélectionner le flux ou la catégorie précédente",
- "open_close_current_entry" : "Ouvrir/fermer l'article courant",
- "open_current_entry_in_new_window" : "Ouvrir l'article courant dans une nouvelle fenêtre",
- "open_current_entry_in_new_window_background" : "Ouvrir l'article courant dans une nouvelle fenêtre en arrière-plan",
- "star_unstar" : "Ajouter/enlever l'article courant des favoris",
- "mark_current_entry" : "Marquer comme lu/non lu l'article courant",
- "mark_all_as_read" : "Marquer tous les articles comme lus",
- "open_in_new_tab_mark_as_read" : "Ouvrir l'article courant dans une nouvelle fenêtre et marquer comme lu",
- "fullscreen" : "Activer/désactiver le mode plein-écran",
- "font_size" : "Augmenter/diminuer la taille de la police de l'article courant",
- "go_to_all" : "Afficher tous les articles",
- "go_to_starred" : "Afficher les articles favoris",
- "feed_search" : "Naviguer vers un flux en entrant son nom"
- }
- }
-}
diff --git a/commafeed-client/src/main/app/i18n/gl.js b/commafeed-client/src/main/app/i18n/gl.js
deleted file mode 100644
index 6b28f6ba..00000000
--- a/commafeed-client/src/main/app/i18n/gl.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Gardar",
- "cancel" : "Cancelar",
- "delete" : "Eliminar",
- "required" : "Requerido",
- "download" : "Descargar",
- "link" : "Ligazón",
- "bookmark" : "Marcador",
- "close" : "Pechar",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe" : "Subscribir",
- "import" : "Importar",
- "new_category" : "Nova categoría",
- "all" : "Todos",
- "starred" : "Destacado"
- },
- "subscribe" : {
- "feed_url" : "URL da fonte",
- "feed_name" : "Nome da fonte",
- "category" : "Categoría"
- },
- "import" : {
- "google_reader_prefix" : "Deixame importar as fontes da túa",
- "google_reader_suffix" : " conta.",
- "google_download" : "Tamén podes subir un ficheiro subscriptions.xml.",
- "google_download_link" : "Descárgao de aquí.",
- "xml_file" : "Ficheiro OPML"
- },
- "new_category" : {
- "name" : "Nome",
- "parent" : "Subcategoría de "
- },
- "toolbar" : {
- "unread" : "Sen Ler",
- "all" : "Todos",
- "previous_entry" : "Entrada Anterior",
- "next_entry" : "Próxima Entrada",
- "refresh" : "Actualizar",
- "refresh_all" : "Forzar a actualización de todas as fontes ",
- "sort_by_asc_desc" : "Ordenar por data asc/desc",
- "titles_only" : "Só títulos",
- "expanded_view" : "Vista expandida",
- "mark_all_as_read" : "Marcar todos como lidos",
- "mark_all_older_12_hours" : "Elementos anteriores a 12 h. ",
- "mark_all_older_day" : "Artigos anteriores a un día",
- "mark_all_older_week" : "Artigos de máis de unha semana",
- "mark_all_older_two_weeks" : "Artigos de máis de dúas semanas",
- "settings" : "Configuración",
- "profile" : "Perfil",
- "admin" : "Admin",
- "about" : "Sobre",
- "logout" : "Pechar sesión",
- "donate" : "Doar"
- },
- "view" : {
- "entry_source" : "desde ",
- "entry_author" : "por ",
- "error_while_loading_feed" : "Erro mentras se cargaba esta fonte",
- "keep_unread" : "Gardar non lidos",
- "no_unread_items" : "non ten elementos sen ler.",
- "mark_up_to_here" : "Marcar como lidos ate aquí ",
- "search_for" : "buscando por: ",
- "no_search_results" : "Sen coincidencias para as palabras introducidas "
- },
- "feedsearch" : {
- "hint" : "Escriba unha suscrición...",
- "help" : "Use a teclar retorno para seleccionar e as flechas para navegar.",
- "result_prefix" : "As súas suscricións:"
- },
- "settings" : {
- "general" : {
- "value" : "Xeral",
- "language" : "Idioma",
- "language_contribute" : "Contribúe traducindo",
- "show_unread" : "Mostrar fontes e categorías sen entradas non lidas.",
- "social_buttons" : "Mostrar botóns de compartir en redes sociais.",
- "scroll_marks" : "En vista expandida, o desplazamento polas entradas márcaas como lidas."
- },
- "appearance" : "Aspecto",
- "scroll_speed" : "Velocidade de desplazamento navegando entre entradas (en milisegundos) ",
- "scroll_speed_help" : "escriba 0 para deshabilitar ",
- "theme" : "Decorado",
- "submit_your_theme" : "Envíe o seu decorado",
- "custom_css" : "CSS Personalizado"
- },
- "details" : {
- "feed_details" : "Detalles de fontes",
- "url" : "URL",
- "website" : "Sitio web ",
- "name" : "Nome",
- "category" : "Categoría",
- "position" : "Posición ",
- "last_refresh" : "Última actualización",
- "message" : "Última mensaxe da actualización ",
- "next_refresh" : "Próxima actualización",
- "queued_for_refresh" : "En cola para actualizar",
- "feed_url" : "URL da fonte",
- "generate_api_key_first" : "Antes debes xerar unha chave API no teu perfil.",
- "unsubscribe" : "Rematar suscripción",
- "unsubscribe_confirmation" : "Seguro que queres desuscribirte de esta fonte? ",
- "delete_category_confirmation" : "Seguro que queres eliminar esta categoría? ",
- "category_details" : "Detalles da categoría",
- "tag_details" : "Detalles da etiqueta ",
- "parent_category" : "Categoría principal"
- },
- "profile" : {
- "user_name" : "Nome de usuario",
- "email" : "Correo",
- "change_password" : "Cambiar contrasinal",
- "confirm_password" : "Confirmar contrasinal",
- "minimum_8_chars" : "Mínimo 8 caracteres",
- "passwords_do_not_match" : "Os contrasinais non coinciden no coinciden",
- "api_key" : "Chave API",
- "api_key_not_generated" : "Non xerado todavía",
- "generate_new_api_key" : "Xerar nova chave da API",
- "generate_new_api_key_info" : "Ao cambiar o contrasinal xerarase unha nova chave API",
- "opml_export" : "Exportación de OPML",
- "delete_account" : "Eliminar conta",
- "delete_account_confirmation" : "Eliminar conta? Non hai volta atrás! "
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed está feito co uso de JAX-RS e AngularJS. Polo que está dispoñible un REST API.",
- "link_to_documentation" : "Ligazón a documentación."
- },
- "keyboard_shortcuts" : "Atallos de teclado",
- "version" : "CommaFeed version ",
- "line1_prefix" : "CommaFeed é un proxecto de código aberto. O código está en ",
- "line1_suffix" : ".",
- "line2_prefix" : "Se atopas un problema, por favor informa na páxina de problemas do ",
- "line2_suffix" : " do proxecto.",
- "line3" : "Se che gusta este proxecto, por favor considera realizar unha doación para apoiar ao desenvolvedor e axudar a cubrir os gastos de mantemento.",
- "line4" : "Para aqueles de vostedes que prefiran bitcoin, aquí está o enderezo",
- "goodies" : {
- "value" : "Extras",
- "android_app" : "Android app ",
- "subscribe_url" : "Suscribirse a URL",
- "chrome_extension" : "Engadido para Chrome",
- "firefox_extension" : "Engadido para Firefox",
- "opera_extension" : "Engadido para Opera",
- "subscribe_bookmarklet" : "Engadir bookmarklet para suscrición(click)",
- "subscribe_bookmarklet_asc" : "Oldest first ",
- "subscribe_bookmarklet_desc" : "Newest first ",
- "next_unread_bookmarklet" : "Bookmarklet de seguinte elemento non lido (arrastre a barra de marcadores)"
- },
- "translation" : {
- "value" : "Tradución",
- "message" : "Precisamos a túa axuda para traducir CommaFeed.",
- "link" : "Ver como contribuir con traducións."
- },
- "announcements" : "Anuncios",
- "shortcuts" : {
- "mouse_middleclick" : "botón central do rato",
- "open_next_entry" : "abrir próxima entrada",
- "open_previous_entry" : "abrir entrada anterior",
- "spacebar" : "space/shift+space ",
- "move_page_down_up" : "move a páxina arriba/abaixo ",
- "focus_next_entry" : "Establecer o foco na próxima entrada sen abrila",
- "focus_previous_entry" : "Establecer o foco na entrada anterior sen abrila",
- "open_next_feed" : "abrir a seguinte fonte ou categoría",
- "open_previous_feed" : "abrir a fonte ou categoría anterior",
- "open_close_current_entry" : "abrir/pechar entrada actual",
- "open_current_entry_in_new_window" : "abrir entrada actual nunha nova ventana",
- "open_current_entry_in_new_window_background" : "abrir entrada actual nunha nova ventá en segundo plano",
- "star_unstar" : "marcar/desmarcar a entrada actual",
- "mark_current_entry" : "marcar como lida/non lida a entrada actual",
- "mark_all_as_read" : "marcar todas as entradas como lidas",
- "open_in_new_tab_mark_as_read" : "abrir entrada nunha nova lapela e marcar como lida",
- "fullscreen" : "habilita a pantalla completa ",
- "font_size" : "aumenta/diminúe o tamaño da letra da entrada activa ",
- "go_to_all" : "ir a vista TODOS",
- "go_to_starred" : "ir a vista Destacados ",
- "feed_search" : "navegue ate unha suscrición introducindo o nome da suscrición"
- }
- }
-}
diff --git a/commafeed-client/src/main/app/i18n/glk.js b/commafeed-client/src/main/app/i18n/glk.js
deleted file mode 100644
index 21c31317..00000000
--- a/commafeed-client/src/main/app/i18n/glk.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "قزنج",
- "cancel" : "باطیل",
- "delete" : "پاک",
- "required" : "لازم",
- "download" : "جیرأکش",
- "link" : "خال",
- "bookmark" : "بوکمارک",
- "close" : "دَوَستن",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe" : "مشترک ببید",
- "import" : "درینأدأن",
- "new_category" : "تازه جرگه",
- "all" : "همه ته مطالب",
- "starred" : "ستارهدار"
- },
- "subscribe" : {
- "feed_url" : "خوراکˇ نشانی",
- "feed_name" : "خوراکˇ نام",
- "category" : "جرگه"
- },
- "import" : {
- "google_reader_prefix" : "بدأر تی خوراکانه حسابˇ جی",
- "google_reader_suffix" : "درینأدم.",
- "google_download" : "یا اونˇ جا تی subscriptions.xml پروندهٰ جیرأکش.",
- "google_download_link" : "اونه ائره جیرأکش.",
- "xml_file" : "اکس.ام.الˇ پرونده"
- },
- "new_category" : {
- "name" : "نام",
- "parent" : "پئر"
- },
- "toolbar" : {
- "unread" : "نخانده",
- "all" : "همه",
- "previous_entry" : "قبلی",
- "next_entry" : "بعدی",
- "refresh" : "واجأری",
- "refresh_all" : "Force refresh all my feeds ",
- "sort_by_asc_desc" : "تاریخˇ سر دچئن",
- "titles_only" : "خالی تیتران",
- "expanded_view" : "واشاده نما",
- "mark_all_as_read" : "همهته مطالبه چاکون بخانده",
- "mark_all_older_12_hours" : "Items older than 12 hours ",
- "mark_all_older_day" : "یک روز پیشترˇ مطالب",
- "mark_all_older_week" : "یک هفته پیشترˇ مطالب",
- "mark_all_older_two_weeks" : "چن هفته پیشترˇ مطالب",
- "settings" : "تنظیم",
- "profile" : "نمایه",
- "admin" : "مدیریت",
- "about" : "راجهبه",
- "logout" : "برین",
- "donate" : "مالی ایلجار"
- },
- "view" : {
- "entry_source" : "from ",
- "entry_author" : "by ",
- "error_while_loading_feed" : "حئف ببؤ! ای خوراکˇ جؤر أمأنˇ سر خطا ببؤ.",
- "keep_unread" : "نخانده بدأر.",
- "no_unread_items" : "نخانده مطلب دنه.",
- "mark_up_to_here" : "Mark as read up to here ",
- "search_for" : "searching for: ",
- "no_search_results" : "No match found for the requested keywords "
- },
- "feedsearch" : {
- "hint" : "یکته اشتراکˇ سر نویشتن...",
- "help" : "دکمهٔ بازگشت برای انتخاب و دکمههای جهتدار را برای ناوبری استفاده کن.",
- "result_prefix" : "تی اشتراکان:"
- },
- "settings" : {
- "general" : {
- "value" : "همگانی",
- "language" : "زوان",
- "language_contribute" : "واگردانˇ مئنˇ ایلجار",
- "show_unread" : "تنها خوراکها و دستههای را که دارای مطالب نخوانده هستند نمایش بده.",
- "social_buttons" : "نشاندادن دکمههای اشتراکگذاری در شبکههای اجتماعی",
- "scroll_marks" : "در نمای گسترشیافته، لغزیدن بر روی مطالب بهعنوان نشانهگذاری بهعنوان خواندهشده در نظر گرفتهشوند."
- },
- "appearance" : "ظاهر",
- "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ",
- "scroll_speed_help" : "set to 0 to disable ",
- "theme" : "پوسته",
- "submit_your_theme" : "شیمه پوستهٰ اوسه کونید",
- "custom_css" : "سیاساس شخصیسازیشده"
- },
- "details" : {
- "feed_details" : "جزئیات خوراک",
- "url" : "نشانی",
- "website" : "Website ",
- "name" : "نام",
- "category" : "جرگه",
- "position" : "Position ",
- "last_refresh" : "آخرین بروزرسانی",
- "message" : "Last refresh message ",
- "next_refresh" : "بروزرسانی بعدی",
- "queued_for_refresh" : "منتظر برای بروزرسانی",
- "feed_url" : "نشانی خوراک",
- "generate_api_key_first" : "ابتدا یک کلید API در نمایهٔ خود ایجاد کنید.",
- "unsubscribe" : "لغو اشتراک",
- "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ",
- "delete_category_confirmation" : "Are you sure you want to delete this category? ",
- "category_details" : "جرگه جزئیات",
- "tag_details" : "Tag details ",
- "parent_category" : "پئرˇ جرگه"
- },
- "profile" : {
- "user_name" : "کاربری نام",
- "email" : "ایمئل",
- "change_password" : "رمزه عوضأگودن",
- "confirm_password" : "رمزه تأیید گودن",
- "minimum_8_chars" : "ناقلن 8 کارکتر",
- "passwords_do_not_match" : "رمزان کسبهکسه نخانید",
- "api_key" : "کلید API",
- "api_key_not_generated" : "هلئه چاگوده نبؤ",
- "generate_new_api_key" : "تازه کلید چاگودن API",
- "generate_new_api_key_info" : "رمزه عوضأگودن API کلیده چاکونه.",
- "opml_export" : "برینأدأن OPML",
- "delete_account" : "کاربری حسابه پاکودن",
- "delete_account_confirmation" : "Delete your acount? There's no turning back! "
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "کامافید بر روی JAX-RS و AngularJS ساختهشدهاست. به همین دلیل API REST موجود است.",
- "link_to_documentation" : "خال به مستندات."
- },
- "keyboard_shortcuts" : "وئر زئنˇ کلیدان",
- "version" : "CommaFeed version ",
- "line1_prefix" : "کامافید یکته «رهاوؤت» پروژه ایسه. اینˇ تلمبارؤن",
- "line1_suffix" : "ˇمئن میزبانی به.",
- "line2_prefix" : "أگه مشکلی پیش بمأ پیشأکشئنˇ صفحه مئن مطرح بکونین.",
- "line2_suffix" : " پروژه.",
- "line3" : "أگه ای پرؤژهٰ خوش دأنین، یک مبلغی هرچیم کی کم ببون ای سایتˇ هزینهٰن و اینˇ توسعهدأنکسˇ وأسی هدین.",
- "line4" : "اوشانی کی بیتکؤینه ترجیح دئنن، نشانی ائره نأ.",
- "goodies" : {
- "value" : "علاوهٰن",
- "android_app" : "Android app ",
- "subscribe_url" : "نشانی مئنˇ اشتراک",
- "chrome_extension" : "کرؤمˇ علاوه",
- "firefox_extension" : "فایرفاکسˇ علاوه",
- "opera_extension" : "اؤپرا علاوه",
- "subscribe_bookmarklet" : "افزودن بوکمارکلت اشتراک (با کلیک)",
- "subscribe_bookmarklet_asc" : "Oldest first ",
- "subscribe_bookmarklet_desc" : "Newest first ",
- "next_unread_bookmarklet" : "بوکمارکلت مطلب خوانده نشدهٔ بعدی(با کشیدن و رهاکردن در نوار بوکمارکلت)"
- },
- "translation" : {
- "value" : "واگردان",
- "message" : "أمه شیمه ایلجاره کامافیدˇ واگردانˇ مئن خأییم.",
- "link" : "ببدینید چوتؤ تانید واگردانˇ مئن ایلجار بکونید."
- },
- "announcements" : "اطلاعیهٰن",
- "shortcuts" : {
- "mouse_middleclick" : "مؤسˇ مئنی کلیک",
- "open_next_entry" : "بعدی مطلبه واگدن",
- "open_previous_entry" : "قبلی مطلبه واگودن",
- "spacebar" : "space/shift+space ",
- "move_page_down_up" : "moves the page down/up ",
- "focus_next_entry" : "بعدی مطلبˇ سر شؤن بی اینکه وابکونه",
- "focus_previous_entry" : "قبلی مطلبˇ سر شؤن بی اینکه وابکونه",
- "open_next_feed" : "بعدی خوراک یا جرگهٰ واگودن",
- "open_previous_feed" : "قبلی خوراک یا جرگهٰ واگودن",
- "open_close_current_entry" : "مطلبه واگودن/دوستن",
- "open_current_entry_in_new_window" : "مطلبه تازه درجیکˇ مئن واگودن",
- "open_current_entry_in_new_window_background" : "مطلبه تازه درجیکˇ مئن پسزمینه واگودن",
- "star_unstar" : "مطلبه نشانهدار گودن/نگودن",
- "mark_current_entry" : "مطلبه نشانهدار گودن کی بخانه/نخانده ایسه",
- "mark_all_as_read" : "همهته مطالبه نشانه بنه کی بخانده ببؤن",
- "open_in_new_tab_mark_as_read" : "مطلبه تازه سرولگˇ میان واگودن و نشانهدار کودن به عنوانˇ بخانده",
- "fullscreen" : "toggle full screen mode ",
- "font_size" : "increase/decrease font size of the current entry ",
- "go_to_all" : "go to the All view ",
- "go_to_starred" : "go to the Starred view ",
- "feed_search" : "اشتراکˇ نامه بنویس و اونه وئر بزن"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/hu.js b/commafeed-client/src/main/app/i18n/hu.js
deleted file mode 100644
index c8afe327..00000000
--- a/commafeed-client/src/main/app/i18n/hu.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Mentés",
- "cancel" : "Mégsem",
- "delete" : "Törlés",
- "required" : "Szükséges",
- "download" : "Letöltés",
- "link" : "Link",
- "bookmark" : "Könyvjelző",
- "close" : "Bezár",
- "tags" : "Címkék"
- },
- "tree" : {
- "subscribe" : "Feliratkozás",
- "import" : "Importálás",
- "new_category" : "Új kategória",
- "all" : "Összes",
- "starred" : "Csillagozott"
- },
- "subscribe" : {
- "feed_url" : "Hírcsatorna URL",
- "feed_name" : "Hírcsatorna neve",
- "category" : "Kategória"
- },
- "import" : {
- "google_reader_prefix" : "Engedd meg, hogy importáljuk a hírcsatornáidat a ",
- "google_reader_suffix" : " fiókjából.",
- "google_download" : "Alternatívaként, feltöltheti a subscriptions.xml fájlt.",
- "google_download_link" : "Letöltheti innen.",
- "xml_file" : "OPML Fájl"
- },
- "new_category" : {
- "name" : "Név",
- "parent" : "Szülő"
- },
- "toolbar" : {
- "unread" : "Olvasatlan",
- "all" : "Összes",
- "previous_entry" : "Előző elem",
- "next_entry" : "Következő elem",
- "refresh" : "Frissítés",
- "refresh_all" : "Force refresh all my feeds ",
- "sort_by_asc_desc" : "Rendezés időrend szerint",
- "titles_only" : "Csak cím",
- "expanded_view" : "Részletes nézet",
- "mark_all_as_read" : "Az összes megjelölése olvasottként",
- "mark_all_older_12_hours" : "Régebbiek 12 óránál",
- "mark_all_older_day" : "Régebbiek, mint egy nap",
- "mark_all_older_week" : "Régebbiek, mint egy hét",
- "mark_all_older_two_weeks" : "Régebbiek, mint két hét",
- "settings" : "Beállítások",
- "profile" : "Profil",
- "admin" : "Admin",
- "about" : "Névjegy",
- "logout" : "Kilépés",
- "donate" : "Anyagi támogatás "
- },
- "view" : {
- "entry_source" : "forrás",
- "entry_author" : "szerző",
- "error_while_loading_feed" : "Hiba történt ennek a hírcsatornának a betöltésekor",
- "keep_unread" : "Megtartása olvasatlanként",
- "no_unread_items" : "nincsen olvasatlan eleme.",
- "mark_up_to_here" : "Megjelölés olvasottnak eddig",
- "search_for" : "keresés erre: ",
- "no_search_results" : "Nem található semmi erre a keresett szóra"
- },
- "feedsearch" : {
- "hint" : "Keressen a hírcsatornák között...",
- "help" : "Használja a nyíl billentyűket a navigáláshoz, az enter-t a kiválasztáshoz.",
- "result_prefix" : "Az ön feliratkozásai:"
- },
- "settings" : {
- "general" : {
- "value" : "Általános",
- "language" : "Nyelv",
- "language_contribute" : "Segítsen a fordításban",
- "show_unread" : "Mutassa azokat a hírcsatornákat és kategóriákat amelyekben nincsen olvasatlan bejegyzés",
- "social_buttons" : "Mutassa a közösségi oldalak megosztás gombjait",
- "scroll_marks" : "Kiterjesztett nézetben, görgetéssel olvasottként jelöli meg a bejegyzést"
- },
- "appearance" : "Megjelenés",
- "scroll_speed" : "A görgetés sebessége, amikor a cikkek között navigál (miliszekundumban)",
- "scroll_speed_help" : "Írjon be 0-át a letiltáshoz",
- "theme" : "Téma",
- "submit_your_theme" : "Küldje el a témáját",
- "custom_css" : "Saját CSS"
- },
- "details" : {
- "feed_details" : "Hírcsatorna részletei",
- "url" : "URL",
- "website" : "Weboldal",
- "name" : "Név",
- "category" : "Kategória",
- "position" : "Pozició",
- "last_refresh" : "Utolsó frissítés",
- "message" : "Utolsó frissítési üzenet",
- "next_refresh" : "Következő frissítés",
- "queued_for_refresh" : "Frissítésre vár",
- "feed_url" : "Hírcsatorna URL",
- "generate_api_key_first" : "A profiljában először egy API kulcsot kell generálnia.",
- "unsubscribe" : "Leiratkozás",
- "unsubscribe_confirmation" : "Biztos, hogy le akar iratkozni errről a csatornáról?",
- "delete_category_confirmation" : "Biztos, hog törölni akarja ezt a kategóriát?",
- "category_details" : "Kategória részletei",
- "tag_details" : "Címke részletei",
- "parent_category" : "Szülő kategória"
- },
- "profile" : {
- "user_name" : "Felhasználói név",
- "email" : "E-mail",
- "change_password" : "Jelszó megváltoztatás",
- "confirm_password" : "Jelszó megerősítése",
- "minimum_8_chars" : "Legalább 8 karakter",
- "passwords_do_not_match" : "A jelszavak nem egyeznek",
- "api_key" : "API kulcs",
- "api_key_not_generated" : "Még nincsen generálva",
- "generate_new_api_key" : "Új API kulcs generálása",
- "generate_new_api_key_info" : "A jelszó megváltoztatása új API kulcsot generál",
- "opml_export" : "OPML exportálása",
- "delete_account" : "Fiók törlése",
- "delete_account_confirmation" : "Törli a fiókját? Innen már nincs visszatérés!"
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "A CommaFeed a JAX-RS-re és az AngularJS-re épül. Ezért a RESTA API elérhető.",
- "link_to_documentation" : "Link a dokumentációhoz."
- },
- "keyboard_shortcuts" : "Gyorsbillentyűk",
- "version" : "CommaFeed verzió",
- "line1_prefix" : "A CommaFeed egy nyílt forrású projekt. A forrás megtalálható a ",
- "line1_suffix" : "oldalán.",
- "line2_prefix" : "Ha hibába ütközik, kérjük jelentse azt a ",
- "line2_suffix" : "projekt oldalán.",
- "line3" : "Ha tetszik önnek ez a szolgáltatás, akkor kérjük támogassa a fejlesztőket és, hogy fentarthassák a weboldalt.",
- "line4" : "Akik jobban szeretnék az oldalt bitcon-nal támogatni, itt a cím",
- "goodies" : {
- "value" : "Hasznos dolgok",
- "android_app" : "Android alkalmazás",
- "subscribe_url" : "Feliratkozás az URL-re",
- "chrome_extension" : "Chrome bővítmény",
- "firefox_extension" : "Firefox kiterjesztés",
- "opera_extension" : "Opera kiterjesztés",
- "subscribe_bookmarklet" : "Feliratkozás bookmarklet hozzáadása (klikkeléssel)",
- "subscribe_bookmarklet_asc" : "Régebbiek először",
- "subscribe_bookmarklet_desc" : "Újak először",
- "next_unread_bookmarklet" : "Következő olvasatlan elem bookmarklet (húzza fel a könyvjelzősávba)"
- },
- "translation" : {
- "value" : "Fordítás",
- "message" : "Segítségét kérjük a CommaFeed fordításához.",
- "link" : "Nézze meg, hogyan tud segíteni ebben."
- },
- "announcements" : "Bejelentések ",
- "shortcuts" : {
- "mouse_middleclick" : "középső egérgomb ",
- "open_next_entry" : "következő hír megnyitása",
- "open_previous_entry" : "előző hír megnyitása",
- "spacebar" : "szóköz/shift+szóköz",
- "move_page_down_up" : "fel/le lépkedhet az oldalon",
- "focus_next_entry" : "megnyitás nélkül fókuszál a övetkező elemre",
- "focus_previous_entry" : "megnyitás nélkül fókuszál az előző elemre",
- "open_next_feed" : "a következő hírcsatorna vagy kategória megnyitása",
- "open_previous_feed" : "az előző hírcsatorna vagy kategória megnyitása",
- "open_close_current_entry" : "a jelenlegi elem megnyitása/bezárása",
- "open_current_entry_in_new_window" : "a jelenlegi elem megnyitása új ablakban",
- "open_current_entry_in_new_window_background" : "a jelenlegi elem megnyitása a háttérben, új ablakban",
- "star_unstar" : "hírelem csillagozása",
- "mark_current_entry" : "elem megjelölése olvasottként",
- "mark_all_as_read" : "az összes elem megjelölése olvasottként",
- "open_in_new_tab_mark_as_read" : "elem megnyitása új fülön és megjelölése olvasottként",
- "fullscreen" : "teljes képernyős mód bekapcsolása",
- "font_size" : "a jelenlegi elemnél növeli/csökkenti a betűméretet",
- "go_to_all" : "átkapcsol az Összes nézetre",
- "go_to_starred" : "átkapcsol a Csillagozott nézetre",
- "feed_search" : "név szerinti keresés a hírcsatornák között"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/id.js b/commafeed-client/src/main/app/i18n/id.js
deleted file mode 100644
index 4c42a78a..00000000
--- a/commafeed-client/src/main/app/i18n/id.js
+++ /dev/null
@@ -1,182 +0,0 @@
-{
- "global" : {
- "save" : "Simpan",
- "cancel" : "Batal",
- "delete" : "Hapus",
- "required" : "Diminta",
- "download" : "Unduh",
- "link" : "Tautan",
- "bookmark" : "Penanda halaman buku",
- "close" : "Tutup",
- "tags" : "Penanda"
- },
- "tree" : {
- "subscribe" : "Berlangganan",
- "import" : "Impor",
- "new_category" : "Kategori Baru",
- "all" : "Semua",
- "starred" : "Diutamakan"
- },
- "subscribe" : {
- "feed_url" : "Umpan URL",
- "feed_name" : "Nama Umpan",
- "category" : "Kategori"
- },
- "import" : {
- "google_reader_prefix" : "Izinkan saya mengimpor umpan Anda dari kepunyaan Anda ",
- "google_reader_suffix" : " akun.",
- "google_download" : "Atau, unggah berkas subscriptions.xml Anda.",
- "google_download_link" : "Unggah dari sini.",
- "xml_file" : "Berkas OPML"
- },
- "new_category" : {
- "name" : "Nama",
- "parent" : "Induk"
- },
- "toolbar" : {
- "unread" : "Belum dibaca",
- "all" : "Semua",
- "previous_entry" : "Catatan sebelumnya",
- "next_entry" : "Catatan selanjutnya",
- "refresh" : "Segarkan",
- "refresh_all" : "Memaksa menyegarkan semua umpan saya",
- "sort_by_asc_desc" : "Urutkan menurut tanggal asc/desc",
- "titles_only" : "Hanya Judul",
- "expanded_view" : "Penglihatan diperluas",
- "mark_all_as_read" : "Tandai semua sebagai telah dibaca",
- "mark_all_older_12_hours" : "Butir lebih lama 12 jam",
- "mark_all_older_day" : "Butir lebih lama sehari",
- "mark_all_older_week" : "Butir lebih lama seminggu",
- "mark_all_older_two_weeks" : "Butir lebih lama dua minggu",
- "settings" : "Pengaturan",
- "profile" : "Profil",
- "admin" : "Admin",
- "about" : "Tentang",
- "logout" : "Keluar",
- "donate" : "Donasi"
- },
- "view" : {
- "entry_source" : "dari ",
- "entry_author" : "oleh ",
- "error_while_loading_feed" : "Galat saat memuat umpan ini",
- "keep_unread" : "Tetapkan belum dibaca",
- "no_unread_items" : "Tidak ada yang butir yang belum dibaca.",
- "mark_up_to_here" : "Tandai sebagai dibaca di sini",
- "search_for" : "mencari: ",
- "no_search_results" : "Tidak ditemukan kata kunci yang sesuai dengan permintaan"
- },
- "feedsearch" : {
- "hint" : "Ketik sebuah langganan...",
- "help" : "Gunakan tombol enter untuk memilih dan tombol panah untuk navigasi.",
- "result_prefix" : "Langganan Anda:"
- },
- "settings" : {
- "general" : {
- "value" : "Umum",
- "language" : "Bahasa",
- "language_contribute" : "Kontribusi dengan terjemahan",
- "show_unread" : "Menampilkan umpan dan kategori tanpa catatan belum dibaca",
- "social_buttons" : "Menampilkan tombol sosial berbagi",
- "scroll_marks" : "Di penglihatan luas, menggulir melalui catatan menandakan sebagai telah dibaca"
- },
- "appearance" : "Penampilan",
- "scroll_speed" : "Kecepatan menggulir ketika menavigasi antar catatan (dalam milidetik)",
- "scroll_speed_help" : "setel ke 0 untuk menonaktifkan",
- "theme" : "Tema",
- "submit_your_theme" : "Mengajukan tema Anda",
- "custom_css" : "Ubah CSS"
- },
- "details" : {
- "feed_details" : "Rincian Umpan",
- "url" : "URL",
- "website" : "Situs",
- "name" : "Nama",
- "category" : "Kategori",
- "position" : "Posisi",
- "last_refresh" : "Penyegaran terakhir",
- "message" : "Menyegarkan pesan terakhir",
- "next_refresh" : "Penyegaran selanjutnya",
- "queued_for_refresh" : "Antri untuk penyegaran",
- "feed_url" : "Umpan URL",
- "filtering_expression" : "Penyaring ekspresi",
- "filtering_expression_help" : "Jika tidak kosong, sebuah ekspresi mengevaluasi ke 'benar' atau 'salah'. Jika salah, catatan baru untuk umpan ini akan ditandai sebagai telah dibaca secara otomatis. \nVariabel yang tersedia adalah 'judul', 'konten', 'url' 'penulis' dan 'kategori' dan konten mereka dikonversi dari huruf kecil ke perbandingan string yang mudah. \nContoh: url.contains('youtube') or (author eq 'athou' and title.contains('github'). \nSintaksis lengkap tersedia di here.",
- "generate_api_key_first" : "Menghasilkan sebuah kunci API di profil Anda terlebih dahulu.",
- "unsubscribe" : "Berhenti berlangganan",
- "unsubscribe_confirmation" : "Apakah Anda yakin ingin berhenti berlangganan dari umpan ini?",
- "delete_category_confirmation" : "Apakah Anda yakin ingin menghapus dari kategori ini?",
- "category_details" : "rincian Kategori",
- "tag_details" : "rincian Penanda",
- "parent_category" : "kategori Induk"
- },
- "profile" : {
- "user_name" : "nama Pengguna",
- "email" : "Surel",
- "change_password" : "Ganti kata sandi",
- "confirm_password" : "Konfirmasi kata sandi",
- "minimum_8_chars" : "Minimal 8 karakter",
- "passwords_do_not_match" : "Kata sandi tidak sesuai",
- "api_key" : "kunci API",
- "api_key_not_generated" : "Belum menghasilkan",
- "generate_new_api_key" : "Hasilkan kunci API baru",
- "generate_new_api_key_info" : "Mengganti kata sandi akan menghasilkan sebuah kunci API baru",
- "opml_export" : "ekspor OPML",
- "delete_account" : "Hapus akun",
- "delete_account_confirmation" : "Hapus akun Anda? Hal ini tidak dapat dikembalikan!"
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed dibangun di atas JAX-RS dan AngularJS. Dengan demikian, tersedia sebuah REST API.",
- "link_to_documentation" : "Tautan menuju dokumentasi."
- },
- "keyboard_shortcuts" : "pintasan Papanketik",
- "version" : "versi CommaFeed",
- "line1_prefix" : "CommaFeed adalah suatu proyek open-source. Sumber di ",
- "line1_suffix" : ".",
- "line2_prefix" : "Jika Anda mengalami sebuah isu, silahkan laporkan pada halaman isu ",
- "line2_suffix" : " proyek.",
- "line3" : "Jika Anda menyukai proyek ini, silahkan mempertimbangkan suatu donasi untuk mendukung pengembang dan membantu menutupi biaya online situs ini.",
- "line4" : "Untuk Anda yang lebih suka bitcoin, alamatnya di sini",
- "goodies" : {
- "value" : "Bingkisan",
- "android_app" : "Android app",
- "subscribe_url" : "URL Langganan",
- "chrome_extension" : "ekstensi Chrome",
- "firefox_extension" : "ekstensi Firefox",
- "opera_extension" : "ekstensi Opera",
- "subscribe_bookmarklet" : "Tambahkan bookmarklet langganan(klik)",
- "subscribe_bookmarklet_asc" : "Terlama dahulu",
- "subscribe_bookmarklet_desc" : "Terbaru dahulu",
- "next_unread_bookmarklet" : "Butir bookmarklet selanjutnya yang belum dibaca (seret ke batang penanda halaman buku)"
- },
- "translation" : {
- "value" : "Terjemahan",
- "message" : "Kami membutuhkan bantuan Anda untuk menterjemahkan CommaFeed.",
- "link" : "Lihat bagaimana berkontribusi dengan terjemahan."
- },
- "announcements" : "Pengumuman",
- "shortcuts" : {
- "mouse_middleclick" : "klik tengah tetikus",
- "open_next_entry" : "buka catatan selanjutnya",
- "open_previous_entry" : "buka catatan sebelumnya",
- "spacebar" : "spasi/shift+spasi",
- "move_page_down_up" : "pindah halaman bawah/atas",
- "focus_next_entry" : "setel fokus pada catatan selanjutnya tanpa membukanya",
- "focus_previous_entry" : "setel fokus pada catatan sebelumnya tanpa membukanya",
- "open_next_feed" : "buka umpan atau kategori selanjutnya",
- "open_previous_feed" : "buka umpan atau kategori sebelumnya",
- "open_close_current_entry" : "buka/tutup catatan saat ini",
- "open_current_entry_in_new_window" : "buka catatan saat ini di sebuah jendela baru",
- "open_current_entry_in_new_window_background" : "buka catatan saat ini di sebuah jendela baru pada latar",
- "star_unstar" : "tanda bintang/tidak catatan saat ini",
- "mark_current_entry" : "tandai sebagai telah dibaca/belum catatan saat ini",
- "mark_all_as_read" : "tandai semua catatan sebagai telah dibaca",
- "open_in_new_tab_mark_as_read" : "buka catatan di tab baru dan tandai sebagai telah dibaca",
- "fullscreen" : "beralih modus layar penuh",
- "font_size" : "tingkatkan/turunkan ukuran huruf dari catatan saat ini",
- "go_to_all" : "menuju ke lihat Semua",
- "go_to_starred" : "menuju ke lihat Tanda Bintang",
- "feed_search" : "navigasi ke langganan dengan memasukkan nama langganan"
- }
- }
-}
diff --git a/commafeed-client/src/main/app/i18n/it.js b/commafeed-client/src/main/app/i18n/it.js
deleted file mode 100644
index ac4e602e..00000000
--- a/commafeed-client/src/main/app/i18n/it.js
+++ /dev/null
@@ -1,183 +0,0 @@
-{
- "global" : {
- "save" : "Salva",
- "cancel" : "Annulla",
- "delete" : "Elimina",
- "required" : "Richiesto",
- "download" : "Download",
- "link" : "Link",
- "bookmark" : "Segnalibro",
- "close" : "Chiudi",
- "tags" : "Tag"
- },
- "tree" : {
- "subscribe" : "Iscriviti",
- "import" : "Importa",
- "new_category" : "Nuova categoria",
- "all" : "Tutti",
- "starred" : "Preferiti"
- },
- "subscribe" : {
- "feed_url" : "URL feed",
- "feed_name" : "Nome feed",
- "category" : "Categoria"
- },
- "import" : {
- "google_reader_prefix" : "Permettimi di importare i feed dal tuo account ",
- "google_reader_suffix" : ".",
- "google_download" : "Oppure carica il tuo file subscriptions.xml.",
- "google_download_link" : "Puoi scaricalo da qui.",
- "xml_file" : "File OPML"
- },
- "new_category" : {
- "name" : "Nome",
- "parent" : "Gruppo"
- },
- "toolbar" : {
- "unread" : "Non letti",
- "all" : "Tutti",
- "previous_entry" : "Precedente",
- "next_entry" : "Successivo",
- "refresh" : "Aggiorna",
- "refresh_all" : "Forza l'aggiornamento di tutti i feed",
- "sort_by_asc_desc" : "Ordina per data crescente/decrescente",
- "titles_only" : "Solo i titoli",
- "expanded_view" : "Espandi",
- "mark_all_as_read" : "Segna tutti come già letti",
- "mark_all_older_12_hours" : "Elementi più vecchi di 12 ore",
- "mark_all_older_day" : "Elementi più vecchi di un giorno",
- "mark_all_older_week" : "Elementi più vecchi di una settimana",
- "mark_all_older_two_weeks" : "Elementi più vecchi di due settimane",
- "settings" : "Impostazioni",
- "profile" : "Profilo",
- "admin" : "Admin",
- "about" : "Informazioni",
- "logout" : "Esci",
- "donate" : "Dona"
- },
- "view" : {
- "entry_source" : "da ",
- "entry_author" : "di ",
- "error_while_loading_feed" : "Si è verificato un errore durante il caricamento del feed",
- "keep_unread" : "Mantieni come da leggere",
- "no_unread_items" : "non contiene elementi da leggere",
- "mark_up_to_here" : "Segna come letto fin qui",
- "search_for" : "Cerca: ",
- "no_search_results" : "Nessun risultato per le parole chiave cercate"
- },
- "feedsearch" : {
- "hint" : "Digita il nome di una sottoscrizione... ",
- "help" : "Usa il tasto Invio per selezionare e le frecce per navigare.",
- "result_prefix" : "Le tue sottoscrizioni:"
- },
- "settings" : {
- "general" : {
- "value" : "Generali",
- "language" : "Lingua",
- "language_contribute" : "Contribuisci alle traduzioni",
- "show_unread" : "Mostra i feed e le categorie con voci non lette",
- "social_buttons" : "Mostra i pulsanti di condivisione social",
- "scroll_marks" : "In vista estesa, segna come lette le voci che scorri"
- },
- "appearance" : "Aspetto",
- "scroll_speed" : "Velocità di scorrimento quando navighi tra i feed (in millisecondi)",
- "scroll_speed_help" : "imposta su 0 per disabilitare",
- "theme" : "Tema",
- "submit_your_theme" : "Inserisci il tuo tema",
- "custom_css" : "CSS personalizzato"
- },
- "details" : {
- "feed_details" : "Dettagli feed",
- "url" : "URL",
- "website" : "Sito web",
- "name" : "Nome",
- "category" : "Categoria",
- "position" : "Posizione",
- "last_refresh" : "Ultimo aggiornamento",
- "message" : "Ultimo messaggio di aggiornamento",
- "next_refresh" : "Prossimo aggiornamento",
- "queued_for_refresh" : "In coda per l'aggiornamento",
- "feed_url" : "URL feed",
- "filtering_expression" : "Espressione filtro",
- "filtering_expression_help" : "Quando non è vuota, l'espressione viene applicata a ogni nuovo elemento e valutata come 'vera' o 'falsa'. Se falsa, l'elemento verrà segnato automaticamente come letto.\nLe variabili accettate sono 'title' (titolo), 'content' (contenuto), 'url', 'author' (autore) e 'categories' (categorie); il loro contenuto è convertito in minuscolo per facilitarne il confronto.\nEsempio: url.contains('youtube') or (author eq 'athou' and title.contains('github')).\nLa sintassi completa è disponibile qui (in inglese).",
- "generate_api_key_first" : "Genera prima una chiave API nelle impostazioni del tuo profilo.",
- "unsubscribe" : "Disiscriviti",
- "unsubscribe_confirmation" : "Sei sicuro di voler annullare la sottoscrizione al feed?",
- "delete_category_confirmation" : "Sei sicuro di voler eliminare questa categoria?",
- "category_details" : "Dettagli categoria",
- "tag_details" : "Dettagli tag",
- "parent_category" : "Categoria principale"
- },
- "profile" : {
- "user_name" : "Nome utente",
- "email" : "E-mail",
- "change_password" : "Cambia password",
- "confirm_password" : "Conferma password",
- "minimum_8_chars" : "Minimo 8 caratteri",
- "passwords_do_not_match" : "Le password non corrispondono",
- "api_key" : "chiave API",
- "api_key_not_generated" : "Non ancora generata",
- "generate_new_api_key" : "Genera una nuova chiave API",
- "generate_new_api_key_info" : "Cambiando la password sarà generata una nuova chiave API",
- "opml_export" : "Esporta OPML",
- "delete_account" : "Elimina account",
- "delete_account_confirmation" : "Vuoi eliminare il tuo account? Non si può tornare indietro!"
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed è basato su JAX-RS e AngularJS. Pertanto è disponibile una REST API.",
- "link_to_documentation" : "Link alla documentazione."
- },
- "keyboard_shortcuts" : "Scorciatoie da tastiera",
- "version" : "Versione di CommaFeed",
- "line1_prefix" : "CommaFeed è un progetto open source. Trovi i sorgenti su ",
- "line1_suffix" : ".",
- "line2_prefix" : "Se hai qualche problema, segnalalo sulla pagina del progetto ",
- "line2_suffix" : ".",
- "line3" : "Se ti piace questo progetto, considera una donazione per supportare lo sviluppatore e aiutare a coprire i costi di manutenzione di questo sito.",
- "line4" : "Se preferisci Bitcoin, questo è l'indirizzo",
- "goodies" : {
- "value" : "Cose che potrebbero interessarti",
- "android_app" : "Applicazione Android",
- "subscribe_url" : "Sottoscrivi URL",
- "chrome_extension" : "Estensione per Chrome",
- "firefox_extension" : "Estensione per Firefox",
- "opera_extension" : "Estensione per Opera",
- "subscribe_bookmarklet" : "Aggiungi la sottoscrizione ai segnalibri (clicca)",
- "subscribe_bookmarklet_asc" : "Prima i vecchi",
- "subscribe_bookmarklet_desc" : "Prima i recenti",
- "next_unread_bookmarklet" : "Segnalibro al prossimo elemento da leggere (trascinalo nella barra dei segnalibri)"
- },
- "translation" : {
- "value" : "Traduzioni",
- "message" : "Abbiamo bisogno del tuo aiuto per tradurre CommaFeed.",
- "link" : "Scopri come aiutarci nelle traduzioni."
- },
- "announcements" : "Annunci",
- "shortcuts" : {
- "mouse_middleclick" : "click centrale del mouse",
- "open_next_entry" : "apri successivo",
- "open_previous_entry" : "apri precedente",
- "spacebar" : "SPAZIO/MAIUSC+SPAZIO",
- "move_page_down_up" : "muove la pagina in su/giù",
- "focus_next_entry" : "metti a fuoco l'elemento successivo senza aprirlo",
- "focus_previous_entry" : "metti a fuoco l'elemento precedente senza aprirlo",
- "open_next_feed" : "apri il prossimo feed o categoria",
- "open_previous_feed" : "apri il feed o la categoria precedente",
- "open_close_current_entry" : "apri/chiudi la voce corrente",
- "open_current_entry_in_new_window" : "apri la voce corrente in una nuova finestra",
- "open_current_entry_in_new_window_background" : "apri la voce corrente in una nuova finestra in secondo piano",
- "star_unstar" : "metti/togli la tua preferenza alla voce corrente",
- "mark_current_entry" : "segna la voce corrente come letta/non letta",
- "mark_all_as_read" : "segna tutte le voci come lette",
- "open_in_new_tab_mark_as_read" : "apri voce in un nuovo tab e segna come letta",
- "fullscreen" : "commuta la modalità a schermo intero",
- "font_size" : "aumenta/decrementa la dimensione del font per la voce corrente",
- "go_to_all" : "vai alla vista Tutti",
- "go_to_starred" : "vai alla vista Preferiti",
- "feed_search" : "raggiungi una sottoscrizione scrivendo il suo nome",
- "refresh" : "aggiorna"
- }
- }
-}
diff --git a/commafeed-client/src/main/app/i18n/ja.js b/commafeed-client/src/main/app/i18n/ja.js
deleted file mode 100644
index 09260567..00000000
--- a/commafeed-client/src/main/app/i18n/ja.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "保存",
- "cancel" : "取り消し",
- "delete" : "削除",
- "required" : "必須",
- "download" : "ダウンロード",
- "link" : "リンク",
- "bookmark" : "ブックマーク",
- "close" : "閉じる",
- "tags" : "タグ"
- },
- "tree" : {
- "subscribe" : "購読",
- "import" : "インポート",
- "new_category" : "新しいカテゴリー",
- "all" : "全て",
- "starred" : "スター付き"
- },
- "subscribe" : {
- "feed_url" : "フィードURL",
- "feed_name" : "フィード名",
- "category" : "カテゴリー"
- },
- "import" : {
- "google_reader_prefix" : "Googleアカウントからフィードを",
- "google_reader_suffix" : "インポートします。",
- "google_download" : "または、お持ちのsubscriptions.xmlファイルをアップロードします。",
- "google_download_link" : "このリンクからダウンロードして下さい。",
- "xml_file" : "OPMLファイル"
- },
- "new_category" : {
- "name" : "名前",
- "parent" : "親カテゴリー"
- },
- "toolbar" : {
- "unread" : "未読",
- "all" : "全て",
- "previous_entry" : "前のエントリー",
- "next_entry" : "次のエントリー",
- "refresh" : "更新",
- "refresh_all" : "全てのフィードを更新",
- "sort_by_asc_desc" : "日時でソート",
- "titles_only" : "タイトルのみ",
- "expanded_view" : "拡張ビュー",
- "mark_all_as_read" : "全て既読にする",
- "mark_all_older_12_hours" : "12時間以上前のアイテム",
- "mark_all_older_day" : "前日より前のアイテム",
- "mark_all_older_week" : "1週間以上前のアイテム",
- "mark_all_older_two_weeks" : "2週間以上前のアイテム",
- "settings" : "設定",
- "profile" : "Profile",
- "admin" : "管理者",
- "about" : "About",
- "logout" : "ログアウト",
- "donate" : "寄付"
- },
- "view" : {
- "entry_source" : " より ",
- "entry_author" : " 著者 ",
- "error_while_loading_feed" : "フィード読み込み中にエラーが発生しました。",
- "keep_unread" : "未読として保持",
- "no_unread_items" : "未読アイテムはありません。",
- "mark_up_to_here" : "ここまで既読",
- "search_for" : "検索: ",
- "no_search_results" : "検索結果はありません。"
- },
- "feedsearch" : {
- "hint" : "購読フィードを入力...",
- "help" : "Enterキーで選択、矢印キーで移動します。",
- "result_prefix" : "見つかった購読フィード:"
- },
- "settings" : {
- "general" : {
- "value" : "一般",
- "language" : "言語",
- "language_contribute" : "翻訳に貢献する",
- "show_unread" : "未読エントリーのないフィードとカテゴリーを表示",
- "social_buttons" : "共有ボタンを表示",
- "scroll_marks" : "拡張ビューではエントリーのスクロールで既読にする"
- },
- "appearance" : "外観",
- "scroll_speed" : "エントリー間のスクロールスピード(ミリ秒)",
- "scroll_speed_help" : "0に設定すると無効になります",
- "theme" : "テーマ",
- "submit_your_theme" : "テーマを登録する",
- "custom_css" : "カスタムCSS"
- },
- "details" : {
- "feed_details" : "フィードの詳細",
- "url" : "URL",
- "website" : "Webサイト",
- "name" : "名前",
- "category" : "カテゴリー",
- "position" : "位置",
- "last_refresh" : "最終更新",
- "message" : "最終更新メッセージ",
- "next_refresh" : "次回更新",
- "queued_for_refresh" : "更新キュー",
- "feed_url" : "フィードURL",
- "generate_api_key_first" : "最初にあなたのAPIキーを生成して下さい。",
- "unsubscribe" : "購読解除",
- "unsubscribe_confirmation" : "フィードの購読を解除してよろしいですか?",
- "delete_category_confirmation" : "カテゴリーを削除してよろしいですか?",
- "category_details" : "カテゴリー詳細",
- "tag_details" : "タグ詳細",
- "parent_category" : "親カテゴリー"
- },
- "profile" : {
- "user_name" : "ユーザ名",
- "email" : "E-mail",
- "change_password" : "パスワードの変更",
- "confirm_password" : "変更パスワードの確認",
- "minimum_8_chars" : "8文字以上",
- "passwords_do_not_match" : "パスワードが一致しません",
- "api_key" : "APIキー",
- "api_key_not_generated" : "APIキーが生成されていません",
- "generate_new_api_key" : "新しいAPIキーを生成",
- "generate_new_api_key_info" : "パスワードを変更すると新しいAPIキーが生成されます",
- "opml_export" : "OPMLエクスポート",
- "delete_account" : "アカウント削除",
- "delete_account_confirmation" : "アカウントを削除してよろしいですか? 削除すると戻すことはできません!"
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeedはJAX-RSとAngularJSを使用しているので、REST APIも利用可能です。",
- "link_to_documentation" : "ドキュメントへのリンク"
- },
- "keyboard_shortcuts" : "キーボードショートカット",
- "version" : "CommaFeedバージョン",
- "line1_prefix" : "CommaFeedはオープンソースプロジェクトです。ソースは",
- "line1_suffix" : "にホスティングされています。",
- "line2_prefix" : "もし問題を登録したい場合、",
- "line2_suffix" : "プロジェクトのissuesページに報告して下さい。",
- "line3" : "このプロジェクトを気に入った場合、開発者やWebサイトの運営コストをサポートするための寄付を検討して下さいね。",
- "line4" : "Bitcoinなら寄付できる方、アドレスはこちらです。",
- "goodies" : {
- "value" : "Goodies",
- "android_app" : "Androidアプリ",
- "subscribe_url" : "購読URL",
- "chrome_extension" : "Chrome拡張",
- "firefox_extension" : "Firefox拡張",
- "opera_extension" : "Opera拡張",
- "subscribe_bookmarklet" : "購読ブックマークレットを追加(クリック)",
- "subscribe_bookmarklet_asc" : "古い順",
- "subscribe_bookmarklet_desc" : "新しい順",
- "next_unread_bookmarklet" : "次の未読アイテムブックマークレット(ブックマークバーへドラッグ)"
- },
- "translation" : {
- "value" : "翻訳",
- "message" : "CommaFeedの翻訳にご協力ください!",
- "link" : "翻訳にあたっての案内はこちら"
- },
- "announcements" : "お知らせ",
- "shortcuts" : {
- "mouse_middleclick" : "中クリック",
- "open_next_entry" : "次のエントリーを開く",
- "open_previous_entry" : "前のエントリーを開く",
- "spacebar" : "space/shift+space",
- "move_page_down_up" : "ページ移動",
- "focus_next_entry" : "次のエントリーを開かずにフォーカス移動",
- "focus_previous_entry" : "前のエントリーを開かずにフォーカス移動",
- "open_next_feed" : "次のフィード/カテゴリーを開く",
- "open_previous_feed" : "前のフィード/カテゴリーを開く",
- "open_close_current_entry" : "現在のエントリーを開く/閉じる",
- "open_current_entry_in_new_window" : "現在のエントリーを新しいウィンドウで開く",
- "open_current_entry_in_new_window_background" : "現在のエントリーを新しいバックグラウンドウィンドウで開く",
- "star_unstar" : "現在のエントリーにスターを付ける/解除する",
- "mark_current_entry" : "現在のエントリーを既読/未読にする",
- "mark_all_as_read" : "全エントリーを既読にする",
- "open_in_new_tab_mark_as_read" : "エントリーを既読にして新しいタブで開く",
- "fullscreen" : "フルスクリーン切り替え",
- "font_size" : "現在のエントリーのフォントサイズを大きく/小さくする",
- "go_to_all" : "All viewに変更する",
- "go_to_starred" : "スター付きviewに変更する",
- "feed_search" : "購読画面(subscription nameの入力)に移動する"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/ko.js b/commafeed-client/src/main/app/i18n/ko.js
deleted file mode 100644
index 4e029fe7..00000000
--- a/commafeed-client/src/main/app/i18n/ko.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "저장",
- "cancel" : "취소",
- "delete" : "삭제",
- "required" : "필수",
- "download" : "다운로드",
- "link" : "링크",
- "bookmark" : "북마크",
- "close" : "닫기 ",
- "tags" : "태그 "
- },
- "tree" : {
- "subscribe" : "구독",
- "import" : "가져오기",
- "new_category" : "새로운 카테고리",
- "all" : "전체",
- "starred" : "중요 표시됨"
- },
- "subscribe" : {
- "feed_url" : "피드 URL",
- "feed_name" : "피드 이름",
- "category" : "카테고리"
- },
- "import" : {
- "google_reader_prefix" : "당신의 Google Reader",
- "google_reader_suffix" : " 에서 피드들을 가져오겠습니다.",
- "google_download" : "아니면, subscription.xml 파일을 업로드 해주세요.",
- "google_download_link" : "다운로드 링크",
- "xml_file" : "OPML File"
- },
- "new_category" : {
- "name" : "이름",
- "parent" : "부모 카테고리"
- },
- "toolbar" : {
- "unread" : "읽지 않음",
- "all" : "전체",
- "previous_entry" : "이전 항목",
- "next_entry" : "다음 항목",
- "refresh" : "새로고침",
- "refresh_all" : "모든 피드를 강제로 새로고침",
- "sort_by_asc_desc" : "날짜별 오름차/내림차순 정렬",
- "titles_only" : "제목만 표시하기",
- "expanded_view" : "Expanded View",
- "mark_all_as_read" : "읽음으로 표시",
- "mark_all_older_12_hours" : "12시간보다 오래된 항목",
- "mark_all_older_day" : "1일보다 오래된 항목",
- "mark_all_older_week" : "1주일보다 오래된 항목",
- "mark_all_older_two_weeks" : "2주일보다 오래된 항목",
- "settings" : "설정",
- "profile" : "프로필",
- "admin" : "괸리자",
- "about" : "더보기",
- "logout" : "로그아웃",
- "donate" : "기부하기"
- },
- "view" : {
- "entry_source" : "from ",
- "entry_author" : "by ",
- "error_while_loading_feed" : "피드 로딩중 에러",
- "keep_unread" : "항상 읽지 않음으로 표시",
- "no_unread_items" : " 읽지 않은 항목이 없습니다.",
- "mark_up_to_here" : "이 위로 읽음으로 표시",
- "search_for" : "검색: ",
- "no_search_results" : "검색 결과 없음"
- },
- "feedsearch" : {
- "hint" : "구독 이름을 입력하세요",
- "help" : "화살표 키로 이동하고 엔터 키로 선택하세요.",
- "result_prefix" : "검색 결과:"
- },
- "settings" : {
- "general" : {
- "value" : "일반",
- "language" : "언어",
- "language_contribute" : "번역에 기여하기",
- "show_unread" : "안 읽은 항목들이 있는 피드와 카테고리 보여주기",
- "social_buttons" : "공유 버튼 표시하기",
- "scroll_marks" : "Expanded View에서 스크롤하면 항목들을 읽음으로 표시하기"
- },
- "appearance" : "외관",
- "scroll_speed" : "항목 사이를 이동할 때 스크롤 속도 (밀리초로 설정)",
- "scroll_speed_help" : "비활성화하려면 0으로 설정하세요",
- "theme" : "테마",
- "submit_your_theme" : "새 테마 업로드",
- "custom_css" : "커스텀 CSS"
- },
- "details" : {
- "feed_details" : "피드 상세",
- "url" : "URL",
- "website" : "웹사이트",
- "name" : "이름",
- "category" : "카테고리",
- "position" : "위치",
- "last_refresh" : "마지막 새로고침",
- "message" : "마지막 새로고침 메시지",
- "next_refresh" : "다음 새로고침",
- "queued_for_refresh" : "새로고침 대기중",
- "feed_url" : "피드 URL",
- "generate_api_key_first" : "당신의 프로필을 위해 API Key를 먼저 생성하세요.",
- "unsubscribe" : "구독 해제",
- "unsubscribe_confirmation" : "정말 이 피드를 구독 해제하시겠습니까?",
- "delete_category_confirmation" : "정말 이 카테고리를 삭제하시겠습니까?",
- "category_details" : "카테고리 상세",
- "tag_details" : "태그 상세",
- "parent_category" : "부모 카테고리"
- },
- "profile" : {
- "user_name" : "사용자 이름",
- "email" : "이메일",
- "change_password" : "비밀번호 변경",
- "confirm_password" : "비밀번호 확인",
- "minimum_8_chars" : "최소 8개의 문자가 필요합니다.",
- "passwords_do_not_match" : "비밀번호가 일치하지 않습니다.",
- "api_key" : "API key",
- "api_key_not_generated" : "아직 API Key가 생성되지 않았습니다.",
- "generate_new_api_key" : "API Key 생성하기",
- "generate_new_api_key_info" : "비밀번호를 변경하면 새로운 API Key가 생성됩니다.",
- "opml_export" : "OPML 내보내기",
- "delete_account" : "계정 삭제하기",
- "delete_account_confirmation" : "계정을 삭제하시겠습니까? 되돌릴 수 없어요!"
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed는 JAX-RS와 AngularJS를 이용해 만들었습니다. 그렇기 때문에 REST API를 사용할수있습니다.",
- "link_to_documentation" : "문서 링크."
- },
- "keyboard_shortcuts" : "단축키",
- "version" : "CommaFeed 버전",
- "line1_prefix" : "CommaFeed는 오픈 소스 프로젝트입니다. 소스는",
- "line1_suffix" : "에 있습니다.",
- "line2_prefix" : "문제가 발생하는 경우",
- "line2_suffix" : " 프로젝트 문제 페이지에 보고하십시오.",
- "line3" : "이 프로젝트를 좋아하시면 개발자를 지원하고 웹사이트 유지비용을 충당하는 데 도움이 되는 기부금을 고려하시기 바랍니다.",
- "line4" : "비트코인으로 기부하기",
- "goodies" : {
- "value" : "Goodies",
- "android_app" : "안드로이드 앱",
- "subscribe_url" : "구독 URL",
- "chrome_extension" : "Chrome 확장 프로그램",
- "firefox_extension" : "Firefox 확장 기능",
- "opera_extension" : "Opera 확장 기능",
- "subscribe_bookmarklet" : "구독 북마크 추가 (클릭)",
- "subscribe_bookmarklet_asc" : "오래된 것 먼저",
- "subscribe_bookmarklet_desc" : "새로운 것 먼저",
- "next_unread_bookmarklet" : "안 읽은 항목 북마크 (북마크바에 끌기) "
- },
- "translation" : {
- "value" : "번역",
- "message" : "CommaFeed를 번역하는데 당신의 도움이 필요합니다.",
- "link" : "번역에 기여하기"
- },
- "announcements" : "공지",
- "shortcuts" : {
- "mouse_middleclick" : "마우스 미들클릭",
- "open_next_entry" : "다음 항목 열기",
- "open_previous_entry" : "이전 항목 열기",
- "spacebar" : "space/shift+space ",
- "move_page_down_up" : "페이지 아래/위로 이동 ",
- "focus_next_entry" : "열지 않고 다음 항목 보기",
- "focus_previous_entry" : "열지 않고 이전 항목 보기",
- "open_next_feed" : "다음 피드나 카테고리 열기",
- "open_previous_feed" : "이전 피드나 카테고리 열기",
- "open_close_current_entry" : "현재 항목 열기/닫기",
- "open_current_entry_in_new_window" : "새 창으로 현재 항목 열기",
- "open_current_entry_in_new_window_background" : "백그라운드에 새 창으로 현재 항목 열기",
- "star_unstar" : "현재 항목 중요 표시/중요 표시 제거",
- "mark_current_entry" : "현재 항목 읽음/안읽음 표시",
- "mark_all_as_read" : "모든 항목 읽음으로 표시",
- "open_in_new_tab_mark_as_read" : "읽음으로 표시하고 새로운 탭에서 열기",
- "fullscreen" : "전체화면 켜기/끄기",
- "font_size" : "현재 항목의 글꼴 크기를 크게/작게",
- "go_to_all" : "모든 항목 보기",
- "go_to_starred" : "중요 표시한 항목 보기",
- "feed_search" : "구독 이름으로 구독 찾기"
- }
- }
-}
diff --git a/commafeed-client/src/main/app/i18n/ms.js b/commafeed-client/src/main/app/i18n/ms.js
deleted file mode 100644
index 6ae83724..00000000
--- a/commafeed-client/src/main/app/i18n/ms.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Save",
- "cancel" : "Batal",
- "delete" : "Padam",
- "required" : "Wajib",
- "download" : "Muat turun",
- "link" : "Pautan",
- "bookmark" : "Bookmark",
- "close" : "Tutup",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe" : "Langgan",
- "import" : "Import",
- "new_category" : "Kategori Baru",
- "all" : "Semua",
- "starred" : "Dibintang"
- },
- "subscribe" : {
- "feed_url" : "URL Feed",
- "feed_name" : "Nama Feed",
- "category" : "Kategori"
- },
- "import" : {
- "google_reader_prefix" : "Import feed dari ",
- "google_reader_suffix" : " akaun.",
- "google_download" : "Sebagai alternatif, muat naik fail subscriptions.xml anda.",
- "google_download_link" : "Muat turun dari sini",
- "xml_file" : "Fail OPML"
- },
- "new_category" : {
- "name" : "Nama",
- "parent" : "Induk"
- },
- "toolbar" : {
- "unread" : "Belum Dibaca",
- "all" : "Semua",
- "previous_entry" : "Sebelumnya",
- "next_entry" : "Selepasnya",
- "refresh" : "Refresh",
- "refresh_all" : "Force refresh all my feeds ",
- "sort_by_asc_desc" : "Aturkan mengikut tarikh (baru/lama)",
- "titles_only" : "Tajuk sahaja",
- "expanded_view" : "Wide view",
- "mark_all_as_read" : "Tanda kesemuanya telah dibaca",
- "mark_all_older_12_hours" : "Items older than 12 hours ",
- "mark_all_older_day" : "Lebih lama daripada sehari",
- "mark_all_older_week" : "Lebih lama daripada seminggu",
- "mark_all_older_two_weeks" : "Lebih lama daripada dua minggu",
- "settings" : "Setting",
- "profile" : "Profil",
- "admin" : "Admin",
- "about" : "About",
- "logout" : "Logout",
- "donate" : "Derma"
- },
- "view" : {
- "entry_source" : "from ",
- "entry_author" : "oleh ",
- "error_while_loading_feed" : "Kesilapan semasa memuat turun feed ini",
- "keep_unread" : "Simpan tidak dibaca",
- "no_unread_items" : "tiada item yang belum dibaca.",
- "mark_up_to_here" : "Mark as read up to here ",
- "search_for" : "searching for: ",
- "no_search_results" : "No match found for the requested keywords "
- },
- "feedsearch" : {
- "hint" : "Taipkan langganan...",
- "help" : "Guna kekunci Return untuk membuat pilihan dan kekunci arah untuk menavigasi.",
- "result_prefix" : "Langganan anda:"
- },
- "settings" : {
- "general" : {
- "value" : "Setting am",
- "language" : "Bahasa",
- "language_contribute" : "Sumbang penterjemahan",
- "show_unread" : "Tunjuk semua feed dan kategori yang telah dibaca",
- "social_buttons" : "Tunjuk social sharing",
- "scroll_marks" : "Dalam wide view, tanda item dibaca ketika scrolling"
- },
- "appearance" : "Rupa",
- "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ",
- "scroll_speed_help" : "set to 0 to disable ",
- "theme" : "Tema",
- "submit_your_theme" : "Muat naik tema anda",
- "custom_css" : "Custom CSS"
- },
- "details" : {
- "feed_details" : "Butir-butir Feed",
- "url" : "URL",
- "website" : "Website ",
- "name" : "Nama",
- "category" : "Kategori",
- "position" : "Posisi",
- "last_refresh" : "Refresh terakhir",
- "message" : "Last refresh message ",
- "next_refresh" : "Refresh seterusnya",
- "queued_for_refresh" : "Diaturkan untuk refresh",
- "feed_url" : "URL Feed",
- "generate_api_key_first" : "Janakan API key dalam profil anda dahulu.",
- "unsubscribe" : "Hentikan langganan",
- "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ",
- "delete_category_confirmation" : "Are you sure you want to delete this category? ",
- "category_details" : "Butir-butir kategori",
- "tag_details" : "Tag details ",
- "parent_category" : "Kategori induk"
- },
- "profile" : {
- "user_name" : "User name",
- "email" : "E-mel",
- "change_password" : "Tukar kata laluan",
- "confirm_password" : "Sahkan kata laluan",
- "minimum_8_chars" : "Minimum 8 huruf",
- "passwords_do_not_match" : "Kata laluan tidak sama",
- "api_key" : "API key",
- "api_key_not_generated" : "Belum dijana",
- "generate_new_api_key" : "Jana API key baru",
- "generate_new_api_key_info" : "Pertukaran kata laluan akan menjanakan API key yang baru",
- "opml_export" : "Export OPML",
- "delete_account" : "Padam akaun",
- "delete_account_confirmation" : "Delete your acount? There's no turning back! "
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed diaturcarakan dengan JAX-RS dan AngularJS. Oleh itu, REST API boleh didapati.",
- "link_to_documentation" : "Pautan ke dokumentasi."
- },
- "keyboard_shortcuts" : "Pintasan papan kekunci",
- "version" : "CommaFeed version ",
- "line1_prefix" : "CommaFeed adalah projek open-source. Sources are berada di ",
- "line1_suffix" : ".",
- "line2_prefix" : "Jika anda menghadapi masalah, sila laporkan di halaman isu-isu di ",
- "line2_suffix" : " projek.",
- "line3" : "Jika anda suka projek ini, anda boleh menbuat dermaan kepada pengaturcara untuk membantu menampung kos laman web ini.",
- "line4" : "Jika anda guna bitcoin, halamannya adalah ",
- "goodies" : {
- "value" : "Goodies",
- "android_app" : "Android app",
- "subscribe_url" : "URL melanggan",
- "chrome_extension" : "Chrome extension",
- "firefox_extension" : "Firefox extension",
- "opera_extension" : "Opera extension",
- "subscribe_bookmarklet" : "Jana bookmarklet langganan (klik)",
- "subscribe_bookmarklet_asc" : "Oldest first ",
- "subscribe_bookmarklet_desc" : "Newest first ",
- "next_unread_bookmarklet" : "Item bookmarklet yang belum dibaca seterusnya (seret ke bookmark bar)"
- },
- "translation" : {
- "value" : "Terjemahan",
- "message" : "Kami perlukan bantuan anda untuk menterjemahkan CommaFeed.",
- "link" : "Bagaimana mengyumbang penterjemahan."
- },
- "announcements" : "Pengumuman",
- "shortcuts" : {
- "mouse_middleclick" : "Klik tengah",
- "open_next_entry" : "buka item seterusya",
- "open_previous_entry" : "buka item sebelumnya",
- "spacebar" : "space/shift+space",
- "move_page_down_up" : "Gerak halaman ke bawah/atas",
- "focus_next_entry" : "fokus kepada item seterusnya tanpa membuka",
- "focus_previous_entry" : "fokus kepada item sebelumnya tanpa membuka",
- "open_next_feed" : "buka feed atau kategori seterusnya",
- "open_previous_feed" : "buka feed atau kategori sebelumnya",
- "open_close_current_entry" : "buka/tutup entry kini",
- "open_current_entry_in_new_window" : "buka entry kini di window yang baru",
- "open_current_entry_in_new_window_background" : "buka entry kini di window baru di latar belakang",
- "star_unstar" : "bintang/nyah-bintang entry kini",
- "mark_current_entry" : "tanda entry kini telah dibaca/belum dibaca",
- "mark_all_as_read" : "tanda semua entry telah dibaca",
- "open_in_new_tab_mark_as_read" : "buka entry di tab baru dan tanda telah dibaca",
- "fullscreen" : "toggle mod skrin penuh",
- "font_size" : "kecil/besar fon entry kini",
- "go_to_all" : "go to the All view ",
- "go_to_starred" : "go to the Starred view ",
- "feed_search" : "pergi ke langganan dengan nama langganan"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/nb.js b/commafeed-client/src/main/app/i18n/nb.js
deleted file mode 100644
index 738c4a2d..00000000
--- a/commafeed-client/src/main/app/i18n/nb.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Lagre",
- "cancel" : "Avbryt",
- "delete" : "Slett",
- "required" : "Påkrevd",
- "download" : "Last ned",
- "link" : "Lenke",
- "bookmark" : "Bokmerke",
- "close" : "Lukk",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe" : "Abonner",
- "import" : "Importer",
- "new_category" : "Ny kategori",
- "all" : "Alle",
- "starred" : "Merkede artikler"
- },
- "subscribe" : {
- "feed_url" : "URL for abonnement",
- "feed_name" : "Abonnementsnavn",
- "category" : "Kategori"
- },
- "import" : {
- "google_reader_prefix" : "La meg importere dine abonnementer fra din",
- "google_reader_suffix" : " bruker.",
- "google_download" : "Alternativt, last opp din egen subscriptions.xml-fil.",
- "google_download_link" : "Last ned herfra.",
- "xml_file" : "OPML-fil"
- },
- "new_category" : {
- "name" : "Navn",
- "parent" : "Overordnet"
- },
- "toolbar" : {
- "unread" : "Uleste",
- "all" : "Alle",
- "previous_entry" : "Forrige artikkel",
- "next_entry" : "Neste artikkel",
- "refresh" : "Oppdater",
- "refresh_all" : "Force refresh all my feeds ",
- "sort_by_asc_desc" : "Sorter etter dato ny/gammel",
- "titles_only" : "Kun titler",
- "expanded_view" : "Utvidet visning",
- "mark_all_as_read" : "Merk alle som lest",
- "mark_all_older_12_hours" : "Items older than 12 hours ",
- "mark_all_older_day" : "Artikler eldre enn én dag",
- "mark_all_older_week" : "Artikler eldre enn én uke",
- "mark_all_older_two_weeks" : "Artikler eldre enn to uker",
- "settings" : "Innstillinger",
- "profile" : "Profil",
- "admin" : "Admin",
- "about" : "Om",
- "logout" : "Logg ut",
- "donate" : "Doner"
- },
- "view" : {
- "entry_source" : "from ",
- "entry_author" : "by ",
- "error_while_loading_feed" : "Feil under lasting av artikkel",
- "keep_unread" : "Behold som ulest",
- "no_unread_items" : "har ingen uleste artikler.",
- "mark_up_to_here" : "Mark as read up to here ",
- "search_for" : "searching for: ",
- "no_search_results" : "No match found for the requested keywords "
- },
- "feedsearch" : {
- "hint" : "Skriv inn et abonnement...",
- "help" : "Bruk entertasten for å velge og piltastene for å navigere.",
- "result_prefix" : "Dine abonnementer:"
- },
- "settings" : {
- "general" : {
- "value" : "Generelt",
- "language" : "Språk",
- "language_contribute" : "Bidra med oversettelser",
- "show_unread" : "Vis abonnementer og kategorier uten nye artikler",
- "social_buttons" : "Vis delingsknapper",
- "scroll_marks" : "I utvidet visning, merk artikler som leste når du blar deg forbi dem."
- },
- "appearance" : "Utseende",
- "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ",
- "scroll_speed_help" : "set to 0 to disable ",
- "theme" : "Drakt",
- "submit_your_theme" : "Legg til egen drakt",
- "custom_css" : "Egendefinert CSS"
- },
- "details" : {
- "feed_details" : "Abonnementsdetaljer",
- "url" : "URL",
- "website" : "Website ",
- "name" : "Navn",
- "category" : "Kategori",
- "position" : "Posisjon",
- "last_refresh" : "Siste oppdatering",
- "message" : "Last refresh message ",
- "next_refresh" : "Neste oppdatering",
- "queued_for_refresh" : "I kø for oppdatering",
- "feed_url" : "URL for abonnement",
- "generate_api_key_first" : "Generer en API-nøkkel under profilinnstillinger først.",
- "unsubscribe" : "Avslutt abonnement",
- "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ",
- "delete_category_confirmation" : "Are you sure you want to delete this category? ",
- "category_details" : "Kategoridetaljer",
- "tag_details" : "Tag details ",
- "parent_category" : "Overordnet kategori"
- },
- "profile" : {
- "user_name" : "Brukernavn",
- "email" : "E-post",
- "change_password" : "Endre passord",
- "confirm_password" : "Bekreft passord",
- "minimum_8_chars" : "Minimum 8 tegn",
- "passwords_do_not_match" : "Passordene er ikke like",
- "api_key" : "API-nøkkel",
- "api_key_not_generated" : "Har ikke blitt generert",
- "generate_new_api_key" : "Generer ny API-nøkkel",
- "generate_new_api_key_info" : "Endring av passord vil generere en ny API-nøkkel",
- "opml_export" : "OPML-eksport",
- "delete_account" : "Slett bruker",
- "delete_account_confirmation" : "Delete your acount? There's no turning back! "
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed er bygget på toppen av JAX-RS og AngularJS. På grunn av dette er REST API tilgjengelig.",
- "link_to_documentation" : "Lenke til dokumentasjon."
- },
- "keyboard_shortcuts" : "Hurtigtaster",
- "version" : "CommaFeed version ",
- "line1_prefix" : "CommaFeed er et prosjekt med åpen kildekode. Kildekoden er tilgjengelig på ",
- "line1_suffix" : ".",
- "line2_prefix" : "Vis du oppdager en feil eller et problem, rapporter det på ",
- "line2_suffix" : " siden til prosjekt.",
- "line3" : "Dersom du liker dette prosjektet, kan du vurdere en donasjon for støtte utvikleren, og bidra med å dekke kostnadene til å drifte nettsiden.",
- "line4" : "For de som foretrekker bitcoin, her er adressa",
- "goodies" : {
- "value" : "Godsaker",
- "android_app" : "Android app ",
- "subscribe_url" : "Abonner URL",
- "chrome_extension" : "Chrome-utvidelse",
- "firefox_extension" : "Firefox-utvidelse",
- "opera_extension" : "Opera-utvidelse",
- "subscribe_bookmarklet" : "Nytt abonnement-bokmerkeprogram (klikk)",
- "subscribe_bookmarklet_asc" : "Oldest first ",
- "subscribe_bookmarklet_desc" : "Newest first ",
- "next_unread_bookmarklet" : "Neste uleste artikkel-bokmerkeprogram (dra til bokmerkemenyen)"
- },
- "translation" : {
- "value" : "Oversettelse",
- "message" : "Vi trenger din hjelp til å oversette CommaFeed.",
- "link" : "Se hvordan du kan hjelpe til med oversettelser."
- },
- "announcements" : "Kunngjøringer",
- "shortcuts" : {
- "mouse_middleclick" : "midtre museknapp/musehjulet",
- "open_next_entry" : "åpne neste artikkel",
- "open_previous_entry" : "åpne forrige artikkel",
- "spacebar" : "space/shift+space ",
- "move_page_down_up" : "moves the page down/up ",
- "focus_next_entry" : "sett fokus på neste artikkel uten å åpne den",
- "focus_previous_entry" : "sett fokus på forrige artikkel uten å åpne den",
- "open_next_feed" : "åpne neste abonnement eller kategori",
- "open_previous_feed" : "åpne forrige abonnement eller kategori",
- "open_close_current_entry" : "åpne/lukke gjeldende artikkel",
- "open_current_entry_in_new_window" : "åpne gjeldende artikkel i et nytt vindu",
- "open_current_entry_in_new_window_background" : "åpne gjeldende artikkel i et nytt bakgrunnsvindu",
- "star_unstar" : "legg til stjerne/fjern stjerne fra gjeldende artikkel",
- "mark_current_entry" : "merk gjeldende artikkel som lest/ulest",
- "mark_all_as_read" : "merk alle artikler som lest",
- "open_in_new_tab_mark_as_read" : "åpne artikkel i ny fane og merk som lest",
- "fullscreen" : "toggle full screen mode ",
- "font_size" : "increase/decrease font size of the current entry ",
- "go_to_all" : "go to the All view ",
- "go_to_starred" : "go to the Starred view ",
- "feed_search" : "naviger til et abonnement ved å skrive inn abonnementsnavnet"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/nl.js b/commafeed-client/src/main/app/i18n/nl.js
deleted file mode 100644
index ab13eb18..00000000
--- a/commafeed-client/src/main/app/i18n/nl.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Opslaan",
- "cancel" : "Annuleren",
- "delete" : "Verwijderen",
- "required" : "Verplicht",
- "download" : "Download",
- "link" : "Link",
- "bookmark" : "Bookmark",
- "close" : "Sluiten ",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe" : "Abonneer",
- "import" : "Importeer",
- "new_category" : "Nieuwe categorie",
- "all" : "Alles",
- "starred" : "Favorieten"
- },
- "subscribe" : {
- "feed_url" : "Feed URL",
- "feed_name" : "Feed naam",
- "category" : "Categorie"
- },
- "import" : {
- "google_reader_prefix" : "Laat je feeds importeren vanuit jouw",
- "google_reader_suffix" : " account.",
- "google_download" : "Als alternatief kun je je subscriptions.xml bestand uploaden.",
- "google_download_link" : "Download het hier.",
- "xml_file" : "OPML Bestand"
- },
- "new_category" : {
- "name" : "Naam",
- "parent" : "Parent"
- },
- "toolbar" : {
- "unread" : "Ongelezen",
- "all" : "Alles",
- "previous_entry" : "Vorig artikel",
- "next_entry" : "Volgend artikel",
- "refresh" : "Vernieuwen",
- "refresh_all" : "Force refresh all my feeds ",
- "sort_by_asc_desc" : "Sorteer op datum opl/afl",
- "titles_only" : "Alleen titels",
- "expanded_view" : "Uitgebreide weergave",
- "mark_all_as_read" : "Markeer alles als gelezen",
- "mark_all_older_12_hours" : "Items older than 12 hours ",
- "mark_all_older_day" : "Artikelen ouder dan een dag",
- "mark_all_older_week" : "Artikelen ouder dan een week",
- "mark_all_older_two_weeks" : "Artikelen ouder dan twee weken",
- "settings" : "Instellingen",
- "profile" : "Profiel",
- "admin" : "Administratie",
- "about" : "Over ons",
- "logout" : "Log uit",
- "donate" : "Doneer"
- },
- "view" : {
- "entry_source" : "van",
- "entry_author" : "door",
- "error_while_loading_feed" : "Fout tijdens het laden van de feed",
- "keep_unread" : "Behoud ongelezen",
- "no_unread_items" : "Heeft geen ongelezen artikelen",
- "mark_up_to_here" : "Markeer tot hier als gelezen",
- "search_for" : "searching for: ",
- "no_search_results" : "No match found for the requested keywords "
- },
- "feedsearch" : {
- "hint" : "Type een abonnement in... ",
- "help" : "Gebruik Enter om te selecteren en de pijltjestoetsen om te navigeren.",
- "result_prefix" : "Jouw abonnementen:"
- },
- "settings" : {
- "general" : {
- "value" : "Algemeen",
- "language" : "Taal",
- "language_contribute" : "Draag bij met vertalingen",
- "show_unread" : "Laat feeds en categorieën zonder ongelezen artikelen zien",
- "social_buttons" : "Laat Social Media knoppen zien",
- "scroll_marks" : "Markeer artikelen als gelezen, wanneer je er doorheen scrollt"
- },
- "appearance" : "Uiterlijk",
- "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ",
- "scroll_speed_help" : "set to 0 to disable ",
- "theme" : "Thema",
- "submit_your_theme" : "Stuur thema in",
- "custom_css" : "Custom CSS"
- },
- "details" : {
- "feed_details" : "Feed details",
- "url" : "URL",
- "website" : "Website",
- "name" : "Naam",
- "category" : "Categorie",
- "position" : "Positie",
- "last_refresh" : "Laatste vernieuwing",
- "message" : "Last refresh message ",
- "next_refresh" : "Volgende vernieuwing",
- "queued_for_refresh" : "In wachtrij voor vernieuwing",
- "feed_url" : "Feed URL",
- "generate_api_key_first" : "Genereer eerst een API sleutel in je profiel.",
- "unsubscribe" : "Abonnement opzeggen",
- "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ",
- "delete_category_confirmation" : "Are you sure you want to delete this category? ",
- "category_details" : "Categorie details",
- "tag_details" : "Tag details ",
- "parent_category" : "Bovenliggende categorie"
- },
- "profile" : {
- "user_name" : "Gebruikersnaam",
- "email" : "E-mail",
- "change_password" : "Verander wachtwoord",
- "confirm_password" : "Bevestig wachtwoord",
- "minimum_8_chars" : "Minimaal 8 tekens",
- "passwords_do_not_match" : "Wachtwoorden komen niet overeen",
- "api_key" : "API sleutel",
- "api_key_not_generated" : "Nog niet gegenereerd",
- "generate_new_api_key" : "Genereer nieuwe API sleutel",
- "generate_new_api_key_info" : "Het veranderen van het wachtwoord genereert een nieuwe API sleutel",
- "opml_export" : "OPML export",
- "delete_account" : "Verwijder account",
- "delete_account_confirmation" : "Delete your acount? There's no turning back! "
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed is gebouwd op basis van JAX-RS en AngularJS. Als zodanig is er een REST API beschikbaar.",
- "link_to_documentation" : "Link naar de documentatie"
- },
- "keyboard_shortcuts" : "Sneltoetsen",
- "version" : "CommaFeed version ",
- "line1_prefix" : "CommaFeed is een open-source project. Bronnen worden gehost op ",
- "line1_suffix" : ".",
- "line2_prefix" : "Als je een probleem tegenkomt, rapporteer dit dan a.u.b. op de Issues pagina van het ",
- "line2_suffix" : " project.",
- "line3" : "Als je dit project leuk vindt, overweeg dan te doneren om de ontwikkelaars te ondersteunen en hosting kosten te drukken.",
- "line4" : "Voor degenen die liever bitcoin gebruiken, hier is het adres",
- "goodies" : {
- "value" : "Goodies",
- "android_app" : "Android app",
- "subscribe_url" : "Abonneer URL",
- "chrome_extension" : "Chrome extensie",
- "firefox_extension" : "Firefox extensie",
- "opera_extension" : "Opera extensie",
- "subscribe_bookmarklet" : "Voeg abonnement toe bookmarklet (klik)",
- "subscribe_bookmarklet_asc" : "Oudste eerst",
- "subscribe_bookmarklet_desc" : "Nieuwste eerst",
- "next_unread_bookmarklet" : "Volgend ongelezen item bookmarklet (sleep naar bladwijzerbalk)"
- },
- "translation" : {
- "value" : "Vertalingen",
- "message" : "We hebben jouw hulp nodig om CommaFeed te vertalen.",
- "link" : "Bekijk hier hoe je kunt bijdragen met vertalingen."
- },
- "announcements" : "Aankondigingen",
- "shortcuts" : {
- "mouse_middleclick" : "middelste muisknop",
- "open_next_entry" : "open het volgende artikel",
- "open_previous_entry" : "open het vorige artikel",
- "spacebar" : "spatie/shift+spatie",
- "move_page_down_up" : "beweegt de pagina naar onder/boven",
- "focus_next_entry" : "plaats focus op volgend artikel zonder het te openen",
- "focus_previous_entry" : "plaats focus op vorig artikel zonder het te openen",
- "open_next_feed" : "open volgende feed of categorie",
- "open_previous_feed" : "open vorige feed of categorie",
- "open_close_current_entry" : "open/sluit het huidige artikel",
- "open_current_entry_in_new_window" : "open het huidige artikel in een nieuw venster",
- "open_current_entry_in_new_window_background" : "open huidig artikel in een nieuw venster op de achtergrond",
- "star_unstar" : "voeg artikel toe aan/verwijder uit favorieten",
- "mark_current_entry" : "markeer huidig artikel als gelezen/ongelezen",
- "mark_all_as_read" : "markeer alle artikelen als gelezen",
- "open_in_new_tab_mark_as_read" : "open artikel in een nieuw tabblad en markeer als gelezen",
- "fullscreen" : "schakel tussen fullscreen weergave",
- "font_size" : "vergroot/verklein tekst in huidig artikel",
- "go_to_all" : "ga naar de ALLES-weergave",
- "go_to_starred" : "ga naar de Favorieten-weergave",
- "feed_search" : "navigeer naar een abonnement door diens naam in te typen"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/nn.js b/commafeed-client/src/main/app/i18n/nn.js
deleted file mode 100644
index 46098151..00000000
--- a/commafeed-client/src/main/app/i18n/nn.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Lagre",
- "cancel" : "Avbryt",
- "delete" : "Slett",
- "required" : "Påkravd",
- "download" : "Last ned",
- "link" : "Lenkje",
- "bookmark" : "Bokmerke",
- "close" : "Lukk",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe" : "Abonner",
- "import" : "Importer",
- "new_category" : "Ny kategori",
- "all" : "Alle",
- "starred" : "Merka artiklar"
- },
- "subscribe" : {
- "feed_url" : "URL for abonnement",
- "feed_name" : "Abonnementsnamn",
- "category" : "Kategori"
- },
- "import" : {
- "google_reader_prefix" : "La meg importere abonnementa dine frå",
- "google_reader_suffix" : "-brukaren din.",
- "google_download" : "Alternativt, last opp di eiga subscriptions.xml-fil.",
- "google_download_link" : "Last ned herifrå.",
- "xml_file" : "OPML-fil"
- },
- "new_category" : {
- "name" : "Namn",
- "parent" : "Overordna"
- },
- "toolbar" : {
- "unread" : "Ulesne",
- "all" : "Alle",
- "previous_entry" : "Førre artikkel",
- "next_entry" : "Neste artikkel",
- "refresh" : "Oppdater",
- "refresh_all" : "Force refresh all my feeds ",
- "sort_by_asc_desc" : "Sorter etter dato ny/gamal",
- "titles_only" : "Berre titlar",
- "expanded_view" : "Utvida visning",
- "mark_all_as_read" : "Merk alle som lesne",
- "mark_all_older_12_hours" : "Items older than 12 hours ",
- "mark_all_older_day" : "Artiklar eldre enn éin dag",
- "mark_all_older_week" : "Artiklar eldre enn éi veke",
- "mark_all_older_two_weeks" : "Artiklar eldre enn to veker",
- "settings" : "Innstillingar",
- "profile" : "Profil",
- "admin" : "Admin",
- "about" : "Om",
- "logout" : "Logg ut",
- "donate" : "Doner"
- },
- "view" : {
- "entry_source" : "from ",
- "entry_author" : "av ",
- "error_while_loading_feed" : "Feil under lasting av artikkel",
- "keep_unread" : "Behold som ulesen",
- "no_unread_items" : "har ingen ulesne artiklar.",
- "mark_up_to_here" : "Mark as read up to here ",
- "search_for" : "searching for: ",
- "no_search_results" : "No match found for the requested keywords "
- },
- "feedsearch" : {
- "hint" : "Skriv inn eit abonnement...",
- "help" : "Bruk entertasten for å velje og piltastane for å navigere.",
- "result_prefix" : "Dine abonnement:"
- },
- "settings" : {
- "general" : {
- "value" : "Generelt",
- "language" : "Språk",
- "language_contribute" : "Bidra med omsetjingar",
- "show_unread" : "Vis abonnement og kategoriar utan nye artiklar",
- "social_buttons" : "Vis delingsknappar",
- "scroll_marks" : "I utvida visning, merk artiklar som lesne når du blar deg forbi dei."
- },
- "appearance" : "Utsjånad",
- "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ",
- "scroll_speed_help" : "set to 0 to disable ",
- "theme" : "Drakt",
- "submit_your_theme" : "Legg til eiga drakt",
- "custom_css" : "Skreddarsydd CSS"
- },
- "details" : {
- "feed_details" : "Abonnementsdetaljar",
- "url" : "URL",
- "website" : "Website ",
- "name" : "Namn",
- "category" : "Kategori",
- "position" : "Posisjon",
- "last_refresh" : "Siste oppdatering",
- "message" : "Last refresh message ",
- "next_refresh" : "Neste oppdatering",
- "queued_for_refresh" : "I kø for oppdatering",
- "feed_url" : "URL for abonnement",
- "generate_api_key_first" : "Generer ein API-nykel under profilinnstillingar fyrst.",
- "unsubscribe" : "Avslutt abonnement",
- "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ",
- "delete_category_confirmation" : "Are you sure you want to delete this category? ",
- "category_details" : "Kategoridetaljar",
- "tag_details" : "Tag details ",
- "parent_category" : "Overordna kategori"
- },
- "profile" : {
- "user_name" : "Brukarnamn",
- "email" : "E-post",
- "change_password" : "Endre passord",
- "confirm_password" : "Stadfest passord",
- "minimum_8_chars" : "Minimum 8 teikn",
- "passwords_do_not_match" : "Passorda er usamde",
- "api_key" : "API-nykel",
- "api_key_not_generated" : "Har ikkje vorte generert",
- "generate_new_api_key" : "Generer ny API-nykel",
- "generate_new_api_key_info" : "Endring av passord vil generere ein ny API-nykel",
- "opml_export" : "OPML-eksport",
- "delete_account" : "Slett brukar",
- "delete_account_confirmation" : "Delete your acount? There's no turning back! "
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed er bygd på toppen av JAX-RS og AngularJS. Difor er REST API tilgjengeleg.",
- "link_to_documentation" : "Lenkje til dokumentasjon."
- },
- "keyboard_shortcuts" : "Hurtigtastar",
- "version" : "CommaFeed version ",
- "line1_prefix" : "CommaFeed er eit prosjekt med open kjeldekode. Kjeldekoden er tilgjengeleg på ",
- "line1_suffix" : ".",
- "line2_prefix" : "Viss du finn ein feil eller eit problem, rapporter det på ",
- "line2_suffix" : " prosjektsida.",
- "line3" : "Viss du likar dette prosjektet, kan du vurdere ein donasjon for å støtte utviklaren, og bidra med å dekkje kostnadane til å drifte nettstaden.",
- "line4" : "For dei som føretrekkjer bitcoin, her er adressa",
- "goodies" : {
- "value" : "Godsakar",
- "android_app" : "Android app ",
- "subscribe_url" : "Abonner URL",
- "chrome_extension" : "Chrome-utviding",
- "firefox_extension" : "Firefox-utviding",
- "opera_extension" : "Opera-utviding",
- "subscribe_bookmarklet" : "Nytt abonnement-bokmerkjeprogram (klikk)",
- "subscribe_bookmarklet_asc" : "Oldest first ",
- "subscribe_bookmarklet_desc" : "Newest first ",
- "next_unread_bookmarklet" : "Neste ulesne artikkel-bokmerkeprogram (dra til bokmerkemenyen)"
- },
- "translation" : {
- "value" : "Omsetjing",
- "message" : "Vi behøver di hjelp til å omsetje CommaFeed.",
- "link" : "Sjå korleis du kan hjelpe til med omsetjingar."
- },
- "announcements" : "Kunngjøringer",
- "shortcuts" : {
- "mouse_middleclick" : "midtre museknapp/musehjulet",
- "open_next_entry" : "opne neste artikkel",
- "open_previous_entry" : "opne førre artikkel",
- "spacebar" : "space/shift+space ",
- "move_page_down_up" : "moves the page down/up ",
- "focus_next_entry" : "sett fokus på neste artikkel utan å opne han",
- "focus_previous_entry" : "sett fokus på forrige artikkel utan å opne han",
- "open_next_feed" : "opne neste abonnement eller kategori",
- "open_previous_feed" : "opne førre abonnement eller kategori",
- "open_close_current_entry" : "opne/lukke gjeldande artikkel",
- "open_current_entry_in_new_window" : "opne gjeldande artikkel i eit nytt vindauge",
- "open_current_entry_in_new_window_background" : "opne gjeldande artikkel i eit nytt bakgrunnsvindauge",
- "star_unstar" : "legg til stjerne/fjern stjerne frå gjeldande artikkel",
- "mark_current_entry" : "merk gjeldande artikkel som lesen/ulesen",
- "mark_all_as_read" : "merk alle artiklar som lesne",
- "open_in_new_tab_mark_as_read" : "opne artikkel i ny fane og merk som lesen",
- "fullscreen" : "toggle full screen mode ",
- "font_size" : "increase/decrease font size of the current entry ",
- "go_to_all" : "go to the All view ",
- "go_to_starred" : "go to the Starred view ",
- "feed_search" : "naviger til eit abonnement ved å skrive inn abonnementsnamnet"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/pl.js b/commafeed-client/src/main/app/i18n/pl.js
deleted file mode 100644
index 220ca564..00000000
--- a/commafeed-client/src/main/app/i18n/pl.js
+++ /dev/null
@@ -1,182 +0,0 @@
-{
- "global" : {
- "save" : "Zachowaj",
- "cancel" : "Anuluj",
- "delete" : "Usuń",
- "required" : "Wymagane",
- "download" : "Pobierz",
- "link" : "Odnośnik",
- "bookmark" : "Zakładka",
- "close" : "Zamknij",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe" : "Subskrybuj",
- "import" : "Importuj",
- "new_category" : "Nowa kategoria",
- "all" : "Wszystkie elementy",
- "starred" : "Elementy oznaczone gwiazdką"
- },
- "subscribe" : {
- "feed_url" : "URL kanału",
- "feed_name" : "Nazwa kanału",
- "category" : "Kategoria"
- },
- "import" : {
- "google_reader_prefix" : "Pozwól mi zaimportować kanały z twojego ",
- "google_reader_suffix" : " konta",
- "google_download" : "albo, wrzuć pilk subskrypcje.xml",
- "google_download_link" : "Ściągnij go stąd.",
- "xml_file" : "Plik OPML"
- },
- "new_category" : {
- "name" : "Nazwa",
- "parent" : "Kategoria nadrzędna"
- },
- "toolbar" : {
- "unread" : "Nieprzeczytane",
- "all" : "Wszystkie",
- "previous_entry" : "Poprzedni element",
- "next_entry" : "Następny element",
- "refresh" : "Odswież",
- "refresh_all" : "Odśwież teraz wszystkie kanały ",
- "sort_by_asc_desc" : "Sortuj od najnowszego/najstarszego",
- "titles_only" : "Widok listy",
- "expanded_view" : "Widok rozwinięty",
- "mark_all_as_read" : "Oznacz wszystko jako przeczytane",
- "mark_all_older_12_hours" : "Elementy starsze niż 12 godzin ",
- "mark_all_older_day" : "Elementy starsze niż dzień",
- "mark_all_older_week" : "Elementy starsze niż tydzień",
- "mark_all_older_two_weeks" : "Elementy starsze niż dwa tygodnie",
- "settings" : "Ustawienia",
- "profile" : "Profil",
- "admin" : "Admin",
- "about" : "O CommaFeed",
- "logout" : "Wyloguj",
- "donate" : "Wspomóż"
- },
- "view" : {
- "entry_source" : "from ",
- "entry_author" : "przez",
- "error_while_loading_feed" : "Wystąpił błąd podczas ładowania tego kanału.",
- "keep_unread" : "Pozostaw nieprzeczytane",
- "no_unread_items" : " nie ma nieprzeczytanych elementów.",
- "mark_up_to_here" : "Oznacz jako przeczytane do tego elementu ",
- "search_for" : "wyszukiwanie dla: ",
- "no_search_results" : "Nie znaleziono wyników dla wyszukiwanej frazy "
- },
- "feedsearch" : {
- "hint" : "Wpisz subskrybcję...",
- "help" : "Użyj klawisza Enter do zaznaczenia a strzałek do nawigacji. ",
- "result_prefix" : "Twoje subskrybcje: "
- },
- "settings" : {
- "general" : {
- "value" : "Ogólne",
- "language" : "Język",
- "language_contribute" : "Pomóż w tłumaczeniu",
- "show_unread" : "Pokaż kanały i kategorie bez nieprzeczytanych elementów",
- "social_buttons" : "Pokaż przyciski udostępniania",
- "scroll_marks" : "W widoku rozwiniętym przewijanie oznacza elementy jako przeczytane"
- },
- "appearance" : "Wygląd",
- "scroll_speed" : "Prędkość przewijania podczas nawigowania pomiędzy wpisami (w milisekundach) ",
- "scroll_speed_help" : "ustaw na 0 by wyłączyć ",
- "theme" : "Motyw",
- "submit_your_theme" : "Wyślij swój motyw",
- "custom_css" : "Własny styl CSS"
- },
- "details" : {
- "feed_details" : "Szczegóły kanału",
- "url" : "URL",
- "website" : "Strona internetowa",
- "name" : "Nazwa",
- "category" : "Kategoria",
- "position" : "Pozycja",
- "last_refresh" : "Ostatnio odświeżony",
- "message" : "Ostatnia odpowiedź odświeżenia",
- "next_refresh" : "Następne odświeżenie",
- "queued_for_refresh" : "W kolejce do odświeżenia",
- "feed_url" : "URL kanału",
- "filtering_expression" : "Wyrażenie filtrujące",
- "filtering_expression_help" : "Ustaw puste, by wyłączyć. W przeciwnym razie wyrażenie zwracające 'true' lub 'false'. Dla 'false' nowe elementy w kanale będą autmatycznie \noznaczane jako przeczytane. Dostępne zmienne to: 'title', 'content', 'url' 'author' and 'categories'. Ich zawartość jest konwertowana na małe litery \npodczas porówynywania tekstu. Przykład: url.contains('youtube') albo (author eq 'athou' and title.contains('github') \nPełna dostępna składnia jest dostępna pod tym adresem.",
- "generate_api_key_first" : "Najpierw wygeneruj klucz API w swoim profilu.",
- "unsubscribe" : "Cofnij subskrypcje",
- "unsubscribe_confirmation" : "Czy na pewno chcesz cofnąć sybskrypcję tego kanału? ",
- "delete_category_confirmation" : "Czy na pewno chcesz usunąć tą kategorię? ",
- "category_details" : "Szczegóły kategorii",
- "tag_details" : "Szczegóły tagu ",
- "parent_category" : "Kategoria nadrzędna"
- },
- "profile" : {
- "user_name" : "Nazwa użytkownika",
- "email" : "E-mail",
- "change_password" : "Zmień hasło",
- "confirm_password" : "Potwierdź hasło",
- "minimum_8_chars" : "Minimum 8 znaków",
- "passwords_do_not_match" : "Hasła nie pasują do siebie",
- "api_key" : "Klucz API",
- "api_key_not_generated" : "Jeszcze niewygenerowany",
- "generate_new_api_key" : "Wygeneruj nowy klucz API",
- "generate_new_api_key_info" : "Zmiana hasła spowoduje wygenerowanie nowego klucza API",
- "opml_export" : "Eksportuj do pliku OPML",
- "delete_account" : "Usuń konto",
- "delete_account_confirmation" : "Na pewno usunąć to konto? Nie można tego cofnąć! "
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed jest oparty o JAX-RS i AngularJS. Dzięki temu REST API jest dostępne.",
- "link_to_documentation" : "Link do dokumentacji."
- },
- "keyboard_shortcuts" : "Skróty klawiszowe",
- "version" : "CommaFeed version ",
- "line1_prefix" : "CommaFeed jest projektem Open-Source. Źródła są dostępne na ",
- "line1_suffix" : ".",
- "line2_prefix" : "Jeśli napotkasz jakiś problem, proszę zgłoś go na stronie ",
- "line2_suffix" : " projektu.",
- "line3" : "Jeśli podoba ci się ten projekt, rozważ wsparcie autora i pomóż w utrzymaniu tej strony.",
- "line4" : "Jeśli wolisz bitcoin, użyj tego adresu",
- "goodies" : {
- "value" : "Dodatki",
- "android_app" : "Aplikacja na Androida",
- "subscribe_url" : "Subskrybuj URL",
- "chrome_extension" : "Dodatek do Chrome",
- "firefox_extension" : "Dodatek do Firefoxa",
- "opera_extension" : "Dodatek do Opery",
- "subscribe_bookmarklet" : "Dodaj subskrybcje jako skryptozakładkę (kliknij)",
- "subscribe_bookmarklet_asc" : "Najpierw najstarsze ",
- "subscribe_bookmarklet_desc" : "Najpierw najnowsze ",
- "next_unread_bookmarklet" : "Następny nieprzeczytany element jako skryptozakładka (przeciągnij na pasek zakładek)"
- },
- "translation" : {
- "value" : "Tłumaczenia",
- "message" : "Potrzebujemy pomocy w tłumaczeniu CommaFeed.",
- "link" : "Zobacz jak możesz pomóc."
- },
- "announcements" : "Ogłoszenia",
- "shortcuts" : {
- "mouse_middleclick" : "środkowy przycisk myszy",
- "open_next_entry" : "otwórz następny element",
- "open_previous_entry" : "otwórz poprzedni element",
- "spacebar" : "spacja/shift+spacja",
- "move_page_down_up" : "przesuwa stronę w górę/dół",
- "focus_next_entry" : "wyróżnij następny element bez otwierania go",
- "focus_previous_entry" : "wyróżnij poprzedni element bez otwierania go",
- "open_next_feed" : "otwórz następny kanał lub kategorię",
- "open_previous_feed" : "otwórz poprzedni kanał lub kategorię",
- "open_close_current_entry" : "otwórz/zamknij bieżący element",
- "open_current_entry_in_new_window" : "otwórz bieżący element w nowym oknie",
- "open_current_entry_in_new_window_background" : "otwórz bieżący element w nowym oknie w tle",
- "star_unstar" : "oznacz/odznacz gwiazdką bieżący element",
- "mark_current_entry" : "oznacz jako przeczytany/nieprzeczytany obecny element",
- "mark_all_as_read" : "oznacz wszystko jako przeczytane",
- "open_in_new_tab_mark_as_read" : "otwórz w nowej zakładce i oznacz jako przeczytane",
- "fullscreen" : "przełącz tryb pełnoekranowy",
- "font_size" : "zmień wielkość czcionki",
- "go_to_all" : "przejdź do widoku Wszystkich elementów ",
- "go_to_starred" : "przejdź do Elementów oznaczonych gwiazdką ",
- "feed_search" : "przejdź do subskrybcji wpisując jej nazwę"
- }
- }
-}
diff --git a/commafeed-client/src/main/app/i18n/pt.js b/commafeed-client/src/main/app/i18n/pt.js
deleted file mode 100644
index aeadbdf6..00000000
--- a/commafeed-client/src/main/app/i18n/pt.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Salvar",
- "cancel" : "Cancelar",
- "delete" : "Excluir",
- "required" : "Obrigatório",
- "download" : "Download",
- "link" : "Link",
- "bookmark" : "Favorito",
- "close" : "Fechar",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe" : "Inscrever-se",
- "import" : "Importar",
- "new_category" : "Nova categoria",
- "all" : "Todos",
- "starred" : "Com estrela"
- },
- "subscribe" : {
- "feed_url" : "URL de feed",
- "feed_name" : "Nome do feed",
- "category" : "Categoria"
- },
- "import" : {
- "google_reader_prefix" : "Deixe-me importar seus feeds de sua conta",
- "google_reader_suffix" : ".",
- "google_download" : "Alternativamente, faça upload de seu arquivo subscriptions.xml.",
- "google_download_link" : "Fazer download daqui.",
- "xml_file" : "Arquivo OPML"
- },
- "new_category" : {
- "name" : "Nome",
- "parent" : "Pai"
- },
- "toolbar" : {
- "unread" : "Não lidos",
- "all" : "Todos",
- "previous_entry" : "Item anterior",
- "next_entry" : "Próximo item",
- "refresh" : "Atualizar",
- "refresh_all" : "Forçar atualização de todos os meus feeds",
- "sort_by_asc_desc" : "Ordenar por data cresc/decres",
- "titles_only" : "Somente títulos",
- "expanded_view" : "Modo Expandido",
- "mark_all_as_read" : "Marcar tudo como lido",
- "mark_all_older_12_hours" : "Items older than 12 hours ",
- "mark_all_older_day" : "Itens mais antigos que um dia",
- "mark_all_older_week" : "Itens mais antigos que uma semana",
- "mark_all_older_two_weeks" : "Itens mais antigos que duas semanas",
- "settings" : "Configurações",
- "profile" : "Perfil",
- "admin" : "Admin",
- "about" : "Sobre",
- "logout" : "Sair",
- "donate" : "Doar"
- },
- "view" : {
- "entry_source" : "de",
- "entry_author" : "por",
- "error_while_loading_feed" : "Erro lendo esse feed",
- "keep_unread" : "Manter como não lido",
- "no_unread_items" : "não tem itens não lidos.",
- "mark_up_to_here" : "Marcar como lido até aqui",
- "search_for" : "Procurando por: ",
- "no_search_results" : "Nenhum resultado encontrado para a pesquisa."
- },
- "feedsearch" : {
- "hint" : "Digite o nome de uma Inscrição...",
- "help" : "Use a tecla ENTER e setas direcionais para navegar.",
- "result_prefix" : "Suas inscrições:"
- },
- "settings" : {
- "general" : {
- "value" : "Geral",
- "language" : "Idioma",
- "language_contribute" : "Contribua com traduções",
- "show_unread" : "Mostrar feeds e categorias sem itens não lidos",
- "social_buttons" : "Mostrar botões de mídias sociais",
- "scroll_marks" : "No modo expandido, percorrer os itens marca-os como lidos"
- },
- "appearance" : "Aparência",
- "scroll_speed" : "Velocidade de rolagem enquanto navega pelos itens.",
- "scroll_speed_help" : "Deixe em 0 para desabilitar ",
- "theme" : "Tema",
- "submit_your_theme" : "Envie seu tema",
- "custom_css" : "CSS personalizado"
- },
- "details" : {
- "feed_details" : "Detalhes do feed",
- "url" : "URL",
- "website" : "Website",
- "name" : "Nome",
- "category" : "Categoria",
- "position" : "Posição",
- "last_refresh" : "Última atualização",
- "message" : "Ultima mensagem de atualização ",
- "next_refresh" : "Próxima atualização",
- "queued_for_refresh" : "Na fila para atualizar",
- "feed_url" : "URL do feed",
- "generate_api_key_first" : "Gerar uma chave de API em seu perfil primeiro.",
- "unsubscribe" : "Cancelar inscrição",
- "unsubscribe_confirmation" : "Você tem certeza de que deseja se desinscrever desse feed? ",
- "delete_category_confirmation" : "Você tem certeza de que deseja deletar essa categoria? ",
- "category_details" : "Detalhes da categoria",
- "tag_details" : "Detalhes da tag ",
- "parent_category" : "Categoria principal"
- },
- "profile" : {
- "user_name" : "Nome de usuário",
- "email" : "E-mail",
- "change_password" : "Trocar senha",
- "confirm_password" : "Confirmar senha",
- "minimum_8_chars" : "Mínimo de 8 caracteres",
- "passwords_do_not_match" : "Senhas não conferem",
- "api_key" : "Chave de API",
- "api_key_not_generated" : "Ainda não gerada",
- "generate_new_api_key" : "Gerar nova chave de API",
- "generate_new_api_key_info" : "Mudar a senha irá gerar uma nova chave de API",
- "opml_export" : "Exportar OPML",
- "delete_account" : "Excluir conta",
- "delete_account_confirmation" : "Deseja excluir sua conta? Não há como desfazer essa ação! "
- },
- "about" : {
- "rest_api" : {
- "value" : "API REST",
- "line1" : "CommaFeed foi desenvolvido sobre JAX-RS e AngularJS. Como tal, uma API REST está disponível.",
- "link_to_documentation" : "Link para a documentação."
- },
- "keyboard_shortcuts" : "Atalhos de teclado",
- "version" : "CommaFeed versão",
- "line1_prefix" : "CommaFeed é um projeto de código livre. As sources estão hospedados em ",
- "line1_suffix" : ".",
- "line2_prefix" : "Se você encontrar um problema, por favor relate-o na página de problemas do projeto ",
- "line2_suffix" : ".",
- "line3" : "Se você gostar desse projeto, por favor considere uma doação para apoiar o desenvolvedor e ajudar a cobrir os custos de manter esse website no ar.",
- "line4" : "Para quem preferir bitcoin, esse é o endereço",
- "goodies" : {
- "value" : "Extras",
- "android_app" : "Aplicativo Android",
- "subscribe_url" : "URL de inscrição",
- "chrome_extension" : "Extensão para o Chrome",
- "firefox_extension" : "Extensão para o Firefox",
- "opera_extension" : "Extensão para o Opera",
- "subscribe_bookmarklet" : "Bookmarklet para adicionar inscrição (clique)",
- "subscribe_bookmarklet_asc" : "Mais antigas primeiro",
- "subscribe_bookmarklet_desc" : "Mais recentes primeiro",
- "next_unread_bookmarklet" : "Bookmarklet para o próximo item não lido (arraste para a barra de favoritos)"
- },
- "translation" : {
- "value" : "Tradução",
- "message" : "Precisamos de sua ajuda para traduzir o CommaFeed.",
- "link" : "Veja como contribuir com traduções."
- },
- "announcements" : "Anúncios",
- "shortcuts" : {
- "mouse_middleclick" : "clique com o botão do meio do mouse",
- "open_next_entry" : "abre próximo item",
- "open_previous_entry" : "abre item anterior",
- "spacebar" : "barra de espaço/shift+barra de espaço",
- "move_page_down_up" : "move a página para baixo/cima",
- "focus_next_entry" : "seleciona próximo item sem abri-lo",
- "focus_previous_entry" : "seleciona item anterior sem abri-lo",
- "open_next_feed" : "abre próximo feed ou categoria",
- "open_previous_feed" : "abre feed ou categoria anterior",
- "open_close_current_entry" : "abre/fecha item atual",
- "open_current_entry_in_new_window" : "abre item atual em uma nova janela",
- "open_current_entry_in_new_window_background" : "abre item atual em uma nova janela em plano de fundo",
- "star_unstar" : "marca/desmarca estrela do item atual",
- "mark_current_entry" : "marca item atual como lido/não lido",
- "mark_all_as_read" : "marca todos os itens como lidos",
- "open_in_new_tab_mark_as_read" : "abre item em uma nova aba e marca como lido",
- "fullscreen" : "modo tela cheia",
- "font_size" : "aumenta/diminui o tamanho da fonte na entrada atual",
- "go_to_all" : "vá para Todos os itens",
- "go_to_starred" : "vá para itens com estrela",
- "feed_search" : "navega entre inscrições buscando pelo nome"
- }
- }
-}
diff --git a/commafeed-client/src/main/app/i18n/ru.js b/commafeed-client/src/main/app/i18n/ru.js
deleted file mode 100644
index 582cd564..00000000
--- a/commafeed-client/src/main/app/i18n/ru.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Сохранить",
- "cancel" : "Отмена",
- "delete" : "Удалить",
- "required" : "Обязательно",
- "download" : "Скачать",
- "link" : "Ссылка",
- "bookmark" : "Закладка",
- "close" : "Закрыть",
- "tags" : "Теги"
- },
- "tree" : {
- "subscribe" : "Подписаться",
- "import" : "Импорт",
- "new_category" : "Новая категория",
- "all" : "Все",
- "starred" : "Избранное"
- },
- "subscribe" : {
- "feed_url" : "Адрес ленты",
- "feed_name" : "Название ленты",
- "category" : "Категория"
- },
- "import" : {
- "google_reader_prefix" : "Можно импотрировать подписки из ",
- "google_reader_suffix" : " аккаунта.",
- "google_download" : "Или загрузить собсвенный XML-файл подпискок.",
- "google_download_link" : "Скачайте его здесь.",
- "xml_file" : "OPML-файл"
- },
- "new_category" : {
- "name" : "Название",
- "parent" : "Родительская категория"
- },
- "toolbar" : {
- "unread" : "Непрочитанные",
- "all" : "Все",
- "previous_entry" : "Предыдущая запись",
- "next_entry" : "Следующая запись",
- "refresh" : "Обновить",
- "refresh_all" : "Обновить все подписки вручную",
- "sort_by_asc_desc" : "Сначала новые/старые",
- "titles_only" : "Только заголовки",
- "expanded_view" : "Развёрнутый вид",
- "mark_all_as_read" : "Отметить всё как прочитанное",
- "mark_all_older_12_hours" : "Записи старше 12-и часов",
- "mark_all_older_day" : "Записи старше суток",
- "mark_all_older_week" : "Записи старше недели",
- "mark_all_older_two_weeks" : "Записи старше двух недель",
- "settings" : "Настройки",
- "profile" : "Профиль",
- "admin" : "Администратор",
- "about" : "Справка",
- "logout" : "Выйти",
- "donate" : "Поддержать проект"
- },
- "view" : {
- "entry_source" : "от",
- "entry_author" : "автор",
- "error_while_loading_feed" : "Не удалось загрузить ленту",
- "keep_unread" : "Оставить непрочитанным",
- "no_unread_items" : "нет непрочитанных записей.",
- "mark_up_to_here" : "Отметить прочитанным до сюда",
- "search_for" : "искать:",
- "no_search_results" : "По данному запросу ничего не найдено."
- },
- "feedsearch" : {
- "hint" : "Введите подписку...",
- "help" : "Используйте клавишу ввода для выбора и стрелки для перемещения.",
- "result_prefix" : "Ваши подписки:"
- },
- "settings" : {
- "general" : {
- "value" : "Основное",
- "language" : "Язык",
- "language_contribute" : "Принять участие в переводе",
- "show_unread" : "Показывать прочтённые ленты и категории",
- "social_buttons" : "Показывать социальные кнопки",
- "scroll_marks" : "В развёрнутом виде помечать записи как прочитанные по мере прокрутки"
- },
- "appearance" : "Вид",
- "scroll_speed" : "Скорость прокрутки при навигации между записями (в миллисекундах)",
- "scroll_speed_help" : "смените на 0 чтобы выключить",
- "theme" : "Тема",
- "submit_your_theme" : "Добавьте свою тему",
- "custom_css" : "Собственная CSS"
- },
- "details" : {
- "feed_details" : "Информация о ленте",
- "url" : "URL",
- "website" : "Сайт",
- "name" : "Название",
- "category" : "Категория",
- "position" : "Позиция",
- "last_refresh" : "Последнее обновление",
- "message" : "Сообщение последнего обновления",
- "next_refresh" : "Следующее обновление",
- "queued_for_refresh" : "В очереди на обновление",
- "feed_url" : "Адрес ленты",
- "generate_api_key_first" : "Сначала сгенерируйте API-ключ в вашем профиле.",
- "unsubscribe" : "Отписаться",
- "unsubscribe_confirmation" : "Подтвердить отписку от этой ленты? Are you sure you want to unsubscribe from this feed? ",
- "delete_category_confirmation" : "Подтвердить удаление этой категории?",
- "category_details" : "Информация о категории",
- "tag_details" : "Детали тега",
- "parent_category" : "Родительская категория"
- },
- "profile" : {
- "user_name" : "Имя пользователя",
- "email" : "Эл. почта",
- "change_password" : "Изменить пароль",
- "confirm_password" : "Подтвердите пароль",
- "minimum_8_chars" : "Не меньше 8 символов",
- "passwords_do_not_match" : "Пароли не совпадают",
- "api_key" : "API-ключ",
- "api_key_not_generated" : "Не сгенерирован",
- "generate_new_api_key" : "Сгенерировать новый API-ключ",
- "generate_new_api_key_info" : "После изменения пароля, API-ключ изменится",
- "opml_export" : "Экспорт OPML",
- "delete_account" : "Удалить аккаунт",
- "delete_account_confirmation" : "Удалить ваш аккаунт? Назад пути не будет!"
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed основан на JAX-RS и AngularJS. Вам доступно REST API.",
- "link_to_documentation" : "Ссылка на документацию."
- },
- "keyboard_shortcuts" : "Горячие клавиши",
- "version" : "Версия CommaFeed",
- "line1_prefix" : "CommaFeed — проект с открытым исходным кодом. Исходники находятся на ",
- "line1_suffix" : ".",
- "line2_prefix" : "Если вы обнаружите ошибку, пожалуйста, сообщите о ней на ",
- "line2_suffix" : ".",
- "line3" : "Если вам понравился этот проект, пожалуйста, поддержите разработчика суммой, которую вам не жалко, чтобы сайт продолжал работать.",
- "line4" : "Адрес для тех, кто предпочитает bitcoin",
- "goodies" : {
- "value" : "Дополнения",
- "android_app" : "Приложение для Андроид",
- "subscribe_url" : "Адрес для подписки (заменить FEED_URL_HERE на адрес ленты)",
- "chrome_extension" : "Расширение для Chrome",
- "firefox_extension" : "Расширение для Firefox",
- "opera_extension" : "Расширение для Opera",
- "subscribe_bookmarklet" : "Закладка для быстрой подписки на ленты (нужно кликнуть)",
- "subscribe_bookmarklet_asc" : "Сначала старые",
- "subscribe_bookmarklet_desc" : "Сначала новые",
- "next_unread_bookmarklet" : "Открыть следующую непрочитанную запись в новой вкладке (перетащить на панель закладок)"
- },
- "translation" : {
- "value" : "Перевод",
- "message" : "Нам нужна ваша помощь в переводе CommaFeed на другие языки.",
- "link" : "Посмотрите как поучаствовать в переводе."
- },
- "announcements" : "Объявления",
- "shortcuts" : {
- "mouse_middleclick" : "средняя кнопка мыши",
- "open_next_entry" : "открыть следующую запись",
- "open_previous_entry" : "открыть предыдущую запись",
- "spacebar" : "пробел/shift+пробел",
- "move_page_down_up" : "передвигает страницу вверх/вниз",
- "focus_next_entry" : "выбрать следующую запись не открывая её",
- "focus_previous_entry" : "выбрать предыдущую запись не открывая её",
- "open_next_feed" : "открыть следующую ленту или категорию",
- "open_previous_feed" : "открыть предыдущую ленту или категорию",
- "open_close_current_entry" : "открыть/закрыть текущюю запись",
- "open_current_entry_in_new_window" : "открыть текущюю запись в новом окне",
- "open_current_entry_in_new_window_background" : " открыть текущую запись в новом окне на фоне",
- "star_unstar" : "добавить/убрать из избранного текущюю запись",
- "mark_current_entry" : "пометить текущюю запись как прочитанную",
- "mark_all_as_read" : "пометить всё как прочитанное",
- "open_in_new_tab_mark_as_read" : "открыть запись в новом окне и пометить как прочитанную",
- "fullscreen" : "переключиться в полноэкранный режим",
- "font_size" : "увеличить/уменьшить размер шрифта текущей записи",
- "go_to_all" : "перейти ко всем",
- "go_to_starred" : "перейти к избранным",
- "feed_search" : "перейти к подписке по названию"
- }
- }
-}
diff --git a/commafeed-client/src/main/app/i18n/sk.js b/commafeed-client/src/main/app/i18n/sk.js
deleted file mode 100644
index 8aac72cc..00000000
--- a/commafeed-client/src/main/app/i18n/sk.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Uložiť",
- "cancel" : "Zrušiť",
- "delete" : "Odstrániť",
- "required" : "Povinné",
- "download" : "Stiahnuť",
- "link" : "Link",
- "bookmark" : "Záložky",
- "close" : "Zavrieť",
- "tags" : "Tagy"
- },
- "tree" : {
- "subscribe" : "Odoberať",
- "import" : "Importovať",
- "new_category" : "Nová kategória",
- "all" : "Všetko",
- "starred" : "Obľúbené"
- },
- "subscribe" : {
- "feed_url" : "URL RSS zdroja",
- "feed_name" : "Názov RSS zdroja",
- "category" : "Kategória"
- },
- "import" : {
- "google_reader_prefix" : "Importujte si RSS zdroje s vášho",
- "google_reader_suffix" : " účtu.",
- "google_download" : "Alternatívne, môžte nahrať váš subscriptions.xml súbor",
- "google_download_link" : "Stiahnuť to môžete s lokácie.",
- "xml_file" : "OPML súbor"
- },
- "new_category" : {
- "name" : "Názov",
- "parent" : "Hlavná"
- },
- "toolbar" : {
- "unread" : "Neprečítané",
- "all" : "Všetky",
- "previous_entry" : "Predchádzajúca položka",
- "next_entry" : "Nasledujúca položka",
- "refresh" : "Obnoviť",
- "refresh_all" : "Vynútené obnovenie všetkých položiek",
- "sort_by_asc_desc" : "Zoradiť podľa najnovšieho/najstaršieho",
- "titles_only" : "Náhľad titulkov",
- "expanded_view" : "Rozšírený náhľad",
- "mark_all_as_read" : "Označiť všetky ako prečítané",
- "mark_all_older_12_hours" : "Položky staršie ako 12 hodín",
- "mark_all_older_day" : "Položky staršie ako deň",
- "mark_all_older_week" : "Položky staršie ako týždeň",
- "mark_all_older_two_weeks" : "Položky staršie ako dva týždne",
- "settings" : "Nastavenia",
- "profile" : "Profil",
- "admin" : "Admin",
- "about" : "O CommaFeed",
- "logout" : "Odhlásiť",
- "donate" : "Donate"
- },
- "view" : {
- "entry_source" : "z",
- "entry_author" : "od ",
- "error_while_loading_feed" : "Počas načítavania sa vyskytla chyba",
- "keep_unread" : "Ponechať ako neprečítané",
- "no_unread_items" : "nemá žiadne neprečítané položky.",
- "mark_up_to_here" : "Až potiaľto označiť položky ako prečítané",
- "search_for" : "Hľadaný výraz:",
- "no_search_results" : "Nenašla sa žiadna zhoda pre hľadaný výraz."
- },
- "feedsearch" : {
- "hint" : "Zadajte názov odoberania...",
- "help" : "Použite klávesu enter pre výber a smerové klávesy pre navigáciu.",
- "result_prefix" : "Vaše odoberania:"
- },
- "settings" : {
- "general" : {
- "value" : "Všeobecné",
- "language" : "Jazyk",
- "language_contribute" : "Zapojte sa do prekladu",
- "show_unread" : "Zobraziť príspevky a kategórie bez neprečítaných položiek",
- "social_buttons" : "Zobraziť možnosti zdieľania",
- "scroll_marks" : "Scrollovanie v rozšírenom náhľade označí položky ako prečítané"
- },
- "appearance" : "Vzhľad",
- "scroll_speed" : "Rýchlosť skrolovania—pohybu medzi položkami (v milisekundách)",
- "scroll_speed_help" : "nastavte 0 pre deaktiváciu",
- "theme" : "Motív",
- "submit_your_theme" : "Nahrať vlastný motív vzhľadu",
- "custom_css" : "Vlastný motív vzhľadu (CSS)"
- },
- "details" : {
- "feed_details" : "Detaily odoberania",
- "url" : "URL odkaz",
- "website" : "Web stránka",
- "name" : "Názov",
- "category" : "Kategória",
- "position" : "Pozícia",
- "last_refresh" : "Predchádzajúce obnovenie",
- "message" : "Predchádzajúca správa obnovenia",
- "next_refresh" : "Nasledujúce obnovenie",
- "queued_for_refresh" : "Vo fronte",
- "feed_url" : "URL RSS zdroja",
- "generate_api_key_first" : "Vygenerujte si API kľúč vo vašom profile.",
- "unsubscribe" : "Zrušiť odoberanie.",
- "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ",
- "delete_category_confirmation" : "Are you sure you want to delete this category? ",
- "category_details" : "Detaily kategórie",
- "tag_details" : "Detaily tagu",
- "parent_category" : "Hlavná kategória"
- },
- "profile" : {
- "user_name" : "Uživateľské meno",
- "email" : "E-mail",
- "change_password" : "Zmeniť heslo",
- "confirm_password" : "Potvrdiť heslo",
- "minimum_8_chars" : "Minimum je 8 znakov",
- "passwords_do_not_match" : "Heslá sa nezhodujú",
- "api_key" : "API kľúč",
- "api_key_not_generated" : "Nie je vygenerovaný",
- "generate_new_api_key" : "Vygenerovať nový API kľúč",
- "generate_new_api_key_info" : "Zmenou hesla vygenerujete nový API kľúč",
- "opml_export" : "exportovať do formátu OPML",
- "delete_account" : "Odstrániť účet",
- "delete_account_confirmation" : "Delete your acount? There's no turning back! "
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed je postavený na JAX-RS a AngularJS. Dostupná je REST API.",
- "link_to_documentation" : "Prejsť na dokumentáciu."
- },
- "keyboard_shortcuts" : "Klávesové skratky",
- "version" : "CommaFeed verzia ",
- "line1_prefix" : "CommaFeed je open source projekt. Zdrojový kód je dostupný na ",
- "line1_suffix" : ".",
- "line2_prefix" : "V prípade, že narazíte na problém, ohláste ho prosím na stránkach",
- "line2_suffix" : " projektu.",
- "line3" : "V prípade, že sa vám páči CommaFeed, zvážte prosím finančný príspevok. Podporíte tým vývojárov a tiež pomôžete udržať web stránky online.",
- "line4" : "Pre tých, ktorí preferujú bitcoin",
- "goodies" : {
- "value" : "Rozšírenia",
- "android_app" : "Aplikácia pre zariadenia Android",
- "subscribe_url" : "URL",
- "chrome_extension" : "Rozšírenie pre prehliadač Chrome",
- "firefox_extension" : "Rozšírenie pre prehliadač Firefox",
- "opera_extension" : "Rozšírenie pre prehliadač Opera",
- "subscribe_bookmarklet" : "Bookmarklet",
- "subscribe_bookmarklet_asc" : "Zoradiť podľa najstaršieho ",
- "subscribe_bookmarklet_desc" : "Zoradiť podľa najnovšieho ",
- "next_unread_bookmarklet" : "Záložka nasledujúcej neprečítanej položky(pretiahuť k záložkám)"
- },
- "translation" : {
- "value" : "Preklad",
- "message" : "Pomôžte s prekladom CommaFeed.",
- "link" : "Zistite, ako sa možete zapojiť do prekladu CommaFeed."
- },
- "announcements" : "Oznámenia",
- "shortcuts" : {
- "mouse_middleclick" : "klik prostredným tlačítkom",
- "open_next_entry" : "zobraziť nasledujúcu položku",
- "open_previous_entry" : "zobraziť predchádzajúcu položku",
- "spacebar" : "medzerník/shift+medzerník",
- "move_page_down_up" : "pohyb smerom dole/hore",
- "focus_next_entry" : "presun na nasledujúcu položku bez jej zobrazenia",
- "focus_previous_entry" : "presun na predchádzajúcu položku bez jej zobrazenia",
- "open_next_feed" : "presun na nasledujúci RSS zdroj alebo kategóriu",
- "open_previous_feed" : "presun na predchádzajúci RSS zdroj alebo kategóriu",
- "open_close_current_entry" : "zobraziť vybranú položku",
- "open_current_entry_in_new_window" : "zobraziť vybranú položku v novom okne",
- "open_current_entry_in_new_window_background" : "otvoriť vybranú položku na pozadí",
- "star_unstar" : "označiť vybranú položku ako obľúbená",
- "mark_current_entry" : "označiť vybranú položku ako prečítanú/neprečítanú",
- "mark_all_as_read" : "označiť všetky položky ako prečítané!",
- "open_in_new_tab_mark_as_read" : "zobraziť položku na novej karte a označí ju ako prečítanú",
- "fullscreen" : "prepnutie zobrazenia na celú obrazovku",
- "font_size" : "zmeniť veľkosť písma pre vybranú položku",
- "go_to_all" : "zobraziť všetky položky",
- "go_to_starred" : "zobraziť obľúbené položiek",
- "feed_search" : "presun na odoberaný RSS zdroj vložením jeho názvu"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/sv.js b/commafeed-client/src/main/app/i18n/sv.js
deleted file mode 100644
index 280276f0..00000000
--- a/commafeed-client/src/main/app/i18n/sv.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Spara",
- "cancel" : "Avbryt",
- "delete" : "Radera",
- "required" : "Obligatorisk",
- "download" : "Ladda ned",
- "link" : "Länka",
- "bookmark" : "Bokmärk",
- "close" : "Stäng",
- "tags" : "Taggar"
- },
- "tree" : {
- "subscribe" : "Prenumerera",
- "import" : "Importera",
- "new_category" : "Ny kategori",
- "all" : "Alla",
- "starred" : "Stjärnmärkt"
- },
- "subscribe" : {
- "feed_url" : "Prenumerationens URL",
- "feed_name" : "Prenumerationens namn",
- "category" : "Kategori"
- },
- "import" : {
- "google_reader_prefix" : "Låt mig importera dina prenumerationer från ditt",
- "google_reader_suffix" : "-konto.",
- "google_download" : "Alternativt, ladda upp din subscriptions.xml-fil.",
- "google_download_link" : "Ladda ned den här. ",
- "xml_file" : "OPML-fil"
- },
- "new_category" : {
- "name" : "Namn",
- "parent" : "Överordnad"
- },
- "toolbar" : {
- "unread" : "Oläst",
- "all" : "Alla",
- "previous_entry" : "Föregående post",
- "next_entry" : "Nästa post",
- "refresh" : "Uppdatera",
- "refresh_all" : "Tvinga uppdatering av alla prenumerationer",
- "sort_by_asc_desc" : "Sortera efter datum stigande/fallande",
- "titles_only" : "Endast titlar",
- "expanded_view" : "Expanderad vy",
- "mark_all_as_read" : "Markera alla som lästa",
- "mark_all_older_12_hours" : "Poster äldre än 12 timmar",
- "mark_all_older_day" : "Poster äldre än en dag",
- "mark_all_older_week" : "Poster äldre än en vecka",
- "mark_all_older_two_weeks" : "Poster äldre än två veckor",
- "settings" : "Inställningar",
- "profile" : "Profil",
- "admin" : "Administratör",
- "about" : "Om",
- "logout" : "Logga ut",
- "donate" : "Donera"
- },
- "view" : {
- "entry_source" : "från",
- "entry_author" : "av",
- "error_while_loading_feed" : "Fel under laddning av denna prenumeration",
- "keep_unread" : "Håll oläst",
- "no_unread_items" : "har inga olästa poster.",
- "mark_up_to_here" : "Markera som läst upp till denna post",
- "search_for" : "söker efter: ",
- "no_search_results" : "Inga resultat för valda nyckelord"
- },
- "feedsearch" : {
- "hint" : "Skriv in en prenumeration...",
- "help" : "Använd retur-tangenten för att välja och piltangenterna för att navigera.",
- "result_prefix" : "Dina prenumerationer:"
- },
- "settings" : {
- "general" : {
- "value" : "Allmänt",
- "language" : "Språk",
- "language_contribute" : "Bidra med översättningar",
- "show_unread" : "Visa prenumerationer och kategorier utan olästa poster",
- "social_buttons" : "Visa delningsknappar",
- "scroll_marks" : "I expanderad vy, markera poster som lästa genom att scrolla förbi dem"
- },
- "appearance" : "Utseende",
- "scroll_speed" : "Scrollhastighet under navigation mellan poster (i millisekunder)",
- "scroll_speed_help" : "ställ på 0 för att avaktivera",
- "theme" : "Tema",
- "submit_your_theme" : "Skicka in ditt tema",
- "custom_css" : "Anpassad CSS"
- },
- "details" : {
- "feed_details" : "Prenumerationsdetaljer",
- "url" : "URL",
- "website" : "Webbsida",
- "name" : "Namn",
- "category" : "Kategori",
- "position" : "Position",
- "last_refresh" : "Senaste uppdatering",
- "message" : "Senaste uppdateringsmeddelande",
- "next_refresh" : "Nästa uppdatering",
- "queued_for_refresh" : "I kö för uppdatering",
- "feed_url" : "Prenumerationens URL",
- "generate_api_key_first" : "Skapa en API-nyckel på din profil först.",
- "unsubscribe" : "Avprenumerera",
- "unsubscribe_confirmation" : "Är du säker på att du vill avprenumerera?",
- "delete_category_confirmation" : "Är du säker på att du vill ta bort denna kategori?",
- "category_details" : "Kategoridetaljer",
- "tag_details" : "Taggdetaljer",
- "parent_category" : "Överordnad kategori"
- },
- "profile" : {
- "user_name" : "Användarnamn",
- "email" : "E-mail",
- "change_password" : "Ändra lösenord",
- "confirm_password" : "Bekräfta lösenord",
- "minimum_8_chars" : "Minst 8 bokstäver",
- "passwords_do_not_match" : "Lösenorden matchar inte",
- "api_key" : "API-nyckel",
- "api_key_not_generated" : "Inte skapad än",
- "generate_new_api_key" : "Skapa ny API-nyckel",
- "generate_new_api_key_info" : "Lösenordsbyte skapar ny API-nyckel",
- "opml_export" : "OPML-export",
- "delete_account" : "Radera konto",
- "delete_account_confirmation" : "Vill du ta bort ditt konto? Det försvinner för alltid!"
- },
- "about" : {
- "rest_api" : {
- "value" : "REST-API",
- "line1" : "CommaFeed är byggt på JAX-RS och AngularJS. Tack vare detta är en REST-API tillgänglig.",
- "link_to_documentation" : "Länk till dokumentation."
- },
- "keyboard_shortcuts" : "Tangentbordsgenvägar",
- "version" : "CommaFeed-version",
- "line1_prefix" : "CommaFeed är ett open-source-projekt. Källan är tillgänglig på ",
- "line1_suffix" : ".",
- "line2_prefix" : "Om du träffar på ett problem, meddela det på \"Issues\"-sidan för ",
- "line2_suffix" : "-projektet.",
- "line3" : "Om du gillar detta projekt, avväg gärna en donation för att stötta utvecklaren och bidra till kostnaderna för att hålla denna site online.",
- "line4" : "För er som föredrar Bitcoin, här är adressen",
- "goodies" : {
- "value" : "Godsaker",
- "android_app" : "Android-app",
- "subscribe_url" : "Prenumerations-URL",
- "chrome_extension" : "Chrome-tillägg",
- "firefox_extension" : "Firefox-tillägg",
- "opera_extension" : "Opera-tillägg",
- "subscribe_bookmarklet" : "Bokmärke för tillägg av prenumeration (klicka)",
- "subscribe_bookmarklet_asc" : "äldst först",
- "subscribe_bookmarklet_desc" : "nyast först",
- "next_unread_bookmarklet" : "Bokmärke för nästa olästa post (dra till bokmärkesfält)"
- },
- "translation" : {
- "value" : "Översättning",
- "message" : "Vi behöver din hjälp med att översätta CommaFeed.",
- "link" : "Se hur du kan bidra med översättningar."
- },
- "announcements" : "Notiser",
- "shortcuts" : {
- "mouse_middleclick" : "mitten-musknapp",
- "open_next_entry" : "öppna nästa post",
- "open_previous_entry" : "öppna föregående post",
- "spacebar" : "mellanslag/shift+mellanslag",
- "move_page_down_up" : "flyttar sidan ned/upp",
- "focus_next_entry" : "sätt fokus på nästa post utan att öppna",
- "focus_previous_entry" : "sätt fokus på föregående post utan att öppna",
- "open_next_feed" : "öppna nästa prenumeration eller kategori",
- "open_previous_feed" : "öppna föregående prenumeration eller kategori",
- "open_close_current_entry" : "öppna/stäng nuvarande post",
- "open_current_entry_in_new_window" : "öppna nuvarande post i nytt fönster",
- "open_current_entry_in_new_window_background" : "öppna nuvarande post i nytt bakgrundsfönster",
- "star_unstar" : "stjärnmärk/ostjärnmärk nuvarande post",
- "mark_current_entry" : "markera nuvarande post läst/oläst",
- "mark_all_as_read" : "markera alla som lästa",
- "open_in_new_tab_mark_as_read" : "öppna nuvarande post i ny flik och markera som läst",
- "fullscreen" : "växla till/från fullskärmsläge",
- "font_size" : "öka/minska teckenstorlek av nuvarande post",
- "go_to_all" : "se alla poster",
- "go_to_starred" : "se stjärnmärkta poster",
- "feed_search" : "navigera till en prenumeration via prenumerationsnamn"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/i18n/tr.js b/commafeed-client/src/main/app/i18n/tr.js
deleted file mode 100644
index e7127e5c..00000000
--- a/commafeed-client/src/main/app/i18n/tr.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "Kaydet",
- "cancel" : "İptal",
- "delete" : "Sil",
- "required" : "Gerekli",
- "download" : "İndir",
- "link" : "Bağlantı",
- "bookmark" : "Yer imi",
- "close" : "Kapat",
- "tags" : "Etiketler "
- },
- "tree" : {
- "subscribe" : "Abone ol",
- "import" : "İçe aktar",
- "new_category" : "Yeni kategori",
- "all" : "Tüm öğeler",
- "starred" : "Yıldızlı öğeler"
- },
- "subscribe" : {
- "feed_url" : "Yayın URL'si",
- "feed_name" : "Yayın Adı",
- "category" : "Kategori"
- },
- "import" : {
- "google_reader_prefix" : "Aboneliklerinizi ",
- "google_reader_suffix" : "Hesabınızdan aktarmama izin verin.",
- "google_download" : "Veya, subscriptions.xml dosyanızı yükleyin.",
- "google_download_link" : "Buradan indirebilirsiniz.",
- "xml_file" : "OPML dosyası"
- },
- "new_category" : {
- "name" : "İsim",
- "parent" : "Üst"
- },
- "toolbar" : {
- "unread" : "Okunmamış",
- "all" : "Tümü",
- "previous_entry" : "Önceki ileti",
- "next_entry" : "Sonraki ileti",
- "refresh" : "Yenile",
- "refresh_all" : "Tüm yayınları yenilemek için zorla",
- "sort_by_asc_desc" : "Tarihe göre sırala artan/azalan",
- "titles_only" : "Sadece başlıklar",
- "expanded_view" : "Genişletilmiş görünüm",
- "mark_all_as_read" : "Tümünü okundu işaretle",
- "mark_all_older_12_hours" : "12 saatten daha eski yayınlar ",
- "mark_all_older_day" : "Bir günden eski yayınlar",
- "mark_all_older_week" : "Bir haftadan eski yayınlar",
- "mark_all_older_two_weeks" : "İki haftadan eski yayınlar",
- "settings" : "Ayarlar",
- "profile" : "Profil",
- "admin" : "Yönetim",
- "about" : "Hakkında",
- "logout" : "Çıkış",
- "donate" : "Bağış"
- },
- "view" : {
- "entry_source" : "kaynak: ",
- "entry_author" : "yazar: ",
- "error_while_loading_feed" : "Bu aboneliği çekerken hata oluştu.",
- "keep_unread" : "Okunmadı olarak sakla",
- "no_unread_items" : "Okunmamış ileti yok.",
- "mark_up_to_here" : "Buraya kadar olan bütün yayınları okundu olarak işaretle!",
- "search_for" : "searching for: ",
- "no_search_results" : "İstenen anahtar kelimeler için eşleşme bulunamadı"
- },
- "feedsearch" : {
- "hint" : "Bir abonelik yazın...",
- "help" : "Return tuşunu seçmek için, yön tüşlarını ise gezinmek için kullanın.",
- "result_prefix" : "Abonelikleriniz:"
- },
- "settings" : {
- "general" : {
- "value" : "Genel",
- "language" : "Dil",
- "language_contribute" : "Çeviri katkısında bulunun",
- "show_unread" : "Okunmamış öğesi bulunan yayın ve kategorileri listele",
- "social_buttons" : "Sosyal paylaşım butonlarını göster",
- "scroll_marks" : "Genişletilmiş görünümde götüntülenen iletileri okunmuş işaretle"
- },
- "appearance" : "Görünüm",
- "scroll_speed" : "İçerikler arasında gezinirken kaydırma hızı (milisaniye cinsinden)",
- "scroll_speed_help" : "ayarı kapatmak için 0 yazınız",
- "theme" : "Tema",
- "submit_your_theme" : "Tema gönder",
- "custom_css" : "Kişiselleştirilmiş CSS"
- },
- "details" : {
- "feed_details" : "Yayın detayları",
- "url" : "URL",
- "website" : "Website ",
- "name" : "İsim",
- "category" : "Kategori",
- "position" : "Pozisyon",
- "last_refresh" : "Son yenileme",
- "message" : "Last refresh message ",
- "next_refresh" : "Sonraki yenileme",
- "queued_for_refresh" : "Yenilenmek üzere kuyrukta",
- "feed_url" : "Yayın URL'si",
- "generate_api_key_first" : "Öncelikle profilinizden bir API anahtarı oluşturun.",
- "unsubscribe" : "Aboneliği iptal et",
- "unsubscribe_confirmation" : "Bu yayından çıkmak istediğinizden emin misiniz? ",
- "delete_category_confirmation" : "Bu kategoriyi silmek istediğinizden emin misiniz? ",
- "category_details" : "Kategori detayları",
- "tag_details" : "Etiket detayları ",
- "parent_category" : "Üst kategori"
- },
- "profile" : {
- "user_name" : "Kullanıcı adı",
- "email" : "E-posta",
- "change_password" : "Şifre değiştir",
- "confirm_password" : "Şifreyi doğrula",
- "minimum_8_chars" : "En az 8 karakter",
- "passwords_do_not_match" : "Şifreler uyuşmuyor",
- "api_key" : "API anahtarı",
- "api_key_not_generated" : "Henüz oluşturulmadı",
- "generate_new_api_key" : "Yeni bir API anahtarı oluştur",
- "generate_new_api_key_info" : "Şifreyi değiştirmek API anahtarının da değiştirilmesine neden olcak.",
- "opml_export" : "OPML dışa aktar",
- "delete_account" : "Hesabı sil",
- "delete_account_confirmation" : "Hesabı silmek istediğinize emin misiniz? Bu işlemde geri dönüş yoktur! "
- },
- "about" : {
- "rest_api" : {
- "value" : "REST API",
- "line1" : "CommaFeed, JAX-RS ve AngularJS üzerine kurulmuştur. Bu sayede, REST API desteği bulunur.",
- "link_to_documentation" : "Dökümantasyon için tıklayın."
- },
- "keyboard_shortcuts" : "Klavye kısayolları",
- "version" : "CommaFeed versiyon ",
- "line1_prefix" : "CommaFeed bir açık kaynak projedir. Kaynak dosyaları ",
- "line1_suffix" : "adresinde yayınlanır.",
- "line2_prefix" : "Lütfen, bir hata ile karşılaşırsanız bunu ",
- "line2_suffix" : "projesinde hatalar sayfasından rapor edin.",
- "line3" : "Eğer bu projeyi beğendiyseniz, lütfen bağış yaparak geliştiriciye bu sayfayı ayakta tutmasında yardımcı olun.",
- "line4" : "Bitcoin'i tercih edenler için adres ",
- "goodies" : {
- "value" : "Ekstralar",
- "android_app" : "Android eklentisi",
- "subscribe_url" : "Abonelik URL'si",
- "chrome_extension" : "Chrome eklentisi",
- "firefox_extension" : "Firefox eklentisi",
- "opera_extension" : "Opera eklentisi",
- "subscribe_bookmarklet" : "Yer imilerine abonelik ekle (tıklayın)",
- "subscribe_bookmarklet_asc" : "Eskiler önce",
- "subscribe_bookmarklet_desc" : "Yeniler önce ",
- "next_unread_bookmarklet" : "Yer imilerindeki en son okunmamış ileti (Sık kullanılan çubuğuna sürükleyin)"
- },
- "translation" : {
- "value" : "Çeviri",
- "message" : "CommaFeed'i çevirmek için yardımınıza ihtiyacımız var.",
- "link" : "Nasıl çeviri katkısında bulunabileceğinizi öğrenmek için tıklayın."
- },
- "announcements" : "Duyurular",
- "shortcuts" : {
- "mouse_middleclick" : "Fare orta tuşu",
- "open_next_entry" : "sonraki öğeyi görüntüle",
- "open_previous_entry" : "önceki öğeyi görüntüle",
- "spacebar" : "space/shift+space ",
- "move_page_down_up" : "sayfayı aşağı/yukarı hareket ettir",
- "focus_next_entry" : "sonraki öğeyi görüntülemeden işaretle",
- "focus_previous_entry" : "önceki öğeyi görüntülemeden işaretle",
- "open_next_feed" : "sonraki aboneliği veya kategoriyi görüntüle",
- "open_previous_feed" : "önceki aboneliği veya kategoriyi görüntüle",
- "open_close_current_entry" : "işeretli öğeyi aç/kapat",
- "open_current_entry_in_new_window" : "görüntülenen öğeyi yeni pencerede görüntüle",
- "open_current_entry_in_new_window_background" : "görüntülenen öğeyi arkaplanda yeni pencerede görüntüle",
- "star_unstar" : "görüntülenen öğeye yıldız ekle/kaldır",
- "mark_current_entry" : "görüntülenen öğeyi okundu/okunmadı işaretle",
- "mark_all_as_read" : "tümünü okundu işaretle",
- "open_in_new_tab_mark_as_read" : "öğeyi yeni bir sekmede aç ve okundu işaretle",
- "fullscreen" : "tam ekran moduna geç ",
- "font_size" : "mevcut içerik için yazı boyunutunu arttır/azalt",
- "go_to_all" : "Tüm öğeleri görüntüle",
- "go_to_starred" : "yıldızlı öğerleri görüntüle",
- "feed_search" : "abonelik ismini yazarak aboneliğe git"
- }
- }
-}
diff --git a/commafeed-client/src/main/app/i18n/zh.js b/commafeed-client/src/main/app/i18n/zh.js
deleted file mode 100644
index 70b24140..00000000
--- a/commafeed-client/src/main/app/i18n/zh.js
+++ /dev/null
@@ -1,180 +0,0 @@
-{
- "global" : {
- "save" : "保存",
- "cancel" : "取消",
- "delete" : "删除",
- "required" : "必填",
- "download" : "下载",
- "link" : "链接",
- "bookmark" : "书签",
- "close" : "关闭",
- "tags" : "Tags "
- },
- "tree" : {
- "subscribe" : "订阅",
- "import" : "导入",
- "new_category" : "新的目录",
- "all" : "所有",
- "starred" : "加星标的订阅"
- },
- "subscribe" : {
- "feed_url" : "订阅地址",
- "feed_name" : "订阅名称",
- "category" : "目录"
- },
- "import" : {
- "google_reader_prefix" : "从现有的 Google Reader 导入 ",
- "google_reader_suffix" : " 账号。",
- "google_download" : "可选的, 上传订阅列表文件(.xml)。",
- "google_download_link" : "从此处下载。",
- "xml_file" : "OPML 文件"
- },
- "new_category" : {
- "name" : "名称",
- "parent" : "上一层"
- },
- "toolbar" : {
- "unread" : "未读",
- "all" : "所有",
- "previous_entry" : "上一条目",
- "next_entry" : "下一条目",
- "refresh" : "刷新",
- "refresh_all" : "刷新所有订阅",
- "sort_by_asc_desc" : "按日期升序/降序排序",
- "titles_only" : "仅显示标题",
- "expanded_view" : "显示内容",
- "mark_all_as_read" : "标记所有为已读",
- "mark_all_older_12_hours" : "Items older than 12 hours ",
- "mark_all_older_day" : "早于一天的条目",
- "mark_all_older_week" : "早于一周的条目",
- "mark_all_older_two_weeks" : "早于两周的条目",
- "settings" : "设置",
- "profile" : "配置文件",
- "admin" : "管理",
- "about" : "关于",
- "logout" : "退出",
- "donate" : "捐赠"
- },
- "view" : {
- "entry_source" : "来自",
- "entry_author" : "作者",
- "error_while_loading_feed" : "加载该订阅出现错误",
- "keep_unread" : "保持未读",
- "no_unread_items" : "没有未读的条目。",
- "mark_up_to_here" : "标记为已读至本条目",
- "search_for" : "searching for: ",
- "no_search_results" : "No match found for the requested keywords "
- },
- "feedsearch" : {
- "hint" : "输入订阅",
- "help" : "使用方向键浏览,回车键选择",
- "result_prefix" : "你的订阅:"
- },
- "settings" : {
- "general" : {
- "value" : "常规",
- "language" : "语言",
- "language_contribute" : "贡献翻译",
- "show_unread" : "显示未读的订阅和目录条目",
- "social_buttons" : "显示分享按钮",
- "scroll_marks" : "在扩展视图中,可滚动条目将其标记为已读"
- },
- "appearance" : "外观",
- "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ",
- "scroll_speed_help" : "set to 0 to disable ",
- "theme" : "主题",
- "submit_your_theme" : "提交你的主题",
- "custom_css" : "自定义 CSS 样式"
- },
- "details" : {
- "feed_details" : "订阅详情",
- "url" : "地址",
- "website" : "站点",
- "name" : "名称",
- "category" : "目录",
- "position" : "位置",
- "last_refresh" : "上一次刷新",
- "message" : "Last refresh message ",
- "next_refresh" : "下一次刷新",
- "queued_for_refresh" : "放入等待刷新的队列",
- "feed_url" : "订阅地址",
- "generate_api_key_first" : "在您的配置文件中首先生成一个 API 密钥。",
- "unsubscribe" : "取消订阅",
- "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ",
- "delete_category_confirmation" : "Are you sure you want to delete this category? ",
- "category_details" : "目录详情",
- "tag_details" : "Tag details ",
- "parent_category" : "上一层目录"
- },
- "profile" : {
- "user_name" : "用户名",
- "email" : "邮箱",
- "change_password" : "修改密码",
- "confirm_password" : "确认密码",
- "minimum_8_chars" : "最少为 8 个字母",
- "passwords_do_not_match" : "密码不匹配",
- "api_key" : "API 密钥",
- "api_key_not_generated" : "API 密钥尚未生成",
- "generate_new_api_key" : "生成一个新的 API 密钥",
- "generate_new_api_key_info" : "修改密码将会生成一个新的的 API 密钥",
- "opml_export" : "导出 OPML",
- "delete_account" : "删除帐号",
- "delete_account_confirmation" : "Delete your acount? There's no turning back! "
- },
- "about" : {
- "rest_api" : {
- "value" : "重置 API",
- "line1" : "CommaFeed 基于 JAX-RS 和 AngularJS。所以,可选择重置 API。",
- "link_to_documentation" : "文档链接."
- },
- "keyboard_shortcuts" : "快捷键",
- "version" : "CommaFeed 版本",
- "line1_prefix" : "CommaFeed 是一个开源项目,项目源码保存在 ",
- "line1_suffix" : "。",
- "line2_prefix" : "如果遇到问题,请到问题报告页面提交 ",
- "line2_suffix" : " 项目。",
- "line3" : "如果你喜欢本项目,请考虑捐赠来支援开发人员工作以及服务器开支。",
- "line4" : "如果你想要使用 Bitcoin ,这里是我们的 Bitcoin 地址",
- "goodies" : {
- "value" : "扩展",
- "android_app" : "Android 应用",
- "subscribe_url" : "订阅地址",
- "chrome_extension" : "Chrome 扩展",
- "firefox_extension" : "Firefox 扩展",
- "opera_extension" : "Opera 扩展",
- "subscribe_bookmarklet" : "添加一个订阅书签 (点击这) ",
- "subscribe_bookmarklet_asc" : "旧条目优先",
- "subscribe_bookmarklet_desc" : "新条目优先",
- "next_unread_bookmarklet" : "最新未读文章书签 (拖动到书签栏上) "
- },
- "translation" : {
- "value" : "翻译",
- "message" : "我们需要您来帮助翻译 CommaFeed。",
- "link" : "查看如何贡献翻译。"
- },
- "announcements" : "声明",
- "shortcuts" : {
- "mouse_middleclick" : "鼠标中键点击",
- "open_next_entry" : "打开下一个条目",
- "open_previous_entry" : "打开上一个条目",
- "spacebar" : "空格/shift+空格",
- "move_page_down_up" : "将页面向下/上移动",
- "focus_next_entry" : "移动到下一个条目但不打开",
- "focus_previous_entry" : "移动到上一个条目但不打开",
- "open_next_feed" : "打开下一个订阅或目录",
- "open_previous_feed" : "打开上一个订阅或目录",
- "open_close_current_entry" : "打开/关闭当前条目",
- "open_current_entry_in_new_window" : "在新窗口中打开当前条目",
- "open_current_entry_in_new_window_background" : "在后台新窗口中打开当前条目",
- "star_unstar" : "该条目加注/取消星标",
- "mark_current_entry" : "标记当前条目为已读/未读",
- "mark_all_as_read" : "标记所有条目为已读",
- "open_in_new_tab_mark_as_read" : "在新的窗口中打开条目并标记为已读",
- "fullscreen" : "全屏模式",
- "font_size" : "增大/缩小本条目字体",
- "go_to_all" : "跳转到‘全部’页面",
- "go_to_starred" : "跳转到‘加星标’页面",
- "feed_search" : "输入订阅名称来导航至相应订阅"
- }
- }
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/images/logo_2.png b/commafeed-client/src/main/app/images/logo_2.png
deleted file mode 100644
index a452502e..00000000
Binary files a/commafeed-client/src/main/app/images/logo_2.png and /dev/null differ
diff --git a/commafeed-client/src/main/app/images/preview.jpg b/commafeed-client/src/main/app/images/preview.jpg
deleted file mode 100644
index f84950db..00000000
Binary files a/commafeed-client/src/main/app/images/preview.jpg and /dev/null differ
diff --git a/commafeed-client/src/main/app/index.html b/commafeed-client/src/main/app/index.html
deleted file mode 100644
index c70705df..00000000
--- a/commafeed-client/src/main/app/index.html
+++ /dev/null
@@ -1,86 +0,0 @@
-
-
-
- CommaFeed
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/commafeed-client/src/main/app/js/controllers.js b/commafeed-client/src/main/app/js/controllers.js
deleted file mode 100644
index 0972f606..00000000
--- a/commafeed-client/src/main/app/js/controllers.js
+++ /dev/null
@@ -1,1738 +0,0 @@
-var module = angular.module("commafeed.controllers", [])
-
-module.run([
- "$rootScope",
- function ($rootScope) {
- $rootScope.$on("emitPreviousEntry", function (event, args) {
- $rootScope.$broadcast("previousEntry", args)
- })
- $rootScope.$on("emitNextEntry", function (event, args) {
- $rootScope.$broadcast("nextEntry", args)
- })
- $rootScope.$on("emitMark", function (event, args) {
- // args.entry - the entry
- $rootScope.$broadcast("mark", args)
- })
- $rootScope.$on("emitMarkAll", function (event, args) {
- // args.type
- // args.id
- // args.read
- $rootScope.$broadcast("markAll", args)
- })
- $rootScope.$on("emitReload", function (event, args) {
- // args.all
- $rootScope.$broadcast("reload", args || {})
- })
- $rootScope.$on("emitEntrySearch", function (event, args) {
- // args.keywords
- $rootScope.$broadcast("entrySearch", args)
- })
- $rootScope.$on("emitFeedSearch", function (event, args) {
- $rootScope.$broadcast("feedSearch")
- })
- },
-])
-
-module.controller("SubscribeCtrl", [
- "$scope",
- "$location",
- "FeedService",
- "CategoryService",
- "MobileService",
- function ($scope, $location, FeedService, CategoryService, MobileService) {
- $scope.sub = {
- categoryId: "all",
- }
-
- $scope.CategoryService = CategoryService
- $scope.MobileService = MobileService
-
- // 'ok', 'loading' or 'failed'
- $scope.state = "ok"
- $scope.urlChanged = function () {
- if ($scope.sub.url && $scope.state != "loading") {
- $scope.state = "loading"
- $scope.sub.title = "Loading..."
- FeedService.fetch(
- {
- url: $scope.sub.url,
- },
- function (data) {
- $scope.state = "ok"
- $scope.sub.title = data.title
- $scope.sub.url = data.url
- $scope.stacktrace = null
- },
- function (data) {
- $scope.state = "failed"
- $scope.sub.title = "Loading failed. Invalid feed?"
- $scope.stacktrace = data.data
- }
- )
- }
- }
-
- $scope.save = function () {
- if ($scope.state != "ok") {
- return
- }
- if (!$scope.sub.categoryId) {
- return
- }
- FeedService.subscribe(
- $scope.sub,
- function () {
- CategoryService.init()
- $location.path("/")
- },
- function (data) {
- $scope.state = "failed"
- $scope.sub.title = "ERROR: " + data.data
- }
- )
- }
-
- $scope.back = function () {
- $location.path("/")
- }
- },
-])
-
-module.controller("NewCategoryCtrl", [
- "$scope",
- "$location",
- "FeedService",
- "CategoryService",
- "MobileService",
- function ($scope, $location, FeedService, CategoryService, MobileService) {
- $scope.CategoryService = CategoryService
- $scope.MobileService = MobileService
-
- $scope.cat = {
- parentId: "all",
- }
-
- $scope.saveCategory = function () {
- CategoryService.add($scope.cat, function () {
- CategoryService.init()
- })
- $location.path("/")
- }
-
- $scope.back = function () {
- $location.path("/")
- }
- },
-])
-
-module.controller("ImportCtrl", [
- "$scope",
- "$location",
- "FeedService",
- "CategoryService",
- "MobileService",
- function ($scope, $location, FeedService, CategoryService, MobileService) {
- $scope.back = function () {
- $location.path("/")
- }
- },
-])
-
-module.controller("CategoryTreeCtrl", [
- "$scope",
- "$timeout",
- "$stateParams",
- "$window",
- "$location",
- "$state",
- "$route",
- "CategoryService",
- "AnalyticsService",
- "EntryService",
- "MobileService",
- function (
- $scope,
- $timeout,
- $stateParams,
- $window,
- $location,
- $state,
- $route,
- CategoryService,
- AnalyticsService,
- EntryService,
- MobileService
- ) {
- $scope.selectedType = $stateParams._type
- $scope.selectedId = $stateParams._id
-
- $scope.EntryService = EntryService
- $scope.MobileService = MobileService
-
- $scope.starred = {
- id: "starred",
- name: "Starred",
- }
-
- $scope.tags = []
- $scope.$watch(
- "EntryService.tags",
- function (newValue, oldValue) {
- if (newValue) {
- $scope.tags = []
- _.each(newValue, function (e) {
- $scope.tags.push({
- id: e,
- name: e,
- isTag: true,
- })
- })
- }
- },
- true
- )
-
- $scope.$on("$stateChangeSuccess", function () {
- $scope.selectedType = $stateParams._type
- $scope.selectedId = $stateParams._id
- })
-
- $scope.resizeCallback = function (event, ui) {
- $(".main-content").css("margin-left", $(ui.element).outerWidth(true) + "px")
- }
-
- $timeout(function refreshTree() {
- AnalyticsService.track()
- CategoryService.refresh(
- function () {
- $timeout(refreshTree, 30000)
- },
- function () {
- $timeout(refreshTree, 30000)
- }
- )
- }, 15000)
-
- $scope.CategoryService = CategoryService
-
- $scope.unreadCount = function (category) {
- var count = 0
- var i
- if (category.children) {
- for (i = 0; i < category.children.length; i++) {
- count = count + $scope.unreadCount(category.children[i])
- }
- }
- if (category.feeds) {
- for (i = 0; i < category.feeds.length; i++) {
- var feed = category.feeds[i]
- count = count + feed.unread
- }
- }
- return count
- }
-
- var rootUnreadCount = function () {
- return $scope.unreadCount($scope.CategoryService.subscriptions)
- }
-
- $scope.$watch(rootUnreadCount, function (value) {
- Tinycon.setBubble(value)
- })
-
- var mark = function (node, entry) {
- var i
- if (node.children) {
- for (i = 0; i < node.children.length; i++) {
- mark(node.children[i], entry)
- }
- }
- if (node.feeds) {
- for (i = 0; i < node.feeds.length; i++) {
- var feed = node.feeds[i]
- if (feed.id == entry.feedId) {
- var c = entry.read ? -1 : 1
- feed.unread = feed.unread + c
- }
- }
- }
- }
-
- var getCurrentIndex = function (id, type, flat) {
- var index = -1
- for (var i = 0; i < flat.length; i++) {
- var node = flat[i]
- if (node[0] == id && node[1] == type) {
- index = i
- break
- }
- }
- return index
- }
-
- var openNextNode = function () {
- var f = CategoryService.flatAll
- var current = getCurrentIndex($scope.selectedId, $scope.selectedType, f)
- current++
- if (current < f.length) {
- $state.transitionTo("feeds.view", {
- _type: f[current][1],
- _id: f[current][0],
- })
- }
- }
-
- var openPreviousNode = function () {
- var f = CategoryService.flatAll
- var current = getCurrentIndex($scope.selectedId, $scope.selectedType, f)
- current--
- if (current >= 0) {
- $state.transitionTo("feeds.view", {
- _type: f[current][1],
- _id: f[current][0],
- })
- }
- }
-
- Mousetrap.bind("shift+j", function (e) {
- $scope.$apply(function () {
- openNextNode()
- })
- return false
- })
- Mousetrap.bind("shift+n", function (e) {
- $scope.$apply(function () {
- openNextNode()
- })
- return false
- })
-
- Mousetrap.bind("shift+p", function (e) {
- $scope.$apply(function () {
- openPreviousNode()
- })
- return false
- })
- Mousetrap.bind("shift+k", function (e) {
- $scope.$apply(function () {
- openPreviousNode()
- })
- return false
- })
-
- $scope.$on("mark", function (event, args) {
- mark($scope.CategoryService.subscriptions, args.entry)
- })
- },
-])
-
-module.controller("FeedDetailsCtrl", [
- "$scope",
- "$state",
- "$stateParams",
- "FeedService",
- "CategoryService",
- "ProfileService",
- function ($scope, $state, $stateParams, FeedService, CategoryService, ProfileService) {
- $scope.CategoryService = CategoryService
- $scope.user = ProfileService.get()
-
- $scope.sub = FeedService.get(
- {
- id: $stateParams._id,
- },
- function (data) {
- if (!data.categoryId) data.categoryId = "all"
- }
- )
-
- $scope.back = function () {
- $state.transitionTo("feeds.view", {
- _id: $stateParams._id,
- _type: "feed",
- })
- }
-
- $scope.unsubscribe = function () {
- var sub = $scope.sub
- var data = {
- id: sub.id,
- }
- FeedService.unsubscribe(data, function () {
- CategoryService.init()
- })
- $state.transitionTo("feeds.view", {
- _id: "all",
- _type: "category",
- })
- }
-
- $scope.save = function () {
- var sub = $scope.sub
- $scope.error = null
- FeedService.modify(
- {
- id: sub.id,
- name: sub.name,
- position: sub.position,
- categoryId: sub.categoryId,
- filter: sub.filter,
- },
- function () {
- CategoryService.init()
- $state.transitionTo("feeds.view", {
- _id: "all",
- _type: "category",
- })
- },
- function (e) {
- $scope.error = e.data
- }
- )
- }
- },
-])
-
-module.controller("CategoryDetailsCtrl", [
- "$scope",
- "$state",
- "$stateParams",
- "FeedService",
- "CategoryService",
- "ProfileService",
- function ($scope, $state, $stateParams, FeedService, CategoryService, ProfileService) {
- $scope.CategoryService = CategoryService
- $scope.user = ProfileService.get()
-
- $scope.isMeta = function () {
- return parseInt($stateParams._id, 10) != $stateParams._id
- }
-
- $scope.filterCurrent = function (elem) {
- if (!$scope.category) return true
- return elem.id != $scope.category.id
- }
-
- CategoryService.init(function () {
- if ($scope.isMeta()) {
- $scope.category = {
- id: $stateParams._id,
- name: $stateParams._id,
- }
- return
- }
- for (var i = 0; i < CategoryService.flatCategories.length; i++) {
- var cat = CategoryService.flatCategories[i]
- if (cat.id == $stateParams._id) {
- $scope.category = {
- id: cat.id,
- name: cat.orig.name,
- position: cat.orig.position,
- parentId: cat.orig.parentId,
- }
- break
- }
- }
- if (!$scope.category.parentId) $scope.category.parentId = "all"
- })
-
- $scope.back = function () {
- $state.transitionTo("feeds.view", {
- _id: $stateParams._id,
- _type: "category",
- })
- }
-
- $scope.deleteCategory = function () {
- var category = $scope.category
- CategoryService.remove(
- {
- id: category.id,
- },
- function () {
- CategoryService.init()
- }
- )
- $state.transitionTo("feeds.view", {
- _id: "all",
- _type: "category",
- })
- }
-
- $scope.save = function () {
- var cat = $scope.category
- CategoryService.modify(
- {
- id: cat.id,
- name: cat.name,
- position: cat.position,
- parentId: cat.parentId,
- },
- function () {
- CategoryService.init()
- $state.transitionTo("feeds.view", {
- _id: "all",
- _type: "category",
- })
- }
- )
- }
- },
-])
-
-module.controller("TagDetailsCtrl", [
- "$scope",
- "$state",
- "$stateParams",
- "FeedService",
- "CategoryService",
- "ProfileService",
- function ($scope, $state, $stateParams, FeedService, CategoryService, ProfileService) {
- $scope.CategoryService = CategoryService
- $scope.user = ProfileService.get()
-
- $scope.tag = $stateParams._id
-
- $scope.back = function () {
- $state.transitionTo("feeds.view", {
- _id: $scope.tag,
- _type: "tag",
- })
- }
- },
-])
-
-module.controller("ToolbarCtrl", [
- "$scope",
- "$state",
- "$stateParams",
- "$route",
- "$location",
- "SettingsService",
- "EntryService",
- "ProfileService",
- "AnalyticsService",
- "ServerService",
- "FeedService",
- "MobileService",
- function (
- $scope,
- $state,
- $stateParams,
- $route,
- $location,
- SettingsService,
- EntryService,
- ProfileService,
- AnalyticsService,
- ServerService,
- FeedService,
- MobileService
- ) {
- $scope.keywords = $location.search().q
- $scope.session = ProfileService.get()
- $scope.ServerService = ServerService.get()
- $scope.settingsService = SettingsService
- $scope.MobileService = MobileService
-
- $scope.$watch("settingsService.settings.readingMode", function (newValue, oldValue) {
- if (newValue && oldValue && newValue != oldValue) {
- SettingsService.save()
- }
- })
- $scope.$watch("settingsService.settings.readingOrder", function (newValue, oldValue) {
- if (newValue && oldValue && newValue != oldValue) {
- SettingsService.save()
- }
- })
- $scope.$watch("settingsService.settings.viewMode", function (newValue, oldValue) {
- if (newValue && oldValue && newValue != oldValue) {
- SettingsService.save()
- $scope.$emit("emitReload")
- }
- })
-
- $scope.previousEntry = function () {
- $scope.$emit("emitPreviousEntry")
- }
- $scope.nextEntry = function () {
- $scope.$emit("emitNextEntry")
- }
-
- $scope.refresh = function () {
- $scope.$emit("emitReload")
- }
-
- $scope.refreshAll = function () {
- $scope.$emit("emitReload", {
- all: true,
- })
- }
-
- var markAll = function (olderThan) {
- $scope.$emit("emitMarkAll", {
- type: $stateParams._type,
- id: $stateParams._id,
- olderThan: olderThan,
- keywords: $location.search().q,
- read: true,
- })
- }
-
- $scope.markAllAsRead = function () {
- markAll()
- }
-
- $scope.markAll12Hours = function () {
- markAll(new Date().getTime() - 43200000)
- }
-
- $scope.markAllDay = function () {
- markAll(new Date().getTime() - 86400000)
- }
-
- $scope.markAllWeek = function () {
- markAll(new Date().getTime() - 604800000)
- }
-
- $scope.markAllTwoWeeks = function () {
- markAll(new Date().getTime() - 1209600000)
- }
-
- $scope.search = function () {
- var keywords = this.keywords
- $location.search("q", keywords)
- $scope.$emit("emitEntrySearch", {
- keywords: keywords,
- })
- }
- $scope.showButtons = function () {
- return !$stateParams._keywords
- }
-
- $scope.toggleOrder = function () {
- var settings = $scope.settingsService.settings
- settings.readingOrder = settings.readingOrder == "desc" ? "asc" : "desc"
- }
-
- $scope.toAdmin = function () {
- $location.path("admin")
- }
- $scope.toSettings = function () {
- $state.transitionTo("feeds.settings")
- }
- $scope.toProfile = function () {
- $state.transitionTo("feeds.profile")
- }
- $scope.toHelp = function () {
- $state.transitionTo("feeds.help")
- }
- $scope.toDonate = function () {
- AnalyticsService.track("/donate")
- $state.transitionTo("feeds.help")
- }
- },
-])
-
-module.controller("FeedSearchCtrl", [
- "$scope",
- "$state",
- "$filter",
- "$timeout",
- "CategoryService",
- function ($scope, $state, $filter, $timeout, CategoryService) {
- $scope.feedSearchModal = false
- $scope.filter = null
- $scope.focus = null
- $scope.CategoryService = CategoryService
-
- $scope.$watch("filter", function () {
- $timeout(function () {
- if ($scope.filtered) {
- $scope.focus = $scope.filtered[0]
- }
- }, 0)
- })
-
- var getCurrentIndex = function () {
- var index = -1
-
- if (!$scope.focus) {
- return index
- }
-
- var filtered = $scope.filtered
- for (var i = 0; i < filtered.length; i++) {
- if ($scope.focus.id == filtered[i].id) {
- index = i
- break
- }
- }
- return index
- }
-
- $scope.focusPrevious = function (e) {
- var index = getCurrentIndex()
- if (index === 0) {
- return
- }
- $scope.focus = $scope.filtered[index - 1]
-
- e.stopPropagation()
- e.preventDefault()
- }
-
- $scope.focusNext = function (e) {
- var index = getCurrentIndex()
- if (index == $scope.filtered.length - 1) {
- return
- }
- $scope.focus = $scope.filtered[index + 1]
-
- e.stopPropagation()
- e.preventDefault()
- }
-
- $scope.openFocused = function () {
- if (!$scope.focus) {
- return
- }
- $scope.goToFeed($scope.focus.id)
- }
-
- $scope.goToFeed = function (id) {
- $scope.close()
- $state.transitionTo("feeds.view", {
- _type: "feed",
- _id: id,
- })
- }
-
- $scope.open = function () {
- $scope.filter = null
- $scope.feedSearchModal = true
- }
-
- $scope.close = function () {
- $scope.feedSearchModal = false
- }
-
- Mousetrap.bind("g a", function (e) {
- $scope.$apply(function () {
- $state.transitionTo("feeds.view", {
- _type: "category",
- _id: "all",
- })
- })
- return false
- })
-
- Mousetrap.bind("g s", function (e) {
- $scope.$apply(function () {
- $state.transitionTo("feeds.view", {
- _type: "category",
- _id: "starred",
- })
- })
- return false
- })
-
- Mousetrap.bind("g u", function (e) {
- $scope.$apply(function () {
- $scope.open()
- })
- return false
- })
-
- $scope.$on("feedSearch", function () {
- $scope.open()
- })
- },
-])
-
-module.controller("FeedListCtrl", [
- "$scope",
- "$stateParams",
- "$http",
- "$route",
- "$state",
- "$window",
- "$timeout",
- "$location",
- "EntryService",
- "SettingsService",
- "FeedService",
- "CategoryService",
- "AnalyticsService",
- "MobileService",
- function (
- $scope,
- $stateParams,
- $http,
- $route,
- $state,
- $window,
- $timeout,
- $location,
- EntryService,
- SettingsService,
- FeedService,
- CategoryService,
- AnalyticsService,
- MobileService
- ) {
- $window = angular.element($window)
- AnalyticsService.track()
-
- $scope.keywords = $location.search().q
-
- $scope.selectedType = $stateParams._type
- $scope.selectedId = $stateParams._id
-
- $scope.name = null
- $scope.message = null
- $scope.errorCount = 0
- $scope.timestamp = 0
- $scope.entries = []
- $scope.ignored_read_status = false
- $scope.font_size = 0
-
- $scope.settingsService = SettingsService
- $scope.MobileService = MobileService
- $scope.$watch("settingsService.settings.readingMode", function (newValue, oldValue) {
- if (newValue && oldValue && newValue != oldValue) {
- $scope.$emit("emitReload")
- }
- })
- $scope.$watch("settingsService.settings.readingOrder", function (newValue, oldValue) {
- if (newValue && oldValue && newValue != oldValue) {
- $scope.$emit("emitReload")
- }
- })
-
- $scope.$watch("settingsService.settings.readingOrder", function (newValue, oldValue) {
- if (newValue && oldValue && newValue != oldValue) {
- $scope.$emit("emitReload")
- }
- })
- $scope.$watch("settingsService.settings.theme", function (newValue, oldValue) {
- if (newValue) {
- angular.element("html").attr("id", "theme-" + newValue)
- }
- })
-
- $scope.limit = SettingsService.settings.viewMode == "title" ? 10 : 5
- $scope.busy = false
- $scope.hasMore = true
-
- $scope.loadMoreEntries = function () {
- if (!$scope.hasMore) return
- if ($scope.busy) return
- $scope.busy = true
-
- var limit = $scope.limit
-
- var read_shown = SettingsService.settings.readingMode === "all" || $scope.ignored_read_status
- var offset = read_shown
- ? $scope.entries.length
- : _.where($scope.entries, {
- read: false,
- }).length
- if ($scope.entries.length === 0) {
- $window = angular.element($window)
- if (SettingsService.settings.viewMode == "title") {
- limit = $window.height() / 33
- limit = parseInt(limit, 10) + 5
- } else {
- limit = $window.height() / 97
- limit = parseInt(limit, 10) + 1
- }
- }
-
- var callback = function (data) {
- for (var i = 0; i < data.entries.length; i++) {
- var entry = data.entries[i]
- if (
- !_.some($scope.entries, {
- id: entry.id,
- })
- ) {
- $scope.entries.push(entry)
- }
- }
- $scope.name = data.name
- $scope.message = data.message
- $scope.errorCount = data.errorCount
- $scope.timestamp = data.timestamp
- $scope.busy = false
- $scope.hasMore = data.hasMore
- $scope.feedLink = data.feedLink
- $scope.ignored_read_status = data.ignoredReadStatus
- }
-
- var data = {
- id: $scope.selectedId,
- readType: $scope.keywords ? "all" : $scope.settingsService.settings.readingMode,
- order: $scope.settingsService.settings.readingOrder,
- offset: offset,
- limit: limit,
- keywords: $scope.keywords,
- }
- if ($scope.selectedType == "feed") {
- FeedService.entries(data, callback)
- } else if ($scope.selectedType == "category") {
- CategoryService.entries(data, callback)
- } else if ($scope.selectedType == "tag") {
- data.tag = data.id
- data.id = "all"
- CategoryService.entries(data, callback)
- }
- }
-
- var watch_scrolling = true
- var watch_current = true
-
- $scope.$watch("current", function (newValue, oldValue) {
- if (!watch_current) {
- return
- }
- if (newValue && newValue !== oldValue) {
- var force = $scope.navigationMode == "keyboard"
-
- // timeout here to execute after dom update
- $timeout(function () {
- var docTop = $(window).scrollTop()
- var docBottom = docTop + $(window).height()
-
- var elem = $("#entry_" + newValue.id)
- var elemTop = elem.offset().top
- var elemBottom = elemTop + elem.height()
-
- if (!force && elemTop > docTop && elemBottom < docBottom) {
- // element is entirely visible
- return
- } else {
- var scrollTop = elemTop - $("#toolbar").outerHeight()
- var speed = SettingsService.settings.scrollSpeed
- watch_scrolling = false
- $("html, body").animate(
- {
- scrollTop: scrollTop,
- },
- speed,
- "swing",
- function () {
- watch_scrolling = true
- }
- )
- }
- })
- }
- })
-
- var scrollHandler = function () {
- if (!watch_scrolling || _.size($scope.entries) === 0) {
- return
- }
-
- $scope.navigationMode = "scroll"
- if (SettingsService.settings.viewMode == "expanded") {
- var w = $(window)
- var docTop = w.scrollTop()
-
- var current = null
- for (var i = 0; i < $scope.entries.length; i++) {
- var entry = $scope.entries[i]
- var e = $("#entry_" + entry.id)
- if (e.offset().top + e.height() > docTop + $("#toolbar").outerHeight()) {
- current = entry
- break
- }
- }
-
- var previous = $scope.current
- $scope.current = current
- if (previous != current) {
- if (SettingsService.settings.scrollMarks) {
- $scope.mark($scope.current, true)
- }
- watch_current = false
- $scope.$apply()
- watch_current = true
- }
- }
- }
- var scrollListener = _.throttle(scrollHandler, 200)
- $window.on("scroll", scrollListener)
- $scope.$on("$destroy", function () {
- return $window.off("scroll", scrollListener)
- })
-
- $scope.goToFeed = function (id) {
- $state.transitionTo("feeds.view", {
- _type: "feed",
- _id: id,
- })
- }
-
- $scope.mark = function (entry, read) {
- if (entry.read != read) {
- entry.read = read
- $scope.$emit("emitMark", {
- entry: entry,
- })
- EntryService.mark({
- id: entry.id,
- read: read,
- })
- }
- }
-
- $scope.markAll = function (olderThan) {
- var service = $scope.selectedType == "feed" ? FeedService : CategoryService
- service.mark(
- {
- id: $scope.selectedId,
- olderThan: olderThan || $scope.timestamp,
- keywords: $location.search().q,
- read: true,
- },
- function () {
- CategoryService.refresh(function () {
- $scope.$emit("emitReload")
- })
- }
- )
- }
-
- $scope.markUpTo = function (entry) {
- var entries = []
- for (var i = 0; i < $scope.entries.length; i++) {
- var e = $scope.entries[i]
- if (!e.read) {
- entries.push({
- id: e.id,
- read: true,
- })
- e.read = true
- }
- if (e == entry) {
- break
- }
- }
- EntryService.markMultiple(
- {
- requests: entries,
- },
- function () {
- CategoryService.refresh()
- }
- )
- }
-
- $scope.star = function (entry, star, event) {
- if (event) {
- event.preventDefault()
- event.stopPropagation()
- }
- if (entry.starred != star) {
- entry.starred = star
- EntryService.star({
- id: entry.id,
- feedId: entry.feedId,
- starred: star,
- })
- }
- }
-
- var getCurrentIndex = function () {
- var index = -1
- if ($scope.current) {
- for (var i = 0; i < $scope.entries.length; i++) {
- if ($scope.current == $scope.entries[i]) {
- index = i
- break
- }
- }
- }
- return index
- }
-
- var getNextEntry = function () {
- var index = getCurrentIndex()
- if (index >= 0) {
- index = index + 1
- if (index < $scope.entries.length) {
- return $scope.entries[index]
- }
- } else if ($scope.entries.length > 0) {
- return $scope.entries[0]
- }
- return null
- }
-
- var getPreviousEntry = function () {
- var index = getCurrentIndex()
- if (index >= 1) {
- return $scope.entries[index - 1]
- }
- return null
- }
-
- var openNextEntry = function (event) {
- var entry = getNextEntry()
- openEntry(entry, event)
- }
-
- var openPreviousEntry = function (event) {
- var entry = getPreviousEntry()
- openEntry(entry, event)
- }
-
- var focusNextEntry = function (event) {
- var entry = getNextEntry()
-
- if (event) {
- event.preventDefault()
- event.stopPropagation()
- }
-
- if (entry) {
- $scope.current = entry
- }
- }
-
- var focusPreviousEntry = function (event) {
- var entry = getPreviousEntry()
-
- if (event) {
- event.preventDefault()
- event.stopPropagation()
- }
-
- if (entry) {
- $scope.current = entry
- }
- }
-
- $scope.isOpen = SettingsService.settings.viewMode == "expanded"
-
- var openEntry = function (entry, event) {
- if (event) {
- event.preventDefault()
- event.stopPropagation()
- }
-
- if (!entry) {
- return
- }
-
- if ($scope.current != entry || SettingsService.settings.viewMode == "expanded") {
- $scope.isOpen = true
- } else {
- $scope.isOpen = !$scope.isOpen
- }
- if ($scope.isOpen) {
- $scope.mark(entry, true)
- }
- $scope.current = entry
-
- if (getCurrentIndex() == $scope.entries.length - 1) {
- $scope.loadMoreEntries()
- }
- }
-
- $scope.entryClicked = function (entry, event) {
- if (event && event.which === 3) {
- // right click
- return
- }
- if (!event || (!event.ctrlKey && event.which != 2)) {
- $scope.navigationMode = "click"
- openEntry(entry, event)
- } else {
- $scope.mark(entry, true)
- }
- }
-
- $scope.bodyClicked = function (entry, event) {
- if (SettingsService.settings.viewMode == "expanded" && $scope.current != entry) {
- $scope.entryClicked(entry, event)
- }
- }
-
- $scope.noop = function (event) {
- if (!event.ctrlKey && event.which != 2) {
- event.preventDefault()
- event.stopPropagation()
- }
- }
-
- // keyboard shortcuts
- Mousetrap.bind("j", function (e) {
- $scope.$apply(function () {
- $scope.navigationMode = "keyboard"
- openNextEntry(e)
- })
- return false
- })
- Mousetrap.bind("n", function (e) {
- $scope.$apply(function () {
- $scope.navigationMode = "keyboard"
- focusNextEntry(e)
- })
- return false
- })
- Mousetrap.bind("k", function (e) {
- $scope.$apply(function () {
- $scope.navigationMode = "keyboard"
- openPreviousEntry(e)
- })
- return false
- })
- Mousetrap.bind("p", function (e) {
- $scope.$apply(function () {
- $scope.navigationMode = "keyboard"
- focusPreviousEntry(e)
- })
- return false
- })
- Mousetrap.bind("o", function (e) {
- $scope.$apply(function () {
- $scope.navigationMode = "keyboard"
- if ($scope.current) {
- openEntry($scope.current, e)
- }
- })
- return false
- })
- Mousetrap.bind("enter", function (e) {
- $scope.$apply(function () {
- $scope.navigationMode = "keyboard"
- if ($scope.current) {
- openEntry($scope.current, e)
- }
- })
- })
- Mousetrap.bind("r", function (e) {
- $scope.$apply(function () {
- $scope.$emit("emitReload")
- })
- return false
- })
- Mousetrap.bind("v", function (e) {
- if ($scope.current) {
- $scope.mark($scope.current, true)
- window.open($scope.current.url)
- }
- return false
- })
- Mousetrap.bind("b", function (e) {
- if ($scope.current) {
- $scope.mark($scope.current, true)
-
- var url = $scope.current.url
- var a = document.createElement("a")
- a.href = url
- var evt = document.createEvent("MouseEvents")
- evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, true, false, false, true, 0, null)
- a.dispatchEvent(evt)
- }
- return false
- })
- Mousetrap.bind("s", function (e) {
- $scope.$apply(function () {
- if ($scope.current) {
- $scope.star($scope.current, !$scope.current.starred)
- }
- })
- return false
- })
- Mousetrap.bind("m", function (e) {
- $scope.$apply(function () {
- if ($scope.current) {
- $scope.mark($scope.current, !$scope.current.read)
- }
- })
- return false
- })
- Mousetrap.bind("shift+a", function (e) {
- $scope.$apply(function () {
- $scope.markAll()
- })
- return false
- })
-
- Mousetrap.bind("+", function (e) {
- $scope.$apply(function () {
- $scope.font_size = Math.min($scope.font_size + 1, 5)
- })
- return false
- })
-
- Mousetrap.bind("-", function (e) {
- $scope.$apply(function () {
- $scope.font_size = Math.max($scope.font_size - 1, 0)
- })
- return false
- })
-
- Mousetrap.bind("space", function (e) {
- if (!$scope.current) {
- $scope.$apply(function () {
- $scope.navigationMode = "keyboard"
- openNextEntry(e)
- })
- } else if (!$scope.isOpen) {
- $scope.$apply(function () {
- $scope.navigationMode = "keyboard"
- if ($scope.current) {
- openEntry($scope.current, e)
- }
- })
- } else {
- var docTop = $(window).scrollTop()
- var docBottom = docTop + $(window).height()
-
- var elem = $("#entry_" + $scope.current.id)
- var elemTop = elem.offset().top
- var elemBottom = elemTop + elem.height()
-
- var bottomVisible = elemBottom < docBottom
- if (bottomVisible) {
- $scope.$apply(function () {
- $scope.navigationMode = "keyboard"
- openNextEntry(e)
- })
- }
- }
- })
-
- Mousetrap.bind("shift+space", function (e) {
- if (!$scope.current) {
- return
- } else if (!$scope.isOpen) {
- $scope.$apply(function () {
- $scope.navigationMode = "keyboard"
- if ($scope.current) {
- openEntry($scope.current, e)
- }
- })
- } else {
- var docTop = $(window).scrollTop()
-
- var elem = $("#entry_" + $scope.current.id)
- var elemTop = elem.offset().top
-
- var topVisible = elemTop > docTop
- if (topVisible) {
- $scope.$apply(function () {
- $scope.navigationMode = "keyboard"
- openPreviousEntry(e)
- })
- }
- }
- })
-
- Mousetrap.bind("f", function (e) {
- $("body").toggleClass("full-screen")
- $(".main-content").css("margin-left", "")
- return false
- })
-
- Mousetrap.bind("?", function (e) {
- $scope.$apply(function () {
- $scope.shortcutsModal = true
- })
- return false
- })
-
- $scope.$on("previousEntry", function (event, args) {
- $scope.navigationMode = "keyboard"
- openPreviousEntry()
- })
- $scope.$on("nextEntry", function (event, args) {
- $scope.navigationMode = "keyboard"
- openNextEntry()
- })
- $scope.$on("markAll", function (event, args) {
- $scope.markAll(args.olderThan)
- })
-
- var reload = function (all, keywords) {
- $scope.keywords = keywords
- $location.search("q", keywords)
- delete $scope.current
- $scope.name = null
- $scope.entries = []
- $scope.message = null
- $scope.errorCount = 0
- $scope.timestamp = 0
- $scope.busy = false
- $scope.hasMore = true
- $scope.loadMoreEntries()
-
- if (all) {
- FeedService.refreshAll()
- } else if ($scope.selectedType == "feed") {
- FeedService.refresh({
- id: $stateParams._id,
- })
- }
- }
-
- $scope.$on("entrySearch", function (event, args) {
- reload(null, args.keywords)
- })
-
- $scope.$on("reload", function (event, args) {
- reload(args.all, null)
- })
- },
-])
-
-module.controller("ManageUsersCtrl", [
- "$scope",
- "$state",
- "$location",
- "AdminUsersService",
- function ($scope, $state, $location, AdminUsersService) {
- $scope.users = AdminUsersService.getAll()
- $scope.selection = []
- $scope.gridOptions = {
- data: "users",
- selectedItems: $scope.selection,
- multiSelect: false,
- showColumnMenu: true,
- showFilter: true,
- columnDefs: [
- {
- field: "id",
- displayName: "ID",
- },
- {
- field: "name",
- displayName: "Name",
- },
- {
- field: "email",
- cellClass: "E-Mail",
- },
- {
- field: "created",
- cellClass: "Created",
- cellFilter: "entryDate",
- },
- {
- field: "lastLogin",
- cellClass: "Last login",
- cellFilter: "entryDate",
- },
- {
- field: "admin",
- cellClass: "Admin",
- },
- {
- field: "enabled",
- cellClass: "Enabled",
- },
- ],
-
- afterSelectionChange: function (item) {
- $state.transitionTo("admin.useredit", {
- _id: item.entity.id,
- })
- },
- }
-
- $scope.addUser = function () {
- $state.transitionTo("admin.useradd")
- }
- $scope.back = function () {
- $location.path("/admin")
- }
- },
-])
-
-module.controller("ManageUserCtrl", [
- "$scope",
- "$state",
- "$stateParams",
- "AdminUsersService",
- function ($scope, $state, $stateParams, AdminUsersService) {
- $scope.user = $stateParams._id
- ? AdminUsersService.get({
- id: $stateParams._id,
- })
- : {
- enabled: true,
- }
- $scope.alerts = []
- $scope.closeAlert = function (index) {
- $scope.alerts.splice(index, 1)
- }
- var alertFunction = function (data) {
- $scope.alerts.push({
- msg: data.data,
- type: "error",
- })
- }
-
- $scope.cancel = function () {
- $state.transitionTo("admin.userlist")
- }
- $scope.save = function () {
- $scope.alerts.splice(0, $scope.alerts.length)
- AdminUsersService.save(
- $scope.user,
- function () {
- $state.transitionTo("admin.userlist")
- },
- alertFunction
- )
- }
- $scope.remove = function () {
- AdminUsersService.remove(
- {
- id: $scope.user.id,
- },
- function () {
- $state.transitionTo("admin.userlist")
- },
- alertFunction
- )
- }
- },
-])
-
-module.controller("SettingsCtrl", [
- "$scope",
- "$location",
- "SettingsService",
- "AnalyticsService",
- "LangService",
- function ($scope, $location, SettingsService, AnalyticsService, LangService) {
- AnalyticsService.track()
-
- $scope.langs = LangService.langs
-
- $scope.themes = ["default", "bootstrap", "dark", "ebraminio", "MRACHINI", "nightsky", "svetla", "third"]
-
- $scope.settingsService = SettingsService
- $scope.$watch("settingsService.settings", function (value) {
- $scope.settings = angular.copy(value)
- })
-
- $scope.cancel = function () {
- SettingsService.init(function () {
- $location.path("/")
- })
- }
- $scope.save = function () {
- SettingsService.settings = $scope.settings
- SettingsService.save(function () {
- window.location.href = window.location.href.substring(0, window.location.href.lastIndexOf("#"))
- })
- }
- },
-])
-
-module.controller("ProfileCtrl", [
- "$scope",
- "$location",
- "ProfileService",
- "AnalyticsService",
- function ($scope, $location, ProfileService, AnalyticsService) {
- AnalyticsService.track()
-
- $scope.user = ProfileService.get()
- $scope.error = ""
-
- $scope.cancel = function () {
- $location.path("/")
- }
- $scope.save = function () {
- $scope.error = ""
- if (!$scope.profileForm.$valid) {
- return
- }
- var o = {
- email: $scope.user.email,
- currentPassword: $scope.currentPassword,
- newPassword: $scope.newPassword,
- newApiKey: $scope.newApiKey,
- }
-
- ProfileService.save(
- o,
- function () {
- $location.path("/")
- },
- function (error) {
- var data = error.data
- if (data.errors) {
- // password validation error
- $scope.error = data.errors.join(", ")
- } else {
- // bad request error
- $scope.error = data.message
- }
- }
- )
- }
- $scope.deleteAccount = function () {
- ProfileService.deleteAccount({})
- window.location.href = "logout"
- }
- },
-])
-
-module.controller("ManageSettingsCtrl", [
- "$scope",
- "$location",
- "$state",
- "AdminSettingsService",
- function ($scope, $location, $state, AdminSettingsService) {
- $scope.settings = AdminSettingsService.get()
-
- $scope.cancel = function () {
- $location.path("/")
- }
- $scope.save = function () {
- AdminSettingsService.save({}, $scope.settings, function () {
- $location.path("/")
- })
- }
-
- $scope.toUsers = function () {
- $state.transitionTo("admin.userlist")
- }
- $scope.toMetrics = function () {
- $state.transitionTo("admin.metrics")
- }
- },
-])
-
-module.controller("HelpController", [
- "$scope",
- "CategoryService",
- "AnalyticsService",
- "ServerService",
- function ($scope, CategoryService, AnalyticsService, ServerService) {
- AnalyticsService.track()
- $scope.CategoryService = CategoryService
- $scope.infos = ServerService.get()
- $scope.categoryId = "all"
- $scope.order = "desc"
- $scope.baseUrl = window.location.href.substring(0, window.location.href.lastIndexOf("#"))
- },
-])
-
-module.controller("FooterController", [
- "$scope",
- "$sce",
- function ($scope, $sce) {
- var baseUrl = window.location.href.substring(0, window.location.href.lastIndexOf("#"))
- var hostname = window.location.hostname
- var url = baseUrl + "rest/feed/subscribe?url={feed}"
- var name = hostname.indexOf("www.commafeed.com") !== -1 ? "CommaFeed" : "CommaFeed (" + hostname + ")"
- var subToMeUrl = "https://www.subtome.com/register-no-ui.html?name=" + name + "&url=" + url
- $scope.subToMeUrl = $sce.trustAsResourceUrl(subToMeUrl)
- },
-])
-
-module.controller("MetricsCtrl", [
- "$scope",
- "AdminMetricsService",
- function ($scope, AdminMetricsService) {
- $scope.metrics = AdminMetricsService.get()
- },
-])
-
-module.controller("LoginCtrl", [
- "$scope",
- "$location",
- "$timeout",
- "SessionService",
- "ServerService",
- function ($scope, $location, $timeout, SessionService, ServerService) {
- $scope.model = {}
- $scope.recovery_model = {}
- $scope.recovery = false
- $scope.recovery_enabled = false
-
- ServerService.get(function (data) {
- $scope.recovery_enabled = data.smtpEnabled
- })
-
- var login = function (model) {
- var success = function (data) {
- window.location.href = window.location.href.substring(0, window.location.href.lastIndexOf("#"))
- }
- var error = function (data) {
- $scope.message = data.data
- }
- SessionService.login(
- {
- name: model.name,
- password: model.password,
- },
- success,
- error
- )
- }
- $scope.demoLogin = function () {
- login({
- name: "demo",
- password: "demo",
- })
- }
-
- $scope.login = function () {
- // autofilled fields do not trigger model update, do it manually
- $("input[ng-model]").trigger("input")
- login($scope.model)
- }
-
- $scope.toggleRecovery = function () {
- $scope.recovery = !$scope.recovery
- }
-
- var recovery_success = function (data) {
- $scope.recovery_message = "An email has been sent if this address was registered. Check your inbox."
- }
- var recovery_error = function (data) {
- $scope.recovery_message = data.data
- }
- $scope.recover = function () {
- SessionService.passwordReset(
- {
- email: $scope.recovery_model.email,
- },
- recovery_success,
- recovery_error
- )
- }
- },
-])
-
-module.controller("RegisterCtrl", [
- "$scope",
- "$location",
- "SessionService",
- "ServerService",
- function ($scope, $location, SessionService, ServerService) {
- $scope.ServerService = ServerService.get()
- $scope.model = {}
-
- $scope.register = function () {
- var success = function (data) {
- window.location.href = window.location.href.substring(0, window.location.href.lastIndexOf("#"))
- }
- var error = function (data) {
- $scope.messages = data.data.errors
- }
- SessionService.register($scope.model, success, error)
- }
- },
-])
diff --git a/commafeed-client/src/main/app/js/directives.js b/commafeed-client/src/main/app/js/directives.js
deleted file mode 100644
index ea7b6d00..00000000
--- a/commafeed-client/src/main/app/js/directives.js
+++ /dev/null
@@ -1,402 +0,0 @@
-var module = angular.module("commafeed.directives", [])
-
-module.directive("focus", [
- "$timeout",
- function ($timeout) {
- return {
- restrict: "A",
- link: function (scope, element, attrs) {
- scope.$watch(attrs.focus, function (value) {
- if (!value) return
- $timeout(function () {
- $(element).focus()
- })
- })
- },
- }
- },
-])
-
-module.directive("confirmClick", [
- function () {
- return {
- priority: -1,
- restrict: "A",
- link: function (scope, element, attrs) {
- element.bind("click", function (e) {
- var message = scope.$eval(attrs.confirmClick)
- if (message && !confirm(message)) {
- e.stopImmediatePropagation()
- e.preventDefault()
- }
- })
- },
- }
- },
-])
-
-/**
- * Open a popup window pointing to the url in the href attribute
- */
-module.directive("popup", function () {
- var opts = "menubar=no,toolbar=no,resizable=yes,scrollbars=yes,height=600,width=800"
- return {
- link: function (scope, elm, attrs) {
- elm.bind("click", function (event) {
- window.open(this.href, "", opts)
- event.preventDefault()
- })
- },
- }
-})
-
-/**
- * entry tag handling
- */
-module.directive("tags", function () {
- return {
- restrict: "E",
- scope: {
- entry: "=",
- },
- replace: true,
- templateUrl: "templates/_tags.html",
- controller: [
- "$scope",
- "EntryService",
- function ($scope, EntryService) {
- $scope.select2Options = {
- multiple: true,
- simple_tags: true,
- maximumInputLength: 40,
- tags: EntryService.tags,
- }
-
- $scope.$watch(
- "entry.tags",
- function (newValue, oldValue) {
- if (oldValue && newValue != oldValue) {
- var data = {
- entryId: $scope.entry.id,
- tags: [],
- }
- if (newValue) {
- data.tags = newValue
- }
- EntryService.tag(data)
- }
- },
- true
- )
- },
- ],
- }
-})
-
-/**
- * Reusable favicon component
- */
-module.directive("favicon", function () {
- var tpl = '
'
- return {
- restrict: "E",
- scope: {
- url: "=",
- },
- replace: true,
- template: tpl,
- }
-})
-
-/**
- * Support for the blur event
- */
-module.directive("ngBlur", function () {
- return {
- restrict: "A",
- link: function (scope, elm, attrs) {
- elm.bind("blur", function () {
- scope.$apply(attrs.ngBlur)
- })
- },
- }
-})
-
-/**
- * Prevent mousewheel scrolling from propagating to the parent when scrollbar
- * reaches top or bottom
- */
-module.directive("mousewheelScrolling", function () {
- return {
- restrict: "A",
- link: function (scope, elem, attr) {
- elem.bind("mousewheel", function (e, d) {
- var t = $(this)
- if (d > 0 && t.scrollTop() === 0) {
- e.preventDefault()
- } else {
- if (d < 0 && t.scrollTop() == t.get(0).scrollHeight - t.innerHeight()) {
- e.preventDefault()
- }
- }
- })
- },
- }
-})
-
-/**
- * Needed to use recursive directives. Wrap a recursive element with a
- * tag
- */
-module.directive("recursive", [
- "$compile",
- function ($compile) {
- return {
- restrict: "E",
- priority: 100000,
- compile: function (tElement, tAttr) {
- var contents = tElement.contents().remove()
- var compiledContents = null
- return function (scope, iElement, iAttr) {
- if (!compiledContents) {
- compiledContents = $compile(contents)
- }
- iElement.append(
- compiledContents(scope, function (clone) {
- return clone
- })
- )
- }
- },
- }
- },
-])
-
-/**
- * Reusable category component
- */
-module.directive("category", [
- function () {
- return {
- scope: {
- node: "=",
- level: "=",
- selectedType: "=",
- selectedId: "=",
- showLabel: "=",
- showChildren: "=",
- unreadCount: "&",
- tag: "=",
- },
- restrict: "E",
- replace: true,
- templateUrl: "templates/_category.html",
- controller: [
- "$scope",
- "$state",
- "FeedService",
- "CategoryService",
- "SettingsService",
- "MobileService",
- function ($scope, $state, FeedService, CategoryService, SettingsService, MobileService) {
- $scope.settingsService = SettingsService
-
- $scope.getClass = function (level) {
- if ($scope.showLabel) {
- return "indent" + level
- }
- }
-
- $scope.categoryLabel = function (category) {
- return $scope.showLabel !== true ? $scope.showLabel : category.name
- }
-
- $scope.categoryCountLabel = function (category) {
- var count = $scope.unreadCount({
- category: category,
- })
- var label = ""
- if (count > 0) {
- label += count
- }
- return label
- }
-
- $scope.feedCountLabel = function (feed) {
- var label = ""
- if (feed.unread > 0) {
- label += feed.unread
- }
- return label
- }
-
- $scope.feedClicked = function (id, event) {
- // Could be called by a middle click
- if (!event || (!event.ctrlKey && event.which == 1)) {
- MobileService.toggleLeftMenu()
- if ($scope.selectedType == "feed" && id == $scope.selectedId) {
- $scope.$emit("emitReload")
- } else {
- $state.transitionTo("feeds.view", {
- _type: "feed",
- _id: id,
- })
- }
-
- if (event) {
- event.preventDefault()
- event.stopPropagation()
- }
- }
- }
-
- $scope.categoryClicked = function (id, isTag) {
- MobileService.toggleLeftMenu()
- var type = isTag ? "tag" : "category"
- if ($scope.selectedType == type && id == $scope.selectedId) {
- $scope.$emit("emitReload")
- } else {
- $state.transitionTo("feeds.view", {
- _type: type,
- _id: id,
- })
- }
- }
-
- $scope.showFeedDetails = function (feed) {
- $state.transitionTo("feeds.feed_details", {
- _id: feed.id,
- })
- }
-
- $scope.showCategoryDetails = function (id, isTag) {
- if (isTag) {
- $state.transitionTo("feeds.tag_details", {
- _id: id,
- })
- } else {
- $state.transitionTo("feeds.category_details", {
- _id: id,
- })
- }
- }
-
- $scope.toggleCategory = function (category, event) {
- event.preventDefault()
- event.stopPropagation()
- category.expanded = !category.expanded
- if (category.id == "all") {
- return
- }
- CategoryService.collapse({
- id: category.id,
- collapse: !category.expanded,
- })
- }
- },
- ],
- }
- },
-])
-
-module.directive("draggable", function () {
- return {
- restrict: "A",
- link: function (scope, element, attrs) {
- element
- .draggable({
- revert: "invalid",
- helper: "clone",
- distance: 10,
- axis: "y",
- })
- .data("source", scope.$eval(attrs.draggable))
- },
- }
-})
-
-module.directive("droppable", [
- "CategoryService",
- "FeedService",
- function (CategoryService, FeedService) {
- return {
- restrict: "A",
- link: function (scope, element, attrs) {
- element.droppable({
- tolerance: "pointer",
- over: function (event, ui) {},
- drop: function (event, ui) {
- var draggable = angular.element(ui.draggable)
-
- var source = draggable.data("source")
- var target = scope.$eval(attrs.droppable)
-
- if (angular.equals(source, target)) {
- return
- }
-
- var data = {
- id: source.id,
- name: source.name,
- filter: source.filter,
- }
-
- if (source.children) {
- // source is a category
- } else {
- // source is a feed
-
- if (target.children) {
- // target is a category
- data.categoryId = target.id
- data.position = 0
- } else {
- // target is a feed
- data.categoryId = target.categoryId
- data.position = target.position
- }
-
- FeedService.modify(data, function () {
- CategoryService.init()
- })
- }
- scope.$apply()
- },
- })
- },
- }
- },
-])
-
-module.directive("metricMeter", function () {
- return {
- scope: {
- metric: "=",
- label: "=",
- },
- restrict: "E",
- templateUrl: "templates/_metrics.meter.html",
- }
-})
-
-module.directive("metricGauge", function () {
- return {
- scope: {
- metric: "=",
- label: "=",
- },
- restrict: "E",
- templateUrl: "templates/_metrics.gauge.html",
- }
-})
-
-module.directive("metricTimer", function () {
- return {
- scope: {
- metric: "=",
- label: "=",
- },
- restrict: "E",
- templateUrl: "templates/_metrics.timer.html",
- }
-})
diff --git a/commafeed-client/src/main/app/js/filters.js b/commafeed-client/src/main/app/js/filters.js
deleted file mode 100644
index 610b8402..00000000
--- a/commafeed-client/src/main/app/js/filters.js
+++ /dev/null
@@ -1,119 +0,0 @@
-var module = angular.module("commafeed.filters", [])
-
-/**
- * smart date formatter
- */
-module.filter("entryDate", function () {
- return function (timestamp, defaultValue) {
- if (!timestamp) {
- return defaultValue
- }
-
- var d = moment(timestamp)
- var now = moment()
- var formatted
- if (Math.abs(d.diff(now)) < 86400000) {
- formatted = d.fromNow()
- } else {
- formatted = d.format("YYYY-MM-DD HH:mm")
- }
- return formatted
- }
-})
-
-/**
- * rewrites iframes to use https if commafeed uses https
- */
-module.filter("iframeHttpsRewrite", function () {
- return function (html) {
- var result = html
- if (location.protocol === "https:") {
- var wrapper = $("").html(html)
- $("iframe", wrapper).each(function (i, elem) {
- var e = $(elem)
- e.attr("src", e.attr("src").replace(/^http:\/\//i, "https://"))
- })
- result = wrapper.html()
- }
- return result
- }
-})
-
-/**
- * inserts title or alt-text after images, if any
- */
-module.filter("appendImageTitles", function () {
- return function (html) {
- var result = html
- var wrapper = $("").html(html)
- $("img", wrapper).each(function (i, elem) {
- var e = $(elem)
- var title = e.attr("title") || e.attr("alt")
- if (title) {
- var text = $('').text(title)
- e.after(text)
- }
- })
- result = wrapper.html()
- return result
- }
-})
-
-/**
- * escapes the url
- */
-module.filter("escape", function () {
- return encodeURIComponent
-})
-
-/**
- * returns a trusted html content
- */
-module.filter("trustHtml", [
- "$sce",
- function ($sce) {
- return function (val) {
- return $sce.trustAsHtml(val)
- }
- },
-])
-
-/**
- * returns a trusted url
- */
-module.filter("trustUrl", [
- "$sce",
- function ($sce) {
- return function (val) {
- return $sce.trustAsResourceUrl(val)
- }
- },
-])
-
-/**
- * add the 'highlight-search' class to text matching keywords
- */
-module.filter("highlight", function () {
- return function (html, keywords) {
- if (keywords) {
- var handleKeyword = function (token, html) {
- var expr = new RegExp(token, "gi")
- var container = $("").html(html)
- var elements = container.find("*").addBack()
- var textNodes = elements.not("iframe").contents().not(elements)
- textNodes.each(function () {
- var replaced = this.nodeValue.replace(expr, '$&')
- $("").html(replaced).insertBefore(this)
- $(this).remove()
- })
- return container.html()
- }
-
- var tokens = keywords.split(" ")
- for (var i = 0; i < tokens.length; i++) {
- html = handleKeyword(tokens[i], html)
- }
- }
- return html
- }
-})
diff --git a/commafeed-client/src/main/app/js/i18n.js b/commafeed-client/src/main/app/js/i18n.js
deleted file mode 100644
index f0e3a6a0..00000000
--- a/commafeed-client/src/main/app/js/i18n.js
+++ /dev/null
@@ -1,37 +0,0 @@
-var module = angular.module("commafeed.i18n", [])
-
-module.service("LangService", [
- function () {
- this.langs = {
- ar: "العربية",
- ca: "Català",
- en: "English",
- es: "Español",
- de: "Deutsch",
- fa: "فارسی",
- fr: "Français",
- gl: "Galician",
- glk: "گیلکی",
- hu: "Magyar",
- id: "Indonesian",
- ja: "日本語",
- ko: "한국어",
- nl: "Nederlands",
- nb: "Norsk (bokmål)",
- nn: "Norsk (nynorsk)",
- pt: "Português",
- pl: "Polski",
- ru: "Русский",
- fi: "Suomi",
- sv: "Svenska",
- zh: "简体中文",
- it: "Italiano",
- tr: "Türkçe",
- cy: "Cymraeg",
- sk: "Slovenčina",
- da: "Danish",
- cs: "Čeština",
- ms: "Bahasa Malaysian",
- }
- },
-])
diff --git a/commafeed-client/src/main/app/js/main.js b/commafeed-client/src/main/app/js/main.js
deleted file mode 100644
index 6990260d..00000000
--- a/commafeed-client/src/main/app/js/main.js
+++ /dev/null
@@ -1,172 +0,0 @@
-var app = angular.module("commafeed", [
- "ngRoute",
- "ngTouch",
- "ngAnimate",
- "ui.utils",
- "ui.bootstrap",
- "ui.router",
- "ui.select2",
- "commafeed.directives",
- "commafeed.controllers",
- "commafeed.services",
- "commafeed.filters",
- "commafeed.i18n",
- "ngSanitize",
- "infinite-scroll",
- "ngGrid",
- "chieffancypants.loadingBar",
- "pascalprecht.translate",
-])
-
-app.config([
- "$routeProvider",
- "$stateProvider",
- "$urlRouterProvider",
- "$httpProvider",
- "$compileProvider",
- "cfpLoadingBarProvider",
- "$translateProvider",
- function (
- $routeProvider,
- $stateProvider,
- $urlRouterProvider,
- $httpProvider,
- $compileProvider,
- cfpLoadingBarProvider,
- $translateProvider
- ) {
- $translateProvider.useStaticFilesLoader({
- prefix: "i18n/",
- suffix: ".js",
- })
- $translateProvider.preferredLanguage("en")
-
- cfpLoadingBarProvider.includeSpinner = false
-
- $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|javascript):/)
- var interceptor = [
- "$rootScope",
- "$q",
- "$injector",
- function (scope, $q, $injector) {
- var f = {}
-
- f.response = function (response) {
- return response
- }
-
- f.responseError = function (response) {
- var status = response.status
- if (status == 401) {
- $injector.get("$state").transitionTo("welcome")
- }
- return $q.reject(response)
- }
- return f
- },
- ]
-
- $httpProvider.interceptors.push(interceptor)
-
- $stateProvider.state("feeds", {
- abstract: true,
- url: "/feeds",
- templateUrl: "templates/feeds.html",
- })
- $stateProvider.state("feeds.view", {
- url: "/view/:_type/:_id",
- templateUrl: "templates/feeds.view.html",
- controller: "FeedListCtrl",
- })
- $stateProvider.state("feeds.subscribe", {
- url: "/subscribe",
- templateUrl: "templates/feeds.subscribe.html",
- controller: "SubscribeCtrl",
- })
- $stateProvider.state("feeds.new_category", {
- url: "/add_category",
- templateUrl: "templates/feeds.new_category.html",
- controller: "NewCategoryCtrl",
- })
- $stateProvider.state("feeds.import", {
- url: "/import",
- templateUrl: "templates/feeds.import.html",
- controller: "ImportCtrl",
- })
- $stateProvider.state("feeds.search", {
- url: "/search/:_keywords",
- templateUrl: "templates/feeds.view.html",
- controller: "FeedListCtrl",
- })
- $stateProvider.state("feeds.feed_details", {
- url: "/details/feed/:_id",
- templateUrl: "templates/feeds.feed_details.html",
- controller: "FeedDetailsCtrl",
- })
- $stateProvider.state("feeds.category_details", {
- url: "/details/category/:_id",
- templateUrl: "templates/feeds.category_details.html",
- controller: "CategoryDetailsCtrl",
- })
- $stateProvider.state("feeds.tag_details", {
- url: "/details/tag/:_id",
- templateUrl: "templates/feeds.tag_details.html",
- controller: "TagDetailsCtrl",
- })
- $stateProvider.state("feeds.help", {
- url: "/help",
- templateUrl: "templates/feeds.help.html",
- controller: "HelpController",
- })
- $stateProvider.state("feeds.settings", {
- url: "/settings",
- templateUrl: "templates/settings.html",
- controller: "SettingsCtrl",
- })
- $stateProvider.state("feeds.profile", {
- url: "/profile",
- templateUrl: "templates/profile.html",
- controller: "ProfileCtrl",
- })
-
- $stateProvider.state("admin", {
- abstract: true,
- url: "/admin",
- templateUrl: "templates/admin.html",
- })
- $stateProvider.state("admin.userlist", {
- url: "/user/list",
- templateUrl: "templates/admin.userlist.html",
- controller: "ManageUsersCtrl",
- })
- $stateProvider.state("admin.useradd", {
- url: "/user/add",
- templateUrl: "templates/admin.useradd.html",
- controller: "ManageUserCtrl",
- })
- $stateProvider.state("admin.useredit", {
- url: "/user/edit/:_id",
- templateUrl: "templates/admin.useredit.html",
- controller: "ManageUserCtrl",
- })
- $stateProvider.state("admin.settings", {
- url: "/settings",
- templateUrl: "templates/admin.settings.html",
- controller: "ManageSettingsCtrl",
- })
- $stateProvider.state("admin.metrics", {
- url: "/metrics",
- templateUrl: "templates/admin.metrics.html",
- controller: "MetricsCtrl",
- })
-
- $stateProvider.state("welcome", {
- url: "/welcome",
- templateUrl: "templates/welcome.html",
- })
-
- $urlRouterProvider.when("/", "/feeds/view/category/all")
- $urlRouterProvider.when("/admin", "/admin/settings")
- $urlRouterProvider.otherwise("/")
- },
-])
diff --git a/commafeed-client/src/main/app/js/services.js b/commafeed-client/src/main/app/js/services.js
deleted file mode 100644
index 5ef81077..00000000
--- a/commafeed-client/src/main/app/js/services.js
+++ /dev/null
@@ -1,375 +0,0 @@
-var module = angular.module("commafeed.services", ["ngResource"])
-
-module.service("AnalyticsService", [
- "$state",
- function ($state) {
- this.track = function (path) {
- if (typeof ga === "undefined") {
- return
- }
- path = path || $state.$current.url.prefix
- ga("send", "pageview", {
- page: path,
- })
- }
- },
-])
-
-module.service("MobileService", [
- "$state",
- function ($state) {
- this.leftMenu = false
- this.rightMenu = false
- this.toggleLeftMenu = function () {
- this.leftMenu = !this.leftMenu
- $("body").toggleClass("left-menu-active")
- }
- this.toggleRightMenu = function () {
- this.rightMenu = !this.rightMenu
- $("body").toggleClass("right-menu-active")
- }
- this.mobile = device.mobile() || device.tablet()
- },
-])
-
-module.factory("ProfileService", [
- "$resource",
- function ($resource) {
- var res = $resource("rest/user/profile/")
- res.deleteAccount = $resource("rest/user/profile/deleteAccount").save
- return res
- },
-])
-
-module.factory("SessionService", [
- "$resource",
- function ($resource) {
- var res = {}
- res.login = $resource("rest/user/login").save
- res.register = $resource("rest/user/register").save
- res.passwordReset = $resource("rest/user/passwordReset").save
- return res
- },
-])
-
-module.factory("SettingsService", [
- "$resource",
- "$translate",
- function ($resource, $translate) {
- var res = $resource("rest/user/settings")
-
- var s = {}
- s.settings = {}
- s.save = function (callback) {
- res.save(s.settings, function (data) {
- if (callback) {
- callback(data)
- }
- })
- }
- s.init = function (callback) {
- res.get(function (data) {
- s.settings = data
- var lang = s.settings.language || "en"
- $translate.use(lang)
- if (lang === "zh") {
- lang = "zh-cn"
- } else if (lang === "ms") {
- lang = "ms-my"
- }
- moment.locale(lang, {})
- if (callback) {
- callback(data)
- }
- })
- }
- s.init()
- return s
- },
-])
-
-module.factory("FeedService", [
- "$resource",
- "$http",
- function ($resource, $http) {
- var actions = {
- entries: {
- method: "GET",
- params: {
- _method: "entries",
- },
- },
- fetch: {
- method: "POST",
- params: {
- _method: "fetch",
- },
- },
- mark: {
- method: "POST",
- params: {
- _method: "mark",
- },
- },
- refresh: {
- method: "POST",
- params: {
- _method: "refresh",
- },
- },
- refreshAll: {
- method: "GET",
- params: {
- _method: "refreshAll",
- },
- },
- subscribe: {
- method: "POST",
- params: {
- _method: "subscribe",
- },
- },
- unsubscribe: {
- method: "POST",
- params: {
- _method: "unsubscribe",
- },
- },
- modify: {
- method: "POST",
- params: {
- _method: "modify",
- },
- },
- }
- var res = $resource("rest/feed/:_method", {}, actions)
- res.get = $resource("rest/feed/get/:id").get
- return res
- },
-])
-
-module.factory("CategoryService", [
- "$resource",
- "$http",
- function ($resource, $http) {
- var traverse = function (callback, category, parentName) {
- callback(category, parentName)
- var children = category.children
- if (children) {
- for (var c = 0; c < children.length; c++) {
- traverse(callback, children[c], category.name)
- }
- }
- }
-
- // flatten categories
- var flatten = function (category) {
- var array = []
- var callback = function (category, parentName) {
- var name = category.name
- if (parentName) {
- name += " (in " + parentName + ")"
- }
- array.push({
- id: category.id,
- name: name,
- orig: category,
- })
- }
- traverse(callback, category)
- return array
- }
-
- // flatten feeds
- var flatFeeds = function (category) {
- var subs = []
- var callback = function (category) {
- subs.push.apply(subs, category.feeds)
- }
- traverse(callback, category)
- return subs
- }
-
- // flatten everything
- var flatAll = function (category, a) {
- a.push([category.id, "category"])
- _.each(category.children, function (child) {
- flatAll(child, a)
- })
- _.each(category.feeds, function (feed) {
- a.push([feed.id, "feed"])
- })
- }
-
- var actions = {
- get: {
- method: "GET",
- ignoreLoadingBar: true,
- params: {
- _method: "get",
- },
- },
- entries: {
- method: "GET",
- params: {
- _method: "entries",
- },
- },
- mark: {
- method: "POST",
- params: {
- _method: "mark",
- },
- },
- add: {
- method: "POST",
- params: {
- _method: "add",
- },
- },
- remove: {
- method: "POST",
- params: {
- _method: "delete",
- },
- },
- modify: {
- method: "POST",
- params: {
- _method: "modify",
- },
- },
- collapse: {
- method: "POST",
- params: {
- _method: "collapse",
- },
- },
- }
- var res = $resource("rest/category/:_method", {}, actions)
- res.subscriptions = {}
- res.flatCategories = {}
- res.feeds = []
-
- res.init = function (callback) {
- res.get(function (data) {
- res.subscriptions = data
- res.flatCategories = flatten(data)
- res.feeds = flatFeeds(data)
-
- res.flatAll = []
- flatAll(data, res.flatAll)
- res.flatAll.splice(1, 0, ["starred", "category"])
-
- if (callback) callback(data)
- })
- }
- res.refresh = function (success, error) {
- res.get(
- function (data) {
- _.merge(res.subscriptions, data)
- if (success) success(data)
- },
- function (data) {
- if (error) error(data)
- }
- )
- }
-
- res.init()
- return res
- },
-])
-
-module.factory("EntryService", [
- "$resource",
- "$http",
- function ($resource, $http) {
- var actions = {
- search: {
- method: "GET",
- params: {
- _method: "search",
- },
- },
- mark: {
- method: "POST",
- ignoreLoadingBar: true,
- params: {
- _method: "mark",
- },
- },
- markMultiple: {
- method: "POST",
- params: {
- _method: "markMultiple",
- },
- },
- star: {
- method: "POST",
- params: {
- _method: "star",
- },
- },
- tag: {
- method: "POST",
- params: {
- _method: "tag",
- },
- },
- }
- var res = $resource("rest/entry/:_method", {}, actions)
- res.tags = []
- var initTags = function () {
- $http.get("rest/entry/tags").success(function (data) {
- res.tags = []
- res.tags.push.apply(res.tags, data)
- res.tags.sort()
- })
- }
- var oldTag = res.tag
- res.tag = function (data) {
- oldTag(data, function () {
- initTags()
- })
- }
- initTags()
- return res
- },
-])
-
-module.factory("AdminUsersService", [
- "$resource",
- function ($resource) {
- var res = {}
- res.get = $resource("rest/admin/user/get/:id").get
- res.getAll = $resource("rest/admin/user/getAll").query
- res.save = $resource("rest/admin/user/save").save
- res.remove = $resource("rest/admin/user/delete").save
- return res
- },
-])
-
-module.factory("AdminSettingsService", [
- "$resource",
- function ($resource) {
- var res = $resource("rest/admin/settings/")
- return res
- },
-])
-
-module.factory("AdminMetricsService", [
- "$resource",
- function ($resource) {
- var res = $resource("rest/admin/metrics/")
- return res
- },
-])
-
-module.factory("ServerService", [
- "$resource",
- function ($resource) {
- var res = $resource("rest/server/get")
- return res
- },
-])
diff --git a/commafeed-client/src/main/app/js/welcome.js b/commafeed-client/src/main/app/js/welcome.js
deleted file mode 100644
index f28681f2..00000000
--- a/commafeed-client/src/main/app/js/welcome.js
+++ /dev/null
@@ -1,7 +0,0 @@
-$(function () {
- var reg = $("#register-panel")
- if (!reg) {
- return
- }
- $("#login-panel").height(reg.height())
-})
diff --git a/commafeed-client/src/main/app/metro-icon-150.png b/commafeed-client/src/main/app/metro-icon-150.png
deleted file mode 100644
index c77ef32e..00000000
Binary files a/commafeed-client/src/main/app/metro-icon-150.png and /dev/null differ
diff --git a/commafeed-client/src/main/app/metro-icon-70.png b/commafeed-client/src/main/app/metro-icon-70.png
deleted file mode 100644
index 209a4bf2..00000000
Binary files a/commafeed-client/src/main/app/metro-icon-70.png and /dev/null differ
diff --git a/commafeed-client/src/main/app/sass/app.scss b/commafeed-client/src/main/app/sass/app.scss
deleted file mode 100644
index 43cd3ee3..00000000
--- a/commafeed-client/src/main/app/sass/app.scss
+++ /dev/null
@@ -1,22 +0,0 @@
-@import "generic/misc";
-@import "generic/scrollbar";
-
-@import "components/admin-panel";
-@import "components/toolbar";
-@import "components/entry-list";
-@import "components/subscription-list";
-@import "components/help";
-@import "components/loading-bar";
-
-@import "components/zocial";
-
-@import "mobile/mobile";
-
-@import "themes/test";
-@import "themes/bootstrap";
-@import "themes/ebraminio";
-@import "themes/MRACHINI";
-@import "themes/nightsky";
-@import "themes/svetla";
-@import "themes/dark";
-@import "themes/third";
diff --git a/commafeed-client/src/main/app/sass/base/.gitkeep b/commafeed-client/src/main/app/sass/base/.gitkeep
deleted file mode 100644
index e69de29b..00000000
diff --git a/commafeed-client/src/main/app/sass/components/_admin-panel.scss b/commafeed-client/src/main/app/sass/components/_admin-panel.scss
deleted file mode 100644
index 4335055b..00000000
--- a/commafeed-client/src/main/app/sass/components/_admin-panel.scss
+++ /dev/null
@@ -1,4 +0,0 @@
-/* admin */
-.admin .users-table {
- height: 400px;
-}
diff --git a/commafeed-client/src/main/app/sass/components/_entry-list.scss b/commafeed-client/src/main/app/sass/components/_entry-list.scss
deleted file mode 100644
index 6d840fed..00000000
--- a/commafeed-client/src/main/app/sass/components/_entry-list.scss
+++ /dev/null
@@ -1,279 +0,0 @@
-.main-content {
- margin-left: 250px;
- padding-left: 15px;
-}
-
-.full-screen .main-content {
- width: 100%;
- margin-left: 0;
-}
-
-.entryList {
- padding-top: 50px;
-}
-
-/* entry list*/
-.entrylist-header {
- border-bottom: 1px solid #eee;
-}
-
-.entrylist-header h3 {
- margin: 0;
- line-height: 40px;
-}
-
-.entrylist-header a {
- color: inherit;
-}
-
-.expanded .entry-header,
-.expanded .entry-body-content {
- padding-left: 25px;
- padding-right: 25px;
-}
-
-.expanded .entry-header {
- max-width: 650px;
-}
-
-.full-screen .expanded .entry-header {
- max-width: 100%;
-}
-
-.rtl .entry-header,
-.rtl .entry-body-content,
-.rtl.entry-name {
- direction: rtl;
-}
-
-.rtl ul,
-.rtl ol {
- padding: 0;
- margin: 0 25px 10px 0px;
-}
-
-#feed-accordion .entry {
- border-bottom: 1px solid #cccccc;
-}
-
-#feed-accordion .no-entries {
- text-align: center;
- font-weight: bold;
- margin-top: 80px;
-}
-
-#feed-accordion .entry-heading {
- background-color: #ebebeb;
-}
-
-#feed-accordion .unread .entry-heading:hover {
- background-color: #ebebeb;
-}
-
-#feed-accordion .unread .entry-heading {
- background-color: #fff;
-}
-
-#feed-accordion .current.closed .entry-heading {
- background-color: #ffc;
-}
-
-#feed-accordion .entry-heading-link {
- color: black;
- height: 32px;
- display: block;
- cursor: pointer;
- padding: 6px 0px;
-}
-
-#feed-accordion .entry-heading .feed-name {
- color: #555;
- display: block;
- overflow: hidden;
- white-space: nowrap;
- position: absolute;
- width: 145px;
- text-overflow: ellipsis;
-}
-
-#feed-accordion .entry-heading .entry-name {
- display: block;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- margin-right: 150px;
-}
-
-#feed-accordion .unread .entry-heading .entry-name {
- font-weight: bold;
-}
-
-#feed-accordion .entry-heading .shrink {
- margin-left: 150px;
-}
-
-#feed-accordion .entry-heading .entry-date {
- display: block;
- position: absolute;
- right: 45px;
-}
-
-#feed-accordion a.entry-heading-link:hover {
- text-decoration: none;
-}
-
-#feed-accordion .entry-external-link {
- position: absolute;
- right: 25px;
- margin-top: -25px;
- color: black;
-}
-
-#feed-accordion .entry-external-link:hover {
- text-decoration: none;
-}
-
-#feed-accordion .entry-body .entry-title {
- margin-top: 5px;
- margin-bottom: 10px;
- font-size: 130%;
- font-weight: bold;
-}
-
-#feed-accordion .entry-body .entry-subtitle {
- display: block;
- font-size: 14px;
- font-weight: normal;
-}
-
-#feed-accordion .entry-body-content {
- max-width: 650px;
- color: black;
- padding-bottom: 10px;
-}
-
-.full-screen #feed-accordion .entry-body-content {
- max-width: 100%;
-}
-
-#feed-accordion .entry-enclosure {
- clear: both;
- padding-top: 10px;
-}
-
-#feed-accordion .entry-media-description {
- padding-top: 10px;
-}
-
-#feed-accordion .entry-buttons {
- clear: both;
- background-color: #fafafa;
- padding: 3px 0px;
- border-top: 1px solid #ebebeb;
-}
-
-#feed-accordion .entry-buttons .checkbox.inline {
- padding-top: 0px;
- margin-left: 5px;
-}
-
-#feed-accordion .entry-buttons .keep-unread label {
- display: inline;
- font-weight: inherit;
-}
-
-#feed-accordion .share-buttons a {
- color: #333333;
- padding-left: 5px;
-}
-
-#feed-accordion .share-buttons a:hover {
- text-decoration: none;
-}
-
-#feed-accordion .tags-panel {
- margin-left: 30px;
-}
-
-#feed-accordion .tags-panel .label {
- margin-left: 5px;
-}
-
-.select2-container-multi .select2-choices .select2-search-field input {
- padding: 2px;
-}
-
-#feed-accordion .tag-input {
- margin: 0 0 0 5px;
- padding: 0;
- width: 200px;
-}
-
-#feed-accordion .entry-buttons label {
- margin-bottom: 0px;
- font-size: 12px;
-}
-
-#feed-accordion a.mark-up-to {
- color: #333333;
- position: absolute;
- right: 30px;
-}
-
-#feed-accordion a.mark-up-to:hover {
- text-decoration: none;
- cursor: pointer;
-}
-
-#feed-accordion .star {
- text-decoration: none;
- padding: 0px 5px;
-}
-
-#feed-accordion .icon-star-yellow {
- color: gold;
- text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;
-}
-
-#feed-accordion .icon-star-empty {
- color: #555;
-}
-
-#feed-accordion.expanded .entry {
- margin-bottom: 40px;
- border: 1px solid #ddd;
- box-shadow: 0 0 4px #e3e5eb;
-}
-
-#feed-accordion.expanded .current {
- border-left: 1px solid rgb(77, 144, 240);
-}
-
-#feed-accordion .current.entry-font-size-0 {
- font-size: 14px;
-}
-
-#feed-accordion .current.entry-font-size-1 {
- font-size: 15px;
-}
-
-#feed-accordion .current.entry-font-size-2 {
- font-size: 16px;
-}
-
-#feed-accordion .current.entry-font-size-3 {
- font-size: 17px;
-}
-
-#feed-accordion .current.entry-font-size-4 {
- font-size: 18px;
-}
-
-#feed-accordion .current.entry-font-size-5 {
- font-size: 19px;
-}
-
-#feed-accordion .highlight-search {
- background-color: rgba(255, 255, 140, 0.5);
- color: #333;
-}
diff --git a/commafeed-client/src/main/app/sass/components/_help.scss b/commafeed-client/src/main/app/sass/components/_help.scss
deleted file mode 100644
index 2654e45e..00000000
--- a/commafeed-client/src/main/app/sass/components/_help.scss
+++ /dev/null
@@ -1,22 +0,0 @@
-.help {
- font-size: 85%;
- line-height: 15px;
-}
-
-.help .bookmarklet-select {
- margin: 0;
- padding: 0;
- height: auto;
-}
-
-.help .about-module {
- margin-bottom: 40px;
-}
-.donate-action {
- margin-top: 20px;
-}
-
-.donate-image {
- padding-bottom: 10px;
- padding-right: 16px;
-}
diff --git a/commafeed-client/src/main/app/sass/components/_loading-bar.scss b/commafeed-client/src/main/app/sass/components/_loading-bar.scss
deleted file mode 100644
index d623b95b..00000000
--- a/commafeed-client/src/main/app/sass/components/_loading-bar.scss
+++ /dev/null
@@ -1,15 +0,0 @@
-#loading-bar .bar {
- background: #2c3e50;
- height: 101px;
- top: -100px;
- position: fixed;
-}
-
-#loading-bar .peg {
- box-shadow: 0 0 10px #2c3e50, 0 0 5px #2c3e50;
-}
-
-#loading-bar-spinner .spinner-icon {
- border-top-color: #2c3e50;
- border-left-color: #2c3e50;
-}
diff --git a/commafeed-client/src/main/app/sass/components/_subscription-list.scss b/commafeed-client/src/main/app/sass/components/_subscription-list.scss
deleted file mode 100644
index a2693659..00000000
--- a/commafeed-client/src/main/app/sass/components/_subscription-list.scss
+++ /dev/null
@@ -1,161 +0,0 @@
-/* feed search dialog */
-.feed-search-dialog .modal-body {
- overflow: hidden;
-}
-
-.feed-search-dialog .filter-input {
- width: 90%;
-}
-
-.feed-search-dialog .feed-link {
- font-size: large;
-}
-
-.feed-search-dialog a:hover {
- text-decoration: none;
-}
-
-.feed-search-dialog .focus a {
- color: black;
-}
-
-/* tree*/
-.sidebar-nav-fixed {
- margin-top: 10px;
- width: 250px;
- position: fixed;
- top: 0;
- bottom: 0;
- overflow: hidden;
-}
-
-.sidebar-nav-fixed:hover {
- overflow-y: auto;
-}
-
-.sidebar-nav-fixed .ui-resizable-e {
- width: 5px;
- right: 0;
-}
-
-.full-screen .left-menu {
- display: none;
-}
-
-.css-treeview {
- margin-top: 15px;
- margin-bottom: 30px;
- font-family: inherit;
- font-size: 13px;
- white-space: nowrap;
-}
-
-.css-treeview ul {
- list-style: none;
- margin-left: 0px;
- padding: 0;
-}
-
-.css-treeview li {
- line-height: 20px;
-}
-
-.css-treeview .fldr {
- cursor: pointer;
- display: inline-block;
- width: 14px;
- height: 14px;
- line-height: 14px;
- vertical-align: text-top;
- margin-top: 1px;
-}
-
-.css-treeview .error {
- color: red;
- font-style: italic;
-}
-
-.css-treeview label {
- overflow: hidden;
- text-overflow: ellipsis;
- display: block;
- margin: 3px 0px 3px;
-}
-
-.css-treeview label,
-.css-treeview a,
-.css-treeview label::before {
- font-family: inherit;
- font-size: 12px;
- white-space: nowrap;
-}
-
-.css-treeview .selected {
- color: #d14836;
-}
-
-.css-treeview .unread {
- font-weight: bold;
-}
-
-.css-treeview .unread-counter {
- color: #666;
- font-size: 11px;
-}
-
-.css-treeview .unread ~ .unread-counter::before {
- content: "(";
-}
-
-.css-treeview .unread ~ .unread-counter::after {
- content: ")";
-}
-
-.css-treeview a {
- cursor: pointer;
- color: black;
- display: block;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-.css-treeview a:hover {
- text-decoration: none;
-}
-
-.css-treeview li .tree-item:hover {
- background-color: #ebebeb;
- text-decoration: none;
-}
-
-.css-treeview .config {
- display: none;
-}
-
-.css-treeview .tree-item:hover .config {
- display: block;
- padding-top: 3px;
- margin-right: 5px;
- width: 16px;
- height: 16px;
-}
-
-.css-treeview .indent1 {
- padding-left: 16px;
-}
-
-.css-treeview .indent2 {
- padding-left: 32px;
-}
-
-.css-treeview .indent3 {
- padding-left: 48px;
-}
-
-.css-treeview .indent4 {
- padding-left: 64px;
-}
-
-.css-treeview .indent5 {
- padding-left: 80px;
-}
diff --git a/commafeed-client/src/main/app/sass/components/_toolbar.scss b/commafeed-client/src/main/app/sass/components/_toolbar.scss
deleted file mode 100644
index 9bc4594d..00000000
--- a/commafeed-client/src/main/app/sass/components/_toolbar.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-.toolbar {
- padding-top: 10px;
- padding-bottom: 10px;
- width: 100%;
- z-index: 10;
- position: fixed;
- background-color: #fff;
-}
-
-.toolbar .donate {
- display: inline-block;
-}
-
-.toolbar .keywords {
- width: 244px;
-}
diff --git a/commafeed-client/src/main/app/sass/components/zocial.scss b/commafeed-client/src/main/app/sass/components/zocial.scss
deleted file mode 100644
index 1583c85d..00000000
--- a/commafeed-client/src/main/app/sass/components/zocial.scss
+++ /dev/null
@@ -1,47 +0,0 @@
-@charset "UTF-8";
-
-/*!
- Zocial Butons
- http://zocial.smcllns.com
- by Sam Collins (@smcllns)
- License: http://opensource.org/licenses/mit-license.php
-
- You are free to use and modify, as long as you keep this license comment intact or link back to zocial.smcllns.com on your site.
-*/
-
-/* Reference icons from font-files
-** Base 64-encoded version recommended to resolve cross-site font-loading issues
-*/
-@font-face {
- font-family: 'zocial';
- src: url('../font/zocial-regular-webfont.eot'),
- url('../font/zocial-regular-webfont.woff'), url('../font/zocial-regular-webfont.ttf')
- format('truetype'), url('../font/zocial-regular-webfont.svg#zocialregular')
- format('svg');
- font-weight: normal;
- font-style: normal;
-}
-
-.icon-instapaper:before {
- font-style: normal;
- font-family: 'zocial';
- content: "I";
-}
-
-.icon-pocket:before {
- font-style: normal;
- font-family: 'zocial';
- content: "\00E7";
-}
-
-.icon-buffer:before {
- font-style: normal;
- font-family: 'zocial';
- content: "\00E5";
-}
-
-.icon-gmail:before {
- font-style: normal;
- font-family: 'zocial';
- content: "m";
-}
\ No newline at end of file
diff --git a/commafeed-client/src/main/app/sass/generic/_misc.scss b/commafeed-client/src/main/app/sass/generic/_misc.scss
deleted file mode 100644
index 30193e4a..00000000
--- a/commafeed-client/src/main/app/sass/generic/_misc.scss
+++ /dev/null
@@ -1,153 +0,0 @@
-a:focus {
- outline: none;
- text-decoration: none;
-}
-
-.container-full {
- width: 100%;
- margin: 0 auto;
- padding-right: 20px;
- padding-left: 20px;
-}
-
-body img {
- max-width: 100%;
- height: auto;
-}
-
-body .modal {
- display: block;
-}
-
-body .modal-backdrop {
- opacity: 0.5;
-}
-
-label {
- font-weight: inherit;
-}
-
-.pointer {
- cursor: pointer;
-}
-
-.nolink {
- color: inherit;
-}
-
-.nolink:hover {
- text-decoration: none;
- color: inherit;
-}
-
-.clear-both {
- clear: both;
-}
-
-.block {
- display: block;
-}
-
-.pre-wrap {
- white-space: pre-wrap;
-}
-
-.form-horizontal .control-group {
- margin-bottom: 10px;
-}
-
-.bidi-embed {
- unicode-bidi: embed;
-}
-
-.bs-fb ul {
- margin-bottom: 0px;
-}
-
-.horizontal-align {
- padding-top: 5px;
- line-height: 20px;
-}
-
-.welcome .container-fluid {
- margin-right: auto;
- margin-left: auto;
- max-width: 950px;
-}
-
-.welcome .header {
- margin: 20px 0 20px 0;
-}
-
-.welcome h3 {
- margin-top: 0;
-}
-
-.welcome .tagline {
- color: #b3b3b3;
- font-size: 28px;
- padding-top: 110px;
-}
-
-.welcome .preview {
- margin-top: 20px;
- margin-bottom: 20px;
-}
-
-.welcome .demo {
- font-size: 24px;
- color: #b3b3b3;
- display: block;
-}
-
-.main .spinner {
- display: inline-block;
- margin-left: 11px;
- top: -4px;
-}
-
-.icon {
- width: 14px;
- height: 14px;
- display: block;
-}
-
-.main .dropdown-menu a {
- cursor: pointer;
-}
-
-.favicon {
- width: 16px;
- height: 16px;
-}
-
-blockquote p {
- font-size: 14px;
-}
-
-.form-group {
- margin-bottom: 10px;
-}
-
-.btn,
-.btn-large,
-.btn-small,
-.btn-mini {
- border-top-left-radius: 2px;
- border-top-right-radius: 2px;
- border-bottom-left-radius: 2px;
- border-bottom-right-radius: 2px;
-}
-
-.btn-group > .btn:first-child,
-.btn-group > .btn-large:first-child {
- border-top-left-radius: 2px;
- border-bottom-left-radius: 2px;
-}
-
-.btn-group > .btn:last-child,
-.btn-group > .btn-large:last-child,
-.btn-group > .dropdown-toggle {
- border-top-right-radius: 2px;
- border-bottom-right-radius: 2px;
-}
diff --git a/commafeed-client/src/main/app/sass/generic/_scrollbar.scss b/commafeed-client/src/main/app/sass/generic/_scrollbar.scss
deleted file mode 100644
index 4aa2e44f..00000000
--- a/commafeed-client/src/main/app/sass/generic/_scrollbar.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-::-webkit-scrollbar {
- height: 8px;
- width: 8px;
-}
-
-::-webkit-scrollbar-track {
- background: rgba(0, 0, 0, 0.1);
-}
-
-::-webkit-scrollbar-track:hover {
- background-color: rgba(0, 0, 0, 0.05);
- box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.1);
-}
-
-::-webkit-scrollbar-thumb {
- background: rgba(0, 0, 0, 0.2);
-}
-
-::-webkit-scrollbar-thumb:hover {
- background: rgba(0, 0, 0, 0.5);
-}
diff --git a/commafeed-client/src/main/app/sass/mobile/_mobile.scss b/commafeed-client/src/main/app/sass/mobile/_mobile.scss
deleted file mode 100644
index 6327fd3c..00000000
--- a/commafeed-client/src/main/app/sass/mobile/_mobile.scss
+++ /dev/null
@@ -1,89 +0,0 @@
-html.mobile,
-html.tablet {
- body {
- padding-left: 0px;
- padding-right: 0px;
- }
- .container-full {
- padding-left: 5px;
- padding-right: 5px;
- }
- .row {
- margin-right: 0;
- margin-left: 0;
- }
-
- .left-menu {
- display: none !important;
- }
- .left-menu .feed-link,
- .left-menu .category-link {
- line-height: 30px;
- font-size: 105%;
- }
- .toolbar .toolbar-expand.btn-group {
- display: inline-block !important;
- }
- .main-content {
- display: block !important;
- float: none !important;
- width: 100% !important;
- margin-left: 0 !important;
- padding-left: 0;
- padding-right: 0;
- }
- #feed-accordion .entry-heading .shrink {
- margin-left: 0;
- margin-right: 0;
- }
- #feed-accordion .entry-heading .feed-name {
- width: 50%;
- }
- #feed-accordion .feed-name {
- margin-top: 22px;
- }
- #feed-accordion .entry-external-link {
- right: 15px;
- margin-top: -24px;
- }
- #feed-accordion .entry-heading-link {
- height: 52px;
- }
- #feed-accordion .entry-heading .entry-date {
- right: 40px;
- margin-top: 22px;
- }
- #feed-accordion .entry-buttons .checkbox,
- #feed-accordion .entry-buttons .form-group {
- display: inline-block;
- }
- #feed-accordion .tags-panel {
- display: block;
- margin-left: 5px;
- }
- #feed-accordion a.mark-up-to {
- right: 20px;
- margin-top: -18px;
- }
- body.left-menu-active .left-menu {
- display: block !important;
- width: 100%;
- }
- body.left-menu-active .sidebar-nav-fixed {
- width: 100%;
- overflow: auto;
- }
- body.left-menu-active .main-content {
- display: none !important;
- }
- body.right-menu-active .toolbar .actions {
- margin-top: 5px;
- margin-left: 0;
- }
- body.right-menu-active .toolbar .actions {
- display: inherit !important;
- }
- #uvTab {
- display: none;
- }
-}
diff --git a/commafeed-client/src/main/app/sass/themes/_MRACHINI.scss b/commafeed-client/src/main/app/sass/themes/_MRACHINI.scss
deleted file mode 100644
index 3cb1d970..00000000
--- a/commafeed-client/src/main/app/sass/themes/_MRACHINI.scss
+++ /dev/null
@@ -1,53 +0,0 @@
-#theme-MRACHINI {
- /*transitional hightlighting*/
- .entry-title > a.ng-binding:link,
- .entry-body-content > div.ng-binding a:link {
- -moz-transition: background-color 1s ease-in 0s;
- -webkit-transition: background-color 1s ease-in 0s;
- -o-transition: background-color 1s ease-in 0s;
- }
- .entry-title > a.ng-binding:hover,
- .entry-body-content > div.ng-binding a:hover {
- background-color: lime;
- -moz-transition: background-color 1s ease-out 0s;
- -webkit-transition: background-color 1s ease-out 0s;
- -o-transition: background-color 1s ease-out 0s;
- }
- .entry-title > a.ng-binding:active,
- .entry-body-content > div.ng-binding a:active {
- background-color: lime;
- -moz-transition: none;
- -webkit-transition: none;
- -o-transition: none;
- }
-
- /*hovered item*/
- .entry-heading:hover {
- box-shadow: inset 0 0 40px 0px lime !important;
- }
- /*hovered tree item*/
- /*.css-treeview li .tree-item:hover{box-shadow: inset 0 0 20px 0px hsla(7,63%,52%,1) !important;}*/
- .css-treeview li .tree-item:hover {
- box-shadow: inset 0 0 20px 0px lime !important;
- }
- /*highlight current selected tree item*/
- .css-treeview li .tree-item .selected {
- box-shadow: inset 0 0 20px 0px lime !important;
- }
-
- .css-treeview .indent1 {
- padding-left: 10px;
- }
- .css-treeview .indent2 {
- padding-left: 20px;
- }
- .css-treeview .indent3 {
- padding-left: 30px;
- }
- .css-treeview .indent4 {
- padding-left: 40px;
- }
- .css-treeview .indent5 {
- padding-left: 50px;
- }
-}
diff --git a/commafeed-client/src/main/app/sass/themes/_bootstrap.scss b/commafeed-client/src/main/app/sass/themes/_bootstrap.scss
deleted file mode 100644
index 90e7a62e..00000000
--- a/commafeed-client/src/main/app/sass/themes/_bootstrap.scss
+++ /dev/null
@@ -1,348 +0,0 @@
-#theme-bootstrap {
- /*!
- * Bootstrap v3.1.1 (http://getbootstrap.com)
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-
- .btn-default,
- .btn-primary,
- .btn-success,
- .btn-info,
- .btn-warning,
- .btn-danger {
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
- }
- .btn-default:active,
- .btn-primary:active,
- .btn-success:active,
- .btn-info:active,
- .btn-warning:active,
- .btn-danger:active,
- .btn-default.active,
- .btn-primary.active,
- .btn-success.active,
- .btn-info.active,
- .btn-warning.active,
- .btn-danger.active {
- -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
- }
- .btn:active,
- .btn.active {
- background-image: none;
- }
- .btn-default {
- text-shadow: 0 1px 0 #fff;
- background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
- background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #dbdbdb;
- border-color: #ccc;
- }
- .btn-default:hover,
- .btn-default:focus {
- background-color: #e0e0e0;
- background-position: 0 -15px;
- }
- .btn-default:active,
- .btn-default.active {
- background-color: #e0e0e0;
- border-color: #dbdbdb;
- }
- .btn-primary {
- background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
- background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #2b669a;
- }
- .btn-primary:hover,
- .btn-primary:focus {
- background-color: #2d6ca2;
- background-position: 0 -15px;
- }
- .btn-primary:active,
- .btn-primary.active {
- background-color: #2d6ca2;
- border-color: #2b669a;
- }
- .btn-success {
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
- background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #3e8f3e;
- }
- .btn-success:hover,
- .btn-success:focus {
- background-color: #419641;
- background-position: 0 -15px;
- }
- .btn-success:active,
- .btn-success.active {
- background-color: #419641;
- border-color: #3e8f3e;
- }
- .btn-info {
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
- background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #28a4c9;
- }
- .btn-info:hover,
- .btn-info:focus {
- background-color: #2aabd2;
- background-position: 0 -15px;
- }
- .btn-info:active,
- .btn-info.active {
- background-color: #2aabd2;
- border-color: #28a4c9;
- }
- .btn-warning {
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #e38d13;
- }
- .btn-warning:hover,
- .btn-warning:focus {
- background-color: #eb9316;
- background-position: 0 -15px;
- }
- .btn-warning:active,
- .btn-warning.active {
- background-color: #eb9316;
- border-color: #e38d13;
- }
- .btn-danger {
- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
- background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-color: #b92c28;
- }
- .btn-danger:hover,
- .btn-danger:focus {
- background-color: #c12e2a;
- background-position: 0 -15px;
- }
- .btn-danger:active,
- .btn-danger.active {
- background-color: #c12e2a;
- border-color: #b92c28;
- }
- .thumbnail,
- .img-thumbnail {
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
- }
- .dropdown-menu > li > a:hover,
- .dropdown-menu > li > a:focus {
- background-color: #e8e8e8;
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
- background-repeat: repeat-x;
- }
- .dropdown-menu > .active > a,
- .dropdown-menu > .active > a:hover,
- .dropdown-menu > .active > a:focus {
- background-color: #357ebd;
- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
- background-repeat: repeat-x;
- }
- .navbar-default {
- background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
- background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
- }
- .navbar-default .navbar-nav > .active > a {
- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
- background-repeat: repeat-x;
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
- }
- .navbar-brand,
- .navbar-nav > li > a {
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
- }
- .navbar-inverse {
- background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
- background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
- filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
- background-repeat: repeat-x;
- }
- .navbar-inverse .navbar-nav > .active > a {
- background-image: -webkit-linear-gradient(top, #222 0%, #282828 100%);
- background-image: linear-gradient(to bottom, #222 0%, #282828 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
- background-repeat: repeat-x;
- -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
- box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
- }
- .navbar-inverse .navbar-brand,
- .navbar-inverse .navbar-nav > li > a {
- text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
- }
- .navbar-static-top,
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- border-radius: 0;
- }
- .alert {
- text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
- }
- .alert-success {
- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
- background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
- background-repeat: repeat-x;
- border-color: #b2dba1;
- }
- .alert-info {
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
- background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
- background-repeat: repeat-x;
- border-color: #9acfea;
- }
- .alert-warning {
- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
- background-repeat: repeat-x;
- border-color: #f5e79e;
- }
- .alert-danger {
- background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
- background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
- background-repeat: repeat-x;
- border-color: #dca7a7;
- }
- .progress {
- background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
- background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
- background-repeat: repeat-x;
- }
- .progress-bar {
- background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
- background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
- background-repeat: repeat-x;
- }
- .progress-bar-success {
- background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
- background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
- background-repeat: repeat-x;
- }
- .progress-bar-info {
- background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
- background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
- background-repeat: repeat-x;
- }
- .progress-bar-warning {
- background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
- background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
- background-repeat: repeat-x;
- }
- .progress-bar-danger {
- background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
- background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
- background-repeat: repeat-x;
- }
- .list-group {
- border-radius: 4px;
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
- }
- .list-group-item.active,
- .list-group-item.active:hover,
- .list-group-item.active:focus {
- text-shadow: 0 -1px 0 #3071a9;
- background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
- background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
- background-repeat: repeat-x;
- border-color: #3278b3;
- }
- .panel {
- -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
- box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
- }
- .panel-default > .panel-heading {
- background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
- background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
- background-repeat: repeat-x;
- }
- .panel-primary > .panel-heading {
- background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
- background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
- background-repeat: repeat-x;
- }
- .panel-success > .panel-heading {
- background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
- background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
- background-repeat: repeat-x;
- }
- .panel-info > .panel-heading {
- background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
- background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
- background-repeat: repeat-x;
- }
- .panel-warning > .panel-heading {
- background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
- background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
- background-repeat: repeat-x;
- }
- .panel-danger > .panel-heading {
- background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
- background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
- background-repeat: repeat-x;
- }
- .well {
- background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
- background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
- background-repeat: repeat-x;
- border-color: #dcdcdc;
- -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
- box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
- }
-}
diff --git a/commafeed-client/src/main/app/sass/themes/_dark.scss b/commafeed-client/src/main/app/sass/themes/_dark.scss
deleted file mode 100644
index b6f37288..00000000
--- a/commafeed-client/src/main/app/sass/themes/_dark.scss
+++ /dev/null
@@ -1,274 +0,0 @@
-#theme-dark {
- * {
- outline: 0;
- text-decoration: none;
- }
- .btn {
- border: none;
- }
- .btn-default,
- .btn-primary,
- .btn-success,
- .btn-info,
- .btn-warning,
- .btn-danger {
- background: none;
- text-shadow: none;
- color: #424345;
- }
- .btn-default:active,
- .btn-primary:active,
- .btn-success:active,
- .btn-info:active,
- .btn-warning:active,
- .btn-danger:active,
- .btn-default.active,
- .btn-primary.active,
- .btn-success.active,
- .btn-info.active,
- .btn-warning.active,
- .btn-danger.active {
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15) 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15) 0 1px 1px rgba(0, 0, 0, 0.075);
- -ms-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15) 0 1px 1px rgba(0, 0, 0, 0.075);
- -o-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15) 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15) 0 1px 1px rgba(0, 0, 0, 0.075);
- background: #e0e0e0;
- }
- .btn-default {
- background: #c7cbcc;
- }
- .btn:hover {
- background: #e0e0e0;
- }
- .dropdown-menu {
- background: #c7cbcc;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- -ms-border-radius: 4px;
- -o-border-radius: 4px;
- border-radius: 4px;
- border: none;
- color: #424345;
- }
- .dropdown-menu a {
- color: inherit;
- }
- .dropdown-menu .divider {
- display: none;
- }
- .btn-primary:hover {
- color: #000;
- }
- .btn-primary:active {
- color: #000;
- }
- .btn-primary:active:hover {
- color: #000;
- }
- .btn-default:hover {
- color: #000;
- }
- .btn-default:active {
- color: #000;
- }
- .btn-default:active:hover {
- color: #000;
- }
- .btn {
- -webkit-transition: all 400ms linear;
- -moz-transition: all 400ms linear;
- -ms-transition: all 400ms linear;
- -o-transition: all 400ms linear;
- transition: all 400ms linear;
- }
- input[ng-model="keywords"] {
- -webkit-transition: all 400ms linear;
- -moz-transition: all 400ms linear;
- -ms-transition: all 400ms linear;
- -o-transition: all 400ms linear;
- transition: all 400ms linear;
- }
- input[ng-model="keywords"]:focus {
- background: #c7cbcc;
- }
- a[ng-click^="tab"] {
- -webkit-transition: all 390ms linear;
- -moz-transition: all 390ms linear;
- -ms-transition: all 390ms linear;
- -o-transition: all 390ms linear;
- transition: all 390ms linear;
- }
- a[ng-click^="tab"]:hover {
- color: #000;
- }
- .css-treeview li {
- -webkit-transition: all 150ms linear;
- -moz-transition: all 150ms linear;
- -ms-transition: all 150ms linear;
- -o-transition: all 150ms linear;
- transition: all 150ms linear;
- }
- #uvTab {
- -webkit-transition: all 260ms linear;
- -moz-transition: all 260ms linear;
- -ms-transition: all 260ms linear;
- -o-transition: all 260ms linear;
- transition: all 260ms linear;
- }
- body {
- background: #788587;
- color: #424345;
- }
- body a {
- color: #e0e0e0;
- }
- body h3 {
- color: #424345;
- }
- .toolbar {
- background: #788587;
- }
- .page-header {
- border: none;
- }
- .entrylist-header {
- border: none;
- }
- .entrylist-header h3,
- .entrylist-header a {
- margin: 0;
- }
- #feed-accordion .entry {
- border: none;
- }
- #feed-accordion .unread .entry-heading {
- background: #c9c9c9;
- }
- #feed-accordion .unread:nth-of-type(2n) .entry-heading {
- background: #ddd;
- }
- #feed-accordion .unread .entry-heading:hover,
- #feed-accordion .unread:nth-of-type(2n):hover {
- background: #ebebeb;
- }
- #feed-accordion .entry-heading-link {
- color: #383838;
- }
- #feed-accordion .entry-heading-link:hover {
- color: #000;
- }
- #feed-accordion .entry-body {
- background: #c7cbcc;
- padding: 15px 0 0 15px;
- }
- #feed-accordion .entry-body a:not([popup]) {
- color: #2c4967;
- }
- #feed-accordion .entry-body a:not([popup]):visited {
- color: #8d8e8e;
- }
- #feed-accordion .entry-body .entry-title {
- display: none;
- }
- #feed-accordion .entry-body img {
- -webkit-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
- -moz-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
- -ms-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
- -o-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
- }
- #feed-accordion .highlight-search {
- background: inherit;
- }
- #feed-accordion .entry-buttons {
- background: #a68589;
- margin-left: -15px;
- border: none;
- }
- #feed-accordion.expanded .entry {
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- -ms-box-shadow: none;
- -o-box-shadow: none;
- box-shadow: none;
- border: none;
- margin-bottom: 30px;
- }
- #feed-accordion.expanded .entry .entry-heading-link {
- color: #a68589;
- }
- input[ng-model="keywords"] {
- border: none;
- height: 32px;
- background: #9ba8aa;
- }
- .css-treeview .selected {
- color: #905158 !important;
- }
- .css-treeview .unread-counter {
- color: #000;
- }
- .css-treeview li .tree-item:hover {
- background: #ebebeb;
- }
- .css-treeview a {
- color: #383838;
- }
- .css-treeview a:hover {
- font-size: 1.02em;
- }
- #uvTab {
- margin-bottom: -23px;
- }
- #uvTab:hover {
- margin-bottom: 0;
- }
- /*dangerous stuff*/
- #feed-accordion.expanded .entry .entry-heading-link > .feed-name {
- float: right;
- display: block;
- position: relative;
- margin-right: 150px;
- }
- #feed-accordion.expanded .entry .entry-heading-link .entry-name {
- margin-left: 40px;
- color: #a68589;
- }
- @media only screen and (max-width: 800px) {
- #toolbar {
- display: none;
- }
- .sidebar-nav-fixed > .btn-group {
- display: none;
- }
- .entryList {
- padding-top: 10px;
- }
- #feed-accordion.expanded .entry .entry-heading-link > .feed-name {
- float: left;
- width: 50px;
- font-size: 0;
- position: initial;
- display: block;
- margin-right: 0;
- margin-right: initial;
- }
- #feed-accordion.expanded .entry .entry-heading-link > .feed-name .star {
- font-size: 14px;
- font-size: initial;
- }
- #feed-accordion.expanded .entry .entry-heading-link > .feed-name img {
- margin-top: -14px;
- }
- #feed-accordion.expanded .entry .entry-heading-link > .feed-name:after {
- content: "";
- display: block;
- clear: left;
- }
- #feed-accordion.expanded .entry .entry-heading-link .entry-name {
- margin-left: 55px;
- color: #a68589;
- }
- }
-}
diff --git a/commafeed-client/src/main/app/sass/themes/_ebraminio.scss b/commafeed-client/src/main/app/sass/themes/_ebraminio.scss
deleted file mode 100644
index 1c5feffa..00000000
--- a/commafeed-client/src/main/app/sass/themes/_ebraminio.scss
+++ /dev/null
@@ -1,21 +0,0 @@
-#theme-ebraminio {
- /* My font setting, a bit specific for Persian but is okay in other languages */
- body {
- font-family: Tahoma, "Iranian sans", "DejaVu Sans", sans-serif;
- }
- input,
- button,
- select,
- textarea {
- font-family: inherit; /* what said above */
- }
- /* Change source-codes in feeds background to white */
- pre {
- background-color: transparent;
- }
- /* 100% forever */
- .expanded .entry-header,
- #feed-accordion .entry-body-content {
- max-width: 100%;
- }
-}
diff --git a/commafeed-client/src/main/app/sass/themes/_nightsky.scss b/commafeed-client/src/main/app/sass/themes/_nightsky.scss
deleted file mode 100644
index d228b3a4..00000000
--- a/commafeed-client/src/main/app/sass/themes/_nightsky.scss
+++ /dev/null
@@ -1,134 +0,0 @@
-#theme-nightsky {
- a {
- color: #2a9fd6;
- }
-
- .nav-pills > li.active > a,
- .nav-pills > li.active > a:hover,
- .nav-pills > li.active > a:focus {
- color: #fff;
- background-color: #2a9fd6;
- }
-
- body,
- .toolbar {
- color: #c6c6c6;
- background-color: #2f2f2f;
- }
-
- .btn-default {
- color: #c6c6c6;
- background-color: #424242;
- border-color: #424242;
- }
-
- .btn-default:hover,
- .btn-default:focus,
- .btn-default.focus,
- .btn-default:active,
- .btn-default.active,
- .open > .dropdown-toggle.btn-default {
- background-color: #282828;
- border-color: #232323;
- }
-
- .css-treeview li .tree-item:hover {
- background-color: #282828;
- }
-
- .css-treeview .unread-counter {
- color: #939393;
- }
-
- .css-treeview .category-link,
- .css-treeview a {
- color: #939393;
- }
-
- .css-treeview a .unread,
- .css-treeview .category-link .unread {
- color: #c6c6c6;
- }
-
- .css-treeview .selected {
- color: #c00;
- }
-
- .entrylist-header {
- border-bottom: 1px solid #282828;
- }
-
- #feed-accordion .entry {
- border-bottom: 1px solid #282828;
- }
-
- #feed-accordion .entry-body .entry-title {
- font-weight: normal;
- }
-
- #feed-accordion .entry-heading .entry-name {
- color: #939393;
- }
-
- #feed-accordion .unread .entry-heading .entry-name {
- font-weight: normal;
- color: #c6c6c6;
- }
-
- #feed-accordion .unread .entry-heading {
- background-color: #444;
- }
-
- #feed-accordion .entry-heading {
- background-color: #2f2f2f;
- }
-
- #feed-accordion .unread .entry-heading:hover {
- background-color: #2f2f2f;
- }
-
- #feed-accordion .current.closed .entry-heading {
- background-color: #151515;
- }
-
- #feed-accordion .entry-heading-link {
- color: #c6c6c6;
- }
-
- #feed-accordion .entry-external-link {
- color: #c6c6c6;
- }
-
- #feed-accordion .icon-star-empty {
- color: #c6c6c6;
- }
-
- #feed-accordion .entry-heading .feed-name {
- color: #939393;
- }
-
- #feed-accordion .entry-body-content {
- color: #c6c6c6;
- }
-
- #feed-accordion .entry-buttons {
- background-color: #494949;
- border-top: 1px solid #282828;
- }
-
- #feed-accordion .share-buttons a {
- color: #c6c6c6;
- }
-
- #feed-accordion a.mark-up-to {
- color: #c6c6c6;
- }
-
- #loading-bar .bar {
- background: #c6c6c6;
- }
-
- #loading-bar .peg {
- box-shadow: 0 0 10px #c6c6c6, 0 0 5px #c6c6c6;
- }
-}
diff --git a/commafeed-client/src/main/app/sass/themes/_svetla.scss b/commafeed-client/src/main/app/sass/themes/_svetla.scss
deleted file mode 100644
index e8afcf84..00000000
--- a/commafeed-client/src/main/app/sass/themes/_svetla.scss
+++ /dev/null
@@ -1,377 +0,0 @@
-#theme-svetla {
- * {
- outline: 0;
- text-decoration: none;
- }
- :focus {
- outline: none !important;
- }
- ::-moz-focus-inner {
- border: 0 !important;
- }
- .btn {
- border: none;
- }
- .btn-default,
- .btn-primary,
- .btn-success,
- .btn-info,
- .btn-warning,
- .btn-danger {
- background: none;
- text-shadow: none;
- color: #788587;
- }
- .btn-default:active,
- .btn-primary:active,
- .btn-success:active,
- .btn-info:active,
- .btn-warning:active,
- .btn-danger:active,
- .btn-default.active,
- .btn-primary.active,
- .btn-success.active,
- .btn-info.active,
- .btn-warning.active,
- .btn-danger.active {
- -webkit-box-shadow: 0 -5px 5px 0 rgba(238, 232, 213, 0.2) inset, 0 5px 5px 0 rgba(238, 232, 213, 0.2) inset;
- -moz-box-shadow: 0 -5px 5px 0 rgba(238, 232, 213, 0.2) inset, 0 5px 5px 0 rgba(238, 232, 213, 0.2) inset;
- -ms-box-shadow: 0 -5px 5px 0 rgba(238, 232, 213, 0.2) inset, 0 5px 5px 0 rgba(238, 232, 213, 0.2) inset;
- -o-box-shadow: 0 -5px 5px 0 rgba(238, 232, 213, 0.2) inset, 0 5px 5px 0 rgba(238, 232, 213, 0.2) inset;
- box-shadow: 0 -5px 5px 0 rgba(238, 232, 213, 0.2) inset, 0 5px 5px 0 rgba(238, 232, 213, 0.2) inset;
- background: rgba(238, 232, 213, 0.3);
- color: #788587;
- }
- .btn-default {
- background: #eee8d5;
- }
- .btn:hover {
- background: #c4bea6;
- }
- .dropdown-menu {
- background: #c7cbcc;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- -ms-border-radius: 3px;
- -o-border-radius: 3px;
- border-radius: 3px;
- border: none;
- color: #424345;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- -ms-box-shadow: none;
- -o-box-shadow: none;
- box-shadow: none;
- }
- .dropdown-menu a {
- color: inherit;
- }
- .dropdown-menu .divider {
- display: none;
- }
- .btn-primary:hover {
- color: #000;
- }
- .btn-primary:active {
- color: #000;
- }
- .btn-primary:active:hover {
- color: #000;
- }
- .btn-default:hover {
- color: #000;
- }
- .btn-default:active {
- color: #000;
- }
- .btn-default:active:hover {
- color: #000;
- }
- .btn {
- -webkit-transition: all 400ms linear;
- -moz-transition: all 400ms linear;
- -ms-transition: all 400ms linear;
- -o-transition: all 400ms linear;
- transition: all 400ms linear;
- }
- input[ng-model="keywords"] {
- -webkit-transition: all 400ms linear;
- -moz-transition: all 400ms linear;
- -ms-transition: all 400ms linear;
- -o-transition: all 400ms linear;
- transition: all 400ms linear;
- }
- input[ng-model="keywords"]:focus {
- background: #c7cbcc;
- }
- a[ng-click^="tab"] {
- -webkit-transition: all 390ms linear;
- -moz-transition: all 390ms linear;
- -ms-transition: all 390ms linear;
- -o-transition: all 390ms linear;
- transition: all 390ms linear;
- }
- a[ng-click^="tab"]:hover {
- color: #000;
- }
- .css-treeview li {
- -webkit-transition: all 150ms linear;
- -moz-transition: all 150ms linear;
- -ms-transition: all 150ms linear;
- -o-transition: all 150ms linear;
- transition: all 150ms linear;
- }
- #uvTab {
- -webkit-transition: all 260ms linear;
- -moz-transition: all 260ms linear;
- -ms-transition: all 260ms linear;
- -o-transition: all 260ms linear;
- transition: all 260ms linear;
- }
- body {
- background: #fdf6e3;
- color: #424345;
- }
- body a {
- color: #788587;
- }
- .toolbar {
- background: #fdf6e3;
- }
- .page-header {
- border: none;
- }
- .entrylist-header {
- border: none;
- }
- .entrylist-header h3,
- .entrylist-header a {
- margin: 0;
- }
- #feed-accordion .entry-heading {
- background: #edeae6;
- background: -webkit-moz-linear-gradient(rgba(238, 232, 213, 0.7), #fdf6e3);
- background: -moz-linear-gradient(rgba(238, 232, 213, 0.7), #fdf6e3);
- background: -ms-moz-linear-gradient(rgba(238, 232, 213, 0.7), #fdf6e3);
- background: linear-gradient(rgba(238, 232, 213, 0.7), #fdf6e3);
- }
- #feed-accordion .entry-heading-link {
- color: #786b47 !important;
- font-style: italic !important;
- }
- #feed-accordion .entry {
- border: none;
- }
- #feed-accordion .unread .entry-heading {
- background: #fdf6e3;
- }
- #feed-accordion .unread .entry-heading .entry-heading-link {
- color: #404141 !important;
- font-style: normal !important;
- }
- #feed-accordion .unread:nth-of-type(2n) .entry-heading {
- background: rgba(238, 232, 213, 0.7);
- }
- #feed-accordion .entry-body {
- background: #eee8d5;
- padding: 2px 0 0 15px;
- }
- #feed-accordion .entry-body a.nolink.pointer {
- color: #424345;
- }
- #feed-accordion .entry-body a:not([popup]) {
- color: #6c6759;
- }
- #feed-accordion .entry-body a:not([popup]):visited {
- color: #8d8e8e;
- }
- #feed-accordion .entry-body .entry-title {
- font-size: 1em;
- }
- #feed-accordion .entry-body .entry-title .entry-subtitle {
- display: inline;
- }
- #feed-accordion .entry-body .entry-title .entry-subtitle [class^="entry-author"] {
- font-style: italic;
- }
- #feed-accordion .entry-body .entry-title .entry-subtitle .entry-source {
- display: none;
- }
- #feed-accordion .entry-body .entry-title a {
- color: #a7a083;
- }
- #feed-accordion .entry-body img {
- -webkit-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.1);
- -moz-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.1);
- -ms-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.1);
- -o-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.1);
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.1);
- }
- #feed-accordion .highlight-search {
- background: inherit;
- }
- #feed-accordion .entry-buttons {
- background: #a68589;
- margin-left: -15px;
- border: none;
- }
- #feed-accordion.expanded .entry {
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- -ms-box-shadow: none;
- -o-box-shadow: none;
- box-shadow: none;
- border: none;
- }
- input[ng-model="keywords"] {
- border: none;
- height: 32px;
- -webkit-box-shadow: 0 0 2px 1px #eee8d5 inset;
- -moz-box-shadow: 0 0 2px 1px #eee8d5 inset;
- -ms-box-shadow: 0 0 2px 1px #eee8d5 inset;
- -o-box-shadow: 0 0 2px 1px #eee8d5 inset;
- box-shadow: 0 0 2px 1px #eee8d5 inset;
- }
- input[ng-model="keywords"]:focus {
- background: #fff;
- }
- .css-treeview .selected {
- color: #a68589 !important;
- }
- .css-treeview .unread-counter {
- color: #93a1a1;
- }
- .css-treeview li .tree-item:hover {
- background: #ebebeb;
- }
- .css-treeview a {
- color: #93a1a1;
- }
- .css-treeview a:hover {
- font-size: 1.02em;
- }
- #uvTab {
- margin-bottom: -23px;
- }
- #uvTab:hover {
- margin-bottom: 0;
- }
- /* stuff */
- #feed-accordion .entry-external-link {
- position: absolute;
- right: auto;
- margin-left: 15px;
- color: #c4bea6;
- }
- #feed-accordion .entry .entry-heading-link > .feed-name {
- font-size: 0;
- width: 50px;
- margin-left: 35px;
- }
- #feed-accordion .entry .entry-heading-link > .feed-name .star {
- font-size: 1em;
- }
- #feed-accordion .entry .entry-heading-link .entry-name {
- margin-left: 100px;
- }
- #feed-accordion.expanded .entry .entry-heading-link > .feed-name {
- font-size: 1em;
- width: auto;
- float: right;
- display: block;
- position: relative;
- margin-right: 150px;
- }
- #feed-accordion.expanded .entry .entry-heading-link > .feed-name img {
- margin-top: 0;
- }
- #feed-accordion.expanded .entry .entry-heading-link .entry-name {
- margin-left: 40px;
- }
- #feed-accordion.expanded .entry .entry-body .entry-body-content {
- padding-left: 0;
- }
- #feed-accordion.expanded .entry .entry-body .entry-title {
- display: none;
- }
- @media only screen and (max-width: 800px) {
- #toolbar {
- display: none;
- }
- .sidebar-nav-fixed > .btn-group {
- display: none;
- }
- .entryList {
- padding-top: 10px;
- }
- #feed-accordion.expanded .entry .entry-heading-link > .feed-name {
- float: left;
- width: 50px;
- font-size: 0;
- position: initial;
- display: block;
- margin-right: 0;
- margin-right: initial;
- }
- #feed-accordion.expanded .entry .entry-heading-link > .feed-name .star {
- font-size: 14px;
- }
- #feed-accordion.expanded .entry .entry-heading-link > .feed-name img {
- margin-top: -10px;
- }
- #feed-accordion.expanded .entry .entry-heading-link > .feed-name:after {
- content: "";
- display: block;
- clear: left;
- }
- #feed-accordion.expanded .entry .entry-heading-link .entry-name {
- margin-left: 55px;
- }
- }
- #feed-accordion:not(.expanded) .current .entry-heading {
- background: #eee8d5;
- }
- #feed-accordion:not(.expanded) .current .entry-heading .entry-heading-link {
- color: #a7a083 !important;
- font-style: normal !important;
- }
- #feed-accordion:not(.expanded) .current .entry-heading .entry-heading-link .feed-name {
- width: auto !important;
- font-size: 1em !important;
- font-style: normal;
- color: #a7a083;
- }
- #feed-accordion:not(.expanded) .current .entry-heading .entry-heading-link .feed-name img {
- margin-top: 0;
- }
- #feed-accordion:not(.expanded) .current .entry-heading .entry-heading-link .entry-name {
- display: none;
- }
- #feed-accordion.expanded .current .entry-heading {
- background: #eee8d5;
- }
- #feed-accordion.expanded .current .entry-heading .entry-heading-link {
- color: #a7a083 !important;
- font-style: normal !important;
- }
- #feed-accordion.expanded .current .entry-heading .entry-heading-link .feed-name {
- font-style: inherit;
- color: inherit;
- }
- #feed-accordion.expanded .current .entry-heading .entry-heading-link .entry-name {
- color: inherit !important;
- }
- .nav-pills li.active a {
- color: #424345 !important;
- }
- blockquote {
- border-left: solid 5px #c4bea6 !important;
- }
- a[href^='http://da.feedsportal.com']
- {
- display: none;
- }
- br {
- display: none;
- }
-}
diff --git a/commafeed-client/src/main/app/sass/themes/_test.scss b/commafeed-client/src/main/app/sass/themes/_test.scss
deleted file mode 100644
index e8c21751..00000000
--- a/commafeed-client/src/main/app/sass/themes/_test.scss
+++ /dev/null
@@ -1,5 +0,0 @@
-#theme-test {
- body {
- background-color: black;
- }
-}
diff --git a/commafeed-client/src/main/app/sass/themes/_third.scss b/commafeed-client/src/main/app/sass/themes/_third.scss
deleted file mode 100644
index 05803214..00000000
--- a/commafeed-client/src/main/app/sass/themes/_third.scss
+++ /dev/null
@@ -1,260 +0,0 @@
-#theme-third {
- * {
- outline: 0;
- text-decoration: none;
- }
- .btn {
- border: none;
- }
- .btn-default,
- .btn-primary,
- .btn-success,
- .btn-info,
- .btn-warning,
- .btn-danger {
- background: none;
- text-shadow: none;
- color: #424345;
- }
- .btn-default:active,
- .btn-primary:active,
- .btn-success:active,
- .btn-info:active,
- .btn-warning:active,
- .btn-danger:active,
- .btn-default.active,
- .btn-primary.active,
- .btn-success.active,
- .btn-info.active,
- .btn-warning.active,
- .btn-danger.active {
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15) 0 1px 1px rgba(0, 0, 0, 0.075);
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15) 0 1px 1px rgba(0, 0, 0, 0.075);
- -ms-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15) 0 1px 1px rgba(0, 0, 0, 0.075);
- -o-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15) 0 1px 1px rgba(0, 0, 0, 0.075);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15) 0 1px 1px rgba(0, 0, 0, 0.075);
- background: #e0e0e0;
- }
- .btn-default {
- background: #6e797c;
- }
- .btn:hover {
- background: #e0e0e0;
- }
- .dropdown-menu {
- background: #c7cbcc;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- -ms-border-radius: 4px;
- -o-border-radius: 4px;
- border-radius: 4px;
- border: none;
- color: #424345;
- }
- .dropdown-menu a {
- color: inherit;
- }
- .dropdown-menu .divider {
- display: none;
- }
- .btn-primary:hover {
- color: #000;
- }
- .btn-primary:active {
- color: #000;
- }
- .btn-primary:active:hover {
- color: #000;
- }
- .btn-default:hover {
- color: #000;
- }
- .btn-default:active {
- color: #000;
- }
- .btn-default:active:hover {
- color: #000;
- }
- .btn {
- -webkit-transition: all 400ms linear;
- -moz-transition: all 400ms linear;
- -ms-transition: all 400ms linear;
- -o-transition: all 400ms linear;
- transition: all 400ms linear;
- }
- input[ng-model="keywords"] {
- -webkit-transition: all 400ms linear;
- -moz-transition: all 400ms linear;
- -ms-transition: all 400ms linear;
- -o-transition: all 400ms linear;
- transition: all 400ms linear;
- }
- input[ng-model="keywords"]:focus {
- background: #c7cbcc;
- }
- a[ng-click^="tab"] {
- -webkit-transition: all 390ms linear;
- -moz-transition: all 390ms linear;
- -ms-transition: all 390ms linear;
- -o-transition: all 390ms linear;
- transition: all 390ms linear;
- }
- a[ng-click^="tab"]:hover {
- color: #000;
- }
- .css-treeview li {
- -webkit-transition: all 150ms linear;
- -moz-transition: all 150ms linear;
- -ms-transition: all 150ms linear;
- -o-transition: all 150ms linear;
- transition: all 150ms linear;
- }
- #uvTab {
- -webkit-transition: all 260ms linear;
- -moz-transition: all 260ms linear;
- -ms-transition: all 260ms linear;
- -o-transition: all 260ms linear;
- transition: all 260ms linear;
- }
- #toolbar {
- -webkit-transition: all 280ms linear;
- -moz-transition: all 280ms linear;
- -ms-transition: all 280ms linear;
- -o-transition: all 280ms linear;
- transition: all 280ms linear;
- }
- body {
- background: #788587;
- color: #424345;
- }
- body a {
- color: #e0e0e0;
- }
- body h3 {
- color: #424345;
- }
- .toolbar {
- background: #788587;
- margin-top: -45px;
- }
- .toolbar:after {
- display: block;
- content: "...toolbar";
- background: rgba(0, 0, 0, 0.07);
- }
- .toolbar:hover {
- margin: 0;
- }
- .toolbar:hover:after {
- display: none;
- }
- .page-header {
- border: none;
- }
- .entrylist-header {
- border: none;
- }
- .entrylist-header h3,
- .entrylist-header a {
- margin: 0;
- }
- .entryList {
- padding-top: 18px;
- }
- #feed-accordion .entry {
- border: none;
- }
- #feed-accordion .unread .entry-heading {
- background: #c9c9c9;
- }
- #feed-accordion .unread:nth-of-type(2n) .entry-heading {
- background: #ddd;
- }
- #feed-accordion .unread .entry-heading:hover,
- #feed-accordion .unread:nth-of-type(2n):hover {
- background: #ebebeb;
- }
- #feed-accordion .entry-heading-link {
- color: #5a6069 !important;
- }
- #feed-accordion .entry-heading-link:hover {
- color: #000;
- }
- #feed-accordion .entry-body {
- background: #c7cbcc;
- padding-left: 15px;
- }
- #feed-accordion .entry-body a:not([popup]) {
- color: #a68589;
- }
- #feed-accordion .entry-body a:not([popup]):visited {
- color: #8d8e8e;
- }
- #feed-accordion .entry-body img {
- -webkit-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
- -moz-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
- -ms-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
- -o-box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
- box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.2);
- }
- #feed-accordion .highlight-search {
- background: inherit;
- }
- #feed-accordion .entry-buttons {
- background: #a68589;
- margin-left: -15px;
- border: none;
- }
- #feed-accordion.expanded .entry {
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- -ms-box-shadow: none;
- -o-box-shadow: none;
- box-shadow: none;
- border: none;
- margin-bottom: 30px;
- }
- input[ng-model="keywords"] {
- border: none;
- height: 32px;
- background: #9ba8aa;
- }
- .css-treeview .selected {
- color: #2c4967;
- text-decoration: underline;
- }
- .css-treeview .unread-counter {
- color: #222;
- }
- .css-treeview li .tree-item:hover {
- background: #ebebeb;
- }
- .css-treeview a {
- color: #5a6069;
- }
- .css-treeview a:hover {
- font-size: 1.02em;
- }
- .css-treeview a:hover img {
- -webkit-border-radius: 1px;
- -moz-border-radius: 1px;
- -ms-border-radius: 1px;
- -o-border-radius: 1px;
- border-radius: 1px;
- opacity: 1;
- }
- .css-treeview img {
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- -ms-border-radius: 4px;
- -o-border-radius: 4px;
- border-radius: 4px;
- opacity: 0.85;
- }
- #uvTab {
- margin-bottom: -23px;
- }
- #uvTab:hover {
- margin-bottom: 0;
- }
-}
diff --git a/commafeed-client/src/main/app/templates/_category.html b/commafeed-client/src/main/app/templates/_category.html
deleted file mode 100644
index 0e849fcb..00000000
--- a/commafeed-client/src/main/app/templates/_category.html
+++ /dev/null
@@ -1,66 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{categoryLabel(node)}}
- {{categoryCountLabel(node)}}
-
-
-
-
-
diff --git a/commafeed-client/src/main/app/templates/_feedsearch.html b/commafeed-client/src/main/app/templates/_feedsearch.html
deleted file mode 100644
index da9bafab..00000000
--- a/commafeed-client/src/main/app/templates/_feedsearch.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
diff --git a/commafeed-client/src/main/app/templates/_footer.html b/commafeed-client/src/main/app/templates/_footer.html
deleted file mode 100644
index 7130dd40..00000000
--- a/commafeed-client/src/main/app/templates/_footer.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/commafeed-client/src/main/app/templates/_metrics.gauge.html b/commafeed-client/src/main/app/templates/_metrics.gauge.html
deleted file mode 100644
index f9abfc12..00000000
--- a/commafeed-client/src/main/app/templates/_metrics.gauge.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
- {{label}}
- {{metric.value}}
-
diff --git a/commafeed-client/src/main/app/templates/_metrics.meter.html b/commafeed-client/src/main/app/templates/_metrics.meter.html
deleted file mode 100644
index c2cf9016..00000000
--- a/commafeed-client/src/main/app/templates/_metrics.meter.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
{{label}}
-
- - Mean
- - {{metric.mean_rate | number:2}}
-
- - 1/5/15 min
- - {{metric.m1_rate | number:2}} {{metric.m5_rate | number:2}} {{metric.m15_rate | number:2}}
-
- - Total
- - {{metric.count}}
-
-
diff --git a/commafeed-client/src/main/app/templates/_metrics.timer.html b/commafeed-client/src/main/app/templates/_metrics.timer.html
deleted file mode 100644
index d77439d3..00000000
--- a/commafeed-client/src/main/app/templates/_metrics.timer.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
{{label}}
-
- - Mean
- - {{metric.mean_rate | number:2}}
-
- - 1/5/15 min
- - {{metric.m1_rate | number:2}} {{metric.m5_rate | number:2}} {{metric.m15_rate | number:2}}
-
- - Total
- - {{metric.count}}
-
- - min/max/mean (ms)
- - {{metric.min/1000000 | number:0}} {{metric.max/1000000 | number:0}} {{metric.mean/1000000 | number:0}}
-
-
diff --git a/commafeed-client/src/main/app/templates/_shortcuts.html b/commafeed-client/src/main/app/templates/_shortcuts.html
deleted file mode 100644
index b94158d5..00000000
--- a/commafeed-client/src/main/app/templates/_shortcuts.html
+++ /dev/null
@@ -1,73 +0,0 @@
-
- - r
- - {{ 'about.shortcuts.refresh' | translate }}
-
- - j
- - {{ 'about.shortcuts.open_next_entry' | translate }}
-
- - k
- - {{ 'about.shortcuts.open_previous_entry' | translate }}
-
- - {{ 'about.shortcuts.spacebar' | translate }}
- - {{ 'about.shortcuts.move_page_down_up' | translate }}
-
- - n
- - {{ 'about.shortcuts.focus_next_entry' | translate }}
-
- - p
- - {{ 'about.shortcuts.focus_previous_entry' | translate }}
-
- - shift+j,shift+n
- - {{ 'about.shortcuts.open_next_feed' | translate }}
-
- - shift+k,shift+p
- - {{ 'about.shortcuts.open_previous_feed' | translate }}
-
- - o, enter
- - {{ 'about.shortcuts.open_close_current_entry' | translate }}
-
- - v
- - {{ 'about.shortcuts.open_current_entry_in_new_window' | translate }}
-
- - b
- - {{ 'about.shortcuts.open_current_entry_in_new_window_background' | translate }}
-
- - s
- - {{ 'about.shortcuts.star_unstar' | translate }}
-
- - m
- - {{ 'about.shortcuts.mark_current_entry' | translate }}
-
- - shift+a
- - {{ 'about.shortcuts.mark_all_as_read' | translate }}
-
- - {{ 'about.shortcuts.mouse_middleclick' | translate }}
- - {{ 'about.shortcuts.open_in_new_tab_mark_as_read' | translate }}
-
- - f
- - {{ 'about.shortcuts.fullscreen' | translate }}
-
- - +,-
- - {{ 'about.shortcuts.font_size' | translate }}
-
- -
- g
-
- a
-
- - {{ 'about.shortcuts.go_to_all' | translate }}
-
- -
- g
-
- s
-
- - {{ 'about.shortcuts.go_to_starred' | translate }}
-
- -
- g
-
- u
-
- - {{ 'about.shortcuts.feed_search' | translate }}
-
diff --git a/commafeed-client/src/main/app/templates/_tags.html b/commafeed-client/src/main/app/templates/_tags.html
deleted file mode 100644
index 8c993b36..00000000
--- a/commafeed-client/src/main/app/templates/_tags.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
- {{ 'global.tags' | translate }}
-
-
- {{tag}}
-
-
-
-
-
diff --git a/commafeed-client/src/main/app/templates/_toolbar.html b/commafeed-client/src/main/app/templates/_toolbar.html
deleted file mode 100644
index 8f670109..00000000
--- a/commafeed-client/src/main/app/templates/_toolbar.html
+++ /dev/null
@@ -1,169 +0,0 @@
-
diff --git a/commafeed-client/src/main/app/templates/_tree.html b/commafeed-client/src/main/app/templates/_tree.html
deleted file mode 100644
index c583d07a..00000000
--- a/commafeed-client/src/main/app/templates/_tree.html
+++ /dev/null
@@ -1,86 +0,0 @@
-
diff --git a/commafeed-client/src/main/app/templates/admin.html b/commafeed-client/src/main/app/templates/admin.html
deleted file mode 100644
index b6db5921..00000000
--- a/commafeed-client/src/main/app/templates/admin.html
+++ /dev/null
@@ -1,3 +0,0 @@
-
diff --git a/commafeed-client/src/main/app/templates/admin.metrics.html b/commafeed-client/src/main/app/templates/admin.metrics.html
deleted file mode 100644
index a4c44e8d..00000000
--- a/commafeed-client/src/main/app/templates/admin.metrics.html
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/commafeed-client/src/main/app/templates/admin.settings.html b/commafeed-client/src/main/app/templates/admin.settings.html
deleted file mode 100644
index 3bba5b46..00000000
--- a/commafeed-client/src/main/app/templates/admin.settings.html
+++ /dev/null
@@ -1,183 +0,0 @@
-
diff --git a/commafeed-client/src/main/app/templates/admin.useradd.html b/commafeed-client/src/main/app/templates/admin.useradd.html
deleted file mode 100644
index 9f3cfb0c..00000000
--- a/commafeed-client/src/main/app/templates/admin.useradd.html
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
{{alert.msg}}
-
-
-
diff --git a/commafeed-client/src/main/app/templates/admin.useredit.html b/commafeed-client/src/main/app/templates/admin.useredit.html
deleted file mode 100644
index 08fa4acd..00000000
--- a/commafeed-client/src/main/app/templates/admin.useredit.html
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
-
-
{{alert.msg}}
-
-
-
diff --git a/commafeed-client/src/main/app/templates/admin.userlist.html b/commafeed-client/src/main/app/templates/admin.userlist.html
deleted file mode 100644
index 6bb7577f..00000000
--- a/commafeed-client/src/main/app/templates/admin.userlist.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/commafeed-client/src/main/app/templates/feeds.category_details.html b/commafeed-client/src/main/app/templates/feeds.category_details.html
deleted file mode 100644
index ecac7c0a..00000000
--- a/commafeed-client/src/main/app/templates/feeds.category_details.html
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
diff --git a/commafeed-client/src/main/app/templates/feeds.feed_details.html b/commafeed-client/src/main/app/templates/feeds.feed_details.html
deleted file mode 100644
index faaaf117..00000000
--- a/commafeed-client/src/main/app/templates/feeds.feed_details.html
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-
diff --git a/commafeed-client/src/main/app/templates/feeds.help.html b/commafeed-client/src/main/app/templates/feeds.help.html
deleted file mode 100644
index a2bf2559..00000000
--- a/commafeed-client/src/main/app/templates/feeds.help.html
+++ /dev/null
@@ -1,163 +0,0 @@
-
-
-
-
-
- {{ 'toolbar.about' | translate }}
-
-
- {{ 'about.line1_prefix' | translate }}
- GitHub
- {{ 'about.line1_suffix' | translate }}
-
-
- {{ 'about.line2_prefix' | translate }}
- GitHub
- {{ 'about.line2_suffix' | translate }}
-
- {{ 'about.version' | translate }} {{infos.version}} ({{infos.gitCommit}})
-
-
-
-
-
- {{ 'toolbar.donate' | translate }}
-
-
{{ 'about.line3' | translate }}
-
- {{ 'about.line4' | translate }}
-
1dymfUxqCWpyD7a6rQSqNy4rLVDBsAr5e
-
-
-
-
-
-
-
-
-
-
-
- {{ 'about.keyboard_shortcuts' | translate }}
-
-
-
-
-
-
-
- {{ 'about.announcements' | translate }}
-
-
-
-
-
-
diff --git a/commafeed-client/src/main/app/templates/feeds.html b/commafeed-client/src/main/app/templates/feeds.html
deleted file mode 100644
index a4d509d6..00000000
--- a/commafeed-client/src/main/app/templates/feeds.html
+++ /dev/null
@@ -1,13 +0,0 @@
-
diff --git a/commafeed-client/src/main/app/templates/feeds.import.html b/commafeed-client/src/main/app/templates/feeds.import.html
deleted file mode 100644
index 7b38b0aa..00000000
--- a/commafeed-client/src/main/app/templates/feeds.import.html
+++ /dev/null
@@ -1,19 +0,0 @@
-
diff --git a/commafeed-client/src/main/app/templates/feeds.new_category.html b/commafeed-client/src/main/app/templates/feeds.new_category.html
deleted file mode 100644
index 90cb4d41..00000000
--- a/commafeed-client/src/main/app/templates/feeds.new_category.html
+++ /dev/null
@@ -1,33 +0,0 @@
-
diff --git a/commafeed-client/src/main/app/templates/feeds.subscribe.html b/commafeed-client/src/main/app/templates/feeds.subscribe.html
deleted file mode 100644
index 9cb86a71..00000000
--- a/commafeed-client/src/main/app/templates/feeds.subscribe.html
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
-
{{stacktrace}}
-
diff --git a/commafeed-client/src/main/app/templates/feeds.tag_details.html b/commafeed-client/src/main/app/templates/feeds.tag_details.html
deleted file mode 100644
index 893eb120..00000000
--- a/commafeed-client/src/main/app/templates/feeds.tag_details.html
+++ /dev/null
@@ -1,27 +0,0 @@
-
diff --git a/commafeed-client/src/main/app/templates/feeds.view.html b/commafeed-client/src/main/app/templates/feeds.view.html
deleted file mode 100644
index 6469357c..00000000
--- a/commafeed-client/src/main/app/templates/feeds.view.html
+++ /dev/null
@@ -1,231 +0,0 @@
-
-
-
-
-
{{ 'view.error_while_loading_feed' | translate }} : {{ message }}
-
-
-
-
-
-
-
-
-
-
-
![]()
-
{{entry.mediaDescription}}
-
-
-
-
-
-
- {{ 'view.no_search_results' | translate }}
- "{{name}}" {{ 'view.no_unread_items' | translate }}
-
-
-
-
-
-
diff --git a/commafeed-client/src/main/app/templates/profile.html b/commafeed-client/src/main/app/templates/profile.html
deleted file mode 100644
index 690c3f25..00000000
--- a/commafeed-client/src/main/app/templates/profile.html
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
diff --git a/commafeed-client/src/main/app/templates/settings.html b/commafeed-client/src/main/app/templates/settings.html
deleted file mode 100644
index a463ff68..00000000
--- a/commafeed-client/src/main/app/templates/settings.html
+++ /dev/null
@@ -1,137 +0,0 @@
-
-
-
-
diff --git a/commafeed-client/src/main/app/templates/welcome.html b/commafeed-client/src/main/app/templates/welcome.html
deleted file mode 100644
index 7b82ea4a..00000000
--- a/commafeed-client/src/main/app/templates/welcome.html
+++ /dev/null
@@ -1,115 +0,0 @@
-
-
-
-
-
-
Login
-
{{message}}
-
-
-
-
-
-
-
-
-
-
diff --git a/commafeed-client/src/pages/LoadingPage.tsx b/commafeed-client/src/pages/LoadingPage.tsx
new file mode 100644
index 00000000..4e7cded0
--- /dev/null
+++ b/commafeed-client/src/pages/LoadingPage.tsx
@@ -0,0 +1,32 @@
+import { Center, Container, RingProgress, Text, Title, useMantineTheme } from "@mantine/core"
+import { Logo } from "components/Logo"
+import { useAppLoading } from "hooks/useAppLoading"
+
+export function LoadingPage() {
+ const theme = useMantineTheme()
+ const { loadingPercentage, loadingStepLabel } = useAppLoading()
+
+ return (
+
+
+
+
+ CommaFeed
+
+
+
+
+
+ {loadingPercentage}%
+
+ }
+ />
+
+
+ {loadingStepLabel && {loadingStepLabel}}
+
+ )
+}
diff --git a/commafeed-client/src/pages/admin/AdminUsersPage.tsx b/commafeed-client/src/pages/admin/AdminUsersPage.tsx
new file mode 100644
index 00000000..20ca5ca0
--- /dev/null
+++ b/commafeed-client/src/pages/admin/AdminUsersPage.tsx
@@ -0,0 +1,149 @@
+import { t, Trans } from "@lingui/macro"
+import { ActionIcon, Box, Code, Container, Group, Table, Text, Title, useMantineTheme } from "@mantine/core"
+import { closeAllModals, openConfirmModal, openModal } from "@mantine/modals"
+import { client, errorToStrings } from "app/client"
+import { UserModel } from "app/types"
+import { UserEdit } from "components/admin/UserEdit"
+import { Alert } from "components/Alert"
+import { Loader } from "components/Loader"
+import { RelativeDate } from "components/RelativeDate"
+import { useAsync } from "react-async-hook"
+import { TbCheck, TbPencil, TbPlus, TbTrash, TbX } from "react-icons/tb"
+import useMutation from "use-mutation"
+
+function BooleanIcon({ value }: { value: boolean }) {
+ return value ? :
+}
+
+export function AdminUsersPage() {
+ const theme = useMantineTheme()
+ const query = useAsync(() => client.admin.getAllUsers(), [])
+ const users = query.result?.data.sort((a, b) => a.id - b.id)
+
+ const [deleteUser, deleteUserResult] = useMutation(client.admin.deleteUser, {
+ onSuccess: () => {
+ query.execute()
+ closeAllModals()
+ },
+ })
+ const errors = errorToStrings(deleteUserResult.error)
+
+ const openUserEditModal = (title: string, user?: UserModel) => {
+ openModal({
+ title,
+ children: (
+ {
+ query.execute()
+ closeAllModals()
+ }}
+ />
+ ),
+ })
+ }
+
+ const openUserDeleteModal = (user: UserModel) => {
+ const userName = user.name
+ openConfirmModal({
+ title: t`Delete user`,
+ children: (
+
+
+ Are you sure you want to delete user {userName} ?
+
+
+ ),
+ labels: { confirm: t`Confirm`, cancel: t`Cancel` },
+ confirmProps: { color: "red" },
+ onConfirm: () => deleteUser({ id: user.id }),
+ })
+ }
+
+ if (!users) return
+ return (
+
+
+
+ Manage users
+ openUserEditModal(t`Add user`)}>
+
+
+
+
+
+ {errors.length > 0 && (
+
+
+
+ )}
+
+
+
+
+ |
+ Id
+ |
+
+ Name
+ |
+
+ E-mail
+ |
+
+ Date created
+ |
+
+ Last login date
+ |
+
+ Admin
+ |
+
+ Enabled
+ |
+
+ Actions
+ |
+
+
+
+ {users?.map(u => (
+
+ | {u.id} |
+ {u.name} |
+ {u.email} |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ |
+
+
+ openUserEditModal(t`Edit user`, u)}>
+
+
+ openUserDeleteModal(u)}
+ loading={deleteUserResult.status === "running"}
+ >
+
+
+
+ |
+
+ ))}
+
+
+
+ )
+}
diff --git a/commafeed-client/src/pages/app/AddPage.tsx b/commafeed-client/src/pages/app/AddPage.tsx
new file mode 100644
index 00000000..065cb71d
--- /dev/null
+++ b/commafeed-client/src/pages/app/AddPage.tsx
@@ -0,0 +1,38 @@
+import { Trans } from "@lingui/macro"
+import { Container, Tabs } from "@mantine/core"
+import { AddCategory } from "components/content/add/AddCategory"
+import { ImportOpml } from "components/content/add/ImportOpml"
+import { Subscribe } from "components/content/add/Subscribe"
+import { TbFileImport, TbFolderPlus, TbRss } from "react-icons/tb"
+
+export function AddPage() {
+ return (
+
+
+
+ }>
+ Subscribe
+
+ }>
+ Add category
+
+ }>
+ OPML
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/commafeed-client/src/pages/app/CategoryDetailsPage.tsx b/commafeed-client/src/pages/app/CategoryDetailsPage.tsx
new file mode 100644
index 00000000..80f4eaf1
--- /dev/null
+++ b/commafeed-client/src/pages/app/CategoryDetailsPage.tsx
@@ -0,0 +1,125 @@
+import { t, Trans } from "@lingui/macro"
+import { Anchor, Box, Button, Code, Container, Divider, Group, Input, NumberInput, Stack, Text, TextInput, Title } from "@mantine/core"
+import { useForm } from "@mantine/form"
+import { openConfirmModal } from "@mantine/modals"
+import { client, errorToStrings } from "app/client"
+import { Constants } from "app/constants"
+import { redirectToRootCategory, redirectToSelectedSource } from "app/slices/redirect"
+import { reloadTree } from "app/slices/tree"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { CategoryModificationRequest } from "app/types"
+import { flattenCategoryTree } from "app/utils"
+import { Alert } from "components/Alert"
+import { CategorySelect } from "components/content/add/CategorySelect"
+import { Loader } from "components/Loader"
+import { useEffect } from "react"
+import { useAsync } from "react-async-hook"
+import { TbDeviceFloppy, TbTrash } from "react-icons/tb"
+import { useParams } from "react-router-dom"
+import useMutation from "use-mutation"
+
+export function CategoryDetailsPage() {
+ const { id = Constants.categoryIds.all } = useParams()
+
+ const apiKey = useAppSelector(state => state.user.profile?.apiKey)
+ const dispatch = useAppDispatch()
+ const query = useAsync(() => client.category.getRoot(), [])
+ const category = query.result && flattenCategoryTree(query.result.data).find(c => c.id === id)
+
+ const form = useForm()
+ const { setValues } = form
+
+ const [modify, modifyResult] = useMutation(client.category.modify, {
+ onSuccess: () => {
+ dispatch(reloadTree())
+ dispatch(redirectToSelectedSource())
+ },
+ })
+ const [deleteCategory, deleteCategoryResult] = useMutation(client.category.delete, {
+ onSuccess: () => {
+ dispatch(reloadTree())
+ dispatch(redirectToRootCategory())
+ },
+ })
+ const errors = [...errorToStrings(modifyResult.error), ...errorToStrings(deleteCategoryResult.error)]
+
+ const openDeleteCategoryModal = () => {
+ const categoryName = category?.name
+ return openConfirmModal({
+ title: t`Delete Category`,
+ children: (
+
+
+ Are you sure you want to delete category {categoryName}?
+
+
+ ),
+ labels: { confirm: t`Confirm`, cancel: t`Cancel` },
+ confirmProps: { color: "red" },
+ onConfirm: () => deleteCategory({ id: +id }),
+ })
+ }
+
+ useEffect(() => {
+ if (!category) return
+ setValues({
+ id: +category.id,
+ name: category.name,
+ parentId: category.parentId,
+ position: category.position,
+ })
+ }, [setValues, category])
+
+ if (!category) return
+ return (
+
+ {errors.length > 0 && (
+
+
+
+ )}
+
+
+
+ )
+}
diff --git a/commafeed-client/src/pages/app/FeedDetailsPage.tsx b/commafeed-client/src/pages/app/FeedDetailsPage.tsx
new file mode 100644
index 00000000..77549055
--- /dev/null
+++ b/commafeed-client/src/pages/app/FeedDetailsPage.tsx
@@ -0,0 +1,179 @@
+import { t, Trans } from "@lingui/macro"
+import { Anchor, Box, Button, Code, Container, Divider, Group, Input, NumberInput, Stack, Text, TextInput, Title } from "@mantine/core"
+import { useForm } from "@mantine/form"
+import { openConfirmModal } from "@mantine/modals"
+import { client, errorsToStrings } from "app/client"
+import { redirectToRootCategory, redirectToSelectedSource } from "app/slices/redirect"
+import { reloadTree } from "app/slices/tree"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { FeedModificationRequest } from "app/types"
+import { Alert } from "components/Alert"
+import { CategorySelect } from "components/content/add/CategorySelect"
+import { Loader } from "components/Loader"
+import { RelativeDate } from "components/RelativeDate"
+import { useEffect } from "react"
+import { useAsync } from "react-async-hook"
+import { TbDeviceFloppy, TbTrash } from "react-icons/tb"
+import { useParams } from "react-router-dom"
+import useMutation from "use-mutation"
+
+function FilteringExpressionDescription() {
+ const example = url.contains('youtube') or (author eq 'athou' and title.contains('github')
+ return (
+
+
+
+ If not empty, an expression evaluating to 'true' or 'false'. If false, new entries for this feed will be marked as read
+ automatically.
+
+
+
+
+ Available variables are 'title', 'content', 'url' 'author' and 'categories' and their content is converted to lower case
+ to ease string comparison.
+
+
+
+ Example: {example}.
+
+
+
+ Complete available syntax is available
+
+ here
+
+ .
+
+
+
+ )
+}
+export function FeedDetailsPage() {
+ const { id } = useParams()
+ if (!id) throw Error("id required")
+
+ const apiKey = useAppSelector(state => state.user.profile?.apiKey)
+ const dispatch = useAppDispatch()
+ const query = useAsync(() => client.feed.get(id), [id])
+ const feed = query.result?.data
+
+ const form = useForm()
+ const { setValues } = form
+
+ const [modify, modifyResult] = useMutation(client.feed.modify, {
+ onSuccess: () => {
+ dispatch(reloadTree())
+ dispatch(redirectToSelectedSource())
+ },
+ })
+ const [unsubscribe, unsubscribeResult] = useMutation(client.feed.unsubscribe, {
+ onSuccess: () => {
+ dispatch(reloadTree())
+ dispatch(redirectToRootCategory())
+ },
+ })
+ const errors = errorsToStrings([modifyResult.error, unsubscribeResult.error])
+
+ const openUnsubscribeModal = () => {
+ const feedName = feed?.name
+ return openConfirmModal({
+ title: t`Unsubscribe`,
+ children: (
+
+
+ Are you sure you want to unsubscribe from {feedName}?
+
+
+ ),
+ labels: { confirm: t`Confirm`, cancel: t`Cancel` },
+ confirmProps: { color: "red" },
+ onConfirm: () => unsubscribe({ id: +id }),
+ })
+ }
+
+ useEffect(() => {
+ if (!feed) return
+ setValues(feed)
+ }, [setValues, feed])
+
+ if (!feed) return
+ return (
+
+ {errors.length > 0 && (
+
+
+
+ )}
+
+
+
+ )
+}
diff --git a/commafeed-client/src/pages/app/FeedEntriesPage.tsx b/commafeed-client/src/pages/app/FeedEntriesPage.tsx
new file mode 100644
index 00000000..9cff7114
--- /dev/null
+++ b/commafeed-client/src/pages/app/FeedEntriesPage.tsx
@@ -0,0 +1,84 @@
+import { t, Trans } from "@lingui/macro"
+import { ActionIcon, Anchor, Box, Center, Divider, Group, Title, useMantineTheme } from "@mantine/core"
+import { useViewportSize } from "@mantine/hooks"
+import { Constants } from "app/constants"
+import { EntrySourceType, loadEntries } from "app/slices/entries"
+import { redirectToCategoryDetails, redirectToFeedDetails } from "app/slices/redirect"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { flattenCategoryTree } from "app/utils"
+import { FeedEntries } from "components/content/FeedEntries"
+import { useEffect } from "react"
+import { TbEdit } from "react-icons/tb"
+import { useLocation, useParams } from "react-router-dom"
+
+function NoSubscriptionHelp() {
+ return (
+
+
+
+ You don't have any subscriptions yet. Why not try adding one by clicking on the + sign at the top of the page?
+
+
+
+ )
+}
+
+interface FeedEntriesPageProps {
+ sourceType: EntrySourceType
+}
+
+export function FeedEntriesPage(props: FeedEntriesPageProps) {
+ const location = useLocation()
+ const { id = Constants.categoryIds.all } = useParams()
+ const viewport = useViewportSize()
+ const theme = useMantineTheme()
+ const rootCategory = useAppSelector(state => state.tree.rootCategory)
+ const sourceLabel = useAppSelector(state => state.entries.sourceLabel)
+ const sourceWebsiteUrl = useAppSelector(state => state.entries.sourceWebsiteUrl)
+ const hasMore = useAppSelector(state => state.entries.hasMore)
+ const readType = useAppSelector(state => state.user.settings?.readingMode)
+ const order = useAppSelector(state => state.user.settings?.readingOrder)
+ const dispatch = useAppDispatch()
+
+ const titleClicked = () => {
+ if (props.sourceType === "category") dispatch(redirectToCategoryDetails(id))
+ else dispatch(redirectToFeedDetails(id))
+ }
+
+ useEffect(() => {
+ if (!readType || !order) return
+ dispatch(
+ loadEntries({
+ sourceType: props.sourceType,
+ req: { id, readType, order },
+ })
+ )
+ }, [dispatch, props.sourceType, id, readType, order, location.state])
+
+ const hideEditButton = props.sourceType === "category" && id === Constants.categoryIds.all
+
+ const noSubscriptions = rootCategory && flattenCategoryTree(rootCategory).every(c => c.feeds.length === 0)
+ if (noSubscriptions) return
+ return (
+ // add some room at the bottom of the page in order to be able to scroll the current entry at the top of the page when expanding
+
+
+ {sourceWebsiteUrl && (
+
+ {sourceLabel}
+
+ )}
+ {!sourceWebsiteUrl && {sourceLabel}}
+ {sourceLabel && !hideEditButton && (
+
+
+
+ )}
+
+
+
+
+ {!hasMore && }
+
+ )
+}
diff --git a/commafeed-client/src/pages/app/Layout.tsx b/commafeed-client/src/pages/app/Layout.tsx
new file mode 100644
index 00000000..ed59658d
--- /dev/null
+++ b/commafeed-client/src/pages/app/Layout.tsx
@@ -0,0 +1,178 @@
+import {
+ ActionIcon,
+ Anchor,
+ AppShell,
+ Box,
+ Burger,
+ Center,
+ createStyles,
+ DEFAULT_THEME,
+ Group,
+ Header,
+ Navbar,
+ ScrollArea,
+ Title,
+ useMantineTheme,
+} from "@mantine/core"
+import { useViewportSize } from "@mantine/hooks"
+import { Constants } from "app/constants"
+import { redirectToAdd, redirectToRootCategory } from "app/slices/redirect"
+import { reloadTree, setMobileMenuOpen } from "app/slices/tree"
+import { reloadProfile, reloadSettings } from "app/slices/user"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { Logo } from "components/Logo"
+import { OnDesktop } from "components/responsive/OnDesktop"
+import { OnMobile } from "components/responsive/OnMobile"
+import { useAppLoading } from "hooks/useAppLoading"
+import { LoadingPage } from "pages/LoadingPage"
+import { ReactNode, useEffect } from "react"
+import { TbPlus } from "react-icons/tb"
+import { Outlet } from "react-router-dom"
+
+interface LayoutProps {
+ sidebar: ReactNode
+ header: ReactNode
+}
+
+const sidebarPadding = DEFAULT_THEME.spacing.xs
+const sidebarRightBorderWidth = 1
+
+const useStyles = createStyles(theme => ({
+ sidebarContent: {
+ maxWidth: Constants.layout.sidebarWidth - sidebarPadding * 2 - sidebarRightBorderWidth,
+ [theme.fn.smallerThan(Constants.layout.mobileBreakpoint)]: {
+ maxWidth: `calc(100vw - ${sidebarPadding * 2 + sidebarRightBorderWidth}px)`,
+ },
+ },
+ mainContentWrapper: {
+ paddingTop: Constants.layout.headerHeight,
+ paddingLeft: Constants.layout.sidebarWidth,
+ paddingRight: 0,
+ paddingBottom: 0,
+ [theme.fn.smallerThan(Constants.layout.mobileBreakpoint)]: {
+ paddingLeft: 0,
+ },
+ },
+ mainContent: {
+ maxWidth: `calc(100vw - ${Constants.layout.sidebarWidth}px)`,
+ padding: theme.spacing.md,
+ [theme.fn.smallerThan(Constants.layout.mobileBreakpoint)]: {
+ maxWidth: "100vw",
+ padding: "6px",
+ },
+ },
+}))
+
+function LogoAndTitle() {
+ const dispatch = useAppDispatch()
+ return (
+ dispatch(redirectToRootCategory())} variant="text">
+
+
+
+ CommaFeed
+
+
+
+ )
+}
+
+export default function Layout({ sidebar, header }: LayoutProps) {
+ const { classes } = useStyles()
+ const theme = useMantineTheme()
+ const viewport = useViewportSize()
+ const { loading } = useAppLoading()
+ const mobileMenuOpen = useAppSelector(state => state.tree.mobileMenuOpen)
+ const dispatch = useAppDispatch()
+
+ useEffect(() => {
+ dispatch(reloadSettings())
+ dispatch(reloadProfile())
+ dispatch(reloadTree())
+
+ // reload tree periodically
+ const id = setInterval(() => dispatch(reloadTree()), 30000)
+ return () => clearInterval(id)
+ }, [dispatch])
+
+ const burger = (
+ dispatch(setMobileMenuOpen(!mobileMenuOpen))}
+ size="sm"
+ />
+ )
+
+ if (loading) return
+ return (
+
+
+ {sidebar}
+
+
+ }
+ header={
+
+
+ {mobileMenuOpen && (
+
+ {burger}
+
+
+
+
+ dispatch(redirectToAdd())}>
+
+
+
+
+ )}
+ {!mobileMenuOpen && (
+
+ {burger}
+ {header}
+
+ )}
+
+
+
+
+
+
+
+
+ dispatch(redirectToAdd())}>
+
+
+
+
+ {header}
+
+
+
+ }
+ >
+ {
+ if (ref) ref.id = Constants.dom.mainScrollAreaId
+ }}
+ >
+
+
+
+
+
+ )
+}
diff --git a/commafeed-client/src/pages/app/SettingsPage.tsx b/commafeed-client/src/pages/app/SettingsPage.tsx
new file mode 100644
index 00000000..fc4fe889
--- /dev/null
+++ b/commafeed-client/src/pages/app/SettingsPage.tsx
@@ -0,0 +1,30 @@
+import { Trans } from "@lingui/macro"
+import { Container, Tabs } from "@mantine/core"
+import { DisplaySettings } from "components/settings/DisplaySettings"
+import { ProfileSettings } from "components/settings/ProfileSettings"
+import { TbPhoto, TbUser } from "react-icons/tb"
+
+export function SettingsPage() {
+ return (
+
+
+
+ }>
+ Display
+
+ }>
+ Profile
+
+
+
+
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/commafeed-client/src/pages/auth/LoginPage.tsx b/commafeed-client/src/pages/auth/LoginPage.tsx
new file mode 100644
index 00000000..766c65a8
--- /dev/null
+++ b/commafeed-client/src/pages/auth/LoginPage.tsx
@@ -0,0 +1,91 @@
+import { t, Trans } from "@lingui/macro"
+import { Anchor, Box, Button, Center, Container, Group, Paper, PasswordInput, Stack, TextInput, Title } from "@mantine/core"
+import { useForm } from "@mantine/form"
+import { client, errorToStrings } from "app/client"
+import { redirectToRootCategory } from "app/slices/redirect"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { LoginRequest } from "app/types"
+import { Alert } from "components/Alert"
+import { Logo } from "components/Logo"
+import { Link } from "react-router-dom"
+import useMutation from "use-mutation"
+
+export function LoginPage() {
+ const serverInfos = useAppSelector(state => state.server.serverInfos)
+ const dispatch = useAppDispatch()
+
+ const form = useForm({
+ initialValues: {
+ name: "",
+ password: "",
+ },
+ })
+
+ const [login, loginResult] = useMutation(client.user.login, {
+ onSuccess: () => {
+ dispatch(redirectToRootCategory())
+ },
+ })
+ const errors = errorToStrings(loginResult.error)
+
+ return (
+
+
+
+
+ CommaFeed
+
+
+
+
+ Log in
+
+ {errors.length > 0 && (
+
+
+
+ )}
+
+
+
+ )
+}
diff --git a/commafeed-client/src/pages/auth/PasswordRecoveryPage.tsx b/commafeed-client/src/pages/auth/PasswordRecoveryPage.tsx
new file mode 100644
index 00000000..ddbcbd8d
--- /dev/null
+++ b/commafeed-client/src/pages/auth/PasswordRecoveryPage.tsx
@@ -0,0 +1,80 @@
+import { t, Trans } from "@lingui/macro"
+import { Anchor, Box, Button, Center, Container, Group, Paper, Stack, TextInput, Title } from "@mantine/core"
+import { useForm } from "@mantine/form"
+import { client, errorToStrings } from "app/client"
+import { PasswordResetRequest } from "app/types"
+import { Alert } from "components/Alert"
+import { Logo } from "components/Logo"
+import { useState } from "react"
+import { Link } from "react-router-dom"
+import useMutation from "use-mutation"
+
+export function PasswordRecoveryPage() {
+ const [message, setMessage] = useState("")
+
+ const form = useForm({
+ initialValues: {
+ email: "",
+ },
+ })
+
+ const [recoverPassword, recoverPasswordResult] = useMutation(client.user.passwordReset, {
+ onMutate: () => {
+ setMessage("")
+ },
+ onSuccess: () => {
+ setMessage(t`An email has been sent if this address was registered. Check your inbox.`)
+ },
+ })
+ const errors = errorToStrings(recoverPasswordResult.error)
+
+ return (
+
+
+
+
+ CommaFeed
+
+
+
+
+ Password Recovery
+
+ {errors.length > 0 && (
+
+
+
+ )}
+ {message && (
+
+
+
+ )}
+
+
+
+ )
+}
diff --git a/commafeed-client/src/pages/auth/RegistrationPage.tsx b/commafeed-client/src/pages/auth/RegistrationPage.tsx
new file mode 100644
index 00000000..cb9f18b7
--- /dev/null
+++ b/commafeed-client/src/pages/auth/RegistrationPage.tsx
@@ -0,0 +1,95 @@
+import { t, Trans } from "@lingui/macro"
+import { Anchor, Box, Button, Center, Container, Group, Paper, PasswordInput, Stack, TextInput, Title } from "@mantine/core"
+import { useForm } from "@mantine/form"
+import { client, errorToStrings } from "app/client"
+import { redirectToRootCategory } from "app/slices/redirect"
+import { useAppDispatch, useAppSelector } from "app/store"
+import { RegistrationRequest } from "app/types"
+import { Alert } from "components/Alert"
+import { Logo } from "components/Logo"
+import { Link } from "react-router-dom"
+import useMutation from "use-mutation"
+
+export function RegistrationPage() {
+ const serverInfos = useAppSelector(state => state.server.serverInfos)
+ const dispatch = useAppDispatch()
+
+ const form = useForm({
+ initialValues: {
+ name: "",
+ password: "",
+ email: "",
+ },
+ })
+
+ const [register, registerResult] = useMutation(client.user.register, {
+ onSuccess: () => {
+ dispatch(redirectToRootCategory())
+ },
+ })
+ const errors = errorToStrings(registerResult.error)
+
+ return (
+
+
+
+
+ CommaFeed
+
+
+
+
+ Sign up
+
+ {serverInfos && !serverInfos.allowRegistrations && (
+
+
+
+ )}
+ {serverInfos?.allowRegistrations && (
+ <>
+ {errors.length > 0 && (
+
+
+
+ )}
+
+
+ >
+ )}
+
+
+ )
+}
diff --git a/commafeed-client/src/vite-env.d.ts b/commafeed-client/src/vite-env.d.ts
new file mode 100644
index 00000000..11f02fe2
--- /dev/null
+++ b/commafeed-client/src/vite-env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/commafeed-client/tsconfig.json b/commafeed-client/tsconfig.json
new file mode 100644
index 00000000..fd48aa3b
--- /dev/null
+++ b/commafeed-client/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "compilerOptions": {
+ "baseUrl": "./src",
+ "target": "ESNext",
+ "useDefineForClassFields": true,
+ "lib": ["DOM", "DOM.Iterable", "ESNext"],
+ "allowJs": false,
+ "skipLibCheck": true,
+ "esModuleInterop": false,
+ "allowSyntheticDefaultImports": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "module": "ESNext",
+ "moduleResolution": "Node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx"
+ },
+ "include": ["src"],
+ "references": [{ "path": "./tsconfig.node.json" }]
+}
diff --git a/commafeed-client/tsconfig.node.json b/commafeed-client/tsconfig.node.json
new file mode 100644
index 00000000..13b35d0b
--- /dev/null
+++ b/commafeed-client/tsconfig.node.json
@@ -0,0 +1,9 @@
+{
+ "compilerOptions": {
+ "composite": true,
+ "module": "ESNext",
+ "moduleResolution": "Node",
+ "allowSyntheticDefaultImports": true
+ },
+ "include": ["vite.config.ts"]
+}
diff --git a/commafeed-client/vite.config.ts b/commafeed-client/vite.config.ts
new file mode 100644
index 00000000..ac5de1a9
--- /dev/null
+++ b/commafeed-client/vite.config.ts
@@ -0,0 +1,39 @@
+import react from "@vitejs/plugin-react"
+import { visualizer } from "rollup-plugin-visualizer"
+import { defineConfig } from "vite"
+import eslint from "vite-plugin-eslint"
+import tsconfigPaths from "vite-tsconfig-paths"
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [
+ react({
+ babel: {
+ // babel-macro is needed for lingui
+ plugins: ["macros"],
+ },
+ }),
+ eslint(),
+ tsconfigPaths(),
+ visualizer(),
+ ],
+ base: "./",
+ server: {
+ port: 8082,
+ proxy: {
+ "/rest": "http://localhost:8083",
+ },
+ },
+ build: {
+ rollupOptions: {
+ output: {
+ manualChunks: id => {
+ // output mantine as its own chunk because it is quite large
+ if (id.includes("@mantine")) {
+ return "mantine"
+ }
+ },
+ },
+ },
+ },
+})
diff --git a/commafeed-server/pom.xml b/commafeed-server/pom.xml
index 3028d1bf..1035b895 100644
--- a/commafeed-server/pom.xml
+++ b/commafeed-server/pom.xml
@@ -5,7 +5,7 @@
com.commafeed
commafeed
- ${revision}
+ 3.0.0
commafeed-server
CommaFeed Server
@@ -228,7 +228,7 @@
com.commafeed
commafeed-client
- ${revision}
+ 3.0.0
diff --git a/pom.xml b/pom.xml
index 51c27db3..bb0493c6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,17 +4,16 @@
com.commafeed
commafeed
- ${revision}
+ 3.0.0
CommaFeed
pom
- 3.0.0
UTF-8
1.8
1.8
-
+
only-eclipse