+
- By signing up, you agree to the p5.js Editor's{' '}
- Terms of Use and{' '}
- Privacy Policy.
+ Terms of use,
+ Privacy Policy
+ ]}
+ />
{t('SignupView.AlreadyHave')}{' '}
diff --git a/client/routes.jsx b/client/routes.jsx
index 96ed3f2faa..418a5bf99d 100644
--- a/client/routes.jsx
+++ b/client/routes.jsx
@@ -6,6 +6,9 @@ import { Route as RouterRoute, Switch } from 'react-router-dom';
import App from './modules/App/App';
import IDEView from './modules/IDE/pages/IDEView';
import FullView from './modules/IDE/pages/FullView';
+import CodeOfConduct from './modules/Legal/pages/CodeOfConduct';
+import PrivacyPolicy from './modules/Legal/pages/PrivacyPolicy';
+import TermsOfUse from './modules/Legal/pages/TermsOfUse';
import LoginView from './modules/User/pages/LoginView';
import SignupView from './modules/User/pages/SignupView';
import ResetPasswordView from './modules/User/pages/ResetPasswordView';
@@ -15,7 +18,6 @@ import AccountView from './modules/User/pages/AccountView';
import CollectionView from './modules/User/pages/CollectionView';
import DashboardView from './modules/User/pages/DashboardView';
import createRedirectWithUsername from './components/createRedirectWithUsername';
-import Legal from './modules/Legal/pages/Legal';
import { getUser } from './modules/User/actions';
import {
userIsAuthenticated,
@@ -91,9 +93,9 @@ const routes = (
-
-
-
+
+
+
);
diff --git a/client/store.js b/client/store.js
index 4cec9419b7..12beed2e12 100644
--- a/client/store.js
+++ b/client/store.js
@@ -1,30 +1,36 @@
-import { createStore, applyMiddleware, compose } from 'redux';
-import thunk from 'redux-thunk';
+import { configureStore } from '@reduxjs/toolkit';
+import listenerMiddleware from './middleware';
import DevTools from './modules/App/components/DevTools';
import rootReducer from './reducers';
import { clearState, loadState } from './persistState';
import getConfig from './utils/getConfig';
-export default function configureStore(initialState) {
- const enhancers = [applyMiddleware(thunk)];
-
- if (getConfig('CLIENT') && getConfig('NODE_ENV') === 'development') {
- // Enable DevTools only when rendering on client and during development.
- enhancers.push(
- window.devToolsExtension
- ? window.devToolsExtension()
- : DevTools.instrument()
- );
- }
+// Enable DevTools only when rendering on client and during development.
+// Display the dock monitor only if no browser extension is found.
+export function showReduxDevTools() {
+ return (
+ getConfig('CLIENT') &&
+ getConfig('NODE_ENV') === 'development' &&
+ !window.__REDUX_DEVTOOLS_EXTENSION__
+ );
+}
+export default function setupStore(initialState) {
const savedState = loadState();
clearState();
- const store = createStore(
- rootReducer,
- savedState != null ? savedState : initialState,
- compose(...enhancers)
- );
+ const store = configureStore({
+ reducer: rootReducer,
+ middleware: (getDefaultMiddleware) =>
+ getDefaultMiddleware({
+ thunk: true,
+ serializableCheck: true,
+ // TODO: enable immutableCheck once the mutations are fixed.
+ immutableCheck: false
+ }).concat(listenerMiddleware.middleware),
+ preloadedState: savedState || initialState,
+ enhancers: showReduxDevTools() ? [DevTools.instrument()] : []
+ });
if (module.hot) {
// Enable Webpack hot module replacement for reducers
diff --git a/client/styles/abstracts/_variables.scss b/client/styles/abstracts/_variables.scss
index 54fe04d1b1..17cd04bab8 100644
--- a/client/styles/abstracts/_variables.scss
+++ b/client/styles/abstracts/_variables.scss
@@ -170,7 +170,7 @@ $themes: (
input-selection-text-color: $darkest,
input-selection-background-color: $lightest,
input-border-color: $middle-dark,
- search-background-color: $lightest,
+ search-background-color: $darker,
search-clear-background-color: $medium-dark,
search-hover-text-color: $lightest,
search-hover-background-color: $p5js-pink,
@@ -264,7 +264,7 @@ $themes: (
input-selection-text-color: $darkest,
input-selection-background-color: $lightest,
input-border-color: $middle-dark,
- search-background-color: $white,
+ search-background-color: $darker,
search-clear-background-color: $medium-dark,
search-hover-text-color: $dark,
search-hover-background-color: $yellow,
diff --git a/client/styles/components/_asset-list.scss b/client/styles/components/_asset-list.scss
index 6f7c035993..7d8f6065e8 100644
--- a/client/styles/components/_asset-list.scss
+++ b/client/styles/components/_asset-list.scss
@@ -76,24 +76,3 @@
background-color: getThemifyVariable('background-color');
}
}
-
-.asset-table__dropdown-button {
- width:#{25 / $base-font-size}rem;
- height:#{25 / $base-font-size}rem;
-
- @include themify() {
- & polygon, & path {
- fill: getThemifyVariable('inactive-text-color');
- }
- }
-}
-
-.asset-table__action-dialogue {
- @extend %dropdown-open-right;
- top: 63%;
- right: calc(100% - 26px);
-}
-
-.asset-table__action-option {
- font-size: #{12 / $base-font-size}rem;
-}
diff --git a/client/styles/components/_dashboard-header.scss b/client/styles/components/_dashboard-header.scss
index 7f10210d50..ddab33cea5 100644
--- a/client/styles/components/_dashboard-header.scss
+++ b/client/styles/components/_dashboard-header.scss
@@ -26,12 +26,8 @@
@include themify() {
color: getThemifyVariable("inactive-text-color");
opacity: 0.7;
- }
- }
- .dashboard-header__tab--selected {
- .dashboard-header__tab__title {
- @include themify() {
+ &.dashboard-header__tab--selected {
color: getThemifyVariable("primary-text-color");
opacity: 1;
}
@@ -88,24 +84,12 @@
.dashboard-header__tab {
@include themify() {
color: getThemifyVariable("inactive-text-color");
- border-bottom: #{4 / $base-font-size}rem solid transparent;
-
padding: 0;
margin-right: #{26 / $base-font-size}rem;
-
- &:hover,
- &:focus,
- &.dashboard-header__tab--selected {
- color: getThemifyVariable("primary-text-color");
- border-bottom-color: getThemifyVariable("nav-hover-color");
- cursor: pointer;
- }
-
@media (max-width: 770px) {
margin-right: #{20 / $base-font-size}rem;
}
}
-
font-size: #{12 / $base-font-size}rem;
}
@@ -119,12 +103,19 @@
.dashboard-header__tab__title {
margin: 0;
- padding: 0;
-}
-
-.dashboard-header__tab__title > * {
display: inline-block;
padding: 0 #{5 / $base-font-size}rem #{5 / $base-font-size}rem;
+ border-bottom: #{4 / $base-font-size}rem solid transparent;
+
+ @include themify() {
+ &:hover,
+ &:focus,
+ &.dashboard-header__tab--selected {
+ color: getThemifyVariable("primary-text-color");
+ border-bottom-color: getThemifyVariable("nav-hover-color");
+ cursor: pointer;
+ }
+ }
}
.dashboard-header__actions {
diff --git a/client/styles/components/_sketch-list.scss b/client/styles/components/_sketch-list.scss
index 69d41bdca4..c577552aea 100644
--- a/client/styles/components/_sketch-list.scss
+++ b/client/styles/components/_sketch-list.scss
@@ -58,14 +58,9 @@
.sketch-list__dropdown-column {
position: absolute;
top: 0;
- right: 0;
+ right: #{4 / $base-font-size}rem;
width: auto;
margin: #{8 / $base-font-size}rem;
-
- .sketch-list__dropdown-button {
- transform: rotateZ(90deg) translateX(-30%);
- transform-origin: center;
- }
}
}
}
@@ -169,17 +164,6 @@
font-weight: normal;
}
-.sketch-list__dropdown-button {
- width: #{25 / $base-font-size}rem;
- height: #{25 / $base-font-size}rem;
- @include themify() {
- & polygon,
- & path {
- fill: getThemifyVariable("inactive-text-color");
- }
- }
-}
-
.sketches-table__name {
display: flex;
align-items: center;
@@ -189,12 +173,6 @@
width: #{35 / $base-font-size}rem;
}
-.sketch-list__action-dialogue {
- @extend %dropdown-open-right;
- top: 63%;
- right: calc(100% - 26px);
-}
-
.sketches-table__empty {
text-align: center;
font-size: #{16 / $base-font-size}rem;
diff --git a/client/styles/components/_toolbar.scss b/client/styles/components/_toolbar.scss
index 7fd3243ed1..797fe7e46e 100644
--- a/client/styles/components/_toolbar.scss
+++ b/client/styles/components/_toolbar.scss
@@ -144,6 +144,6 @@
.checkbox__autorefresh{
cursor: pointer;
@include themify(){
- color:getThemifyVariable('logo-color');
+ accent-color:getThemifyVariable('logo-color');
}
}
diff --git a/contributor_docs/public_api.md b/contributor_docs/public_api.md
index fd8057ffc2..5d035445f3 100644
--- a/contributor_docs/public_api.md
+++ b/contributor_docs/public_api.md
@@ -29,6 +29,18 @@ You must provide the version number when accessing the API.
The API accepts and returns the following model objects, as JSON.
+## Enabling Access Token UI in Settings Page
+
+To enable the Access Token UI in the Settings page, follow these steps:
+
+1. Navigate to the `.env` file in your project.
+2. Locate the line specifying UI_ACCESS_TOKEN_ENABLED.
+3. Set the value to `true`, as shown below:
+
+```bash
+UI_ACCESS_TOKEN_ENABLED=true
+```
+
## Sketch
| Name | Type | Description |
@@ -217,3 +229,5 @@ No body
|---------------|-------------------------|
| 200 OK | Sketch has been deleted |
| 404 Not Found | Sketch does not exist |
+
+
diff --git a/package-lock.json b/package-lock.json
index c210869a9f..e1d3c83769 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "p5.js-web-editor",
- "version": "2.9.3",
+ "version": "2.11.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "p5.js-web-editor",
- "version": "2.9.3",
+ "version": "2.11.0",
"license": "LGPL-2.1",
"dependencies": {
"@auth0/s3": "^1.0.0",
@@ -16,8 +16,9 @@
"@gatsbyjs/webpack-hot-middleware": "^2.25.3",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
"@redux-devtools/core": "^3.11.0",
- "@redux-devtools/dock-monitor": "^2.1.0",
- "@redux-devtools/log-monitor": "^3.1.0",
+ "@redux-devtools/dock-monitor": "^3.0.1",
+ "@redux-devtools/log-monitor": "^4.0.2",
+ "@reduxjs/toolkit": "^1.9.3",
"async": "^3.2.3",
"axios": "^0.21.2",
"babel-plugin-styled-components": "^1.13.2",
@@ -93,12 +94,11 @@
"react-split-pane": "^0.1.92",
"react-tabs": "^2.3.1",
"react-transition-group": "^4.4.2",
- "redux": "^3.7.2",
+ "redux": "^4.2.1",
"redux-auth-wrapper": "^2.1.0",
"redux-thunk": "^2.3.0",
"regenerator-runtime": "^0.13.9",
"remark-slug": "^6.1.0",
- "reselect": "^4.0.0",
"s3-policy-v4": "0.0.3",
"shortid": "^2.2.16",
"sinon": "^7.5.0",
@@ -3615,6 +3615,7 @@
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
"integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.1.1",
@@ -3634,6 +3635,7 @@
"version": "13.10.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
"integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
+ "dev": true,
"dependencies": {
"type-fest": "^0.20.2"
},
@@ -3648,6 +3650,7 @@
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true,
"engines": {
"node": ">= 4"
}
@@ -3656,6 +3659,7 @@
"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"
},
@@ -3689,6 +3693,7 @@
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
"integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "dev": true,
"dependencies": {
"@humanwhocodes/object-schema": "^1.2.0",
"debug": "^4.1.1",
@@ -3701,7 +3706,8 @@
"node_modules/@humanwhocodes/object-schema": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
- "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w=="
+ "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
+ "dev": true
},
"node_modules/@icons/material": {
"version": "0.2.4",
@@ -5916,39 +5922,23 @@
}
},
"node_modules/@redux-devtools/dock-monitor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@redux-devtools/dock-monitor/-/dock-monitor-2.1.0.tgz",
- "integrity": "sha512-DFVLgrFCjiuCGeHxZNaRUGVgACeZmkmm7I/grBU72Slx+KW7C5QCm0dS5UEZr3siTcRBLTDKhUzQLXkAT+6PJg==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@redux-devtools/dock-monitor/-/dock-monitor-3.0.1.tgz",
+ "integrity": "sha512-ajIa3NRy89B7mw0/4SCNipXIV+B1eOqvprQXdGJPA66F6Gpzf3TKJ2Mupmj4yZNL1NL2GBIAbApNnWE9u+DU5w==",
"dependencies": {
- "@babel/runtime": "^7.16.7",
- "@types/prop-types": "^15.7.4",
+ "@babel/runtime": "^7.18.3",
+ "@types/prop-types": "^15.7.5",
"parse-key": "^0.2.1",
"prop-types": "^15.8.1",
- "react-dock": "^0.5.1"
+ "react-dock": "^0.6.0"
},
"peerDependencies": {
- "@redux-devtools/core": "^3.7.0",
- "@types/react": "^16.3.0 || ^17.0.0",
- "react": "^16.3.0 || ^17.0.0",
+ "@redux-devtools/core": "^3.13.1",
+ "@types/react": "^16.3.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.3.0 || ^17.0.0 || ^18.0.0",
"redux": "^3.4.0 || ^4.0.0"
}
},
- "node_modules/@redux-devtools/dock-monitor/node_modules/react-dock": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/react-dock/-/react-dock-0.5.1.tgz",
- "integrity": "sha512-mRY6xQDreHlUQPPgx1PHICUMQpY0Ywo8idS9rDdWhN+1ERWgl85w6en9ad017ERbaodP50f9D9CHg5DrRU9bhg==",
- "dependencies": {
- "@babel/runtime": "^7.16.7",
- "@types/lodash": "^4.14.178",
- "@types/prop-types": "^15.7.4",
- "lodash.debounce": "^4.0.8",
- "prop-types": "^15.8.1"
- },
- "peerDependencies": {
- "@types/react": "^16.3.0 || ^17.0.0",
- "react": "^16.3.0 || ^17.0.0"
- }
- },
"node_modules/@redux-devtools/instrument": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/@redux-devtools/instrument/-/instrument-2.1.0.tgz",
@@ -5962,58 +5952,47 @@
}
},
"node_modules/@redux-devtools/log-monitor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@redux-devtools/log-monitor/-/log-monitor-3.1.0.tgz",
- "integrity": "sha512-T5NXzasj7250tJmQPiXzFkxlY0Rg0W7feR1eZj8VrdePvVkeXTP5k9VjxkVqtba5EmZR8swGec+Z1eD71ZgUsA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@redux-devtools/log-monitor/-/log-monitor-4.0.2.tgz",
+ "integrity": "sha512-BaTAwadm/XzRfnN2+8t4mwdbOILWfwsvMfVPn5OuE+NFaUG9pDKGoHRPCdMBaRdggDqqb5nlMgRCVdHzYftgVw==",
"dependencies": {
- "@babel/runtime": "^7.16.7",
- "@types/lodash.debounce": "^4.0.6",
- "@types/prop-types": "^15.7.4",
+ "@babel/runtime": "^7.20.6",
+ "@types/lodash.debounce": "^4.0.7",
+ "@types/prop-types": "^15.7.5",
"@types/redux-devtools-themes": "^1.0.0",
"lodash.debounce": "^4.0.8",
"prop-types": "^15.8.1",
- "react-json-tree": "^0.16.1",
+ "react-json-tree": "^0.18.0",
"redux-devtools-themes": "^1.0.0"
},
"peerDependencies": {
- "@redux-devtools/core": "^3.7.0",
- "@types/react": "^16.3.0 || ^17.0.0",
- "react": "^16.3.0 || ^17.0.0",
+ "@redux-devtools/core": "^3.13.1",
+ "@types/react": "^16.3.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.3.0 || ^17.0.0 || ^18.0.0",
"redux": "^3.4.0 || ^4.0.0"
}
},
- "node_modules/@redux-devtools/log-monitor/node_modules/csstype": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz",
- "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw=="
- },
- "node_modules/@redux-devtools/log-monitor/node_modules/react-base16-styling": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.9.1.tgz",
- "integrity": "sha512-1s0CY1zRBOQ5M3T61wetEpvQmsYSNtWEcdYzyZNxKa8t7oDvaOn9d21xrGezGAHFWLM7SHcktPuPTrvoqxSfKw==",
+ "node_modules/@reduxjs/toolkit": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz",
+ "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==",
"dependencies": {
- "@babel/runtime": "^7.16.7",
- "@types/base16": "^1.0.2",
- "@types/lodash": "^4.14.178",
- "base16": "^1.0.0",
- "color": "^3.2.1",
- "csstype": "^3.0.10",
- "lodash.curry": "^4.1.1"
- }
- },
- "node_modules/@redux-devtools/log-monitor/node_modules/react-json-tree": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/react-json-tree/-/react-json-tree-0.16.2.tgz",
- "integrity": "sha512-80F7ZTqeOl1YaS/sDce4tYBcSe69/d0mlUmcIhyXezPFctWrtvyN56EMExX9jWsq3XMdvsUKKPUeNo8QCBy2jg==",
- "dependencies": {
- "@babel/runtime": "^7.17.8",
- "@types/prop-types": "^15.7.4",
- "prop-types": "^15.8.1",
- "react-base16-styling": "^0.9.1"
+ "immer": "^9.0.21",
+ "redux": "^4.2.1",
+ "redux-thunk": "^2.4.2",
+ "reselect": "^4.1.8"
},
"peerDependencies": {
- "@types/react": "^16.3.0 || ^17.0.0",
- "react": "^16.3.0 || ^17.0.0"
+ "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/@sinclair/typebox": {
@@ -15762,14 +15741,14 @@
"integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ=="
},
"node_modules/@types/lodash": {
- "version": "4.14.181",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz",
- "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag=="
+ "version": "4.14.199",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz",
+ "integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg=="
},
"node_modules/@types/lodash.debounce": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.6.tgz",
- "integrity": "sha512-4WTmnnhCfDvvuLMaF3KV4Qfki93KebocUF45msxhYyjMttZDQYzHkO639ohhk8+oco2cluAFL3t5+Jn4mleylQ==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.7.tgz",
+ "integrity": "sha512-X1T4wMZ+gT000M2/91SYj0d/7JfeNZ9PeeOldSNoE/lunLeQXKvkmIumI29IaKMotU/ln/McOIvgzZcQ/3TrSA==",
"dependencies": {
"@types/lodash": "*"
}
@@ -15884,9 +15863,9 @@
"dev": true
},
"node_modules/@types/prop-types": {
- "version": "15.7.4",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz",
- "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ=="
+ "version": "15.7.6",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.6.tgz",
+ "integrity": "sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg=="
},
"node_modules/@types/qs": {
"version": "6.9.7",
@@ -15940,14 +15919,6 @@
"redux": "^4.0.0"
}
},
- "node_modules/@types/react-redux/node_modules/redux": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz",
- "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==",
- "dependencies": {
- "@babel/runtime": "^7.9.2"
- }
- },
"node_modules/@types/react-syntax-highlighter": {
"version": "11.0.4",
"resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-11.0.4.tgz",
@@ -16467,6 +16438,7 @@
"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"
}
@@ -16705,6 +16677,7 @@
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
"dependencies": {
"sprintf-js": "~1.0.2"
}
@@ -17039,6 +17012,7 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
"integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true,
"engines": {
"node": ">=8"
}
@@ -19139,9 +19113,9 @@
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"node_modules/color-string": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz",
- "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==",
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
"dependencies": {
"color-name": "^1.0.0",
"simple-swizzle": "^0.2.2"
@@ -21512,6 +21486,7 @@
"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"
},
@@ -21771,6 +21746,7 @@
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
"integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+ "dev": true,
"optional": true,
"dependencies": {
"iconv-lite": "~0.4.13"
@@ -21812,6 +21788,7 @@
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
"integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "dev": true,
"dependencies": {
"ansi-colors": "^4.1.1"
},
@@ -21823,6 +21800,7 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
"integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "dev": true,
"engines": {
"node": ">=6"
}
@@ -22012,6 +21990,7 @@
"version": "7.31.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz",
"integrity": "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==",
+ "dev": true,
"dependencies": {
"@babel/code-frame": "7.12.11",
"@eslint/eslintrc": "^0.4.3",
@@ -22732,6 +22711,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
"dependencies": {
"eslint-visitor-keys": "^1.1.0"
},
@@ -22746,6 +22726,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
"engines": {
"node": ">=4"
}
@@ -22832,6 +22813,7 @@
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
"integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "dev": true,
"dependencies": {
"@babel/highlight": "^7.10.4"
}
@@ -22840,6 +22822,7 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+ "dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -22855,6 +22838,7 @@
"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"
},
@@ -22869,6 +22853,7 @@
"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"
},
@@ -22880,6 +22865,7 @@
"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"
},
@@ -22890,12 +22876,14 @@
"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=="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
},
"node_modules/eslint/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",
@@ -22909,6 +22897,7 @@
"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"
},
@@ -22920,6 +22909,7 @@
"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"
}
@@ -22928,6 +22918,7 @@
"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"
},
@@ -22939,6 +22930,7 @@
"version": "13.10.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
"integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
+ "dev": true,
"dependencies": {
"type-fest": "^0.20.2"
},
@@ -22953,6 +22945,7 @@
"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"
}
@@ -22961,6 +22954,7 @@
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
"integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true,
"engines": {
"node": ">= 4"
}
@@ -22969,6 +22963,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -22977,6 +22972,7 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -22988,6 +22984,7 @@
"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"
@@ -23000,6 +22997,7 @@
"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"
},
@@ -23011,6 +23009,7 @@
"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",
@@ -23027,6 +23026,7 @@
"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"
}
@@ -23035,6 +23035,7 @@
"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"
}
@@ -23043,6 +23044,7 @@
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -23057,6 +23059,7 @@
"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"
},
@@ -23068,6 +23071,7 @@
"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"
}
@@ -23076,6 +23080,7 @@
"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"
},
@@ -23087,6 +23092,7 @@
"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"
},
@@ -23098,6 +23104,7 @@
"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"
},
@@ -23111,12 +23118,14 @@
"node_modules/eslint/node_modules/yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
},
"node_modules/espree": {
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
"integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "dev": true,
"dependencies": {
"acorn": "^7.4.0",
"acorn-jsx": "^5.3.1",
@@ -23130,6 +23139,7 @@
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -23141,6 +23151,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true,
"engines": {
"node": ">=4"
}
@@ -23161,6 +23172,7 @@
"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"
},
@@ -23172,6 +23184,7 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
"integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "dev": true,
"engines": {
"node": ">=4.0"
}
@@ -23938,6 +23951,7 @@
"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"
},
@@ -24147,6 +24161,7 @@
"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"
@@ -24159,6 +24174,7 @@
"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"
},
@@ -24172,7 +24188,8 @@
"node_modules/flatted": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz",
- "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg=="
+ "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==",
+ "dev": true
},
"node_modules/flatten": {
"version": "1.0.2",
@@ -24577,7 +24594,8 @@
"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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
},
"node_modules/fuse.js": {
"version": "6.6.2",
@@ -25795,6 +25813,15 @@
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
+ "node_modules/immer": {
+ "version": "9.0.21",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
+ "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==",
+ "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",
@@ -25896,6 +25923,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true,
"engines": {
"node": ">=0.8.19"
}
@@ -31381,12 +31409,6 @@
"node": ">= 0.6.0"
}
},
- "node_modules/jquery": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz",
- "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==",
- "peer": true
- },
"node_modules/js-base64": {
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
@@ -31486,6 +31508,7 @@
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "dev": true,
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -31932,7 +31955,8 @@
"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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
},
"node_modules/json-stringify-safe": {
"version": "5.0.1",
@@ -32493,7 +32517,8 @@
"node_modules/lodash-es": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "dev": true
},
"node_modules/lodash._reinterpolate": {
"version": "3.0.0",
@@ -32504,12 +32529,13 @@
"node_modules/lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
},
"node_modules/lodash.curry": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz",
- "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA="
+ "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA=="
},
"node_modules/lodash.debounce": {
"version": "4.0.8",
@@ -32536,7 +32562,8 @@
"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=="
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
},
"node_modules/lodash.startcase": {
"version": "4.4.0",
@@ -32566,7 +32593,8 @@
"node_modules/lodash.truncate": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM="
+ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
+ "dev": true
},
"node_modules/lodash.uniq": {
"version": "4.5.0",
@@ -34444,7 +34472,8 @@
"node_modules/natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
},
"node_modules/negotiator": {
"version": "0.6.3",
@@ -37651,6 +37680,7 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true,
"engines": {
"node": ">=0.4.0"
}
@@ -38029,6 +38059,25 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-base16-styling": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.9.1.tgz",
+ "integrity": "sha512-1s0CY1zRBOQ5M3T61wetEpvQmsYSNtWEcdYzyZNxKa8t7oDvaOn9d21xrGezGAHFWLM7SHcktPuPTrvoqxSfKw==",
+ "dependencies": {
+ "@babel/runtime": "^7.16.7",
+ "@types/base16": "^1.0.2",
+ "@types/lodash": "^4.14.178",
+ "base16": "^1.0.0",
+ "color": "^3.2.1",
+ "csstype": "^3.0.10",
+ "lodash.curry": "^4.1.1"
+ }
+ },
+ "node_modules/react-base16-styling/node_modules/csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ },
"node_modules/react-color": {
"version": "2.19.3",
"resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz",
@@ -38108,6 +38157,22 @@
"integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==",
"dev": true
},
+ "node_modules/react-dock": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/react-dock/-/react-dock-0.6.0.tgz",
+ "integrity": "sha512-jEOhv1s+pqRQ4JxgUw4XUotnprOehZ23mqchf3whxYXnvNgTQOXCxh6bpcqW8P6OybIk2bYO18r3qimZ3ypCbg==",
+ "dependencies": {
+ "@babel/runtime": "^7.18.3",
+ "@types/lodash": "^4.14.182",
+ "@types/prop-types": "^15.7.5",
+ "lodash.debounce": "^4.0.8",
+ "prop-types": "^15.8.1"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.3.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.3.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/react-dom": {
"version": "16.14.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz",
@@ -38227,6 +38292,20 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
+ "node_modules/react-json-tree": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/react-json-tree/-/react-json-tree-0.18.0.tgz",
+ "integrity": "sha512-Qe6HKSXrr++n9Y31nkRJ3XvQMATISpqigH1vEKhLwB56+nk5thTP0ITThpjxY6ZG/ubpVq/aEHIcyLP/OPHxeA==",
+ "dependencies": {
+ "@babel/runtime": "^7.20.6",
+ "@types/lodash": "^4.14.191",
+ "react-base16-styling": "^0.9.1"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ }
+ },
"node_modules/react-lifecycles-compat": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
@@ -38728,14 +38807,11 @@
}
},
"node_modules/redux": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz",
- "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
+ "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
"dependencies": {
- "lodash": "^4.2.1",
- "lodash-es": "^4.2.1",
- "loose-envify": "^1.1.0",
- "symbol-observable": "^1.0.3"
+ "@babel/runtime": "^7.9.2"
}
},
"node_modules/redux-auth-wrapper": {
@@ -38781,9 +38857,12 @@
}
},
"node_modules/redux-thunk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
- "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz",
+ "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q==",
+ "peerDependencies": {
+ "redux": "^4"
+ }
},
"node_modules/refractor": {
"version": "3.6.0",
@@ -38866,6 +38945,7 @@
"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"
},
@@ -39172,9 +39252,9 @@
}
},
"node_modules/reselect": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz",
- "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA=="
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz",
+ "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ=="
},
"node_modules/resolve": {
"version": "1.20.0",
@@ -39779,7 +39859,7 @@
"node_modules/simple-swizzle": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
"dependencies": {
"is-arrayish": "^0.3.1"
}
@@ -39851,6 +39931,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"astral-regex": "^2.0.0",
@@ -39867,6 +39948,7 @@
"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"
},
@@ -39881,6 +39963,7 @@
"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"
},
@@ -39891,12 +39974,14 @@
"node_modules/slice-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=="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
},
"node_modules/slice-ansi/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"
}
@@ -40061,7 +40146,8 @@
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
},
"node_modules/sshpk": {
"version": "1.16.1",
@@ -40659,6 +40745,7 @@
"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"
},
@@ -40785,14 +40872,6 @@
"integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==",
"dev": true
},
- "node_modules/symbol-observable": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
- "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
@@ -40808,6 +40887,7 @@
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
"integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==",
+ "dev": true,
"dependencies": {
"ajv": "^8.0.1",
"lodash.clonedeep": "^4.5.0",
@@ -40824,6 +40904,7 @@
"version": "8.6.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz",
"integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==",
+ "dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@@ -40838,7 +40919,8 @@
"node_modules/table/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
},
"node_modules/tapable": {
"version": "2.2.1",
@@ -41142,7 +41224,8 @@
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
},
"node_modules/throat": {
"version": "6.0.1",
@@ -41343,19 +41426,6 @@
"node": ">=4"
}
},
- "node_modules/type-fest": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
- "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -41383,20 +41453,6 @@
"is-typedarray": "^1.0.0"
}
},
- "node_modules/typescript": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
- "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
- "dev": true,
- "peer": true,
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
"node_modules/uglify-js": {
"version": "3.17.4",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
@@ -41849,7 +41905,8 @@
"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=="
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
},
"node_modules/v8-to-istanbul": {
"version": "8.1.0",
@@ -42398,7 +42455,7 @@
"version": "2.25.1",
"resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz",
"integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==",
- "devOptional": true,
+ "dev": true,
"dependencies": {
"ansi-html-community": "0.0.8",
"html-entities": "^2.1.0",
@@ -42619,6 +42676,7 @@
"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"
}
@@ -44636,8 +44694,7 @@
"version": "7.21.0-placeholder-for-preset-env.2",
"resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
"integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@babel/types": {
"version": "7.22.5",
@@ -45088,8 +45145,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz",
"integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@emotion/weak-memoize": {
"version": "0.2.5",
@@ -45254,6 +45310,7 @@
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
"integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "dev": true,
"requires": {
"ajv": "^6.12.4",
"debug": "^4.1.1",
@@ -45270,6 +45327,7 @@
"version": "13.10.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
"integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
+ "dev": true,
"requires": {
"type-fest": "^0.20.2"
}
@@ -45277,12 +45335,14 @@
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "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=="
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
}
}
},
@@ -45312,6 +45372,7 @@
"version": "0.5.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
"integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "dev": true,
"requires": {
"@humanwhocodes/object-schema": "^1.2.0",
"debug": "^4.1.1",
@@ -45321,14 +45382,14 @@
"@humanwhocodes/object-schema": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz",
- "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w=="
+ "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==",
+ "dev": true
},
"@icons/material": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz",
"integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@istanbuljs/load-nyc-config": {
"version": "1.1.0",
@@ -47029,29 +47090,15 @@
}
},
"@redux-devtools/dock-monitor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@redux-devtools/dock-monitor/-/dock-monitor-2.1.0.tgz",
- "integrity": "sha512-DFVLgrFCjiuCGeHxZNaRUGVgACeZmkmm7I/grBU72Slx+KW7C5QCm0dS5UEZr3siTcRBLTDKhUzQLXkAT+6PJg==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@redux-devtools/dock-monitor/-/dock-monitor-3.0.1.tgz",
+ "integrity": "sha512-ajIa3NRy89B7mw0/4SCNipXIV+B1eOqvprQXdGJPA66F6Gpzf3TKJ2Mupmj4yZNL1NL2GBIAbApNnWE9u+DU5w==",
"requires": {
- "@babel/runtime": "^7.16.7",
- "@types/prop-types": "^15.7.4",
+ "@babel/runtime": "^7.18.3",
+ "@types/prop-types": "^15.7.5",
"parse-key": "^0.2.1",
"prop-types": "^15.8.1",
- "react-dock": "^0.5.1"
- },
- "dependencies": {
- "react-dock": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/react-dock/-/react-dock-0.5.1.tgz",
- "integrity": "sha512-mRY6xQDreHlUQPPgx1PHICUMQpY0Ywo8idS9rDdWhN+1ERWgl85w6en9ad017ERbaodP50f9D9CHg5DrRU9bhg==",
- "requires": {
- "@babel/runtime": "^7.16.7",
- "@types/lodash": "^4.14.178",
- "@types/prop-types": "^15.7.4",
- "lodash.debounce": "^4.0.8",
- "prop-types": "^15.8.1"
- }
- }
+ "react-dock": "^0.6.0"
}
},
"@redux-devtools/instrument": {
@@ -47064,50 +47111,29 @@
}
},
"@redux-devtools/log-monitor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/@redux-devtools/log-monitor/-/log-monitor-3.1.0.tgz",
- "integrity": "sha512-T5NXzasj7250tJmQPiXzFkxlY0Rg0W7feR1eZj8VrdePvVkeXTP5k9VjxkVqtba5EmZR8swGec+Z1eD71ZgUsA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@redux-devtools/log-monitor/-/log-monitor-4.0.2.tgz",
+ "integrity": "sha512-BaTAwadm/XzRfnN2+8t4mwdbOILWfwsvMfVPn5OuE+NFaUG9pDKGoHRPCdMBaRdggDqqb5nlMgRCVdHzYftgVw==",
"requires": {
- "@babel/runtime": "^7.16.7",
- "@types/lodash.debounce": "^4.0.6",
- "@types/prop-types": "^15.7.4",
+ "@babel/runtime": "^7.20.6",
+ "@types/lodash.debounce": "^4.0.7",
+ "@types/prop-types": "^15.7.5",
"@types/redux-devtools-themes": "^1.0.0",
"lodash.debounce": "^4.0.8",
"prop-types": "^15.8.1",
- "react-json-tree": "^0.16.1",
+ "react-json-tree": "^0.18.0",
"redux-devtools-themes": "^1.0.0"
- },
- "dependencies": {
- "csstype": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.11.tgz",
- "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw=="
- },
- "react-base16-styling": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.9.1.tgz",
- "integrity": "sha512-1s0CY1zRBOQ5M3T61wetEpvQmsYSNtWEcdYzyZNxKa8t7oDvaOn9d21xrGezGAHFWLM7SHcktPuPTrvoqxSfKw==",
- "requires": {
- "@babel/runtime": "^7.16.7",
- "@types/base16": "^1.0.2",
- "@types/lodash": "^4.14.178",
- "base16": "^1.0.0",
- "color": "^3.2.1",
- "csstype": "^3.0.10",
- "lodash.curry": "^4.1.1"
- }
- },
- "react-json-tree": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/react-json-tree/-/react-json-tree-0.16.2.tgz",
- "integrity": "sha512-80F7ZTqeOl1YaS/sDce4tYBcSe69/d0mlUmcIhyXezPFctWrtvyN56EMExX9jWsq3XMdvsUKKPUeNo8QCBy2jg==",
- "requires": {
- "@babel/runtime": "^7.17.8",
- "@types/prop-types": "^15.7.4",
- "prop-types": "^15.8.1",
- "react-base16-styling": "^0.9.1"
- }
- }
+ }
+ },
+ "@reduxjs/toolkit": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz",
+ "integrity": "sha512-Rt97jHmfTeaxL4swLRNPD/zV4OxTes4la07Xc4hetpUW/vc75t5m1ANyxG6ymnEQ2FsLQsoMlYB2vV1sO3m8tQ==",
+ "requires": {
+ "immer": "^9.0.21",
+ "redux": "^4.2.1",
+ "redux-thunk": "^2.4.2",
+ "reselect": "^4.1.8"
}
},
"@sinclair/typebox": {
@@ -47194,8 +47220,7 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz",
"integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"ts-dedent": {
"version": "2.2.0",
@@ -47419,8 +47444,7 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-6.0.2.tgz",
"integrity": "sha512-x+b7LxhmHXjHoU/VrFAzw5iutsILRoYyDq97EDYdFpPLcvqtEzk4ZSZSQjnFPbr5T57tLXnHcqFYoN1pI6u8uQ==",
- "dev": true,
- "requires": {}
+ "dev": true
}
}
},
@@ -47570,8 +47594,7 @@
"version": "7.0.27",
"resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.0.27.tgz",
"integrity": "sha512-KnyBrs9S8BIWIhNdT6cIpqmSE9CAxL8uGH/ev60OutKeM+rf3SC3AylIBSvMdjy4cykMasg16QiShK+MMbKl9g==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@storybook/theming": {
"version": "7.0.27",
@@ -51372,8 +51395,7 @@
"version": "8.13.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
"integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"yallist": {
"version": "4.0.0",
@@ -52218,8 +52240,7 @@
"version": "7.0.24",
"resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.0.24.tgz",
"integrity": "sha512-YOP1C3dWTLYP5mPb7hNuDRIhADzz+ppfb+S22JNJ3kqm+tsyE/YtAbRf80k6QIG1LzukMpGoEnjjOPOsWsyvFQ==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@storybook/react-webpack5": {
"version": "7.0.27",
@@ -52577,8 +52598,7 @@
"version": "7.0.27",
"resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.0.27.tgz",
"integrity": "sha512-KnyBrs9S8BIWIhNdT6cIpqmSE9CAxL8uGH/ev60OutKeM+rf3SC3AylIBSvMdjy4cykMasg16QiShK+MMbKl9g==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"type-fest": {
"version": "2.19.0",
@@ -53411,57 +53431,49 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.0.0.tgz",
"integrity": "sha512-MdPdhdWLtQsjd29Wa4pABdhWbaRMACdM1h31BY+c6FghTZqNGT7pEYdBoaGeKtdTOBC/XNFQaKVj+r/Ei2ryWA==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@svgr/babel-plugin-remove-jsx-attribute": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.0.0.tgz",
"integrity": "sha512-aVdtfx9jlaaxc3unA6l+M9YRnKIZjOhQPthLKqmTXC8UVkBLDRGwPKo+r8n3VZN8B34+yVajzPTZ+ptTSuZZCw==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@svgr/babel-plugin-remove-jsx-empty-expression": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.0.0.tgz",
"integrity": "sha512-Ccj42ApsePD451AZJJf1QzTD1B/BOU392URJTeXFxSK709i0KUsGtbwyiqsKu7vsYxpTM0IA5clAKDyf9RCZyA==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@svgr/babel-plugin-replace-jsx-attribute-value": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.0.0.tgz",
"integrity": "sha512-88V26WGyt1Sfd1emBYmBJRWMmgarrExpKNVmI9vVozha4kqs6FzQJ/Kp5+EYli1apgX44518/0+t9+NU36lThQ==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@svgr/babel-plugin-svg-dynamic-title": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.0.0.tgz",
"integrity": "sha512-F7YXNLfGze+xv0KMQxrl2vkNbI9kzT9oDK55/kUuymh1ACyXkMV+VZWX1zEhSTfEKh7VkHVZGmVtHg8eTZ6PRg==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@svgr/babel-plugin-svg-em-dimensions": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.0.0.tgz",
"integrity": "sha512-+rghFXxdIqJNLQK08kwPBD3Z22/0b2tEZ9lKiL/yTfuyj1wW8HUXu4bo/XkogATIYuXSghVQOOCwURXzHGKyZA==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@svgr/babel-plugin-transform-react-native-svg": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.0.0.tgz",
"integrity": "sha512-VaphyHZ+xIKv5v0K0HCzyfAaLhPGJXSk2HkpYfXIOKb7DjLBv0soHDxNv6X0vr2titsxE7klb++u7iOf7TSrFQ==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@svgr/babel-plugin-transform-svg-component": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.2.0.tgz",
"integrity": "sha512-bhYIpsORb++wpsp91fymbFkf09Z/YEKR0DnFjxvN+8JHeCUD2unnh18jIMKnDJTWtvpTaGYPXELVe4OOzFI0xg==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@svgr/babel-preset": {
"version": "6.2.0",
@@ -54142,14 +54154,14 @@
"integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ=="
},
"@types/lodash": {
- "version": "4.14.181",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz",
- "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag=="
+ "version": "4.14.199",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz",
+ "integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg=="
},
"@types/lodash.debounce": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.6.tgz",
- "integrity": "sha512-4WTmnnhCfDvvuLMaF3KV4Qfki93KebocUF45msxhYyjMttZDQYzHkO639ohhk8+oco2cluAFL3t5+Jn4mleylQ==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/@types/lodash.debounce/-/lodash.debounce-4.0.7.tgz",
+ "integrity": "sha512-X1T4wMZ+gT000M2/91SYj0d/7JfeNZ9PeeOldSNoE/lunLeQXKvkmIumI29IaKMotU/ln/McOIvgzZcQ/3TrSA==",
"requires": {
"@types/lodash": "*"
}
@@ -54263,9 +54275,9 @@
"dev": true
},
"@types/prop-types": {
- "version": "15.7.4",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz",
- "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ=="
+ "version": "15.7.6",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.6.tgz",
+ "integrity": "sha512-RK/kBbYOQQHLYj9Z95eh7S6t7gq4Ojt/NT8HTk8bWVhA5DaF+5SMnxHKkP4gPNN3wAZkKP+VjAf0ebtYzf+fxg=="
},
"@types/qs": {
"version": "6.9.7",
@@ -54324,16 +54336,6 @@
"@types/react": "*",
"hoist-non-react-statics": "^3.3.0",
"redux": "^4.0.0"
- },
- "dependencies": {
- "redux": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.0.tgz",
- "integrity": "sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==",
- "requires": {
- "@babel/runtime": "^7.9.2"
- }
- }
}
},
"@types/react-syntax-highlighter": {
@@ -54664,8 +54666,7 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz",
"integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@webpack-cli/info": {
"version": "1.4.1",
@@ -54680,8 +54681,7 @@
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz",
"integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"@xmldom/xmldom": {
"version": "0.7.11",
@@ -54768,7 +54768,7 @@
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "requires": {}
+ "dev": true
},
"acorn-walk": {
"version": "7.2.0",
@@ -54850,8 +54850,7 @@
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
- "requires": {}
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
},
"ansi-escapes": {
"version": "4.3.2",
@@ -54943,6 +54942,7 @@
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
@@ -55197,7 +55197,8 @@
"astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
+ "dev": true
},
"async": {
"version": "3.2.3",
@@ -55369,8 +55370,7 @@
"version": "7.0.0-bridge.0",
"resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
"integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"babel-jest": {
"version": "27.3.1",
@@ -56744,8 +56744,7 @@
"codemirror-colorpicker": {
"version": "1.9.80",
"resolved": "https://registry.npmjs.org/codemirror-colorpicker/-/codemirror-colorpicker-1.9.80.tgz",
- "integrity": "sha512-7lGqNxf5haBJXLnVR1ynPiPkN2d1Whm0jdy8Z9QsSOhRWVyK2C2ihgm1dX4DCks57ht/jKMdpL9lYv+zAphxWQ==",
- "requires": {}
+ "integrity": "sha512-7lGqNxf5haBJXLnVR1ynPiPkN2d1Whm0jdy8Z9QsSOhRWVyK2C2ihgm1dX4DCks57ht/jKMdpL9lYv+zAphxWQ=="
},
"collect-v8-coverage": {
"version": "1.0.1",
@@ -56776,9 +56775,9 @@
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
},
"color-string": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz",
- "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==",
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
"requires": {
"color-name": "^1.0.0",
"simple-swizzle": "^0.2.2"
@@ -56947,8 +56946,7 @@
"linkifyjs": {
"version": "2.1.9",
"resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-2.1.9.tgz",
- "integrity": "sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug==",
- "requires": {}
+ "integrity": "sha512-74ivurkK6WHvHFozVaGtQWV38FzBwSTGNmJolEgFp7QgR2bl6ArUWlvT4GcHKbPe1z3nWYi+VUdDZk16zDOVug=="
}
}
},
@@ -57477,8 +57475,7 @@
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz",
"integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"css-select": {
"version": "4.3.0",
@@ -57658,29 +57655,25 @@
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz",
"integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"postcss-discard-duplicates": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz",
"integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"postcss-discard-empty": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz",
"integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"postcss-discard-overridden": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz",
"integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"postcss-merge-longhand": {
"version": "5.1.4",
@@ -57748,8 +57741,7 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz",
"integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"postcss-normalize-display-values": {
"version": "5.1.0",
@@ -58062,8 +58054,7 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz",
"integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"csso": {
"version": "4.2.0",
@@ -58466,6 +58457,7 @@
"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"
}
@@ -58696,6 +58688,7 @@
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
"integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
+ "dev": true,
"optional": true,
"requires": {
"iconv-lite": "~0.4.13"
@@ -58734,6 +58727,7 @@
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
"integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "dev": true,
"requires": {
"ansi-colors": "^4.1.1"
},
@@ -58741,7 +58735,8 @@
"ansi-colors": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "dev": true
}
}
},
@@ -58889,6 +58884,7 @@
"version": "7.31.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-7.31.0.tgz",
"integrity": "sha512-vafgJpSh2ia8tnTkNUkwxGmnumgckLh5aAbLa1xRmIn9+owi8qBNGKL+B881kNKNTy7FFqTEkpNkUvmw0n6PkA==",
+ "dev": true,
"requires": {
"@babel/code-frame": "7.12.11",
"@eslint/eslintrc": "^0.4.3",
@@ -58936,6 +58932,7 @@
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
"integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "dev": true,
"requires": {
"@babel/highlight": "^7.10.4"
}
@@ -58944,6 +58941,7 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
"integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+ "dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
@@ -58953,6 +58951,7 @@
"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"
}
@@ -58961,6 +58960,7 @@
"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"
}
@@ -58971,6 +58971,7 @@
"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"
}
@@ -58978,12 +58979,14 @@
"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=="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
},
"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",
@@ -58993,17 +58996,20 @@
"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=="
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
+ "dev": true
},
"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=="
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true
},
"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"
}
@@ -59012,6 +59018,7 @@
"version": "13.10.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz",
"integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==",
+ "dev": true,
"requires": {
"type-fest": "^0.20.2"
}
@@ -59019,22 +59026,26 @@
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
},
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
},
"is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "dev": true
},
"is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
"integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
"requires": {
"is-extglob": "^2.1.1"
}
@@ -59043,6 +59054,7 @@
"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"
@@ -59052,6 +59064,7 @@
"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"
}
@@ -59060,6 +59073,7 @@
"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",
@@ -59072,17 +59086,20 @@
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
},
"prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true
},
"semver": {
"version": "7.3.5",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
"integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
"requires": {
"lru-cache": "^6.0.0"
}
@@ -59091,6 +59108,7 @@
"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"
}
@@ -59098,12 +59116,14 @@
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
},
"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"
}
@@ -59111,12 +59131,14 @@
"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=="
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true
},
"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"
}
@@ -59124,7 +59146,8 @@
"yallist": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
}
}
},
@@ -59150,8 +59173,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-7.2.0.tgz",
"integrity": "sha512-rV4Qu0C3nfJKPOAhFujFxB7RMP+URFyQqqOZW9DMRD7ZDTFyjaIlETU3xzHELt++4ugC0+Jm084HQYkkJe+Ivg==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"eslint-import-resolver-node": {
"version": "0.3.4",
@@ -59626,6 +59648,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
"requires": {
"eslint-visitor-keys": "^1.1.0"
},
@@ -59633,7 +59656,8 @@
"eslint-visitor-keys": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
}
}
},
@@ -59689,6 +59713,7 @@
"version": "7.3.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
"integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "dev": true,
"requires": {
"acorn": "^7.4.0",
"acorn-jsx": "^5.3.1",
@@ -59698,12 +59723,14 @@
"acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "dev": true
},
"eslint-visitor-keys": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
}
}
},
@@ -59716,6 +59743,7 @@
"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"
},
@@ -59723,7 +59751,8 @@
"estraverse": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ=="
+ "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "dev": true
}
}
},
@@ -60315,6 +60344,7 @@
"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"
}
@@ -60482,6 +60512,7 @@
"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"
@@ -60491,6 +60522,7 @@
"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"
}
@@ -60500,7 +60532,8 @@
"flatted": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.1.tgz",
- "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg=="
+ "integrity": "sha512-OMQjaErSFHmHqZe+PSidH5n8j3O0F2DdnVh8JB4j4eUQ2k6KvB0qGfrKIhapvez5JerBbmWkaLYUYWISaESoXg==",
+ "dev": true
},
"flatten": {
"version": "1.0.2",
@@ -60788,7 +60821,8 @@
"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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc="
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
},
"fuse.js": {
"version": "6.6.2",
@@ -61678,8 +61712,7 @@
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
"integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"ieee754": {
"version": "1.1.13",
@@ -61702,6 +61735,11 @@
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
+ "immer": {
+ "version": "9.0.21",
+ "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz",
+ "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA=="
+ },
"import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -61776,7 +61814,8 @@
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
},
"indent-string": {
"version": "4.0.0",
@@ -64323,8 +64362,7 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
"integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"jest-regex-util": {
"version": "29.4.3",
@@ -66013,12 +66051,6 @@
"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
"integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw=="
},
- "jquery": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz",
- "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==",
- "peer": true
- },
"js-base64": {
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
@@ -66094,6 +66126,7 @@
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -66344,8 +66377,7 @@
"ws": {
"version": "8.8.1",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz",
- "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==",
- "requires": {}
+ "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA=="
}
}
},
@@ -66437,7 +66469,8 @@
"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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
},
"json-stringify-safe": {
"version": "5.0.1",
@@ -66853,7 +66886,8 @@
"lodash-es": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz",
- "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
+ "dev": true
},
"lodash._reinterpolate": {
"version": "3.0.0",
@@ -66864,12 +66898,13 @@
"lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8="
+ "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
+ "dev": true
},
"lodash.curry": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz",
- "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA="
+ "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA=="
},
"lodash.debounce": {
"version": "4.0.8",
@@ -66896,7 +66931,8 @@
"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=="
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
+ "dev": true
},
"lodash.startcase": {
"version": "4.4.0",
@@ -66926,7 +66962,8 @@
"lodash.truncate": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM="
+ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=",
+ "dev": true
},
"lodash.uniq": {
"version": "4.5.0",
@@ -67238,8 +67275,7 @@
"version": "7.2.1",
"resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.2.1.tgz",
"integrity": "sha512-9HrdzBAo0+sFz9ZYAGT5fB8ilzTW+q6lPocRxrIesMO+aB40V9MgFfbfMXxlGjf22OpRy+IXlvVaQenicdpgbg==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"matchmediaquery": {
"version": "0.3.1",
@@ -68062,8 +68098,7 @@
"mockingoose": {
"version": "2.15.2",
"resolved": "https://registry.npmjs.org/mockingoose/-/mockingoose-2.15.2.tgz",
- "integrity": "sha512-50mtbAk29Go5hdhzqTmjmE67Z/cB0yPz45u2jrHoGm4nkYnnBq224viWgyKwnxzWw8birnqn98viM2cRBTnJvw==",
- "requires": {}
+ "integrity": "sha512-50mtbAk29Go5hdhzqTmjmE67Z/cB0yPz45u2jrHoGm4nkYnnBq224viWgyKwnxzWw8birnqn98viM2cRBTnJvw=="
},
"mongodb": {
"version": "2.2.36",
@@ -68186,8 +68221,7 @@
"mongoose-legacy-pluralize": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
- "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==",
- "requires": {}
+ "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
},
"mpath": {
"version": "0.8.4",
@@ -68422,7 +68456,8 @@
"natural-compare": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
},
"negotiator": {
"version": "0.6.3",
@@ -69948,8 +69983,7 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/postcss-focus/-/postcss-focus-5.0.1.tgz",
"integrity": "sha512-iVP+4VLenlI0tHHJD+7HyE+7pQ6Hlg3+Zm/xTwNE1LT7OgmYC4r1ale6AnEkABGNKKE3j1LkF/BNcv89lDoICw==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"postcss-focus-visible": {
"version": "4.0.0",
@@ -70239,8 +70273,7 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz",
"integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"postcss-modules-local-by-default": {
"version": "4.0.3",
@@ -70843,7 +70876,8 @@
"progress": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
},
"promise-inflight": {
"version": "1.0.1",
@@ -71127,6 +71161,27 @@
"prop-types": "^15.6.2"
}
},
+ "react-base16-styling": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.9.1.tgz",
+ "integrity": "sha512-1s0CY1zRBOQ5M3T61wetEpvQmsYSNtWEcdYzyZNxKa8t7oDvaOn9d21xrGezGAHFWLM7SHcktPuPTrvoqxSfKw==",
+ "requires": {
+ "@babel/runtime": "^7.16.7",
+ "@types/base16": "^1.0.2",
+ "@types/lodash": "^4.14.178",
+ "base16": "^1.0.0",
+ "color": "^3.2.1",
+ "csstype": "^3.0.10",
+ "lodash.curry": "^4.1.1"
+ },
+ "dependencies": {
+ "csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ }
+ }
+ },
"react-color": {
"version": "2.19.3",
"resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz",
@@ -71146,8 +71201,7 @@
"version": "5.6.1",
"resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz",
"integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"react-docgen": {
"version": "5.4.3",
@@ -71188,8 +71242,19 @@
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz",
"integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==",
- "dev": true,
- "requires": {}
+ "dev": true
+ },
+ "react-dock": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/react-dock/-/react-dock-0.6.0.tgz",
+ "integrity": "sha512-jEOhv1s+pqRQ4JxgUw4XUotnprOehZ23mqchf3whxYXnvNgTQOXCxh6bpcqW8P6OybIk2bYO18r3qimZ3ypCbg==",
+ "requires": {
+ "@babel/runtime": "^7.18.3",
+ "@types/lodash": "^4.14.182",
+ "@types/prop-types": "^15.7.5",
+ "lodash.debounce": "^4.0.8",
+ "prop-types": "^15.8.1"
+ }
},
"react-dom": {
"version": "16.14.0",
@@ -71243,8 +71308,7 @@
"react-ga": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/react-ga/-/react-ga-3.3.0.tgz",
- "integrity": "sha512-o8RScHj6Lb8cwy3GMrVH6NJvL+y0zpJvKtc0+wmH7Bt23rszJmnqEQxRbyrqUzk9DTJIHoP42bfO5rswC9SWBQ==",
- "requires": {}
+ "integrity": "sha512-o8RScHj6Lb8cwy3GMrVH6NJvL+y0zpJvKtc0+wmH7Bt23rszJmnqEQxRbyrqUzk9DTJIHoP42bfO5rswC9SWBQ=="
},
"react-helmet": {
"version": "5.2.1",
@@ -71281,6 +71345,16 @@
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
+ "react-json-tree": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/react-json-tree/-/react-json-tree-0.18.0.tgz",
+ "integrity": "sha512-Qe6HKSXrr++n9Y31nkRJ3XvQMATISpqigH1vEKhLwB56+nk5thTP0ITThpjxY6ZG/ubpVq/aEHIcyLP/OPHxeA==",
+ "requires": {
+ "@babel/runtime": "^7.20.6",
+ "@types/lodash": "^4.14.191",
+ "react-base16-styling": "^0.9.1"
+ }
+ },
"react-lifecycles-compat": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
@@ -71673,14 +71747,11 @@
}
},
"redux": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz",
- "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.1.tgz",
+ "integrity": "sha512-LAUYz4lc+Do8/g7aeRa8JkyDErK6ekstQaqWQrNRW//MY1TvCEpMtpTWvlQ+FPbWCx+Xixu/6SHt5N0HR+SB4w==",
"requires": {
- "lodash": "^4.2.1",
- "lodash-es": "^4.2.1",
- "loose-envify": "^1.1.0",
- "symbol-observable": "^1.0.3"
+ "@babel/runtime": "^7.9.2"
}
},
"redux-auth-wrapper": {
@@ -71725,9 +71796,9 @@
}
},
"redux-thunk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.3.0.tgz",
- "integrity": "sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw=="
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.2.tgz",
+ "integrity": "sha512-+P3TjtnP0k/FEjcBL5FZpoovtvrTNT/UXd4/sluaSyrURlSlhLSzEdfsTBW7WsKB6yPvgd7q/iZPICFjW4o57Q=="
},
"refractor": {
"version": "3.6.0",
@@ -71795,7 +71866,8 @@
"regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
- "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg=="
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
+ "dev": true
},
"regexpu-core": {
"version": "5.3.2",
@@ -72029,9 +72101,9 @@
"dev": true
},
"reselect": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.0.0.tgz",
- "integrity": "sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA=="
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.8.tgz",
+ "integrity": "sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ=="
},
"resolve": {
"version": "1.20.0",
@@ -72501,7 +72573,7 @@
"simple-swizzle": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
"requires": {
"is-arrayish": "^0.3.1"
},
@@ -72547,8 +72619,7 @@
"sinon-mongoose": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/sinon-mongoose/-/sinon-mongoose-2.3.0.tgz",
- "integrity": "sha512-d0rrL53wuDDs91GMCFAvQam64IpdVfkaxA4cGLTZfw1d5tTg6+F/D7F080d1n3d1gSHJBZLUf9pGpijC/x7xKQ==",
- "requires": {}
+ "integrity": "sha512-d0rrL53wuDDs91GMCFAvQam64IpdVfkaxA4cGLTZfw1d5tTg6+F/D7F080d1n3d1gSHJBZLUf9pGpijC/x7xKQ=="
},
"sisteransi": {
"version": "1.0.5",
@@ -72566,6 +72637,7 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
"integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "dev": true,
"requires": {
"ansi-styles": "^4.0.0",
"astral-regex": "^2.0.0",
@@ -72576,6 +72648,7 @@
"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"
}
@@ -72584,6 +72657,7 @@
"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"
}
@@ -72591,12 +72665,14 @@
"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=="
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "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=="
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
}
}
},
@@ -72729,7 +72805,8 @@
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
},
"sshpk": {
"version": "1.16.1",
@@ -73215,14 +73292,14 @@
"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=="
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true
},
"style-loader": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz",
"integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"style-to-object": {
"version": "0.3.0",
@@ -73307,11 +73384,6 @@
"integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==",
"dev": true
},
- "symbol-observable": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
- "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="
- },
"symbol-tree": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
@@ -73327,6 +73399,7 @@
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz",
"integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==",
+ "dev": true,
"requires": {
"ajv": "^8.0.1",
"lodash.clonedeep": "^4.5.0",
@@ -73340,6 +73413,7 @@
"version": "8.6.2",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz",
"integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==",
+ "dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@@ -73350,7 +73424,8 @@
"json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
}
}
},
@@ -73570,7 +73645,8 @@
"text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ="
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
},
"throat": {
"version": "6.0.1",
@@ -73734,13 +73810,6 @@
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
},
- "type-fest": {
- "version": "3.13.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.1.tgz",
- "integrity": "sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==",
- "optional": true,
- "peer": true
- },
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
@@ -73765,13 +73834,6 @@
"is-typedarray": "^1.0.0"
}
},
- "typescript": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
- "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
- "dev": true,
- "peer": true
- },
"uglify-js": {
"version": "3.17.4",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
@@ -74031,15 +74093,13 @@
"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==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"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==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"use-latest": {
"version": "1.2.1",
@@ -74095,7 +74155,8 @@
"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=="
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==",
+ "dev": true
},
"v8-to-istanbul": {
"version": "8.1.0",
@@ -74390,8 +74451,7 @@
"acorn-import-assertions": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
- "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
- "requires": {}
+ "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw=="
},
"glob-to-regexp": {
"version": "0.4.1",
@@ -74506,7 +74566,7 @@
"version": "2.25.1",
"resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.1.tgz",
"integrity": "sha512-Koh0KyU/RPYwel/khxbsDz9ibDivmUbrRuKSSQvW42KSDdO4w23WI3SkHpSUKHE76LrFnnM/L7JCrpBwu8AXYw==",
- "devOptional": true,
+ "dev": true,
"requires": {
"ansi-html-community": "0.0.8",
"html-entities": "^2.1.0",
@@ -74672,7 +74732,8 @@
"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=="
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
+ "dev": true
},
"wordwrap": {
"version": "1.0.0",
@@ -74731,8 +74792,7 @@
"version": "7.5.5",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.5.tgz",
"integrity": "sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==",
- "dev": true,
- "requires": {}
+ "dev": true
},
"xhr": {
"version": "2.6.0",
diff --git a/package.json b/package.json
index 5d7284d044..cf5909f185 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "p5.js-web-editor",
- "version": "2.9.3",
+ "version": "2.11.0",
"description": "The web editor for p5.js.",
"scripts": {
"clean": "rimraf dist",
@@ -154,14 +154,16 @@
},
"dependencies": {
"@auth0/s3": "^1.0.0",
+ "@aws-sdk/client-s3": "^3.412.0",
"@babel/core": "^7.14.6",
"@babel/register": "^7.14.5",
"@emmetio/codemirror-plugin": "^1.2.4",
"@gatsbyjs/webpack-hot-middleware": "^2.25.3",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
"@redux-devtools/core": "^3.11.0",
- "@redux-devtools/dock-monitor": "^2.1.0",
- "@redux-devtools/log-monitor": "^3.1.0",
+ "@redux-devtools/dock-monitor": "^3.0.1",
+ "@redux-devtools/log-monitor": "^4.0.2",
+ "@reduxjs/toolkit": "^1.9.3",
"async": "^3.2.3",
"axios": "^0.21.2",
"babel-plugin-styled-components": "^1.13.2",
@@ -237,12 +239,11 @@
"react-split-pane": "^0.1.92",
"react-tabs": "^2.3.1",
"react-transition-group": "^4.4.2",
- "redux": "^3.7.2",
+ "redux": "^4.2.1",
"redux-auth-wrapper": "^2.1.0",
"redux-thunk": "^2.3.0",
"regenerator-runtime": "^0.13.9",
"remark-slug": "^6.1.0",
- "reselect": "^4.0.0",
"s3-policy-v4": "0.0.3",
"shortid": "^2.2.16",
"sinon": "^7.5.0",
diff --git a/server/controllers/aws.controller.js b/server/controllers/aws.controller.js
index 91d3d487be..8bbf25576c 100644
--- a/server/controllers/aws.controller.js
+++ b/server/controllers/aws.controller.js
@@ -1,23 +1,24 @@
import { v4 as uuidv4 } from 'uuid';
import S3Policy from 's3-policy-v4';
-import s3 from '@auth0/s3';
+import {
+ S3Client,
+ HeadObjectCommand,
+ CopyObjectCommand,
+ ListObjectsCommand,
+ DeleteObjectsCommand
+} from '@aws-sdk/client-s3';
import mongoose from 'mongoose';
import { getProjectsForUserId } from './project.controller';
-import { findUserByUsername } from './user.controller';
+import User from '../models/user';
const { ObjectId } = mongoose.Types;
-const client = s3.createClient({
- maxAsyncS3: 20,
- s3RetryCount: 3,
- s3RetryDelay: 1000,
- multipartUploadThreshold: 20971520, // this is the default (20 MB)
- multipartUploadSize: 15728640, // this is the default (15 MB)
- s3Options: {
- accessKeyId: `${process.env.AWS_ACCESS_KEY}`,
- secretAccessKey: `${process.env.AWS_SECRET_KEY}`,
- region: `${process.env.AWS_REGION}`
- }
+const s3Client = new S3Client({
+ credentials: {
+ accessKeyId: process.env.AWS_ACCESS_KEY,
+ secretAccessKey: process.env.AWS_SECRET_KEY
+ },
+ region: process.env.AWS_REGION
});
const s3Bucket =
@@ -39,21 +40,26 @@ export function getObjectKey(url) {
return objectKey;
}
-export function deleteObjectsFromS3(keyList, callback) {
- const keys = keyList.map((key) => { return { Key: key }; }); // eslint-disable-line
- if (keyList.length > 0) {
+export async function deleteObjectsFromS3(keyList, callback) {
+ const objectsToDelete = keyList.map((key) => ({ Key: key }));
+
+ if (objectsToDelete.length > 0) {
const params = {
- Bucket: `${process.env.S3_BUCKET}`,
- Delete: {
- Objects: keys
- }
+ Bucket: process.env.S3_BUCKET,
+ Delete: { Objects: objectsToDelete }
};
- const del = client.deleteObjects(params);
- del.on('end', () => {
+
+ try {
+ await s3Client.send(new DeleteObjectsCommand(params));
if (callback) {
callback();
}
- });
+ } catch (error) {
+ console.error('Error deleting objects from S3: ', error);
+ if (callback) {
+ callback(error);
+ }
+ }
} else if (callback) {
callback();
}
@@ -61,12 +67,7 @@ export function deleteObjectsFromS3(keyList, callback) {
export function deleteObjectFromS3(req, res) {
const { objectKey, userId } = req.params;
- let fullObjectKey;
- if (userId) {
- fullObjectKey = `${userId}/${objectKey}`;
- } else {
- fullObjectKey = objectKey;
- }
+ const fullObjectKey = userId ? `${userId}/${objectKey}` : objectKey;
deleteObjectsFromS3([fullObjectKey], () => {
res.json({ success: true });
});
@@ -96,151 +97,142 @@ export function signS3(req, res) {
res.json(policy);
}
-export function copyObjectInS3(url, userId) {
- return new Promise((resolve, reject) => {
- const objectKey = getObjectKey(url);
- const fileExtension = getExtension(objectKey);
- const newFilename = uuidv4() + fileExtension;
- const headParams = {
- Bucket: `${process.env.S3_BUCKET}`,
- Key: `${objectKey}`
- };
- client.s3.headObject(headParams, (headErr) => {
- if (headErr) {
- reject(
- new Error(
- `Object with key ${process.env.S3_BUCKET}/${objectKey} does not exist.`
- )
- );
- return;
- }
- const params = {
- Bucket: `${process.env.S3_BUCKET}`,
- CopySource: `${process.env.S3_BUCKET}/${objectKey}`,
- Key: `${userId}/${newFilename}`,
- ACL: 'public-read'
- };
- const copy = client.copyObject(params);
- copy.on('err', (err) => {
- reject(err);
- });
- copy.on('end', (data) => {
- resolve(`${s3Bucket}${userId}/${newFilename}`);
- });
- });
- });
+export async function copyObjectInS3(url, userId) {
+ const objectKey = getObjectKey(url);
+ const fileExtension = getExtension(objectKey);
+ const newFilename = uuidv4() + fileExtension;
+ const headParams = {
+ Bucket: process.env.S3_BUCKET,
+ Key: objectKey
+ };
+
+ await s3Client.send(new HeadObjectCommand(headParams));
+
+ const params = {
+ Bucket: process.env.S3_BUCKET,
+ CopySource: `${process.env.S3_BUCKET}/${objectKey}`,
+ Key: `${userId}/${newFilename}`,
+ ACL: 'public-read'
+ };
+
+ try {
+ await s3Client.send(new CopyObjectCommand(params));
+ return `${s3Bucket}${userId}/${newFilename}`;
+ } catch (error) {
+ console.error('Error copying object in S3:', error);
+ throw error;
+ }
}
-export function copyObjectInS3RequestHandler(req, res) {
+export async function copyObjectInS3RequestHandler(req, res) {
const { url } = req.body;
- copyObjectInS3(url, req.user.id).then((newUrl) => {
- res.json({ url: newUrl });
- });
+ const newUrl = await copyObjectInS3(url, req.user.id);
+ res.json({ url: newUrl });
}
-export function moveObjectToUserInS3(url, userId) {
- return new Promise((resolve, reject) => {
- const objectKey = getObjectKey(url);
- const fileExtension = getExtension(objectKey);
- const newFilename = uuidv4() + fileExtension;
+export async function moveObjectToUserInS3(url, userId) {
+ const objectKey = getObjectKey(url);
+ const fileExtension = getExtension(objectKey);
+ const newFilename = uuidv4() + fileExtension;
+
+ try {
const headParams = {
- Bucket: `${process.env.S3_BUCKET}`,
- Key: `${objectKey}`
+ Bucket: process.env.S3_BUCKET,
+ Key: objectKey
};
- client.s3.headObject(headParams, (headErr) => {
- if (headErr) {
- reject(
- new Error(
- `Object with key ${process.env.S3_BUCKET}/${objectKey} does not exist.`
- )
- );
- return;
- }
- const params = {
- Bucket: `${process.env.S3_BUCKET}`,
- CopySource: `${process.env.S3_BUCKET}/${objectKey}`,
- Key: `${userId}/${newFilename}`,
- ACL: 'public-read'
- };
- const move = client.moveObject(params);
- move.on('err', (err) => {
- reject(err);
- });
- move.on('end', (data) => {
- resolve(`${s3Bucket}${userId}/${newFilename}`);
- });
- });
- });
+ await s3Client.send(new HeadObjectCommand(headParams));
+ } catch (headErr) {
+ throw new Error(
+ `Object with key ${process.env.S3_BUCKET}/${objectKey} does not exist.`
+ );
+ }
+
+ const params = {
+ Bucket: process.env.S3_BUCKET,
+ CopySource: `${process.env.S3_BUCKET}/${objectKey}`,
+ Key: `${userId}/${newFilename}`,
+ ACL: 'public-read'
+ };
+
+ await s3Client.send(new CopyObjectCommand(params));
+ return `${s3Bucket}${userId}/${newFilename}`;
}
-export function listObjectsInS3ForUser(userId) {
- let assets = [];
- return new Promise((resolve) => {
+export async function listObjectsInS3ForUser(userId) {
+ try {
+ let assets = [];
const params = {
- s3Params: {
- Bucket: `${process.env.S3_BUCKET}`,
- Prefix: `${userId}/`
- }
+ Bucket: process.env.S3_BUCKET,
+ Prefix: `${userId}/`
};
- client
- .listObjects(params)
- .on('data', (data) => {
- assets = assets.concat(
- data.Contents.map((object) => ({
- key: object.Key,
- size: object.Size
- }))
- );
- })
- .on('end', () => {
- resolve();
- });
- })
- .then(() => getProjectsForUserId(userId))
- .then((projects) => {
- const projectAssets = [];
- let totalSize = 0;
- assets.forEach((asset) => {
- const name = asset.key.split('/').pop();
- const foundAsset = {
- key: asset.key,
- name,
- size: asset.size,
- url: `${process.env.S3_BUCKET_URL_BASE}${asset.key}`
- };
- totalSize += asset.size;
- projects.some((project) => {
- let found = false;
- project.files.some((file) => {
- if (!file.url) return false;
- if (file.url.includes(asset.key)) {
- found = true;
- foundAsset.name = file.name;
- foundAsset.sketchName = project.name;
- foundAsset.sketchId = project.id;
- foundAsset.url = file.url;
- return true;
- }
- return false;
- });
- return found;
+
+ const data = await s3Client.send(new ListObjectsCommand(params));
+
+ assets = data.Contents.map((object) => ({
+ key: object.Key,
+ size: object.Size
+ }));
+
+ const projects = await getProjectsForUserId(userId);
+ const projectAssets = [];
+ let totalSize = 0;
+
+ assets.forEach((asset) => {
+ const name = asset.key.split('/').pop();
+ const foundAsset = {
+ key: asset.key,
+ name,
+ size: asset.size,
+ url: `${process.env.S3_BUCKET_URL_BASE}${asset.key}`
+ };
+ totalSize += asset.size;
+
+ projects.some((project) => {
+ let found = false;
+ project.files.some((file) => {
+ if (!file.url) return false;
+ if (file.url.includes(asset.key)) {
+ found = true;
+ foundAsset.name = file.name;
+ foundAsset.sketchName = project.name;
+ foundAsset.sketchId = project.id;
+ foundAsset.url = file.url;
+ return true;
+ }
+ return false;
});
- projectAssets.push(foundAsset);
+ return found;
});
- return Promise.resolve({ assets: projectAssets, totalSize });
- })
- .catch((err) => {
- console.log('got an error');
- console.log(err);
+ projectAssets.push(foundAsset);
});
+
+ return { assets: projectAssets, totalSize };
+ } catch (error) {
+ console.log('Got an error:', error);
+ throw error;
+ }
}
export function listObjectsInS3ForUserRequestHandler(req, res) {
const { username } = req.user;
- findUserByUsername(username, (user) => {
+ User.findByUsername(username, (err, user) => {
+ if (err) {
+ console.error('Error fetching user:', err.message);
+ res.status(500).json({ error: 'Failed to fetch user' });
+ return;
+ }
+ if (!user) {
+ res.status(404).json({ error: 'User not found' });
+ return;
+ }
const userId = user.id;
- listObjectsInS3ForUser(userId).then((objects) => {
- res.json(objects);
- });
+ listObjectsInS3ForUser(userId)
+ .then((objects) => {
+ res.json(objects);
+ })
+ .catch((error) => {
+ console.error('Error listing objects in S3:', error.message);
+ res.status(500).json({ error: 'Failed to list objects in S3' });
+ });
});
}
diff --git a/server/controllers/collection.controller/collectionForUserExists.js b/server/controllers/collection.controller/collectionForUserExists.js
index 61893c6224..8b6bb05f87 100644
--- a/server/controllers/collection.controller/collectionForUserExists.js
+++ b/server/controllers/collection.controller/collectionForUserExists.js
@@ -1,30 +1,17 @@
import Collection from '../../models/collection';
import User from '../../models/user';
-export default function collectionForUserExists(
- username,
- collectionId,
- callback
-) {
- function sendFailure() {
- callback(false);
- }
-
- function sendSuccess(collection) {
- callback(collection != null);
- }
-
- function findUser() {
- return User.findByUsername(username);
- }
-
- function findCollection(owner) {
- if (owner == null) {
- throw new Error('User not found');
- }
-
- return Collection.findOne({ _id: collectionId, owner });
- }
-
- return findUser().then(findCollection).then(sendSuccess).catch(sendFailure);
+/**
+ * @param {string} username
+ * @param {string} collectionId
+ * @return {Promise}
+ */
+export default async function collectionForUserExists(username, collectionId) {
+ const user = await User.findByUsername(username);
+ if (!user) return false;
+ const collection = await Collection.findOne({
+ _id: collectionId,
+ owner: user
+ }).exec();
+ return collection != null;
}
diff --git a/server/controllers/project.controller.js b/server/controllers/project.controller.js
index fd48b7558d..817384f82d 100644
--- a/server/controllers/project.controller.js
+++ b/server/controllers/project.controller.js
@@ -169,29 +169,28 @@ export function getProjects(req, res) {
}
}
-export function projectExists(projectId, callback) {
- Project.findById(projectId, (err, project) =>
- project ? callback(true) : callback(false)
- );
+/**
+ * @param {string} projectId
+ * @return {Promise}
+ */
+export async function projectExists(projectId) {
+ const project = await Project.findById(projectId);
+ return project != null;
}
-export function projectForUserExists(username, projectId, callback) {
- User.findByUsername(username, (err, user) => {
- if (!user) {
- callback(false);
- return;
- }
- Project.findOne(
- { user: user._id, $or: [{ _id: projectId }, { slug: projectId }] },
- (innerErr, project) => {
- if (!project) {
- callback(false);
- return;
- }
- callback(true);
- }
- );
+/**
+ * @param {string} username
+ * @param {string} projectId
+ * @return {Promise}
+ */
+export async function projectForUserExists(username, projectId) {
+ const user = await User.findByUsername(username);
+ if (!user) return false;
+ const project = await Project.findOne({
+ user: user._id,
+ $or: [{ _id: projectId }, { slug: projectId }]
});
+ return project != null;
}
function bundleExternalLibs(project) {
@@ -215,48 +214,27 @@ function bundleExternalLibs(project) {
});
}
-function addFileToZip(file, files, zip, path = '') {
- return new Promise((resolve, reject) => {
- if (file.fileType === 'folder') {
- const newPath = file.name === 'root' ? path : `${path}${file.name}/`;
- const numChildFiles = file.children.filter((f) => f.fileType !== 'folder')
- .length;
- let childrenAdded = 0;
- if (numChildFiles === 0) {
- zip.folder(file.name);
- resolve();
- }
- file.children.forEach(async (fileId) => {
+async function addFileToZip(file, files, zip) {
+ if (file.fileType === 'folder') {
+ const folderZip = file.name === 'root' ? zip : zip.folder(file.name);
+ await Promise.all(
+ file.children.map((fileId) => {
const childFile = files.find((f) => f.id === fileId);
-
- try {
- await addFileToZip(childFile, files, zip, newPath);
- childrenAdded += 1;
-
- if (childrenAdded === numChildFiles) {
- resolve();
- }
- } catch (err) {
- reject(err);
- }
+ return addFileToZip(childFile, files, folderZip);
+ })
+ );
+ } else if (file.url) {
+ try {
+ const res = await axios.get(file.url, {
+ responseType: 'arraybuffer'
});
- } else if (file.url) {
- axios
- .get(file.url, {
- responseType: 'arraybuffer'
- })
- .then(({ data }) => {
- zip.file(`${path}${file.name}`, data);
- resolve();
- })
- .catch((err) => {
- reject(err);
- });
- } else {
- zip.file(`${path}${file.name}`, file.content);
- resolve();
+ zip.file(file.name, res.data);
+ } catch (e) {
+ zip.file(file.name, new ArrayBuffer(0));
}
- });
+ } else {
+ zip.file(file.name, file.content);
+ }
}
async function buildZip(project, req, res) {
diff --git a/server/controllers/project.controller/__test__/getProjectsForUser.test.js b/server/controllers/project.controller/__test__/getProjectsForUser.test.js
index 121a2184fd..0160cb1477 100644
--- a/server/controllers/project.controller/__test__/getProjectsForUser.test.js
+++ b/server/controllers/project.controller/__test__/getProjectsForUser.test.js
@@ -23,7 +23,7 @@ describe('project.controller', () => {
});
describe('getProjectsForUser()', () => {
- it('returns empty array user not supplied as parameter', (done) => {
+ it('returns validation error if username not provided', (done) => {
const request = new Request();
request.setParams({});
const response = new Response();
@@ -31,8 +31,10 @@ describe('project.controller', () => {
const promise = getProjectsForUser(request, response);
function expectations() {
- expect(response.status).toHaveBeenCalledWith(200);
- expect(response.json).toHaveBeenCalledWith([]);
+ expect(response.status).toHaveBeenCalledWith(422);
+ expect(response.json).toHaveBeenCalledWith({
+ message: 'Username not provided'
+ });
done();
}
@@ -47,7 +49,7 @@ describe('project.controller', () => {
UserMock.expects('findOne')
.withArgs({ username: 'abc123' })
- .yields(null, null);
+ .resolves(null);
const promise = getProjectsForUser(request, response);
@@ -70,15 +72,15 @@ describe('project.controller', () => {
UserMock.expects('findOne')
.withArgs({ username: 'abc123' })
- .yields(new Error(), null);
+ .rejects(new Error());
const promise = getProjectsForUser(request, response);
function expectations() {
- expect(response.status).toHaveBeenCalledWith(500);
expect(response.json).toHaveBeenCalledWith({
message: 'Error fetching projects'
});
+ expect(response.status).toHaveBeenCalledWith(500);
done();
}
@@ -88,7 +90,7 @@ describe('project.controller', () => {
});
describe('apiGetProjectsForUser()', () => {
- it('returns validation error if user id not provided', (done) => {
+ it('returns validation error if username not provided', (done) => {
const request = new Request();
request.setParams({});
const response = new Response();
@@ -114,7 +116,7 @@ describe('project.controller', () => {
UserMock.expects('findOne')
.withArgs({ username: 'abc123' })
- .yields(null, null);
+ .resolves(null);
const promise = apiGetProjectsForUser(request, response);
@@ -137,7 +139,7 @@ describe('project.controller', () => {
UserMock.expects('findOne')
.withArgs({ username: 'abc123' })
- .yields(new Error(), null);
+ .rejects(new Error());
const promise = apiGetProjectsForUser(request, response);
diff --git a/server/controllers/project.controller/getProjectsForUser.js b/server/controllers/project.controller/getProjectsForUser.js
index 5579559915..a811ecd55c 100644
--- a/server/controllers/project.controller/getProjectsForUser.js
+++ b/server/controllers/project.controller/getProjectsForUser.js
@@ -1,76 +1,47 @@
import Project from '../../models/project';
import User from '../../models/user';
import { toApi as toApiProjectObject } from '../../domain-objects/Project';
-import createApplicationErrorClass from '../../utils/createApplicationErrorClass';
-const UserNotFoundError = createApplicationErrorClass('UserNotFoundError');
-
-function getProjectsForUserName(username) {
- return new Promise((resolve, reject) => {
- User.findByUsername(username, (err, user) => {
- if (err) {
- reject(err);
- return;
- }
-
- if (!user) {
- reject(new UserNotFoundError());
- return;
- }
-
- Project.find({ user: user._id })
- .sort('-createdAt')
- .select('name files id createdAt updatedAt')
- .exec((innerErr, projects) => {
- if (innerErr) {
- reject(innerErr);
- return;
- }
-
- resolve(projects);
- });
- });
- });
-}
-
-export default function getProjectsForUser(req, res) {
- if (req.params.username) {
- return getProjectsForUserName(req.params.username)
- .then((projects) => res.json(projects))
- .catch((err) => {
- if (err instanceof UserNotFoundError) {
- res
- .status(404)
- .json({ message: 'User with that username does not exist.' });
- } else {
- res.status(500).json({ message: 'Error fetching projects' });
- }
- });
+/**
+ * Fetches projects for the username in the request.
+ * Handles errors.
+ * Returns a success response based on the provided `mapProjectsToResponse` function.
+ */
+const createCoreHandler = (mapProjectsToResponse) => async (req, res) => {
+ try {
+ const { username } = req.params;
+ if (!username) {
+ res.status(422).json({ message: 'Username not provided' });
+ return;
+ }
+ const user = await User.findByUsername(username);
+ if (!user) {
+ res
+ .status(404)
+ .json({ message: 'User with that username does not exist.' });
+ return;
+ }
+ const projects = await Project.find({ user: user._id })
+ .sort('-createdAt')
+ .select('name files id createdAt updatedAt')
+ .exec();
+ const response = mapProjectsToResponse(projects);
+ res.json(response);
+ } catch (e) {
+ res.status(500).json({ message: 'Error fetching projects' });
}
-
- // could just move this to client side
- res.status(200).json([]);
- return Promise.resolve();
-}
-
-export function apiGetProjectsForUser(req, res) {
- if (req.params.username) {
- return getProjectsForUserName(req.params.username)
- .then((projects) => {
- const asApiObjects = projects.map((p) => toApiProjectObject(p));
- res.json({ sketches: asApiObjects });
- })
- .catch((err) => {
- if (err instanceof UserNotFoundError) {
- res
- .status(404)
- .json({ message: 'User with that username does not exist.' });
- } else {
- res.status(500).json({ message: 'Error fetching projects' });
- }
- });
- }
-
- res.status(422).json({ message: 'Username not provided' });
- return Promise.resolve();
-}
+};
+
+/**
+ * Main handler returns an array of project objects.
+ */
+const getProjectsForUser = createCoreHandler((projects) => projects);
+export default getProjectsForUser;
+
+/**
+ * Handler for the public API returns an object with property `sketches`.
+ * The array of sketches contains the `id` and `name` only.
+ */
+export const apiGetProjectsForUser = createCoreHandler((projects) => ({
+ sketches: projects.map((p) => toApiProjectObject(p))
+}));
diff --git a/server/controllers/session.controller.js b/server/controllers/session.controller.js
index 29b7f1be3f..6604dcdc69 100644
--- a/server/controllers/session.controller.js
+++ b/server/controllers/session.controller.js
@@ -36,6 +36,12 @@ export function destroySession(req, res, next) {
next(err);
return;
}
- res.json({ success: true });
+ req.session.destroy((error) => {
+ if (error) {
+ next(error);
+ return;
+ }
+ res.json({ success: true });
+ });
});
}
diff --git a/server/controllers/user.controller.js b/server/controllers/user.controller.js
index bc3e179662..a48cda90d8 100644
--- a/server/controllers/user.controller.js
+++ b/server/controllers/user.controller.js
@@ -29,12 +29,6 @@ const random = (done) => {
});
};
-export function findUserByUsername(username, cb) {
- User.findByUsername(username, (err, user) => {
- cb(user);
- });
-}
-
export function createUser(req, res, next) {
const { username, email } = req.body;
const { password } = req.body;
@@ -314,10 +308,13 @@ export function updatePassword(req, res) {
// eventually send email that the password has been reset
}
-export function userExists(username, callback) {
- User.findByUsername(username, (err, user) =>
- user ? callback(true) : callback(false)
- );
+/**
+ * @param {string} username
+ * @return {Promise}
+ */
+export async function userExists(username) {
+ const user = await User.findByUsername(username);
+ return user != null;
}
export function saveUser(res, user) {
diff --git a/server/domain-objects/createDefaultFiles.js b/server/domain-objects/createDefaultFiles.js
index 8dc1bd1990..155ff6f6a6 100644
--- a/server/domain-objects/createDefaultFiles.js
+++ b/server/domain-objects/createDefaultFiles.js
@@ -9,8 +9,8 @@ function draw() {
export const defaultHTML = `
-
-
+
+
diff --git a/server/migrations/s3UnderUser.js b/server/migrations/s3UnderUser.js
index 33500f75de..0657b0edc3 100644
--- a/server/migrations/s3UnderUser.js
+++ b/server/migrations/s3UnderUser.js
@@ -1,96 +1,100 @@
/* eslint-disable */
-import s3 from '@auth0/s3';
+import {
+ S3Client,
+ CopyObjectCommand,
+ HeadObjectCommand
+} from '@aws-sdk/client-s3';
import path from 'path';
import mongoose from 'mongoose';
import User from '../models/user';
import Project from '../models/project';
import async from 'async';
-require('dotenv').config({path: path.resolve('.env')});
-mongoose.connect('mongodb://localhost:27017/p5js-web-editor');
-mongoose.connection.on('error', () => {
- console.error('MongoDB Connection Error. Please make sure that MongoDB is running.');
- process.exit(1);
-});
+import dotenv from 'dotenv';
-let client = s3.createClient({
- maxAsyncS3: 20,
- s3RetryCount: 3,
- s3RetryDelay: 1000,
- multipartUploadThreshold: 20971520, // this is the default (20 MB)
- multipartUploadSize: 15728640, // this is the default (15 MB)
- s3Options: {
- accessKeyId: `${process.env.AWS_ACCESS_KEY}`,
- secretAccessKey: `${process.env.AWS_SECRET_KEY}`,
- region: `${process.env.AWS_REGION}`
- },
-});
+dotenv.config({ path: path.resolve('.env') });
-const CHUNK = 100;
-Project.count({}).exec().then((numProjects) => {
+async function main() {
+ mongoose.connect('mongodb://localhost:27017/p5js-web-editor');
+ mongoose.connection.on('error', () => {
+ console.error(
+ 'MongoDB Connection Error. Please make sure that MongoDB is running.'
+ );
+ process.exit(1);
+ });
+
+ const s3Client = new S3Client({
+ credentials: {
+ accessKeyId: process.env.AWS_ACCESS_KEY,
+ secretAccessKey: process.env.AWS_SECRET_KEY
+ },
+ region: process.env.AWS_REGION
+ });
+
+ const CHUNK = 100;
+ const numProjects = await Project.count({}).exec();
console.log(numProjects);
let index = 0;
- async.whilst(
- () => {
- return index < numProjects;
- },
- (whilstCb) => {
- Project.find({}).skip(index).limit(CHUNK).exec((err, projects) => {
- async.eachSeries(projects, (project, cb) => {
- if (!project.user) {
- cb();
+
+ while (index < numProjects) {
+ const projects = await Project.find({}).skip(index).limit(CHUNK).exec();
+ await async.eachSeries(projects, async (project) => {
+ if (!project.user) {
+ return;
+ }
+ const userId = project.user.valueOf();
+ console.log(project.name);
+
+ await async.eachSeries(project.files, async (file) => {
+ if (
+ file.url &&
+ file.url.includes(process.env.S3_BUCKET) &&
+ !file.url.includes(userId)
+ ) {
+ console.log(file.url);
+ console.log(userId);
+ const key = file.url.split('/').pop();
+ console.log(key);
+ const sourceKey = `${process.env.S3_BUCKET}/${key}`;
+ const destinationKey = `${userId}/${key}`;
+
+ const headParams = {
+ Bucket: process.env.S3_BUCKET,
+ Key: key
+ };
+
+ try {
+ await s3Client.send(new HeadObjectCommand(headParams));
+ } catch (headErr) {
+ console.log(headErr);
return;
}
- const userId = project.user.valueOf();
- console.log(project.name);
- async.eachSeries(project.files, (file, fileCb) => {
- if (file.url && file.url.includes(process.env.S3_BUCKET) && !file.url.includes(userId)) {
- console.log(file.url);
- console.log(userId);
- const key = file.url.split('/').pop();
- console.log(key);
- const params = {
- Bucket: `${process.env.S3_BUCKET}`,
- CopySource: `${process.env.S3_BUCKET}/${key}`,
- Key: `${userId}/${key}`
- };
- try {
- client.moveObject(params)
- .on('error', (err) => {
- console.log(err);
- file.url = (process.env.S3_BUCKET_URL_BASE ||
- `https://s3-${process.env.AWS_REGION}.amazonaws.com/${process.env.S3_BUCKET}`) + `/${userId}/${key}`;
- project.save((err, savedProject) => {
- console.log(`updated file ${key}`);
- fileCb();
- });
- })
- .on('end', () => {
- file.url = (process.env.S3_BUCKET_URL_BASE ||
- `https://s3-${process.env.AWS_REGION}.amazonaws.com/${process.env.S3_BUCKET}`) + `/${userId}/${key}`;
- project.save((err, savedProject) => {
- console.log(`updated file ${key}`);
- fileCb();
- });
- });
- } catch(e) {
- console.log(e);
- fileCb();
- }
- } else {
- fileCb();
- }
- }, () => {
- cb();
- });
- }, () => {
- index += CHUNK;
- whilstCb();
- });
+
+ const copyParams = {
+ Bucket: process.env.S3_BUCKET,
+ CopySource: sourceKey,
+ Key: destinationKey
+ };
+
+ try {
+ await s3Client.send(new CopyObjectCommand(copyParams));
+ file.url =
+ (process.env.S3_BUCKET_URL_BASE ||
+ `https://s3-${process.env.AWS_REGION}.amazonaws.com/${process.env.S3_BUCKET}`) +
+ `/${userId}/${key}`;
+ project.save((err, savedProject) => {
+ console.log(`updated file ${key}`);
+ });
+ } catch (e) {
+ console.log(e);
+ }
+ }
});
- },
- () => {
- console.log('finished processing all documents.');
- process.exit(0);
- }
- );
-});
+ });
+ index += CHUNK;
+ }
+
+ console.log('finished processing all documents.');
+ process.exit(0);
+}
+
+main();
diff --git a/server/routes/server.routes.js b/server/routes/server.routes.js
index eda9464eba..eed2ea87da 100644
--- a/server/routes/server.routes.js
+++ b/server/routes/server.routes.js
@@ -1,6 +1,5 @@
import { Router } from 'express';
-import { renderIndex } from '../views/index';
-import { get404Sketch } from '../views/404Page';
+import sendHtml, { renderIndex } from '../views/index';
import { userExists } from '../controllers/user.controller';
import {
projectExists,
@@ -27,40 +26,46 @@ router.get('/signup', (req, res) => {
return res.send(renderIndex());
});
-router.get('/projects/:project_id', (req, res) => {
- projectExists(req.params.project_id, (exists) =>
- exists ? res.send(renderIndex()) : get404Sketch((html) => res.send(html))
- );
+router.get('/projects/:project_id', async (req, res) => {
+ const exists = await projectExists(req.params.project_id);
+ sendHtml(req, res, exists);
});
-router.get('/:username/sketches/:project_id/add-to-collection', (req, res) => {
- projectForUserExists(req.params.username, req.params.project_id, (exists) =>
- exists ? res.send(renderIndex()) : get404Sketch((html) => res.send(html))
- );
-});
+router.get(
+ '/:username/sketches/:project_id/add-to-collection',
+ async (req, res) => {
+ const exists = await projectForUserExists(
+ req.params.username,
+ req.params.project_id
+ );
+ sendHtml(req, res, exists);
+ }
+);
-router.get('/:username/sketches/:project_id', (req, res) => {
- projectForUserExists(req.params.username, req.params.project_id, (exists) =>
- exists ? res.send(renderIndex()) : get404Sketch((html) => res.send(html))
+router.get('/:username/sketches/:project_id', async (req, res) => {
+ const exists = await projectForUserExists(
+ req.params.username,
+ req.params.project_id
);
+ sendHtml(req, res, exists);
});
-router.get('/:username/sketches', (req, res) => {
- userExists(req.params.username, (exists) =>
- exists ? res.send(renderIndex()) : get404Sketch((html) => res.send(html))
- );
+router.get('/:username/sketches', async (req, res) => {
+ const exists = await userExists(req.params.username);
+ sendHtml(req, res, exists);
});
-router.get('/:username/full/:project_id', (req, res) => {
- projectForUserExists(req.params.username, req.params.project_id, (exists) =>
- exists ? res.send(renderIndex()) : get404Sketch((html) => res.send(html))
+router.get('/:username/full/:project_id', async (req, res) => {
+ const exists = await projectForUserExists(
+ req.params.username,
+ req.params.project_id
);
+ sendHtml(req, res, exists);
});
-router.get('/full/:project_id', (req, res) => {
- projectExists(req.params.project_id, (exists) =>
- exists ? res.send(renderIndex()) : get404Sketch((html) => res.send(html))
- );
+router.get('/full/:project_id', async (req, res) => {
+ const exists = await projectExists(req.params.project_id);
+ sendHtml(req, res, exists);
});
router.get('/login', (req, res) => {
@@ -98,15 +103,11 @@ router.get('/assets', (req, res) => {
}
});
-router.get('/:username/assets', (req, res) => {
- userExists(req.params.username, (exists) => {
- const isLoggedInUser =
- req.user && req.user.username === req.params.username;
- const canAccess = exists && isLoggedInUser;
- return canAccess
- ? res.send(renderIndex())
- : get404Sketch((html) => res.send(html));
- });
+router.get('/:username/assets', async (req, res) => {
+ const exists = await userExists(req.params.username);
+ const isLoggedInUser = req.user && req.user.username === req.params.username;
+ const canAccess = exists && isLoggedInUser;
+ sendHtml(req, res, canAccess);
});
router.get('/account', (req, res) => {
@@ -121,16 +122,17 @@ router.get('/about', (req, res) => {
res.send(renderIndex());
});
-router.get('/:username/collections/:id', (req, res) => {
- collectionForUserExists(req.params.username, req.params.id, (exists) =>
- exists ? res.send(renderIndex()) : get404Sketch((html) => res.send(html))
+router.get('/:username/collections/:id', async (req, res) => {
+ const exists = await collectionForUserExists(
+ req.params.username,
+ req.params.id
);
+ sendHtml(req, res, exists);
});
-router.get('/:username/collections', (req, res) => {
- userExists(req.params.username, (exists) =>
- exists ? res.send(renderIndex()) : get404Sketch((html) => res.send(html))
- );
+router.get('/:username/collections', async (req, res) => {
+ const exists = await userExists(req.params.username);
+ sendHtml(req, res, exists);
});
router.get('/privacy-policy', (req, res) => {
diff --git a/server/views/index.js b/server/views/index.js
index 8ec23d9c39..fa1b0a351c 100644
--- a/server/views/index.js
+++ b/server/views/index.js
@@ -1,3 +1,5 @@
+import get404Sketch from './404Page';
+
export function renderIndex() {
const assetsManifest = process.env.webpackAssets && JSON.parse(process.env.webpackAssets);
return `
@@ -45,3 +47,18 @@ export function renderIndex() {
`;
}
+
+/**
+ * Send a 404 page if `exists` is false.
+ * @param {import('express').e.Request} req
+ * @param {import('express').e.Response} res
+ * @param {boolean} [exists]
+ */
+export default function sendHtml(req, res, exists = true) {
+ if (!exists) {
+ res.status(404);
+ get404Sketch((html) => res.send(html));
+ } else {
+ res.send(renderIndex());
+ }
+};
diff --git a/translations/locales/be/translations.json b/translations/locales/be/translations.json
new file mode 100644
index 0000000000..a3ecb8f1f4
--- /dev/null
+++ b/translations/locales/be/translations.json
@@ -0,0 +1,625 @@
+{
+ "Nav": {
+ "File": {
+ "Title": "ফাইল",
+ "New": "নতুন",
+ "Share": "শেয়ার",
+ "Duplicate": "ডুপ্লিকেট",
+ "Open": "খোলা",
+ "Download": "ডাউনলোড",
+ "AddToCollection": "সংগ্রহে যোগ করুন",
+ "Examples": "উদাহরণ"
+ },
+ "Edit": {
+ "Title": "সম্পাদনা",
+ "TidyCode": "কোড শোধন করুন",
+ "Find": "খুঁজুন",
+ "Replace": "প্রতিস্থাপন"
+ },
+ "Sketch": {
+ "Title": "স্কেচ",
+ "AddFile": "ফাইল যোগ করুন",
+ "AddFolder": "ফোল্ডার যোগ করুন",
+ "Run": "চালান",
+ "Stop": "বন্ধ"
+ },
+ "Help": {
+ "Title": "সাহায্য",
+ "KeyboardShortcuts": "কীবোর্ড শর্টকাট",
+ "Reference": "সংদর্শন",
+ "About": "সম্পর্কিত"
+ },
+ "Lang": "ভাষা",
+ "BackEditor": "সম্পাদকে ফিরুন",
+ "WarningUnsavedChanges": "কি আপনি এই পৃষ্ঠা ছেড়তে চান? আপনি অসংরক্ষিত পরিবর্তন রেখেছেন।",
+ "Login": "লগ ইন",
+ "LoginOr": "অথবা",
+ "SignUp": "নিবন্ধন করুন",
+ "Auth": {
+ "Welcome": "স্বাগত",
+ "Hello": "হ্যালো",
+ "MyAccount": "আমার অ্যাকাউন্ট",
+ "My": "আমার",
+ "MySketches": "আমার স্কেচ",
+ "MyCollections": "আমার সংগ্রহ",
+ "Asset": "সম্পদ",
+ "MyAssets": "আমার সম্পদ",
+ "LogOut": "লগ আউট"
+ }
+ },
+ "CodemirrorFindAndReplace": {
+ "ToggleReplace": "প্রতিস্থাপন টগল করুন",
+ "Find": "খুঁজুন",
+ "FindPlaceholder": "ফাইলে খুঁজুন",
+ "Replace": "প্রতিস্থাপন করুন",
+ "ReplaceAll": "সব প্রতিস্থাপন করুন",
+ "ReplacePlaceholder": "প্রতিস্থাপনের জন্য টেক্সট",
+ "Regex": "রেগুলার এক্সপ্রেশন",
+ "CaseSensitive": "কেস সতর্ক",
+ "WholeWords": "সম্পূর্ণ শব্দ",
+ "Previous": "পূর্ববর্তী",
+ "Next": "পরবর্তী",
+ "NoResults": "কোন ফলাফল নেই",
+ "Close": "বন্ধ"
+ },
+ "LoginForm": {
+ "UsernameOrEmail": "ইমেইল অথবা ব্যবহারকারীর নাম",
+ "UsernameOrEmailARIA": "ইমেইল অথবা ব্যবহারকারীর নাম",
+ "Password": "পাসওয়ার্ড",
+ "PasswordARIA": "পাসওয়ার্ড",
+ "Submit": "লগ ইন করুন"
+ },
+ "LoginView": {
+ "Title": "p5.js ওয়েব এডিটর | লগইন",
+ "Login": "লগ ইন করুন",
+ "LoginOr": "অথবা",
+ "SignUp": "নিবন্ধন করুন",
+ "Email": "ইমেইল",
+ "Username": "ব্যবহারকারীর নাম",
+ "DontHaveAccount": "একটি অ্যাকাউন্ট আছেন না? ",
+ "ForgotPassword": "আপনি কি আপনার পাসওয়ার্ড ভুলে গিয়েছেন? ",
+ "ResetPassword": "আপনার পাসওয়ার্ড রিসেট করুন"
+ },
+ "SocialAuthButton": {
+ "Connect": "{{serviceauth}} সাথে যোগাযোগ করুন",
+ "ConnectWith": "{{serviceauth}} সাথে যোগাযোগ করুন",
+ "SignUpWith": "{{serviceauth}} সাথে সাইন আপ করুন",
+ "LoginWith": "{{serviceauth}} সাথে লগ ইন করুন",
+ "ContinueWith": "{{serviceauth}} সাথে চলুন"
+ },
+ "About": {
+ "Title": "সম্পর্কে",
+ "TitleHelmet": "p5.js ওয়েব এডিটর | সম্পর্কে",
+ "Contribute": "অবদান রাখুন",
+ "NewP5": "p5.js নতুন?",
+ "Report": "একটি বাগ রিপোর্ট করুন",
+ "Learn": "শেখা",
+ "Resources": "সম্পদসমূহ",
+ "Libraries": "লাইব্রেরিসমূহ",
+ "Forum": "ফোরাম",
+ "Examples": "উদাহরণসমূহ",
+ "PrivacyPolicy": "গোপনীয়তা নীতি",
+ "TermsOfUse": "ব্যবহারের শর্তাবলী",
+ "CodeOfConduct": "আচারসমূহ"
+ },
+ "Toast": {
+ "OpenedNewSketch": "নতুন স্কেচ খোলা হয়েছে।",
+ "SketchSaved": "স্কেচ সংরক্ষণ করা হয়েছে।",
+ "SketchFailedSave": "স্কেচ সংরক্ষণে ব্যর্থ হয়েছে।",
+ "AutosaveEnabled": "অটোসেভ সক্রিয় হয়েছে।",
+ "LangChange": "ভাষা পরিবর্তন হয়েছে",
+ "SettingsSaved": "সেটিংস সংরক্ষিত হয়েছে।"
+ },
+ "Toolbar": {
+ "Preview": "পূর্বরূপ",
+ "Auto-refresh": "অটো-রিফ্রেশ",
+ "OpenPreferencesARIA": "পছন্দ খুলুন",
+ "PlaySketchARIA": "স্কেচ চালান",
+ "PlayOnlyVisualSketchARIA": "শুধুমাত্র ভিজুয়াল স্কেচ চালান",
+ "StopSketchARIA": "স্কেচ বন্ধ করুন",
+ "EditSketchARIA": "স্কেচের নাম সম্পাদনা করুন",
+ "NewSketchNameARIA": "নতুন স্কেচের নাম",
+ "By": " দ্বারা "
+ },
+ "Console": {
+ "Title": "কনসোল",
+ "Clear": "স্পষ্ট",
+ "ClearARIA": "কনসোল স্পষ্ট করুন",
+ "Close": "বন্ধ",
+ "CloseARIA": "কনসোল বন্ধ করুন",
+ "Open": "খোলা",
+ "OpenARIA": "কনসোল খোলুন"
+ },
+ "Preferences": {
+ "Settings": "সেটিংস",
+ "GeneralSettings": "সাধারিত সেটিংস",
+ "Accessibility": "অভগ্রাহণযোগ্যতা",
+ "Theme": "থিম",
+ "LightTheme": "হালকা",
+ "LightThemeARIA": "হালকা থিম চালু",
+ "DarkTheme": "গাঢ়",
+ "DarkThemeARIA": "গাঢ় থিম চালু",
+ "HighContrastTheme": "উচ্চ বৈষম্য থিম",
+ "HighContrastThemeARIA": "উচ্চ বৈষম্য থিম চালু",
+ "TextSize": "টেক্সট সাইজ",
+ "DecreaseFont": "কমান",
+ "DecreaseFontARIA": "ফন্ট সাইজ কমান",
+ "IncreaseFont": "বাড়ান",
+ "IncreaseFontARIA": "ফন্ট সাইজ বাড়ান",
+ "FontSize": "ফন্ট সাইজ",
+ "SetFontSize": "ফন্ট সাইজ সেট করুন",
+ "Autosave": "অটোসেভ",
+ "On": "চালু",
+ "AutosaveOnARIA": "অটোসেভ চালু",
+ "Off": "বন্ধ",
+ "AutosaveOffARIA": "অটোসেভ বন্ধ",
+ "AutocloseBracketsQuotes": "অটোক্লোজ ব্র্যাকেট এবং কোট",
+ "AutocloseBracketsQuotesOnARIA": "অটোক্লোজ ব্র্যাকেট এবং কোট চালু",
+ "AutocloseBracketsQuotesOffARIA": "অটোক্লোজ ব্র্যাকেট এবং কোট বন্ধ",
+ "AutocompleteHinter": "অটোকমপ্লিট হিন্টার",
+ "AutocompleteHinterOnARIA": "অটোকমপ্লিট হিন্টার চালু",
+ "AutocompleteHinterOffARIA": "অটোকম",
+ "WordWrap": "শব্দ রেখাচ্ছে",
+ "LineWrapOnARIA": "লাইন রেখাচ্ছে অন",
+ "LineWrapOffARIA": "লাইন রেখাচ্ছে অফ",
+ "LineNumbers": "লাইন সংখ্যা",
+ "LineNumbersOnARIA": "লাইন সংখ্যা অন",
+ "LineNumbersOffARIA": "লাইন সংখ্যা অফ",
+ "LintWarningSound": "লিন্ট সতর্কতা শব্দ",
+ "LintWarningOnARIA": "লিন্ট সতর্কতা অন",
+ "LintWarningOffARIA": "লিন্ট সতর্কতা অফ",
+ "PreviewSound": "পূর্বরূপ শব্দ",
+ "PreviewSoundARIA": "পূর্বরূপ শব্দ",
+ "AccessibleTextBasedCanvas": "যোগাযোগযোগ্য টেক্সট ভিত্তিক ক্যানভাস",
+ "UsedScreenReader": "স্ক্রিন রিডার সহ ব্যবহৃত",
+ "PlainText": "সাধারিত টেক্সট",
+ "TextOutputARIA": "টেক্সট আউটপুট অন",
+ "TableText": "টেবিল-টেক্সট",
+ "TableOutputARIA": "টেবিল আউটপুট অন"
+ },
+ "KeyboardShortcuts": {
+ "Title": "কীবোর্ড শর্টকাট",
+ "ShortcutsFollow": "কোড সম্পাদনা কীবোর্ড শর্টকাট অনুসরণ করে",
+ "SublimeText": "সাবলাইম টেক্সট শর্টকাট",
+ "CodeEditing": {
+ "Tidy": "টাইডি",
+ "FindText": "টেক্সট খোঁজুন",
+ "FindNextMatch": "পরবর্তী ম্যাচ খোঁজুন",
+ "FindPrevMatch": "পূর্বের ম্যাচ খোঁজুন",
+ "ReplaceTextMatch": "টেক্সট ম্যাচ প্রতিস্থাপন",
+ "IndentCodeLeft": "কোড বামে ইনডেন্ট",
+ "IndentCodeRight": "কোড ডানে ইনডেন্ট",
+ "CommentLine": "মন্তব্য লাইন",
+ "FindNextTextMatch": "পরবর্তী টেক্সট ম্যাচ খোঁজুন",
+ "FindPreviousTextMatch": "পূর্বের টেক্সট ম্যাচ খোঁজুন",
+ "CodeEditing": "কোড সম্পাদনা",
+ "ColorPicker": "ইনলাইন রঙ নির্বাচক দেখান"
+ },
+ "General": {
+ "StartSketch": "স্কেচ শুরু",
+ "StopSketch": "স্কেচ বন্ধ",
+ "TurnOnAccessibleOutput": "জনপ্রিয় আউটপুট চালু করুন",
+ "TurnOffAccessibleOutput": "জনপ্রিয় আউটপুট বন্ধ করুন"
+ }
+ },
+ "Sidebar": {
+ "Title": "স্কেচ ফাইলগুলি",
+ "ToggleARIA": "স্কেচ ফাইল বিকল্প খোলা / বন্ধ করুন টগল",
+ "AddFolder": "ফোল্ডার তৈরি করুন",
+ "AddFolderARIA": "ফোল্ডার যোগ করুন",
+ "AddFile": "ফাইল তৈরি করুন",
+ "AddFileARIA": "ফাইল যোগ করুন",
+ "UploadFile": "ফাইল আপলোড করুন",
+ "UploadFileARIA": "ফাইল আপলোড করুন"
+ },
+ "FileNode": {
+ "OpenFolderARIA": "ফোল্ডার সামগ্রী খোলুন",
+ "CloseFolderARIA": "ফোল্ডার সামগ্রী বন্ধ করুন",
+ "ToggleFileOptionsARIA": "ফাইল বিকল্প খোলা/বন্ধ করুন",
+ "AddFolder": "ফোল্ডার তৈরি করুন",
+ "AddFolderARIA": "ফোল্ডার যোগ করুন",
+ "AddFile": "ফাইল তৈরি করুন",
+ "AddFileARIA": "ফাইল যোগ করুন",
+ "UploadFile": "ফাইল আপলোড করুন",
+ "UploadFileARIA": "ফাইল আপলোড করুন",
+ "Rename": "নাম পরিবর্তন করুন",
+ "Delete": "মুছে ফেলুন"
+ },
+ "Common": {
+ "Error": "ত্রুটি",
+ "ErrorARIA": "ত্রুটি",
+ "Save": "সংরক্ষণ",
+ "p5logoARIA": "p5.js লোগো",
+ "DeleteConfirmation": "{{name}} মুছে ফেলতে আপনি কি নিশ্চিত?"
+ },
+ "IDEView": {
+ "SubmitFeedback": "মন্তব্য জমা দিন",
+ "SubmitFeedbackARIA": "মন্তব্য জমা দিন",
+ "AddCollectionTitle": "সংগ্রহে যোগ করুন",
+ "AddCollectionARIA": "সংগ্রহে যোগ করুন",
+ "ShareTitle": "ভাগাভাগি করুন",
+ "ShareARIA": "ভাগাভাগি করুন"
+ },
+ "NewFileModal": {
+ "Title": "ফাইল তৈরি করুন",
+ "CloseButtonARIA": "নতুন ফাইল মোডাল বন্ধ করুন",
+ "EnterName": "নাম লিখুন",
+ "InvalidType": "অবৈধ ফাইল ধরন। বৈধ এক্সটেনশনগুলি হলো .js, .css, .json, .xml, .stl, .txt, .csv, .tsv, .frag এবং .vert."
+ },
+ "NewFileForm": {
+ "AddFileSubmit": "ফাইল যোগ করুন",
+ "Placeholder": "নাম"
+ },
+ "NewFolderModal": {
+ "Title": "ফোল্ডার তৈরি করুন",
+ "CloseButtonARIA": "নতুন ফোল্ডার মোডাল বন্ধ করুন",
+ "EnterName": "নাম লিখুন দয়া করে",
+ "EmptyName": "ফোল্ডার নাম কেবলমাত্র স্থান নিতে পারবে না",
+ "InvalidExtension": "ফোল্ডার নামে একটি এক্সটেনশন থাকতে পারবে না"
+ },
+ "NewFolderForm": {
+ "AddFolderSubmit": "ফোল্ডার যোগ করুন",
+ "Placeholder": "নাম"
+ },
+ "ResetPasswordForm": {
+ "Email": "নিবন্ধনের জন্য ব্যবহৃত ইমেল",
+ "EmailARIA": "ইমেল",
+ "Submit": "পাসওয়ার্ড রিসেট ইমেল পাঠান"
+ },
+ "ResetPasswordView": {
+ "Title": "p5.js ওয়েব এডিটর | পাসওয়ার্ড রিসেট",
+ "Reset": "আপনার পাসওয়ার্ড রিসেট করুন",
+ "Submitted": "আপনার পাসওয়ার্ড রিসেট ইমেল শীঘ্রই আসবে। আপনি যদি তা দেখতে না পান তবে দয়া করে\n আপনার স্প্যাম ফোল্ডারে চেক করুন, কারণ কিছুটা সেখানে চলে যাতেই হতে পারে।",
+ "Login": "লগ ইন",
+ "LoginOr": "অথবা",
+ "SignUp": "নিবন্ধন করুন"
+ },
+ "ReduxFormUtils": {
+ "errorInvalidEmail": "দয়া করে একটি বৈধ ইমেল ঠিকানা লিখুন",
+ "errorEmptyEmail": "দয়া করে ইমেল লিখুন",
+ "errorPasswordMismatch": "পাসওয়ার্ড মেলানো আবশ্যক",
+ "errorEmptyPassword": "দয়া করে একটি পাসওয়ার্ড লিখুন",
+ "errorShortPassword": "পাসওয়ার্ডটি কমপক্ষে 6 টি অক্ষর হতে হবে",
+ "errorConfirmPassword": "আপনার পাসওয়ার্ড নিশ্চিত করুন",
+ "errorNewPassword": "দয়া করে একটি নতুন পাসওয়ার্ড লিখুন বা বর্তমান পাসওয়ার্ডটি ফাঁকা রাখুন।",
+ "errorEmptyUsername": "দয়া করে একটি ইউজারনেম লিখুন",
+ "errorLongUsername": "ইউজারনেম সর্বাধিক 20 অক্ষর হতে হবে",
+ "errorValidUsername": "ইউজারনেম কেবলমাত্র সংখ্যা, অক্ষর, দোতলা, ড্যাশ, এবং আন্ডারস্কোর থাকতে পারে"
+ },
+ "NewPasswordView": {
+ "Title": "p5.js ওয়েব এডিটর | নতুন পাসওয়ার্ড",
+ "Description": "নতুন পাসওয়ার্ড সেট করুন",
+ "TokenInvalidOrExpired": "পাসওয়ার্ড রিসেট টোকেন অবৈধ বা মেয়াদ উত্তীর্ণ হয়েছে।",
+ "EmptyPassword": "দয়া করে একটি পাসওয়ার্ড লিখুন",
+ "PasswordConfirmation": "দয়া করে আপনার পাসওয়ার্ড নিশ্চিত করুন",
+ "PasswordMismatch": "পাসওয়ার্ডগুলি মেলানো আবশ্যক"
+ },
+ "AccountForm": {
+ "Email": "ইমেল",
+ "EmailARIA": "ইমেল",
+ "Unconfirmed": "অননুমোদিত।",
+ "EmailSent": "অনুমোদন প্রেরিত, আপনার ইমেল চেক করুন।",
+ "Resend": "অনুমোদন ইমেল পুনঃপ্রেরণ করুন",
+ "UserName": "ব্যবহারকারীর নাম",
+ "UserNameARIA": "ব্যবহারকারীর নাম",
+ "CurrentPassword": "বর্তমান পাসওয়ার্ড",
+ "CurrentPasswordARIA": "বর্তমান পাসওয়ার্ড",
+ "NewPassword": "নতুন পাসওয়ার্ড",
+ "NewPasswordARIA": "নতুন পাসওয়ার্ড",
+ "SubmitSaveAllSettings": "সমস্ত সেটিংস সংরক্ষণ করুন"
+ },
+ "AccountView": {
+ "SocialLogin": "সোশ্যাল লগইন",
+ "SocialLoginDescription": "p5.js ওয়েব এডিটরে লগ ইন করতে আপনি আপনার GitHub বা Google অ্যাকাউন্ট ব্যবহার করতে পারেন।",
+ "Title": "p5.js ওয়েব এডিটর | অ্যাকাউন্ট সেটিংস",
+ "Settings": "অ্যাকাউন্ট সেটিংস",
+ "AccountTab": "অ্যাকাউন্ট",
+ "AccessTokensTab": "অ্যাক্সেস টোকেন"
+ },
+ "APIKeyForm": {
+ "ConfirmDelete": "আপনি কি নিশ্চিত যে আপনি {{key_label}} মুছতে চান?",
+ "Summary": "ব্যক্তিগত অ্যাক্সেস টোকেনগুলি এটির API এ অটোমেটেড\n স্ক্রিপ্টগুলির একটি পাসওয়ার্ড হিসেবে কাজ করে। যেগুলি অ্যাক্সেস করতে প্রয়োজন,\n সেগুলির জন্য একটি টোকেন তৈরি করুন।",
+ "CreateToken": "নতুন টোকেন তৈরি করুন",
+ "TokenLabel": "এই টোকেনটি কি জন্য?",
+ "TokenPlaceholder": "এই টোকেনটি কি জন্য? উদাহরণস্বরূপ উদাহরণ আমদানি স্ক্রিপ্ট",
+ "CreateTokenSubmit": "তৈরি করুন",
+ "NoTokens": "আপনার কোনও বিদ্যমান টোকেন নেই।",
+ "NewTokenTitle": "আপনার নতুন অ্যাক্সেস টোকেন",
+ "NewTokenInfo": "নিশ্চিত হোন আপনি আপনার নতুন ব্যক্তিগত অ্যাক্সেস টোকেনটি এখন কপি করে নিন।\n আপনি এটি আবার দেখতে পারবেন না!",
+ "ExistingTokensTitle": "বিদ্যমান টোকেন"
+ },
+ "APIKeyList": {
+ "Name": "নাম",
+ "Created": "তৈরি হয়েছে",
+ "LastUsed": "সর্বশেষ ব্যবহার",
+ "Actions": "ক্রিয়াকলাপ",
+ "Never": "কখনই না",
+ "DeleteARIA": "ডিলিট API কী"
+ },
+ "NewPasswordForm": {
+ "Title": "পাসওয়ার্ড",
+ "TitleARIA": "পাসওয়ার্ড",
+ "ConfirmPassword": "পাসওয়ার্ড নিশ্চিত করুন",
+ "ConfirmPasswordARIA": "পাসওয়ার্ড নিশ্চিত করুন",
+ "SubmitSetNewPassword": "নতুন পাসওয়ার্ড সেট করুন"
+ },
+ "SignupForm": {
+ "Title": "ব্যবহারকারী নাম",
+ "TitleARIA": "ব্যবহারকারী নাম",
+ "Email": "ইমেল",
+ "EmailARIA": "ইমেল",
+ "Password": "পাসওয়ার্ড",
+ "PasswordARIA": "পাসওয়ার্ড",
+ "ConfirmPassword": "পাসওয়ার্ড নিশ্চিত করুন",
+ "ConfirmPasswordARIA": "পাসওয়ার্ড নিশ্চিত করুন",
+ "SubmitSignup": "নিবন্ধন করুন"
+ },
+ "SignupView": {
+ "Title": "p5.js ওয়েব এডিটর | নিবন্ধন করুন",
+ "Description": "নিবন্ধন করুন",
+ "Or": "অথবা",
+ "AlreadyHave": "ইতিমধ্যে একটি অ্যাকাউন্ট আছে?",
+ "Login": "লগ ইন"
+ },
+ "EmailVerificationView": {
+ "Title": "p5.js ওয়েব এডিটর | ইমেল যাচাই",
+ "Verify": "আপনার ইমেল যাচাই করুন",
+ "InvalidTokenNull": "সেই লিঙ্কটি অবৈধ।",
+ "Checking": "টোকেন যাচাই করা হচ্ছে, অনুগ্রহ করে অপেক্ষা করুন...",
+ "Verified": "সব হয়ে গেছে, আপনার ইমেল ঠিকানা যাচাই হয়েছে।",
+ "InvalidState": "কিছু ভুল হয়েছে।"
+ },
+ "AssetList": {
+ "Title": "p5.js ওয়েব এডিটর | আমার সম্পত্তি",
+ "ToggleOpenCloseARIA": "আসেট অপশন টগল করুন / বন্ধ করুন",
+ "Delete": "মুছে ফেলুন",
+ "OpenNewTab": "নতুন ট্যাবে খুলুন",
+ "NoUploadedAssets": "কোনও আপলোড করা সম্পত্তি নেই।",
+ "HeaderName": "নাম",
+ "HeaderSize": "আকার",
+ "HeaderSketch": "স্কেচ"
+ },
+ "Feedback": {
+ "Title": "p5.js ওয়েব এডিটর | প্রতিক্রিয়া",
+ "ViaGithubHeader": "গিটহাব ইস্যু মাধ্যমে",
+ "ViaGithubDescription": "আপনি যদি গিটহাবে পরিচিত হন তবে এটি বাগ রিপোর্ট এবং প্রতিক্রিয়া পাওয়ার জন্য আমাদের পছন্দসই পদ্ধতি।",
+ "GoToGithub": "গিটহাবে যান",
+ "ViaGoogleHeader": "গুগল ফর্ম মাধ্যমে",
+ "ViaGoogleDescription": "আপনি এই দ্রুত ফর্ম জমা দিতে পারেন।",
+ "GoToForm": "ফর্মে যান"
+ },
+ "Searchbar": {
+ "SearchSketch": "স্কেচ অনুসন্ধান করুন...",
+ "SearchCollection": "সংগ্রহ অনুসন্ধান করুন...",
+ "ClearTerm": "স্পষ্ট"
+ },
+ "UploadFileModal": {
+ "Title": "ফাইল আপলোড করুন",
+ "CloseButtonARIA": "আপলোড ফাইল মোডাল বন্ধ করুন",
+ "SizeLimitError": "ত্রুটি: আপনি আর কোনও ফাইল আপলোড করতে পারবেন না। আপনি এখানে সর্বমোট আকার সীমা পৌঁছাচ্ছেন {{sizeLimit}}।\n আপনি যদি আরও আপলোড করতে চান, তবে আপনি ব্যবহার করতে চাইলে একটি সময় যোগান দ্বারা এটি ব্যবহার করার পূর্বে তাদের মুছে ফেলুন "
+ },
+ "FileUploader": {
+ "DictDefaultMessage": "ফাইলগুলি এখানে ড্রপ করুন বা ফাইল ব্রাউজার ব্যবহার করতে ক্লিক করুন"
+ },
+ "ErrorModal": {
+ "MessageLogin": "স্কেচ সংরক্ষণ করতে আপনার লগইন করা আবশ্যক। দয়া করে ",
+ "Login": "লগইন",
+ "LoginOr": " অথবা ",
+ "SignUp": "নিবন্ধন",
+ "MessageLoggedOut": "মনে হচ্ছে আপনি লগআউট হয়েছেন। দয়া করে ",
+ "LogIn": "লগ ইন করুন",
+ "SavedDifferentWindow": "আপনি সংরক্ষণ করতে চেষ্টা করা প্রকল্পটি অন্য উইন্ডো থেকে সংরক্ষণ করা হয়েছে।\n সর্বশেষ সংস্করণ দেখতে দয়া করে পৃষ্ঠা রিফ্রেশ করুন।",
+ "LinkTitle": "অ্যাকাউন্ট লিঙ্কিং ত্রুটি",
+ "LinkMessage": "{{serviceauth}} অ্যাকাউন্ট আপনার p5.js Web এডিটর অ্যাকাউন্টে লিঙ্ক করতে সমস্যা হয়েছে। আপনার {{serviceauth}} অ্যাকাউন্টটি ইতিমধ্যে অন্য একটি p5.js Web এডিটর অ্যাকাউন্টে লিঙ্ক করা হয়েছে।"
+ },
+ "ShareModal": {
+ "Embed": "এম্বেড",
+ "Present": "প্রস্তুত",
+ "Fullscreen": "পূর্ণাঙ্গ",
+ "Edit": "সম্পাদনা"
+ },
+ "CollectionView": {
+ "TitleCreate": "সংগ্রহ তৈরি করুন",
+ "TitleDefault": "সংগ্রহ"
+ },
+ "Collection": {
+ "Title": "p5.js Web এডিটর | আমার সংগ্রহগুলি",
+ "AnothersTitle": "p5.js Web এডিটর | {{anotheruser}}'s সংগ্রহগুলি",
+ "Share": "শেয়ার",
+ "URLLink": "সংগ্রহের লিঙ্ক",
+ "AddSketch": "স্কেচ যোগ করুন",
+ "DeleteFromCollection": "{{name_sketch}} কে এই সংগ্রহ থেকে সরাতে চান কি না?",
+ "SketchDeleted": "স্কেচ মোছা হয়েছে",
+ "SketchRemoveARIA": "সংগ্রহ থেকে স্কেচ সরান",
+ "DescriptionPlaceholder": "বিবরণ যোগ করুন",
+ "Description": "বর্ণনা",
+ "NumSketches": "{{count}} স্কেচ",
+ "NumSketches_plural": "{{count}} স্কেচ",
+ "By": "সংগ্রহ করেছেন ",
+ "NoSketches": "সংগ্রহে কোন স্কেচ নেই",
+ "TableSummary": "সমস্ত সংগ্রহ ধারণকুল করা টেবিল",
+ "HeaderName": "নাম",
+ "HeaderCreatedAt": "যোগ করা হয়েছের তারিখ",
+ "HeaderUser": "মালিক",
+ "DirectionAscendingARIA": "আরোহী",
+ "DirectionDescendingARIA": "অধঃপতন",
+ "ButtonLabelAscendingARIA": "{{displayName}} দ্বারা আদ্রিত করুন।",
+ "ButtonLabelDescendingARIA": "{{displayName}} দ্বারা অধঃপতন করুন।"
+ },
+ "AddToCollectionList": {
+ "Title": "p5.js Web এডিটর | আমার সংগ্রহগুলি",
+ "AnothersTitle": "p5.js Web এডিটর | {{anotheruser}}'s সংগ্রহগুলি",
+ "Empty": "কোন সংগ্রহ নেই"
+ },
+ "CollectionCreate": {
+ "Title": "p5.js Web এডিটর | সংগ্রহ তৈরি করুন",
+ "FormError": "সংগ্রহ তৈরি করা যায়নি",
+ "FormLabel": "সংগ্রহের নাম",
+ "FormLabelARIA": "নাম",
+ "NameRequired": "সংগ্রহের নাম প্রয়োজন",
+ "Description": "বর্ণনা (ঐচ্ছিক)",
+ "DescriptionARIA": "বর্ণনা",
+ "DescriptionPlaceholder": "আমার প্রিয় স্কেচগুলি",
+ "SubmitCollectionCreate": "সংগ্রহ তৈরি করুন"
+ },
+ "DashboardView": {
+ "CreateCollection": "সংগ্রহ তৈরি করুন",
+ "NewSketch": "নতুন স্কেচ",
+ "CreateCollectionOverlay": "সংগ্রহ তৈরি করুন"
+ },
+ "DashboardTabSwitcher": {
+ "Sketches": "স্কেচগুলি",
+ "Collections": "সংগ্রহগুলি",
+ "Assets": "সম্পত্তিগুলি"
+ },
+ "CollectionList": {
+ "Title": "p5.js Web এডিটর | আমার সংগ্রহগুলি",
+ "AnothersTitle": "p5.js Web এডিটর | {{anotheruser}}'s সংগ্রহগুলি",
+ "NoCollections": "কোন সংগ্রহ নেই।",
+ "TableSummary": "সমস্ত সংগ্রহ ধারণকুল করা টেবিল",
+ "HeaderName": "নাম",
+ "HeaderCreatedAt": "তৈরির তারিখ",
+ "HeaderCreatedAt_mobile": "তৈরি হয়েছে",
+ "HeaderUpdatedAt": "হালনাগাদ তারিখ",
+ "HeaderUpdatedAt_mobile": "হালনাগাদ",
+ "HeaderNumItems": "# স্কেচ",
+ "HeaderNumItems_mobile": "# স্কেচ",
+ "DirectionAscendingARIA": "আরোহী",
+ "DirectionDescendingARIA": "অধঃপতন",
+ "ButtonLabelAscendingARIA": "{{displayName}} দ্বারা আদ্রিত করুন।",
+ "ButtonLabelDescendingARIA": "{{displayName}} দ্বারা অধঃপতন করুন।",
+ "AddSketch": "স্কেচ যোগ করুন"
+ },
+ "CollectionListRow": {
+ "ToggleCollectionOptionsARIA": "সংগ্রহ বিকল্পগুলি খোলা/বন্ধ করুন",
+ "AddSketch": "স্কেচ যোগ করুন",
+ "Delete": "মুছুন",
+ "Rename": "পুনঃনামকরণ"
+ },
+ "Overlay": {
+ "AriaLabel": "{{title}} ওভারলে বন্ধ করুন"
+ },
+ "QuickAddList": {
+ "ButtonRemoveARIA": "সংগ্রহ থেকে মুছুন",
+ "ButtonAddToCollectionARIA": "সংগ্রহে যোগ করুন",
+ "View": "দেখুন"
+ },
+ "SketchList": {
+ "View": "দৃশ্য",
+ "Title": "p5.js ওয়েব এডিটর | আমার স্কেচগুলি",
+ "AnothersTitle": "p5.js ওয়েব এডিটর | {{anotheruser}} এর স্কেচগুলি",
+ "ToggleLabelARIA": "স্কেচ অপশন খোলা/বন্ধ করুন",
+ "DropdownRename": "পুনঃনামকরণ",
+ "DropdownDownload": "ডাউনলোড",
+ "DropdownDuplicate": "ডুপ্লিকেট",
+ "DropdownAddToCollection": "সংগ্রহে যোগ করুন",
+ "DropdownDelete": "মুছে ফেলুন",
+ "DirectionAscendingARIA": "উচ্চতম থেকে নিম্নতম",
+ "DirectionDescendingARIA": "নিম্নতম থেকে উচ্চতম",
+ "ButtonLabelAscendingARIA": "{{displayName}} দ্বারা আমন্ত্রিত সারি করুন।",
+ "ButtonLabelDescendingARIA": "{{displayName}} দ্বারা আমন্ত্রিত সারি করুন।",
+ "AddToCollectionOverlayTitle": "সংগ্রহে যোগ করুন",
+ "TableSummary": "সমস্ত সংরক্ষিত প্রকল্প থাকা টেবিল",
+ "HeaderName": "স্কেচ",
+ "HeaderCreatedAt": "তারিখ তৈরি হয়েছে",
+ "HeaderCreatedAt_mobile": "তৈরি",
+ "HeaderUpdatedAt": "তারিখ আপডেট হয়েছে",
+ "HeaderUpdatedAt_mobile": "আপডেট",
+ "NoSketches": "কোন স্কেচ নেই।"
+ },
+ "AddToCollectionSketchList": {
+ "Title": "p5.js ওয়েব এডিটর | আমার স্কেচগুলি",
+ "AnothersTitle": "p5.js ওয়েব এডিটর | {{anotheruser}} এর স্কেচগুলি",
+ "NoCollections": "কোন সংগ্রহ নেই।"
+ },
+ "Editor": {
+ "OpenSketchARIA": "স্কেচ ফাইল নেভিগেশন খোলুন",
+ "CloseSketchARIA": "স্কেচ ফাইল নেভিগেশন বন্ধ করুন",
+ "UnsavedChangesARIA": "স্কেচে অসংরক্ষিত পরিবর্তন রয়েছে",
+ "KeyUpLineNumber": "লাইন {{lineNumber}}"
+ },
+ "EditorAccessibility": {
+ "NoLintMessages": "কোন লিন্ট বার্তা নেই",
+ "CurrentLine": "বর্তমান লাইন"
+ },
+ "Timer": {
+ "SavedAgo": "সংরক্ষিত: {{timeAgo}}"
+ },
+ "formatDate": {
+ "JustNow": "এই মুহূর্তে",
+ "15Seconds": "15 সেকেন্ড আগে",
+ "25Seconds": "25 সেকেন্ড আগে",
+ "35Seconds": "35 সেকেন্ড আগে",
+ "Ago": "{{timeAgo}} আগে"
+ },
+ "AddRemoveButton": {
+ "AltAddARIA": "সংগ্রহে যোগ করুন",
+ "AltRemoveARIA": "সংগ্রহ থেকে সরান"
+ },
+ "CopyableInput": {
+ "CopiedARIA": "ক্লিপবোর্ডে কপি করা হয়েছে!",
+ "OpenViewTabARIA": "{{label}} দেখুন নতুন ট্যাবে"
+ },
+ "EditableInput": {
+ "EditValue": "{{display}} মান সম্পাদনা করুন",
+ "EmptyPlaceholder": "মান নেই"
+ },
+ "PreviewNav": {
+ "EditSketchARIA": "স্কেচ সম্পাদনা করুন",
+ "ByUser": "দ্বারা"
+ },
+ "MobilePreferences": {
+ "Settings": "সেটিংস",
+ "GeneralSettings": "সাধারিত সেটিংস",
+ "Accessibility": "অভিগম্যতা",
+ "AccessibleOutput": "অভিগম্য আউটপুট",
+ "Theme": "থিম",
+ "LightTheme": "হালকা",
+ "DarkTheme": "ডার্ক",
+ "HighContrastTheme": "উচ্চ বৈশিষ্ট্যসমৃদ্ধ থিম",
+ "Autosave": "অটোসেভ",
+ "AutocompleteHinter": "অটোকমপ্লিট হিন্টার",
+ "WordWrap": "ওয়ার্ড র্যাপ",
+ "LineNumbers": "লাইন নম্বর",
+ "LintWarningSound": "লিন্ট সতর্কতা শব্দ",
+ "UsedScreenReader": "স্ক্রিন রিডার সাথে ব্যবহৃত",
+ "PlainText": "সাধারিত টেক্সট",
+ "TableText": "টেবিল টেক্সট",
+ "Sound": "শব্দ"
+ },
+ "PreferenceCreators": {
+ "On": "চালু",
+ "Off": "বন্ধ"
+ },
+ "MobileIDEView": {
+ "Preferences": "পছন্দ",
+ "MyStuff": "আমার জিনিসপত্র",
+ "Examples": "উদাহরণ",
+ "OriginalEditor": "মৌলিক এডিটর",
+ "Login": "লগইন",
+ "Logout": "লগআউট"
+ },
+ "MobileDashboardView": {
+ "Examples": "উদাহরণ",
+ "Sketches": "স্কেচগুলি",
+ "Collections": "সংগ্রহগুলি",
+ "Assets": "সম্পত্তি",
+ "MyStuff": "আমার জিনিসপত্র",
+ "CreateSketch": "স্কেচ তৈরি করুন",
+ "CreateCollection": "সংগ্রহ তৈরি করুন"
+ },
+ "Explorer": {
+ "Files": "ফাইলস"
+ },
+ "Cookies": {
+ "Header": "কুকিজ",
+ "Body": "p5.js এডিটর কুকিজ ব্যবহার করে। কিছুটা ওয়েবসাইট কার্যক্ষমতার জন্য অত্যাবশ্যক এবং আপনাকে একটি অ্যাকাউন্ট এবং পছন্দ পরিচালনা করতে দেয়। অন্যান্যগুলি অত্যাবশ্যক নয়—এগুলি অ্যানালিটিক্সের জন্য ব্যবহৃত হয় এবং আমাদের সম্প্রদায়ে আরও জানতে সাহায্য করে। আমরা কখনই এই ডেটা বিক্রি করিনি বা এটি বিজ্ঞাপনের জন্য ব্যবহার করিনি। আপনি যে কুকিজগুলি অনুমোদন দিতে চান, এবং আমাদের <0>গোপনীয়তা নীতি<0> এ আরও জানতে পারেন।",
+ "AllowAll": "সব অনুমোদন করুন",
+ "AllowEssential": "প্রধান অনুমোদন করুন"
+ },
+ "Legal": {
+ "PrivacyPolicy": "গোপনীয়তা নীতি",
+ "TermsOfUse": "ব্যবহারের শর্তাবলি",
+ "CodeOfConduct": "আচার-সম্প্রদায়ের কোড"
+ }
+}
\ No newline at end of file
diff --git a/translations/locales/en-US/translations.json b/translations/locales/en-US/translations.json
index e6877b0f58..39f3a426ef 100644
--- a/translations/locales/en-US/translations.json
+++ b/translations/locales/en-US/translations.json
@@ -97,9 +97,14 @@
"Libraries": "Libraries",
"Forum": "Forum",
"Examples": "Examples",
+ "Home": "Home",
+ "Twitter": "Twitter",
+ "Instagram": "Instagram",
+ "Discord": "Discord",
"PrivacyPolicy": "Privacy Policy",
"TermsOfUse": "Terms of Use",
- "CodeOfConduct": "Code of Conduct"
+ "CodeOfConduct": "Code of Conduct",
+ "WebEditor": "Web Editor"
},
"Toast": {
"OpenedNewSketch": "Opened new sketch.",
@@ -359,7 +364,8 @@
"Description": "Sign Up",
"Or": "Or",
"AlreadyHave": "Already have an account?",
- "Login": "Log In"
+ "Login": "Log In",
+ "Warning": "By signing up, you agree to the p5.js Editor's <0>Terms of Use0> and <1>Privacy Policy.1>"
},
"EmailVerificationView": {
"Title": "p5.js Web Editor | Email Verification",
diff --git a/translations/locales/hi/translations.json b/translations/locales/hi/translations.json
index 493005abc6..4226725a98 100644
--- a/translations/locales/hi/translations.json
+++ b/translations/locales/hi/translations.json
@@ -3,9 +3,9 @@
"File": {
"Title": "फाइल",
"New": "नई",
- "Share": "शेयर",
- "Duplicate": "डुप्लिकेट",
- "Open": "ओपन",
+ "Share": "भेजें",
+ "Duplicate": "प्रतिलिपि बनाएँ",
+ "Open": "खोलें",
"Download": "डाउनलोड",
"AddToCollection": "संग्रह में जोड़ें",
"Examples": "उदाहरण"
@@ -17,7 +17,7 @@
"Replace": "बदली करें"
},
"Sketch": {
- "Title": "स्केच",
+ "Title": "चित्र",
"AddFile": "फाइल जोड़ें",
"AddFolder": "फोल्डर जोड़ें",
"Run": "चलाएं",
@@ -42,7 +42,7 @@
"My": "मेरा",
"MySketches": "मेरे स्केच",
"MyCollections": "मेरे संग्रह",
- "Asset": "ऐसेट",
+ "Asset": "संपत्ति",
"MyAssets": "मेरे ऐसेट",
"LogOut": "लॉग आउट"
}
@@ -95,8 +95,16 @@
"Learn": "सीखें",
"Resources": "साधन",
"Libraries": "लाइब्रेरीज़",
- "Forum": "फोरम",
- "Examples": "उदाहरण"
+ "Forum": "समूह",
+ "Examples": "उदाहरण",
+ "Home": "होम",
+ "Twitter": "ट्विटर",
+ "Instagram": "इंस्टाग्राम",
+ "Discord": "डिस्कॉर्ड",
+ "PrivacyPolicy": "प्राइवेसी पालिसी",
+ "TermsOfUse": "टर्म्स ऑफ़ यूज़",
+ "CodeOfConduct": "कोड ऑफ़ कंडक्ट",
+ "WebEditor": "वेब एडिटर"
},
"Toast": {
"OpenedNewSketch": "नया स्केच खोला",
@@ -142,6 +150,8 @@
"DecreaseFontARIA": "फॉन्ट साइज़ कम करें",
"IncreaseFont": "बढ़ाएं",
"IncreaseFontARIA": "फॉन्ट साइज़ बढ़ाएं",
+ "FontSize": "फ़ॉन्ट आकार",
+ "SetFontSize": "फ़ॉन्ट आकार सेट करें",
"Autosave": "ऑटोसेव",
"On": "चालू",
"AutosaveOnARIA": "ऑटोसेव चालू",
@@ -150,6 +160,9 @@
"AutocloseBracketsQuotes": "ऑटोक्लोज ब्रैकिट और क्वोट",
"AutocloseBracketsQuotesOnARIA": "ऑटोक्लोज ब्रैकिट और क्वोट चालू",
"AutocloseBracketsQuotesOffARIA": "ऑटोक्लोज ब्रैकिट और क्वोट बंद",
+ "AutocompleteHinter": "ऑटोकम्प्लीट हिंटर",
+ "AutocompleteHinterOnARIA": "ऑटोकम्प्लीट हिंटर चालू",
+ "AutocompleteHinterOffARIA": "ऑटोकम्प्लीट हिंटर बंद",
"WordWrap": "वर्ड रैप",
"LineWrapOnARIA": "लाइनरैप चालू",
"LineWrapOffARIA": "लाइनरैप बंद",
@@ -171,7 +184,7 @@
"KeyboardShortcuts": {
"Title": " कीबोर्ड शॉर्टकट",
"ShortcutsFollow": "कोड संपादन कीबोर्ड शॉर्टकट अनुसरण करते हैं",
- "SublimeText": "Sublime Text शॉर्टकट",
+ "SublimeText": "सबलाइम टेक्स्ट शॉर्टकट",
"CodeEditing": {
"Tidy": "साफ",
"FindText": "शब्द ढूंढे",
@@ -183,7 +196,9 @@
"CommentLine": "टिप्पणी लाइन",
"FindNextTextMatch": "अगला शब्द मिलान खोजें",
"FindPreviousTextMatch": "पिछला शब्द मिलान खोजें",
- "CodeEditing": "कोड संपादन"
+ "CodeEditing": "कोड संपादन",
+ "ColorPicker": "इनलाइन कलर पिकर दिखाएँ"
+
},
"General": {
"StartSketch": "स्केच शुरू करें",
@@ -350,7 +365,8 @@
"Description": "साइन अप",
"Or": "या",
"AlreadyHave": "पहले से ही अकाउंट है?",
- "Login": "लॉग इन"
+ "Login": "लॉग इन",
+ "Warning": "साइन अप करके, आप p5.js संपादक की उपयोग की <0>शर्तों0> और <1>गोपनीयता नीति1> से सहमत होते हैं।"
},
"EmailVerificationView": {
"Title": "p5.js वेब एडिटर | ईमेल वेरीफिकेशन",
@@ -569,6 +585,7 @@
"DarkTheme": "डार्क",
"HighContrastTheme": "ज़्यादा कंट्रास्ट",
"Autosave": "ऑटोसेव",
+ "AutocompleteHinter": "ऑटोकंप्लीट हिंटर",
"WordWrap": "वर्ड रैप",
"LineNumbers": "लाइन नम्बर्ज़",
"LintWarningSound": "लिन्ट वॉर्निंग साउन्ड",
@@ -600,6 +617,17 @@
},
"Explorer": {
"Files": "फ़ाइलें"
+ },
+ "Cookies": {
+ "Header": "कुकीज",
+ "Body": "p5.js संपादक कुकीज़ का उपयोग करता है। कुछ वेबसाइट की कार्यक्षमता के लिए आवश्यक हैं और आपको खाता और प्राथमिकताएँ प्रबंधित करने की अनुमति देते हैं। अन्य आवश्यक नहीं हैं - उनका उपयोग विश्लेषण के लिए किया जाता है और हमें अपने समुदाय के बारे में अधिक जानने की अनुमति मिलती है। हम इस डेटा को कभी नहीं बेचते हैं या विज्ञापन के लिए इसका उपयोग नहीं करते हैं। आप यह तय कर सकते हैं कि आप किन कुकीज़ को अनुमति देना चाहते हैं, और हमारी <0>गोपनीयता नीति<0> में और अधिक जान सकते हैं।",
+ "AllowAll": "सभी को अनुमति दें",
+ "AllowEssential": "आवश्यक अनुमति दें"
+ },
+ "Legal": {
+ "PrivacyPolicy": "गोपनीयता नीति",
+ "TermsOfUse": "उपयोग की शर्तें",
+ "CodeOfConduct": "आचार संहिता"
}
}
-
\ No newline at end of file
+
diff --git a/translations/locales/it/translations.json b/translations/locales/it/translations.json
index 91345c5a18..a55f008209 100644
--- a/translations/locales/it/translations.json
+++ b/translations/locales/it/translations.json
@@ -70,7 +70,7 @@
"Submit": "Accedi"
},
"LoginView": {
- "Title": "p5.js Web Editor | Accesso",
+ "Title": "p5.js redattore web | Accesso",
"Login": "Accedi",
"LoginOr": "o",
"SignUp": "Registrati",
@@ -88,7 +88,7 @@
},
"About": {
"Title": "Informazioni",
- "TitleHelmet": "p5.js Web Editor | Informazioni",
+ "TitleHelmet": "p5.js redattore web | Informazioni",
"Contribute": "Contribuisci",
"NewP5": "Sei nuovo su p5.js?",
"Report": "Riporta un bug",
@@ -264,7 +264,7 @@
"Submit": "Spedisci email per resettare la password"
},
"ResetPasswordView": {
- "Title": "p5.js Web Editor | Reset Password",
+ "Title": "p5.js redattore web | Reset Password",
"Reset": "Reset Password",
"Submitted": "Dovrebbe arrivarti a breve una email per resettare la password. Se non la vedi, controlla\n nella tua cartella di posta indesiderata potrebbe essere finita là.",
"Login": "Accedi",
@@ -284,7 +284,7 @@
"errorValidUsername": "Il nome utente dev'essere composto solo da numeri, lettere, must only consist of numbers, letters, punti, trattini e trattini bassi."
},
"NewPasswordView": {
- "Title": "p5.js Web Editor | Nuova password",
+ "Title": "p5.js redattore web | Nuova password",
"Description": "Imposta una nuova password",
"TokenInvalidOrExpired": "Il codice di reset password non è valido o è scaduto.",
"EmptyPassword": "Per favore inserisci una password",
@@ -307,8 +307,8 @@
},
"AccountView": {
"SocialLogin": "Accesso ai social",
- "SocialLoginDescription": "Usa il tuo account GitHub o Google per accedere al web editor p5.js.",
- "Title": "p5.js Web Editor | Impostazioni account",
+ "SocialLoginDescription": "Usa il tuo account GitHub o Google per accedere al redattore web p5.js.",
+ "Title": "p5.js redattore web | Impostazioni account",
"Settings": "Impostazioni Account",
"AccountTab": "Account",
"AccessTokensTab": "Codici di accesso"
@@ -352,14 +352,14 @@
"SubmitSignup": "Registrati"
},
"SignupView": {
- "Title": "p5.js Web Editor | Registrazione",
+ "Title": "p5.js redattore web | Registrazione",
"Description": "Registrati",
"Or": "o",
"AlreadyHave": "Hai già un account?",
"Login": "Accedi"
},
"EmailVerificationView": {
- "Title": "p5.js Web Editor | Verifica email",
+ "Title": "p5.js redattore web | Verifica email",
"Verify": "Verifica la tua email",
"InvalidTokenNull": "Quel link non è valido.",
"Checking": "Validazione codice, prego attendere...",
@@ -367,7 +367,7 @@
"InvalidState": "Qualcosa è andato storto."
},
"AssetList": {
- "Title": "p5.js Web Editor | Mie risorse",
+ "Title": "p5.js redattore web | Mie risorse",
"ToggleOpenCloseARIA": "Abilita/disabilita l'opzione Apri/Chiudi risorse",
"Delete": "Cancella",
"OpenNewTab": "Apri in nuova pagina",
@@ -377,7 +377,7 @@
"HeaderSketch": "Sketch"
},
"Feedback": {
- "Title": "p5.js Web Editor | Feedback",
+ "Title": "p5.js redattore web | Feedback",
"ViaGithubHeader": "Problema tramite GitHub",
"ViaGithubDescription": "Se sei pratico con GitHub, questo è il nostro metodo preferito per ricevere report di bug o feedback.",
"GoToGithub": "Vai a Github",
@@ -407,7 +407,7 @@
"LogIn": "Accedi",
"SavedDifferentWindow": "Il progetto che hai tentato di salvare è stato salvato da un'altra finestra.\n Aggiorna la pagina per vedere l'ultima versione.",
"LinkTitle": "Errore durante il collegamento dell'account",
- "LinkMessage": "Si è verificato un problema durante il collegamento del tuo {{serviceauth}} account al tuo account del Web Editor p5.js. Il tuo {{serviceauth}} account è già stato collegato ad un account del web editor p5.js."
+ "LinkMessage": "Si è verificato un problema durante il collegamento del tuo {{serviceauth}} account al tuo account del redattore web p5.js. Il tuo {{serviceauth}} account è già stato collegato ad un account del redattore web p5.js."
},
"ShareModal": {
"Embed": "Incorporare",
@@ -420,8 +420,8 @@
"TitleDefault": "collezione"
},
"Collection": {
- "Title": "p5.js Web Editor | Mie collezioni",
- "AnothersTitle": "p5.js Web Editor | Le collezioni di {{anotheruser}}",
+ "Title": "p5.js redattore web | Mie collezioni",
+ "AnothersTitle": "p5.js redattore web | Le collezioni di {{anotheruser}}",
"Share": "Condividi",
"URLLink": "Collegamento alla collezione",
"AddSketch": "Aggiungi sketch",
@@ -444,12 +444,12 @@
"ButtonLabelDescendingARIA": "Ordine per {{displayName}} discendente."
},
"AddToCollectionList": {
- "Title": "p5.js Web Editor | Le mie collezioni",
- "AnothersTitle": "p5.js Web Editor | Collezioni di{{anotheruser}}",
+ "Title": "p5.js redattore web | Le mie collezioni",
+ "AnothersTitle": "p5.js redattore web | Collezioni di{{anotheruser}}",
"Empty": "Nessuna collezione"
},
"CollectionCreate": {
- "Title": "p5.js Web Editor | Crea collezione",
+ "Title": "p5.js redattore web | Crea collezione",
"FormError": "Non posso creare la collezione",
"FormLabel": "Nome collezione",
"FormLabelARIA": "nome",
@@ -470,8 +470,8 @@
"Assets": "Risorse"
},
"CollectionList": {
- "Title": "p5.js Web Editor | Le mie collezioni",
- "AnothersTitle": "p5.js Web Editor | Le collezioni di {{anotheruser}}",
+ "Title": "p5.js redattore web | Le mie collezioni",
+ "AnothersTitle": "p5.js redattore web | Le collezioni di {{anotheruser}}",
"NoCollections": "Nessuna collezione.",
"TableSummary": "pagina contenente tutte le collezioni",
"HeaderName": "Nome",
@@ -503,8 +503,8 @@
},
"SketchList": {
"View": "Vista",
- "Title": "p5.js Web Editor | I miei sketch",
- "AnothersTitle": "p5.js Web Editor | Sketch di {{anotheruser}}",
+ "Title": "p5.js redattore web | I miei sketch",
+ "AnothersTitle": "p5.js redattore web | Sketch di {{anotheruser}}",
"ToggleLabelARIA": "Alterna opzione Apri/Chiudi Sketch",
"DropdownRename": "Rinomina",
"DropdownDownload": "Scarica",
@@ -525,8 +525,8 @@
"NoSketches": "Nessuno sketch."
},
"AddToCollectionSketchList": {
- "Title": "p5.js Web Editor | I miei sketch",
- "AnothersTitle": "p5.js Web Editor | Sketch di {{anotheruser}}",
+ "Title": "p5.js redattore web | I miei sketch",
+ "AnothersTitle": "p5.js redattore web | Sketch di {{anotheruser}}",
"NoCollections": "Nessuna collezione."
},
"Editor": {
diff --git a/translations/locales/ja/translations.json b/translations/locales/ja/translations.json
index b711bf6535..0f37c40f0d 100644
--- a/translations/locales/ja/translations.json
+++ b/translations/locales/ja/translations.json
@@ -88,7 +88,7 @@
},
"About": {
"Title": "ウェブエディタについて",
- "TitleHelmet": "p5.js Web Editor | ウェブエディタについて",
+ "TitleHelmet": "p5.js ウェブエディター | ウェブエディタについて",
"Contribute": "コントリビュート",
"NewP5": "p5.jsは初めてですか?",
"Report": "バグレポート",
@@ -258,7 +258,7 @@
"Submit": "パスワードリセットのメールを送信する"
},
"ResetPasswordView": {
- "Title": "p5.js Web Editor | パスワードリセット",
+ "Title": "p5.js ウェブエディター | パスワードリセット",
"Reset": "パスワードをリセットする",
"Submitted": "パスワードリセットのメールを送信しました。もし、見当たらない場合は\n 迷惑メールフォルダに入っている可能性がありますので、確認してください。",
"Login": "ログイン",
@@ -278,7 +278,7 @@
"errorValidUsername": "ユーザー名は、英数字、ピリオド(.)、ダッシュ(-)、アンダースコア(_)のみで構成されている必要があります。"
},
"NewPasswordView": {
- "Title": "p5.js Web Editor | 新しいパスワード",
+ "Title": "p5.js ウェブエディター | 新しいパスワード",
"Description": "新しいパスワードの設定",
"TokenInvalidOrExpired": "パスワードリセットトークンが無効か、有効期限が切れています。",
"EmptyPassword": "パスワードを入力してください",
@@ -301,8 +301,8 @@
},
"AccountView": {
"SocialLogin": "ソーシャルログイン",
- "SocialLoginDescription": "GitHubやGoogleアカウントを使って、p5.js Web Editorにログインできます。",
- "Title": "p5.js Web Editor | アカウント設定",
+ "SocialLoginDescription": "GitHubやGoogleアカウントを使って、p5.js ウェブエディターにログインできます。",
+ "Title": "p5.js ウェブエディター | アカウント設定",
"Settings": "アカウント設定",
"AccountTab": "アカウント",
"AccessTokensTab": "アクセストークン"
@@ -346,14 +346,14 @@
"SubmitSignup": "アカウント作成"
},
"SignupView": {
- "Title": "p5.js Web Editor | ユーザー登録",
+ "Title": "p5.js ウェブエディター | ユーザー登録",
"Description": "ユーザー登録",
"Or": "もしくは",
"AlreadyHave": "既にアカウントをお持ちですか?",
"Login": "ログイン"
},
"EmailVerificationView": {
- "Title": "p5.js Web Editor | メールアドレス認証",
+ "Title": "p5.js ウェブエディター | メールアドレス認証",
"Verify": "メールアドレスを確認してください",
"InvalidTokenNull": "そのリンクは無効です。",
"Checking": "トークンを検証中です、お待ちください...",
@@ -361,7 +361,7 @@
"InvalidState": "何か問題が発生しました。"
},
"AssetList": {
- "Title": "p5.js Web Editor | マイアセット",
+ "Title": "p5.js ウェブエディター | マイアセット",
"ToggleOpenCloseARIA": "アセットオプションの開閉を切り替え",
"Delete": "削除",
"OpenNewTab": "新しいタブで開く",
@@ -371,7 +371,7 @@
"HeaderSketch": "スケッチ"
},
"Feedback": {
- "Title": "p5.js Web Editor | フィードバック",
+ "Title": "p5.js ウェブエディター | フィードバック",
"ViaGithubHeader": "Github Issuesを利用",
"ViaGithubDescription": "Githubに詳しい方は、バグレポートやフィードバックのために、こちらからお願いします。",
"GoToGithub": "Githubへアクセスする",
@@ -401,7 +401,7 @@
"LogIn": "ログイン",
"SavedDifferentWindow": "保存しようとしたプロジェクトが別のウィンドウから保存されました。\n 最新版をご覧になるにはページを更新してください。",
"LinkTitle": "アカウント接続エラー",
- "LinkMessage": "あなたの {{serviceauth}} アカウントとp5.js Web Editorアカウントの接続に問題がありました。 あなたの {{serviceauth}} アカウントは、すでに別のp5.js Web Editorアカウントに接続されています。"
+ "LinkMessage": "あなたの {{serviceauth}} アカウントとp5.js ウェブエディターアカウントの接続に問題がありました。 あなたの {{serviceauth}} アカウントは、すでに別のp5.js ウェブエディターアカウントに接続されています。"
},
"ShareModal": {
"Embed": "埋め込み",
@@ -414,8 +414,8 @@
"TitleDefault": "コレクション"
},
"Collection": {
- "Title": "p5.js Web Editor | マイコレクション",
- "AnothersTitle": "p5.js Web Editor | {{anotheruser}} のコレクション",
+ "Title": "p5.js ウェブエディター | マイコレクション",
+ "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}} のコレクション",
"Share": "共有",
"URLLink": "コレクションのリンク",
"AddSketch": "スケッチを追加する",
@@ -438,12 +438,12 @@
"ButtonLabelDescendingARIA": "降順に{{displayName}}で並び替えます。"
},
"AddToCollectionList": {
- "Title": "p5.js Web Editor | マイコレクション",
- "AnothersTitle": "p5.js Web Editor | {{anotheruser}}のコレクション",
+ "Title": "p5.js ウェブエディター | マイコレクション",
+ "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}}のコレクション",
"Empty": "コレクションは空です"
},
"CollectionCreate": {
- "Title": "p5.js Web Editor | コレクション作成",
+ "Title": "p5.js ウェブエディター | コレクション作成",
"FormError": "コレクションを作成することが出来ませんでした",
"FormLabel": "コレクション名",
"FormLabelARIA": "名前",
@@ -464,8 +464,8 @@
"Assets": "アセット"
},
"CollectionList": {
- "Title": "p5.js Web Editor | マイコレクション",
- "AnothersTitle": "p5.js Web Editor | {{anotheruser}}のコレクション",
+ "Title": "p5.js ウェブエディター | マイコレクション",
+ "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}}のコレクション",
"NoCollections": "コレクションがありません。",
"TableSummary": "全コレクションのテーブル",
"HeaderName": "名前",
@@ -497,8 +497,8 @@
},
"SketchList": {
"View": "表示",
- "Title": "p5.js Web Editor | マイスケッチ",
- "AnothersTitle": "p5.js Web Editor | {{anotheruser}} のスケッチ",
+ "Title": "p5.js ウェブエディター | マイスケッチ",
+ "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}} のスケッチ",
"ToggleLabelARIA": "開く/閉じるスケッチ オプションの切り替え",
"DropdownRename": "名前変更",
"DropdownDownload": "ダウンロード",
@@ -519,8 +519,8 @@
"NoSketches": "スケッチがありません"
},
"AddToCollectionSketchList": {
- "Title": "p5.js Web Editor | マイスケッチ",
- "AnothersTitle": "p5.js Web Editor | {{anotheruser}} のスケッチ",
+ "Title": "p5.js ウェブエディター | マイスケッチ",
+ "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}} のスケッチ",
"NoCollections": "コレクションがありません。"
},
"Editor": {
diff --git a/translations/locales/ko/translations.json b/translations/locales/ko/translations.json
index 4c9416f371..ed5903d10b 100644
--- a/translations/locales/ko/translations.json
+++ b/translations/locales/ko/translations.json
@@ -133,28 +133,28 @@
"AutosaveOnARIA": "자동저장 켜짐",
"Off": "끄기",
"AutosaveOffARIA": "자동저장 꺼짐",
- "AutocloseBracketsQuotes": "Autoclose Brackets and Quotes",
- "AutocloseBracketsQuotesOnARIA": "autoclose brackets and quotes on",
- "AutocloseBracketsQuotesOffARIA": "autoclose brackets and quotes off",
- "WordWrap": "Word Wrap",
- "LineWrapOnARIA": "linewrap on",
- "LineWrapOffARIA": "linewrap off",
- "LineNumbers": "Line numbers",
- "LineNumbersOnARIA": "line numbers on",
- "LineNumbersOffARIA": "line numbers off",
- "LintWarningSound": "Lint warning sound",
- "LintWarningOnARIA": "lint warning on",
- "LintWarningOffARIA": "lint warning off",
- "PreviewSound": "Preview sound",
- "PreviewSoundARIA": "preview sound",
- "AccessibleTextBasedCanvas": "Accessible text-based canvas",
- "UsedScreenReader": "Used with screen reader",
- "PlainText": "Plain-text",
- "TextOutputARIA": "text output on",
- "TableText": "Table-text",
- "TableOutputARIA": "table output on",
- "Sound": "Sound",
- "SoundOutputARIA": "sound output on"
+ "AutocloseBracketsQuotes": "괄호 및 따옴표 자동 닫기",
+ "AutocloseBracketsQuotesOnARIA": "괄호 및 따옴표 자동 닫기 켜기",
+ "AutocloseBracketsQuotesOffARIA": "괄호 및 따옴표 자동 닫기 끄기",
+ "WordWrap": "단어 자동 줄 바꿈",
+ "LineWrapOnARIA": "줄 바꿈 켜기",
+ "LineWrapOffARIA": "줄 바꿈 끄기",
+ "LineNumbers": "줄 번호",
+ "LineNumbersOnARIA": "줄 번호 켜기",
+ "LineNumbersOffARIA": "줄 번호 끄기",
+ "LintWarningSound": "린트 경고 소리",
+ "LintWarningOnARIA": "린트 경고 켜기",
+ "LintWarningOffARIA": "린트 경고 끄기",
+ "PreviewSound": "미리보기 소리",
+ "PreviewSoundARIA": "미리보기 소리",
+ "AccessibleTextBasedCanvas": "접근 가능한 텍스트 기반 캔버스",
+ "UsedScreenReader": "스크린 리더 사용",
+ "PlainText": "일반 텍스트",
+ "TextOutputARIA": "텍스트 출력 켜기",
+ "TableText": "테이블 텍스트",
+ "TableOutputARIA": "테이블 출력 켜기",
+ "Sound": "소리",
+ "SoundOutputARIA": "소리 출력 켜기"
},
"KeyboardShortcuts": {
"Title": " 단축키",
diff --git a/translations/locales/tr/translations.json b/translations/locales/tr/translations.json
index ab85670cbf..bdae67da07 100644
--- a/translations/locales/tr/translations.json
+++ b/translations/locales/tr/translations.json
@@ -356,7 +356,8 @@
"Description": "Kaydol",
"Or": "Veya",
"AlreadyHave": "Zaten bir hesabın var mı?",
- "Login": "Giriş yap"
+ "Login": "Giriş yap",
+ "Warning":"Kaydolarak p5.js Editörün Kullanım <0>Koşullarını0> ve <1>Gizlilik Politikasını1> kabul etmiş olursunuz."
},
"EmailVerificationView": {
"Title": "p5.js Web Düzenleyicisi | E-posta Doğrulama",
diff --git a/translations/locales/uk-UA/translations.json b/translations/locales/uk-UA/translations.json
index 953367a856..8d90e5909e 100644
--- a/translations/locales/uk-UA/translations.json
+++ b/translations/locales/uk-UA/translations.json
@@ -70,7 +70,7 @@
"Submit": "Увійти"
},
"LoginView": {
- "Title": "p5.js Web Editor | Вхід",
+ "Title": "p5.js веб-редактор | Вхід",
"Login": "Увійти",
"LoginOr": "або",
"SignUp": "Зареєструватися",
@@ -88,7 +88,7 @@
},
"About": {
"Title": "Про редактор",
- "TitleHelmet": "p5.js Web Editor | Про редактор",
+ "TitleHelmet": "p5.js веб-редактор | Про редактор",
"Contribute": "Внесок",
"NewP5": "Початківець в p5.js?",
"Report": "Повідомити про помилку",
@@ -260,7 +260,7 @@
"Submit": "Надіслати електронний лист для скидання пароля"
},
"ResetPasswordView": {
- "Title": "p5.js Web Editor | Скинути пароль",
+ "Title": "p5.js веб-редактор | Скинути пароль",
"Reset": "Скинути пароль",
"Submitted": "Лист для скидання пароля має надійти незабаром на вашу електронну пошту.\n Якщо лист не прийшов, перевірте папку із спамом.",
"Login": "Увійти",
@@ -280,7 +280,7 @@
"errorValidUsername": "Ім'я користувача має складатися лише з цифр, літер, крапок, тире та символа підкреслення."
},
"NewPasswordView": {
- "Title": "p5.js Web Editor | Новий пароль",
+ "Title": "p5.js веб-редактор | Новий пароль",
"Description": "Встановити новий пароль",
"TokenInvalidOrExpired": "Помилка скидання пароля або термін дії минув.",
"EmptyPassword": "Введіть пароль",
@@ -303,8 +303,8 @@
},
"AccountView": {
"SocialLogin": "Увійти через соціальну мережу",
- "SocialLoginDescription": "Використовуйте свій обліковий запис GitHub або Google, щоб увійти у p5.js Web Editor.",
- "Title": "p5.js Web Editor | Налаштування акаунта",
+ "SocialLoginDescription": "Використовуйте свій обліковий запис GitHub або Google, щоб увійти у p5.js веб-редактор.",
+ "Title": "p5.js веб-редактор | Налаштування акаунта",
"Settings": "Налаштування акаунта",
"AccountTab": "Акаунт",
"AccessTokensTab": "Ключі"
@@ -348,14 +348,14 @@
"SubmitSignup": "Зареєструватися"
},
"SignupView": {
- "Title": "p5.js Web Editor | Реєстрація",
+ "Title": "p5.js веб-редактор | Реєстрація",
"Description": "Реєстрація",
"Or": "Або",
"AlreadyHave": "Ви вже маєте акаунт? ",
"Login": "Увійти"
},
"EmailVerificationView": {
- "Title": "p5.js Web Editor | Підтвердження електронної пошти",
+ "Title": "p5.js веб-редактор | Підтвердження електронної пошти",
"Verify": "Підтвердьте свою електронну адресу",
"InvalidTokenNull": "Це посилання недійсне.",
"Checking": "Перевірка ключа, зачекайте...",
@@ -363,7 +363,7 @@
"InvalidState": "Щось пішло не так."
},
"AssetList": {
- "Title": "p5.js Web Editor | Мої файли",
+ "Title": "p5.js веб-редактор | Мої файли",
"ToggleOpenCloseARIA": "Увімкнути/вимкнути параметри файлів",
"Delete": "Видалити",
"OpenNewTab": "Відкрити у новій вкладці",
@@ -373,7 +373,7 @@
"HeaderSketch": "Скетч"
},
"Feedback": {
- "Title": "p5.js Web Editor | Зворотний зв'язок",
+ "Title": "p5.js веб-редактор | Зворотний зв'язок",
"ViaGithubHeader": "Через Github Issues",
"ViaGithubDescription": "Якщо ви знайомі з Github, це наш найкращий спосіб отримання звітів про помилки та відгуків.",
"GoToGithub": "Перейти на Github",
@@ -403,7 +403,7 @@
"LogIn": "Увійти",
"SavedDifferentWindow": "Проєкт, який ви намагалися зберегти, було збережено у іншому вікні.\n Оновіть сторінку, щоб побачити останню версію.",
"LinkTitle": "Помилка зв'язування облікового запису",
- "LinkMessage": "Не вдалося пов'язати ваш обліковий запис {{serviceauth}} з вашим обліковим записом p5.js Web Editor. Ваш обліковий запис {{serviceauth}} вже пов'язаний з іншим обліковим записом p5.js Web Editor."
+ "LinkMessage": "Не вдалося пов'язати ваш обліковий запис {{serviceauth}} з вашим обліковим записом p5.js веб-редактор. Ваш обліковий запис {{serviceauth}} вже пов'язаний з іншим обліковим записом p5.js веб-редактор."
},
"ShareModal": {
"Embed": "Вбудувати",
@@ -416,8 +416,8 @@
"TitleDefault": "колекція"
},
"Collection": {
- "Title": "p5.js Web Editor | Мої колекції",
- "AnothersTitle": "p5.js Web Editor | Колекції {{anotheruser}}",
+ "Title": "p5.js веб-редактор | Мої колекції",
+ "AnothersTitle": "p5.js веб-редактор | Колекції {{anotheruser}}",
"Share": "Поділитися",
"URLLink": "Посилання на колекцію",
"AddSketch": "Додати скетч",
@@ -440,12 +440,12 @@
"ButtonLabelDescendingARIA": "Сортувати {{displayName}} за спаданням."
},
"AddToCollectionList": {
- "Title": "p5.js Web Editor | Мої колекції",
- "AnothersTitle": "p5.js Web Editor | Колекції {{anotheruser}}",
+ "Title": "p5.js веб-редактор | Мої колекції",
+ "AnothersTitle": "p5.js веб-редактор | Колекції {{anotheruser}}",
"Empty": "Немає колекцій"
},
"CollectionCreate": {
- "Title": "p5.js Web Editor | Створити колекцію",
+ "Title": "p5.js веб-редактор | Створити колекцію",
"FormError": "Не вдалося створити колекцію",
"FormLabel": "Ім'я колекції",
"FormLabelARIA": "ім'я",
@@ -466,8 +466,8 @@
"Assets": "Файли"
},
"CollectionList": {
- "Title": "p5.js Web Editor | Мої колекції",
- "AnothersTitle": "p5.js Web Editor | Колекції {{anotheruser}}",
+ "Title": "p5.js веб-редактор | Мої колекції",
+ "AnothersTitle": "p5.js веб-редактор | Колекції {{anotheruser}}",
"NoCollections": "Немає колекцій.",
"TableSummary": "таблиця, що містить усі колекції",
"HeaderName": "Ім'я",
@@ -499,8 +499,8 @@
},
"SketchList": {
"View": "Перегляд",
- "Title": "p5.js Web Editor | Мої скетчі",
- "AnothersTitle": "p5.js Web Editor | Скетчі {{anotheruser}}",
+ "Title": "p5.js веб-редактор | Мої скетчі",
+ "AnothersTitle": "p5.js веб-редактор | Скетчі {{anotheruser}}",
"ToggleLabelARIA": "Відкрити/закрити параметри скетчу",
"DropdownRename": "Перейменувати",
"DropdownDownload": "Завантажити",
@@ -521,8 +521,8 @@
"NoSketches": "Немає скетчів."
},
"AddToCollectionSketchList": {
- "Title": "p5.js Web Editor | Мої скетчі",
- "AnothersTitle": "p5.js Web Editor | Скетчі {{anotheruser}}",
+ "Title": "p5.js веб-редактор | Мої скетчі",
+ "AnothersTitle": "p5.js веб-редактор | Скетчі {{anotheruser}}",
"NoCollections": "Немає колекцій."
},
"Editor": {
diff --git a/translations/locales/ur/translations.json b/translations/locales/ur/translations.json
new file mode 100644
index 0000000000..289cc9fc29
--- /dev/null
+++ b/translations/locales/ur/translations.json
@@ -0,0 +1,626 @@
+{
+ "Nav": {
+ "File": {
+ "Title": "فائل",
+ "New": "نئی",
+ "Share": "بانٹیں",
+ "Duplicate": "نقل",
+ "Open": "کھولیں۔",
+ "Download": "ڈاؤن لوڈ کریں",
+ "AddToCollection": "مجموعہ میں شامل کریں۔",
+ "Examples": "مثالیں"
+ },
+ "Edit": {
+ "Title": "ترمیم",
+ "TidyCode": "کوڈ کو صاف و ستھرا کریں",
+ "Find": "تلاش کریں",
+ "Replace": "بدل دیں"
+ },
+ "Sketch": {
+ "Title": "خاکہ",
+ "AddFile": "فائل شامل کریں",
+ "AddFolder": "فولڈر بنائیں",
+ "Run": "رن",
+ "Stop": "رک جائیں"
+ },
+ "Help": {
+ "Title": "مدد",
+ "KeyboardShortcuts": "کی بورڈ شارٹ کٹس",
+ "Reference": "حوالہ",
+ "About": "کے بارے میں"
+ },
+ "Lang": "زبان",
+ "BackEditor": "واپس ایڈیٹر پر",
+ "WarningUnsavedChanges": "کیا آپ واقعی یہ صفحہ چھوڑنا چاہتے ہیں؟ ",
+ "Login": "لاگ ان کریں",
+ "LoginOr": "یا",
+ "SignUp": "سائن اپ",
+ "Auth": {
+ "Welcome": "خوش آمدید",
+ "Hello": "ہیلو",
+ "MyAccount": "میرا اکاونٹ",
+ "My": "میرا",
+ "MySketches": "میرے خاکے",
+ "MyCollections": "میرے مجموعے",
+ "Asset": "اثاثہ",
+ "MyAssets": "میرے اثاثے",
+ "LogOut": "لاگ آوٹ"
+ }
+ },
+ "CodemirrorFindAndReplace": {
+ "ToggleReplace": "تبدیل کرنے کو ٹوگل کریں۔",
+ "Find": "تلاش کریں",
+ "FindPlaceholder": "فائلوں میں تلاش کریں۔",
+ "Replace": "بدل دیں۔",
+ "ReplaceAll": "سبھی کو تبدیل کریں۔",
+ "ReplacePlaceholder": "تبدیل کرنے کے لیے متن",
+ "Regex": "باقاعدہ اظہار",
+ "CaseSensitive": "حساس کیس",
+ "WholeWords": "پورے الفاظ",
+ "Previous": "پچھلا",
+ "Next": "اگلے",
+ "NoResults": "کوئی نتیجہ نہیں نکلا۔",
+ "Close": "بند کریں"
+ },
+ "LoginForm": {
+ "UsernameOrEmail": "ای میل یا اسم صارف",
+ "UsernameOrEmailARIA": "ای میل یا اسم صارف",
+ "Password": "پاس ورڈ",
+ "PasswordARIA": "پاس ورڈ",
+ "Submit": "لاگ ان کریں"
+ },
+ "LoginView": {
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "Login": "لاگ ان کریں",
+ "LoginOr": "یا",
+ "SignUp": "سائن اپ",
+ "Email": "ای میل",
+ "Username": "صارف نام",
+ "DontHaveAccount": "اکاؤنٹ نہیں ہے؟ ",
+ "ForgotPassword": "اپنا پاس ورڈ بھول گئے؟ ",
+ "ResetPassword": "آپ کا پاس ورڈ دوبارہ ترتیب دیں"
+ },
+ "SocialAuthButton": {
+ "Connect": "جڑیں۔ {{serviceauth}} کھاتہ",
+ "Unlink": "لنک ختم کریں۔ {{serviceauth}} کھاتہ",
+ "Login": "کے ساتھ لاگ ان {{serviceauth}}",
+ "LogoARIA": "{{serviceauth}} لوگو"
+ },
+ "About": {
+ "Title": "کے بارے میں",
+ "TitleHelmet": "p5.js ویب ایڈیٹر | ",
+ "Contribute": "تعاون کریں۔",
+ "NewP5": "p5.js میں نئے ہیں؟",
+ "Report": "ایک بگ کی اطلاع دیں۔",
+ "Learn": "سیکھیں۔",
+ "Resources": "حوالہ جات",
+ "Libraries": "لائبریریاں",
+ "Forum": "فورم",
+ "Examples": "مثالیں",
+ "PrivacyPolicy": "رازداری کی پالیسی",
+ "TermsOfUse": "استعمال کرنے کی شرائط",
+ "CodeOfConduct": "ضابطہ اخلاق"
+ },
+ "Toast": {
+ "OpenedNewSketch": "نیا خاکہ کھولا۔",
+ "SketchSaved": "خاکہ محفوظ ہو گیا۔",
+ "SketchFailedSave": "خاکہ محفوظ کرنے میں ناکام۔",
+ "AutosaveEnabled": "خودکار محفوظ کرنا فعال ہے۔",
+ "LangChange": "زبان بدل گئی۔",
+ "SettingsSaved": "ترتیبات محفوظ ہو گئیں۔"
+ },
+ "Toolbar": {
+ "Preview": "پیش نظارہ",
+ "Auto-refresh": "آٹو ریفریش",
+ "OpenPreferencesARIA": "ترجیحات کھولیں۔",
+ "PlaySketchARIA": "خاکہ چلائیں۔",
+ "PlayOnlyVisualSketchARIA": "صرف بصری خاکہ چلائیں۔",
+ "StopSketchARIA": "خاکہ بنانا بند کریں",
+ "EditSketchARIA": "خاکے کے نام میں ترمیم کریں۔",
+ "NewSketchNameARIA": "خاکے کا نیا نام",
+ "By": " کی طرف سے "
+ },
+ "Console": {
+ "Title": "تسلی",
+ "Clear": "صاف",
+ "ClearARIA": "کنسول صاف کریں۔",
+ "Close": "بند کریں",
+ "CloseARIA": "کنسول بند کریں۔",
+ "Open": "کھولیں۔",
+ "OpenARIA": "کنسول کھولیں۔"
+ },
+ "Preferences": {
+ "Settings": "ترتیبات",
+ "GeneralSettings": "عام ترتیبات",
+ "Accessibility": "رسائی",
+ "Theme": "خیالیہ",
+ "LightTheme": "روشنی",
+ "LightThemeARIA": "ہلکی تھیم آن",
+ "DarkTheme": "اندھیرا",
+ "DarkThemeARIA": "سیاہ تھیم آن",
+ "HighContrastTheme": "ہائی کنٹراسٹ",
+ "HighContrastThemeARIA": "ہائی کنٹراسٹ تھیم آن",
+ "TextSize": "متن کا سائز",
+ "DecreaseFont": "کمی",
+ "DecreaseFontARIA": "فونٹ کا سائز کم کریں۔",
+ "IncreaseFont": "اضافہ",
+ "IncreaseFontARIA": "فونٹ سائز میں اضافہ کریں",
+ "FontSize": "حرف کا سائز",
+ "SetFontSize": "فونٹ کا سائز مقرر کریں",
+ "Autosave": "خودبخود محفوظ کریں۔",
+ "On": "پر",
+ "AutosaveOnARIA": "خودبخود محفوظ کریں",
+ "Off": "بند",
+ "AutosaveOffARIA": "خود کار طریقے سے محفوظ کریں",
+ "AutocloseBracketsQuotes": "خودکار بند بریکٹ اور اقتباسات",
+ "AutocloseBracketsQuotesOnARIA": "خودکار بند بریکٹ اور کوٹس آن",
+ "AutocloseBracketsQuotesOffARIA": "خودکار بند بریکٹ اور کوٹس آف",
+ "AutocompleteHinter": "خودکار تکمیل اشارہ",
+ "AutocompleteHinterOnARIA": "خودکار تکمیل اشارہ آن",
+ "AutocompleteHinterOffARIA": "خود کار طریقے سے اشارہ بند",
+ "WordWrap": "لفظ لفاف",
+ "LineWrapOnARIA": "لائن لپیٹنا",
+ "LineWrapOffARIA": "لائن لپیٹنا",
+ "LineNumbers": "لائن نمبرز",
+ "LineNumbersOnARIA": "لائن نمبر آن",
+ "LineNumbersOffARIA": "لائن نمبر بند",
+ "LintWarningSound": "لنٹ وارننگ کی آواز",
+ "LintWarningOnARIA": "لنٹ وارننگ آن",
+ "LintWarningOffARIA": "لنٹ انتباہ بند",
+ "PreviewSound": "پیش نظارہ آواز",
+ "PreviewSoundARIA": "پیش نظارہ آواز",
+ "AccessibleTextBasedCanvas": "قابل رسائی متن پر مبنی کینوس",
+ "UsedScreenReader": "اسکرین ریڈر کے ساتھ استعمال کیا جاتا ہے۔",
+ "PlainText": "سادہ متن",
+ "TextOutputARIA": "ٹیکسٹ آؤٹ پٹ آن",
+ "TableText": "ٹیبل ٹیکسٹ",
+ "TableOutputARIA": "ٹیبل آؤٹ پٹ آن"
+ },
+ "KeyboardShortcuts": {
+ "Title": " کی بورڈ شارٹ کٹس",
+ "ShortcutsFollow": "کوڈ ایڈیٹنگ کی بورڈ شارٹ کٹس فالو کرتے ہیں۔",
+ "SublimeText": "شاندار ٹیکسٹ شارٹ کٹس",
+ "CodeEditing": {
+ "Tidy": "صاف ستھرا",
+ "FindText": "متن تلاش کریں۔",
+ "FindNextMatch": "اگلا میچ تلاش کریں۔",
+ "FindPrevMatch": "پچھلا میچ تلاش کریں۔",
+ "ReplaceTextMatch": "ٹیکسٹ میچ کو تبدیل کریں۔",
+ "IndentCodeLeft": "انڈینٹ کوڈ بائیں",
+ "IndentCodeRight": "انڈینٹ کوڈ دائیں",
+ "CommentLine": "تبصرہ لائن",
+ "FindNextTextMatch": "اگلا ٹیکسٹ میچ تلاش کریں۔",
+ "FindPreviousTextMatch": "پچھلا ٹیکسٹ میچ تلاش کریں۔",
+ "CodeEditing": "کوڈ ایڈیٹنگ",
+ "ColorPicker": "ان لائن رنگ چنندہ دکھائیں۔"
+ },
+ "General": {
+ "StartSketch": "خاکہ شروع کریں۔",
+ "StopSketch": "خاکہ بند کریں",
+ "TurnOnAccessibleOutput": "قابل رسائی آؤٹ پٹ کو آن کریں۔",
+ "TurnOffAccessibleOutput": "قابل رسائی آؤٹ پٹ کو آف کریں۔"
+ }
+ },
+ "Sidebar": {
+ "Title": "اسکیچ فائلز",
+ "ToggleARIA": "اسکیچ فائل کے اختیارات کھولیں/بند کریں۔",
+ "AddFolder": "فولڈر بنائیں",
+ "AddFolderARIA": "فولڈر بناؤ",
+ "AddFile": "فائل بنائیں",
+ "AddFileARIA": "فائل شامل کریں",
+ "UploadFile": "اپ لوڈ فائل",
+ "UploadFileARIA": "اپ لوڈ فائل"
+ },
+ "FileNode": {
+ "OpenFolderARIA": "فولڈر کے مواد کو کھولیں۔",
+ "CloseFolderARIA": "فولڈر کے مواد کو بند کریں۔",
+ "ToggleFileOptionsARIA": "اوپن/کلز فائل آپشنز کو ٹوگل کریں۔",
+ "AddFolder": "فولڈر بنائیں",
+ "AddFolderARIA": "فولڈر بناؤ",
+ "AddFile": "فائل بنائیں",
+ "AddFileARIA": "فائل شامل کریں",
+ "UploadFile": "اپ لوڈ فائل",
+ "UploadFileARIA": "اپ لوڈ فائل",
+ "Rename": "نام تبدیل کریں۔",
+ "Delete": "حذف کریں۔"
+ },
+ "Common": {
+ "SiteName": "p5.js ویب ایڈیٹر",
+ "Error": "خرابی",
+ "ErrorARIA": "خرابی",
+ "Save": "محفوظ کریں۔",
+ "p5logoARIA": "p5.js لوگو",
+ "DeleteConfirmation": "کیا آپ واقعی حذف کرنا چاہتے ہیں۔ {{name}}?"
+ },
+ "IDEView": {
+ "SubmitFeedback": "تاثرات جمع کروائیں۔",
+ "SubmitFeedbackARIA": "رائے جمع کروائیں",
+ "AddCollectionTitle": "مجموعہ میں شامل کریں۔",
+ "AddCollectionARIA": "مجموعہ میں شامل کریں",
+ "ShareTitle": "بانٹیں",
+ "ShareARIA": "بانٹیں"
+ },
+ "NewFileModal": {
+ "Title": "فائل بنائیں",
+ "CloseButtonARIA": "نیا فائل موڈل بند کریں۔",
+ "EnterName": "براہ کرم ایک نام درج کریں۔",
+ "InvalidType": "غلط فائل کی قسم۔ "
+ },
+ "NewFileForm": {
+ "AddFileSubmit": "فائل شامل کریں",
+ "Placeholder": "نام"
+ },
+ "NewFolderModal": {
+ "Title": "فولڈر بنائیں",
+ "CloseButtonARIA": "نیا فولڈر موڈل بند کریں۔",
+ "EnterName": "براہ کرم ایک نام درج کریں۔",
+ "EmptyName": "فولڈر کا نام صرف خالی جگہوں پر مشتمل نہیں ہو سکتا",
+ "InvalidExtension": "فولڈر کے نام میں توسیع نہیں ہو سکتی"
+ },
+ "NewFolderForm": {
+ "AddFolderSubmit": "فولڈر بناؤ",
+ "Placeholder": "نام"
+ },
+ "ResetPasswordForm": {
+ "Email": "رجسٹریشن کے لیے استعمال ہونے والی ای میل",
+ "EmailARIA": "ای میل",
+ "Submit": "پاس ورڈ ری سیٹ ای میل بھیجیں۔"
+ },
+ "ResetPasswordView": {
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "Reset": "آپ کا پاس ورڈ دوبارہ ترتیب دیں",
+ "Submitted": "آپ کا پاس ورڈ دوبارہ ترتیب دینے والی ای میل جلد ہی پہنچ جائے گی۔ ",
+ "Login": "لاگ ان کریں",
+ "LoginOr": "یا",
+ "SignUp": "سائن اپ"
+ },
+ "ReduxFormUtils": {
+ "errorInvalidEmail": "برائے مہربانی قابل قبول ای میل ایڈریس لکھیں",
+ "errorEmptyEmail": "براہ کرم ایک ای میل درج کریں۔",
+ "errorPasswordMismatch": "پاس ورڈز مماثل ہونا چاہیے",
+ "errorEmptyPassword": "براہ کرم پاس ورڈ درج کریں۔",
+ "errorShortPassword": "پاس ورڈ کم از کم 6 حروف کا ہونا چاہیے۔",
+ "errorConfirmPassword": "براہ کرم اپنے پاس ورڈ کی تصدیق کریں۔",
+ "errorNewPassword": "براہ کرم نیا پاس ورڈ درج کریں یا موجودہ پاس ورڈ کو خالی چھوڑ دیں۔",
+ "errorEmptyUsername": "براہ کرم ایک صارف نام درج کریں۔",
+ "errorLongUsername": "صارف کا نام 20 حروف سے کم ہونا چاہیے۔",
+ "errorValidUsername": "صارف کا نام صرف نمبرز، حروف، پیریڈز، ڈیشز اور انڈر سکور پر مشتمل ہونا چاہیے۔"
+ },
+ "NewPasswordView": {
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "Description": "نیا پاس ورڈ سیٹ کریں۔",
+ "TokenInvalidOrExpired": "پاس ورڈ ری سیٹ ٹوکن غلط ہے یا ختم ہو گیا ہے۔",
+ "EmptyPassword": "براہ کرم پاس ورڈ درج کریں۔",
+ "PasswordConfirmation": "براہ کرم اپنے پاس ورڈ کی تصدیق کریں۔",
+ "PasswordMismatch": "پاس ورڈز مماثل ہونا چاہیے"
+ },
+ "AccountForm": {
+ "Email": "ای میل",
+ "EmailARIA": "ای میل",
+ "Unconfirmed": "غیر تصدیق شدہ۔",
+ "EmailSent": "تصدیق بھیجی گئی، اپنا ای میل چیک کریں۔",
+ "Resend": "دوبارہ تصدیقی میل بھیجیں",
+ "UserName": "صارف کا نام",
+ "UserNameARIA": "صارف نام",
+ "CurrentPassword": "موجودہ خفیہ لفظ",
+ "CurrentPasswordARIA": "موجودہ خفیہ لفظ",
+ "NewPassword": "نیا پاس ورڈ",
+ "NewPasswordARIA": "نیا پاس ورڈ",
+ "SubmitSaveAllSettings": "تمام ترتیبات کو محفوظ کریں۔"
+ },
+ "AccountView": {
+ "SocialLogin": "سماجی لاگ ان",
+ "SocialLoginDescription": "p5.js ویب ایڈیٹر میں لاگ ان کرنے کے لیے اپنا GitHub یا Google اکاؤنٹ استعمال کریں۔",
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "Settings": "اکاؤنٹ کی ترتیبات",
+ "AccountTab": "کھاتہ",
+ "AccessTokensTab": "ٹوکنز تک رسائی حاصل کریں۔"
+ },
+ "APIKeyForm": {
+ "ConfirmDelete": "کیا آپ واقعی حذف کرنا چاہتے ہیں۔ {{key_label}}?",
+ "Summary": "ذاتی رسائی کے ٹوکنز خودکار اجازت دینے کے لیے آپ کے پاس ورڈ کی طرح کام کرتے ہیں۔\n ",
+ "CreateToken": "نیا ٹوکن بنائیں",
+ "TokenLabel": "یہ نشان کس لیے ہے؟",
+ "TokenPlaceholder": "یہ نشان کس لیے ہے؟ ",
+ "CreateTokenSubmit": "بنانا",
+ "NoTokens": "آپ کے پاس کوئی موجودہ ٹوکن نہیں ہے۔",
+ "NewTokenTitle": "آپ کا نیا رسائی ٹوکن",
+ "NewTokenInfo": "اپنا نیا ذاتی رسائی ٹوکن ابھی کاپی کرنا یقینی بنائیں۔\n ",
+ "ExistingTokensTitle": "موجودہ ٹوکنز"
+ },
+ "APIKeyList": {
+ "Name": "نام",
+ "Created": "پر بنایا",
+ "LastUsed": "آخری بار استعمال کیا گیا۔",
+ "Actions": "اعمال",
+ "Never": "کبھی نہیں",
+ "DeleteARIA": "API کلید کو حذف کریں۔"
+ },
+ "NewPasswordForm": {
+ "Title": "پاس ورڈ",
+ "TitleARIA": "پاس ورڈ",
+ "ConfirmPassword": "پاس ورڈ کی تصدیق کریں۔",
+ "ConfirmPasswordARIA": "پاس ورڈ کی تصدیق کریں۔",
+ "SubmitSetNewPassword": "نیا پاس ورڈ سیٹ کریں۔"
+ },
+ "SignupForm": {
+ "Title": "صارف کا نام",
+ "TitleARIA": "صارف نام",
+ "Email": "ای میل",
+ "EmailARIA": "ای میل",
+ "Password": "پاس ورڈ",
+ "PasswordARIA": "پاس ورڈ",
+ "ConfirmPassword": "پاس ورڈ کی تصدیق کریں۔",
+ "ConfirmPasswordARIA": "پاس ورڈ کی تصدیق کریں۔",
+ "SubmitSignup": "سائن اپ"
+ },
+ "SignupView": {
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "Description": "سائن اپ",
+ "Or": "یا",
+ "AlreadyHave": "پہلے سے ہی اکاؤنٹ ہے؟",
+ "Login": "لاگ ان کریں"
+ },
+ "EmailVerificationView": {
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "Verify": "اپنے ای میل کی تصدیق کریں۔",
+ "InvalidTokenNull": "وہ لنک غلط ہے۔",
+ "Checking": "ٹوکن کی توثیق ہو رہی ہے، براہ کرم انتظار کریں...",
+ "Verified": "سب ہو گیا، آپ کے ای میل ایڈریس کی تصدیق ہو گئی ہے۔",
+ "InvalidState": "کچھ غلط ہو گیا."
+ },
+ "AssetList": {
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "ToggleOpenCloseARIA": "اثاثہ جات کے اختیارات کھولیں / بند کریں۔",
+ "Delete": "حذف کریں۔",
+ "OpenNewTab": "نئے ٹیب میں کھولیں۔",
+ "NoUploadedAssets": "کوئی اپ لوڈ کردہ اثاثے نہیں ہیں۔",
+ "HeaderName": "نام",
+ "HeaderSize": "سائز",
+ "HeaderSketch": "خاکہ"
+ },
+ "Feedback": {
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "ViaGithubHeader": "گیتھب ایشوز کے ذریعے",
+ "ViaGithubDescription": "اگر آپ Github سے واقف ہیں، تو یہ بگ رپورٹس اور تاثرات حاصل کرنے کا ہمارا ترجیحی طریقہ ہے۔",
+ "GoToGithub": "گیتھب پر جائیں۔",
+ "ViaGoogleHeader": "گوگل فارم کے ذریعے",
+ "ViaGoogleDescription": "آپ یہ فوری فارم بھی جمع کرا سکتے ہیں۔",
+ "GoToForm": "فارم پر جائیں۔"
+ },
+ "Searchbar": {
+ "SearchSketch": "خاکے تلاش کریں...",
+ "SearchCollection": "مجموعے تلاش کریں...",
+ "ClearTerm": "صاف"
+ },
+ "UploadFileModal": {
+ "Title": "اپ لوڈ فائل",
+ "CloseButtonARIA": "اپ لوڈ فائل موڈل بند کریں۔",
+ "SizeLimitError": "خرابی: آپ مزید فائلیں اپ لوڈ نہیں کر سکتے۔ {{sizeLimit}}.\n "
+ },
+ "FileUploader": {
+ "DictDefaultMessage": "فائلیں یہاں ڈراپ کریں یا فائل براؤزر استعمال کرنے کے لیے کلک کریں۔"
+ },
+ "ErrorModal": {
+ "MessageLogin": "خاکے محفوظ کرنے کے لیے، آپ کو لاگ اِن ہونا چاہیے۔ براہِ کرم ",
+ "Login": "لاگ ان کریں",
+ "LoginOr": " یا ",
+ "SignUp": "سائن اپ",
+ "MessageLoggedOut": "ایسا لگتا ہے کہ آپ لاگ آؤٹ ہو گئے ہیں۔ ",
+ "LogIn": "لاگ ان کریں",
+ "SavedDifferentWindow": "آپ نے جس پروجیکٹ کو محفوظ کرنے کی کوشش کی ہے اسے دوسری ونڈو سے محفوظ کر لیا گیا ہے۔\n ",
+ "LinkTitle": "اکاؤنٹ لنک کرنے میں خرابی۔",
+ "LinkMessage": "آپ کے لنک کرنے میں ایک مسئلہ تھا۔ {{serviceauth}} اپنے p5.js ویب ایڈیٹر اکاؤنٹ میں اکاؤنٹ۔ {{serviceauth}} اکاؤنٹ پہلے ہی دوسرے p5.js ویب ایڈیٹر اکاؤنٹ سے منسلک ہے۔"
+ },
+ "ShareModal": {
+ "Embed": "ایمبیڈ",
+ "Present": "موجودہ",
+ "Fullscreen": "مکمل اسکرین یا بڑی اسکرین",
+ "Edit": "ترمیم"
+ },
+ "CollectionView": {
+ "TitleCreate": "مجموعہ بنائیں",
+ "TitleDefault": "مجموعہ"
+ },
+ "Collection": {
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "AnothersTitle": "p5.js ویب ایڈیٹر | {{anotheruser}}کے مجموعے",
+ "Share": "بانٹیں",
+ "URLLink": "مجموعہ سے لنک",
+ "AddSketch": "خاکہ شامل کریں۔",
+ "DeleteFromCollection": "کیا آپ واقعی ہٹانا چاہتے ہیں {{name_sketch}} اس مجموعہ سے؟",
+ "SketchDeleted": "خاکہ حذف کر دیا گیا۔",
+ "SketchRemoveARIA": "مجموعہ سے خاکہ کو ہٹا دیں۔",
+ "DescriptionPlaceholder": "تفصیل شامل کریں۔",
+ "Description": "تفصیل",
+ "NumSketches": "{{count}} خاکہ",
+ "NumSketches_plural": "{{count}} خاکے",
+ "By": "کی طرف سے مجموعہ ",
+ "NoSketches": "مجموعہ میں کوئی خاکہ نہیں۔",
+ "TableSummary": "تمام مجموعوں پر مشتمل میز",
+ "HeaderName": "نام",
+ "HeaderCreatedAt": "شامل کرنے کی تاریخ",
+ "HeaderUser": "مالک",
+ "DirectionAscendingARIA": "صعودی",
+ "DirectionDescendingARIA": "نزول",
+ "ButtonLabelAscendingARIA": "ترتیب دیں {{displayName}} چڑھتے ہوئے",
+ "ButtonLabelDescendingARIA": "ترتیب دیں {{displayName}} نزول"
+ },
+ "AddToCollectionList": {
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "AnothersTitle": "p5.js ویب ایڈیٹر | {{anotheruser}}کے مجموعے",
+ "Empty": "کوئی مجموعہ نہیں۔"
+ },
+ "CollectionCreate": {
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "FormError": "مجموعہ نہیں بنایا جا سکا",
+ "FormLabel": "مجموعہ کا نام",
+ "FormLabelARIA": "نام",
+ "NameRequired": "مجموعہ کا نام درکار ہے۔",
+ "Description": "تفصیل (اختیاری)",
+ "DescriptionARIA": "تفصیل",
+ "DescriptionPlaceholder": "میرے پسندیدہ خاکے",
+ "SubmitCollectionCreate": "مجموعہ بنائیں"
+ },
+ "DashboardView": {
+ "CreateCollection": "مجموعہ بنائیں",
+ "NewSketch": "نیا خاکہ",
+ "CreateCollectionOverlay": "مجموعہ بنائیں"
+ },
+ "DashboardTabSwitcher": {
+ "Sketches": "خاکے",
+ "Collections": "مجموعے",
+ "Assets": "اثاثے"
+ },
+ "CollectionList": {
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "AnothersTitle": "p5.js ویب ایڈیٹر | {{anotheruser}}کے مجموعے",
+ "NoCollections": "کوئی مجموعہ نہیں۔",
+ "TableSummary": "تمام مجموعوں پر مشتمل میز",
+ "HeaderName": "نام",
+ "HeaderCreatedAt": "تاریخ تخلیق",
+ "HeaderCreatedAt_mobile": "بنایا",
+ "HeaderUpdatedAt": "تاریخ کی تازہ کاری",
+ "HeaderUpdatedAt_mobile": "تازہ کاری",
+ "HeaderNumItems": "",
+ "HeaderNumItems_mobile": "",
+ "DirectionAscendingARIA": "صعودی",
+ "DirectionDescendingARIA": "نزول",
+ "ButtonLabelAscendingARIA": "ترتیب دیں {{displayName}} چڑھتے ہوئے",
+ "ButtonLabelDescendingARIA": "ترتیب دیں {{displayName}} نزول",
+ "AddSketch": "خاکہ شامل کریں۔"
+ },
+ "CollectionListRow": {
+ "ToggleCollectionOptionsARIA": "اوپن/کلوز کلیکشن آپشنز کو ٹوگل کریں۔",
+ "AddSketch": "خاکہ شامل کریں۔",
+ "Delete": "حذف کریں۔",
+ "Rename": "نام تبدیل کریں۔"
+ },
+ "Overlay": {
+ "AriaLabel": "بند کریں {{title}} اوورلے"
+ },
+ "QuickAddList": {
+ "ButtonRemoveARIA": "مجموعہ سے ہٹا دیں۔",
+ "ButtonAddToCollectionARIA": "مجموعہ میں شامل کریں۔",
+ "View": "دیکھیں"
+ },
+ "SketchList": {
+ "View": "دیکھیں",
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "AnothersTitle": "p5.js ویب ایڈیٹر | {{anotheruser}}کے خاکے",
+ "ToggleLabelARIA": "اوپن/کلوز اسکیچ آپشنز کو ٹوگل کریں۔",
+ "DropdownRename": "نام تبدیل کریں۔",
+ "DropdownDownload": "ڈاؤن لوڈ کریں",
+ "DropdownDuplicate": "نقل",
+ "DropdownAddToCollection": "مجموعہ میں شامل کریں۔",
+ "DropdownDelete": "حذف کریں۔",
+ "DirectionAscendingARIA": "صعودی",
+ "DirectionDescendingARIA": "نزول",
+ "ButtonLabelAscendingARIA": "ترتیب دیں {{displayName}} چڑھتے ہوئے",
+ "ButtonLabelDescendingARIA": "ترتیب دیں {{displayName}} نزول",
+ "AddToCollectionOverlayTitle": "مجموعہ میں شامل کریں۔",
+ "TableSummary": "تمام محفوظ شدہ منصوبوں پر مشتمل ٹیبل",
+ "HeaderName": "خاکہ",
+ "HeaderCreatedAt": "تاریخ تخلیق",
+ "HeaderCreatedAt_mobile": "بنایا",
+ "HeaderUpdatedAt": "تاریخ کی تازہ کاری",
+ "HeaderUpdatedAt_mobile": "تازہ کاری",
+ "NoSketches": "کوئی خاکے نہیں۔"
+ },
+ "AddToCollectionSketchList": {
+ "Title": "p5.js ویب ایڈیٹر | ",
+ "AnothersTitle": "p5.js ویب ایڈیٹر | {{anotheruser}}کے خاکے",
+ "NoCollections": "کوئی مجموعہ نہیں۔"
+ },
+ "Editor": {
+ "OpenSketchARIA": "اسکیچ فائلز نیویگیشن کھولیں۔",
+ "CloseSketchARIA": "اسکیچ فائلز نیویگیشن بند کریں۔",
+ "UnsavedChangesARIA": "اسکیچ میں غیر محفوظ شدہ تبدیلیاں ہیں۔",
+ "KeyUpLineNumber": "لائن {{lineNumber}}"
+ },
+ "EditorAccessibility": {
+ "NoLintMessages": "کوئی لنٹ پیغامات نہیں ہیں۔",
+ "CurrentLine": "موجودہ لائن"
+ },
+ "Timer": {
+ "SavedAgo": "محفوظ کیا گیا: {{timeAgo}}"
+ },
+ "formatDate": {
+ "JustNow": "ابھی ابھی",
+ "15Seconds": "15 سیکنڈ پہلے",
+ "25Seconds": "25 سیکنڈ پہلے",
+ "35Seconds": "35 سیکنڈ پہلے",
+ "Ago": "{{timeAgo}} پہلے"
+ },
+ "AddRemoveButton": {
+ "AltAddARIA": "مجموعہ میں شامل کریں۔",
+ "AltRemoveARIA": "مجموعہ سے ہٹا دیں۔"
+ },
+ "CopyableInput": {
+ "CopiedARIA": "کلپ بورڈ پر کاپی ہو گیا!",
+ "OpenViewTabARIA": "کھولیں۔ {{label}} نئے ٹیب میں دیکھیں"
+ },
+ "EditableInput": {
+ "EditValue": "ترمیم {{display}} قدر",
+ "EmptyPlaceholder": "کوئی قدر نہیں"
+ },
+ "PreviewNav": {
+ "EditSketchARIA": "خاکہ میں ترمیم کریں۔",
+ "ByUser": "کی طرف سے"
+ },
+ "MobilePreferences": {
+ "Settings": "ترتیبات",
+ "GeneralSettings": "عام ترتیبات",
+ "Accessibility": "رسائی",
+ "AccessibleOutput": "قابل رسائی آؤٹ پٹ",
+ "Theme": "خیالیہ",
+ "LightTheme": "روشنی",
+ "DarkTheme": "اندھیرا",
+ "HighContrastTheme": "ہائی کنٹراسٹ",
+ "Autosave": "خودبخود محفوظ کریں۔",
+ "AutocompleteHinter": "خودکار تکمیل اشارہ",
+ "WordWrap": "لفظ لفاف",
+ "LineNumbers": "لائن نمبرز",
+ "LintWarningSound": "لنٹ وارننگ کی آواز",
+ "UsedScreenReader": "اسکرین ریڈر کے ساتھ استعمال کیا جاتا ہے۔",
+ "PlainText": "سادہ متن",
+ "TableText": "ٹیبل ٹیکسٹ",
+ "Sound": "آواز"
+ },
+ "PreferenceCreators": {
+ "On": "پر",
+ "Off": "بند"
+ },
+ "MobileIDEView": {
+ "Preferences": "ترجیحات",
+ "MyStuff": "میرا سامان",
+ "Examples": "مثالیں",
+ "OriginalEditor": "اصل ایڈیٹر",
+ "Login": "لاگ ان کریں",
+ "Logout": "لاگ آوٹ"
+ },
+ "MobileDashboardView": {
+ "Examples": "مثالیں",
+ "Sketches": "خاکے",
+ "Collections": "مجموعے",
+ "Assets": "اثاثے",
+ "MyStuff": "میرا سامان",
+ "CreateSketch": "خاکہ بنائیں",
+ "CreateCollection": "مجموعہ بنائیں"
+ },
+ "Explorer": {
+ "Files": "فائلوں"
+ },
+ "Cookies": {
+ "Header": "کوکیز",
+ "Body": "p5.js ایڈیٹر کوکیز استعمال کرتا ہے۔ ہم اس ڈیٹا کو کبھی فروخت نہیں کرتے اور نہ ہی اسے اشتہارات کے لیے استعمال کرتے ہیں۔ آپ فیصلہ کر سکتے ہیں کہ آپ کن کوکیز کی اجازت دینا چاہیں گے، اور ہماری میں مزید جانیں۔ <0>رازداری کی پالیسی<0>.",
+ "AllowAll": "سب کو اجازت دیں۔",
+ "AllowEssential": "ضروری کی اجازت دیں۔"
+ },
+ "Legal": {
+ "PrivacyPolicy": "رازداری کی پالیسی",
+ "TermsOfUse": "استعمال کرنے کی شرائط",
+ "CodeOfConduct": "ضابطہ اخلاق"
+ }
+ }
+
\ No newline at end of file
diff --git a/translations/locales/zh-TW/translations.json b/translations/locales/zh-TW/translations.json
index dd3765b29c..1b26246570 100644
--- a/translations/locales/zh-TW/translations.json
+++ b/translations/locales/zh-TW/translations.json
@@ -70,7 +70,7 @@
"Submit": "登入"
},
"LoginView": {
- "Title": "p5.js Web Editor | 登入",
+ "Title": "p5.js 網頁編輯器 | 登入",
"Login": "登入",
"LoginOr": "或",
"SignUp": "註冊",
@@ -88,7 +88,7 @@
},
"About": {
"Title": "關於",
- "TitleHelmet": "p5.js Web Editor | 關於",
+ "TitleHelmet": "p5.js 網頁編輯器 | 關於",
"Contribute": "貢獻",
"NewP5": "p5.js 新手?",
"Report": "回報臭蟲",
@@ -261,7 +261,7 @@
"Submit": "寄送重設密碼的電子郵件"
},
"ResetPasswordView": {
- "Title": "p5.js Web Editor | 重設密碼",
+ "Title": "p5.js 網頁編輯器 | 重設密碼",
"Reset": "重設密碼",
"Submitted": "重設密碼郵件稍後寄到, 若沒收到\n 請檢查是否被丟到垃圾郵件資料夾",
"Login": "登入",
@@ -281,7 +281,7 @@
"errorValidUsername": "使用者名稱只能有數字、字母、英文句點、減號以及底線符號"
},
"NewPasswordView": {
- "Title": "p5.js Web Editor | 新密碼",
+ "Title": "p5.js 網頁編輯器 | 新密碼",
"Description": "設定新密碼",
"TokenInvalidOrExpired": "重設新密碼的權杖錯誤或是已經過期",
"EmptyPassword": "請輸入新的密碼",
@@ -304,8 +304,8 @@
},
"AccountView": {
"SocialLogin": "以社群帳號登入",
- "SocialLoginDescription": "使用你的 GitHub 或 Google 帳號登入 p5.js Web Editor.",
- "Title": "p5.js Web Editor | 帳號設定",
+ "SocialLoginDescription": "使用你的 GitHub 或 Google 帳號登入 p5.js 網頁編輯器.",
+ "Title": "p5.js 網頁編輯器 | 帳號設定",
"Settings": "帳號設定",
"AccountTab": "帳號",
"AccessTokensTab": "存取權杖"
@@ -349,14 +349,14 @@
"SubmitSignup": "註冊"
},
"SignupView": {
- "Title": "p5.js Web Editor | 註冊",
+ "Title": "p5.js 網頁編輯器 | 註冊",
"Description": "註冊",
"Or": "或是",
"AlreadyHave": "已經有帳號?",
"Login": "登入"
},
"EmailVerificationView": {
- "Title": "p5.js Web Editor | 驗證電子郵件",
+ "Title": "p5.js 網頁編輯器 | 驗證電子郵件",
"Verify": "驗證你的電子郵件",
"InvalidTokenNull": "連結無效",
"Checking": "驗證權杖中, 請稍後...",
@@ -364,7 +364,7 @@
"InvalidState": "有地方出錯了"
},
"AssetList": {
- "Title": "p5.js Web Editor | 我的資產",
+ "Title": "p5.js 網頁編輯器 | 我的資產",
"ToggleOpenCloseARIA": "切換開啟/關閉資產選項",
"Delete": "刪除",
"OpenNewTab": "以新分頁開啟",
@@ -374,7 +374,7 @@
"HeaderSketch": "草稿"
},
"Feedback": {
- "Title": "p5.js Web Editor | 回饋",
+ "Title": "p5.js 網頁編輯器 | 回饋",
"ViaGithubHeader": "透過 Github Issues",
"ViaGithubDescription": "如果你熟悉 Github, 這是我們接受臭蟲報告與回饋的偏好方式",
"GoToGithub": "前往 Github",
@@ -404,7 +404,7 @@
"LogIn": "登入",
"SavedDifferentWindow": "你想儲存的專案已經在另一個視窗儲存過, \n 請重新整理頁面載入最新的內容",
"LinkTitle": "錯誤連結的帳號",
- "LinkMessage": "連結你的 {{serviceauth}} 帳號到 p5.js Web Editor 帳號時發生問題, 你的 {{serviceauth}} 帳號已經連結到另一個 p5.js Web Editor 帳號了"
+ "LinkMessage": "連結你的 {{serviceauth}} 帳號到 p5.js 網頁編輯器 帳號時發生問題, 你的 {{serviceauth}} 帳號已經連結到另一個 p5.js 網頁編輯器 帳號了"
},
"ShareModal": {
"Embed": "內嵌",
@@ -417,8 +417,8 @@
"TitleDefault": "作品集"
},
"Collection": {
- "Title": "p5.js Web Editor | 我的作品集",
- "AnothersTitle": "p5.js Web Editor | {{anotheruser}} 的作品集",
+ "Title": "p5.js 網頁編輯器 | 我的作品集",
+ "AnothersTitle": "p5.js 網頁編輯器 | {{anotheruser}} 的作品集",
"Share": "分享",
"URLLink": "作品集連結",
"AddSketch": "新增草稿",
@@ -441,12 +441,12 @@
"ButtonLabelDescendingARIA": "以 {{displayName}} 降序排列"
},
"AddToCollectionList": {
- "Title": "p5.js Web Editor | 我的作品集",
- "AnothersTitle": "p5.js Web Editor | {{anotheruser}} 的作品集",
+ "Title": "p5.js 網頁編輯器 | 我的作品集",
+ "AnothersTitle": "p5.js 網頁編輯器 | {{anotheruser}} 的作品集",
"Empty": "沒有作品集"
},
"CollectionCreate": {
- "Title": "p5.js Web Editor | 建立作品集",
+ "Title": "p5.js 網頁編輯器 | 建立作品集",
"FormError": "無法建立作品集",
"FormLabel": "作品集名稱",
"FormLabelARIA": "名稱",
@@ -467,8 +467,8 @@
"Assets": "資產"
},
"CollectionList": {
- "Title": "p5.js Web Editor | 我的作品集",
- "AnothersTitle": "p5.js Web Editor | {{anotheruser}} 的作品集",
+ "Title": "p5.js 網頁編輯器 | 我的作品集",
+ "AnothersTitle": "p5.js 網頁編輯器 | {{anotheruser}} 的作品集",
"NoCollections": "沒有作品集",
"TableSummary": "作品集彙總表",
"HeaderName": "名稱",
@@ -500,8 +500,8 @@
},
"SketchList": {
"View": "檢視",
- "Title": "p5.js Web Editor | 我的草稿",
- "AnothersTitle": "p5.js Web Editor | {{anotheruser}} 的草稿",
+ "Title": "p5.js 網頁編輯器 | 我的草稿",
+ "AnothersTitle": "p5.js 網頁編輯器 | {{anotheruser}} 的草稿",
"ToggleLabelARIA": "切換開啟/關閉草稿選項",
"DropdownRename": "重新命名",
"DropdownDownload": "下載",
@@ -522,8 +522,8 @@
"NoSketches": "沒有草稿"
},
"AddToCollectionSketchList": {
- "Title": "p5.js Web Editor | 我的草稿",
- "AnothersTitle": "p5.js Web Editor | {{anotheruser}} 的草稿",
+ "Title": "p5.js 網頁編輯器 | 我的草稿",
+ "AnothersTitle": "p5.js 網頁編輯器 | {{anotheruser}} 的草稿",
"NoCollections": "沒有作品集"
},
"Editor": {