Merge pull request #5152 from LLK/develop

merge from develop to release branch
This commit is contained in:
Eric Rosenbaum 2021-03-17 11:25:45 -04:00 committed by GitHub
commit 5aeee265b7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 403 additions and 164 deletions

318
package-lock.json generated
View file

@ -1380,7 +1380,6 @@
"version": "7.13.9",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.9.tgz",
"integrity": "sha512-aY2kU+xgJ3dJ1eU6FMB9EH8dIe8dmusF1xEku52joLvw6eAFN0AI+WxCLDnpev2LEejWBAy2sBvBOBAjI3zmvA==",
"dev": true,
"requires": {
"regenerator-runtime": "^0.13.4"
},
@ -1388,8 +1387,7 @@
"regenerator-runtime": {
"version": "0.13.7",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
"integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==",
"dev": true
"integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew=="
}
}
},
@ -1463,10 +1461,27 @@
}
}
},
"@formatjs/ecma402-abstract": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.6.3.tgz",
"integrity": "sha512-7ijswObmYXabVy5GvcpKG29jbyJ9rGtFdRBdmdQvoDmMo0PwlOl/L08GtrjA4YWLAZ0j2owb2YrRLGNAvLBk+Q==",
"dev": true,
"requires": {
"tslib": "^2.1.0"
},
"dependencies": {
"tslib": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
"integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==",
"dev": true
}
}
},
"@formatjs/intl-getcanonicallocales": {
"version": "1.5.6",
"resolved": "https://registry.npmjs.org/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-1.5.6.tgz",
"integrity": "sha512-CRnQEuaTsvm3+/6Hxucxb4rN0GY78I2k5BbjvODHsKEWgGIHbTRoOmu6YSbo5dXmxOeOKa3VYTXv3crDKHhQXA==",
"version": "1.5.7",
"resolved": "https://registry.npmjs.org/@formatjs/intl-getcanonicallocales/-/intl-getcanonicallocales-1.5.7.tgz",
"integrity": "sha512-raPV3Dw7CBC9kPvKdgxkVGgwzYBsQDDG9qXGWblpj/zR+ZJ6Q2V+Co5jZhrviy6lq3qaM2T1Itc0ibvvil1tBw==",
"dev": true,
"requires": {
"cldr-core": "38",
@ -1482,26 +1497,17 @@
}
},
"@formatjs/intl-locale": {
"version": "2.4.19",
"resolved": "https://registry.npmjs.org/@formatjs/intl-locale/-/intl-locale-2.4.19.tgz",
"integrity": "sha512-h9TxoSvsu1pNoJHXCdhcQb98hW0b8Plbs3VTR8jDg2nc0/9/XpM0cqhA+j7qMhbLBX3KhTLO86MqQ49pHSjduA==",
"version": "2.4.20",
"resolved": "https://registry.npmjs.org/@formatjs/intl-locale/-/intl-locale-2.4.20.tgz",
"integrity": "sha512-ZrVFxKab+W6jFP6WEYsNW0b7IlGYnCS20fdLN6u0LwPCPYRP5oqHBl0FFVD2+aNnQ1T/21Aol54fCr5LdN/49Q==",
"dev": true,
"requires": {
"@formatjs/ecma402-abstract": "1.6.2",
"@formatjs/intl-getcanonicallocales": "1.5.6",
"@formatjs/ecma402-abstract": "1.6.3",
"@formatjs/intl-getcanonicallocales": "1.5.7",
"cldr-core": "38",
"tslib": "^2.1.0"
},
"dependencies": {
"@formatjs/ecma402-abstract": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.6.2.tgz",
"integrity": "sha512-aLBODrSRhHaL/0WdQ0T2UsGqRbdtRRHqqrs4zwNQoRsGBEtEAvlj/rgr6Uea4PSymVJrbZBoAyECM2Z3Pq4i0g==",
"dev": true,
"requires": {
"tslib": "^2.1.0"
}
},
"tslib": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
@ -1511,24 +1517,15 @@
}
},
"@formatjs/intl-pluralrules": {
"version": "4.0.11",
"resolved": "https://registry.npmjs.org/@formatjs/intl-pluralrules/-/intl-pluralrules-4.0.11.tgz",
"integrity": "sha512-NkQl6eBJKMSMmNCan2gzpErqbw7j1SiHzqAQF3+coAKwB74E89hAGTigvnCKEGpMf+hHysL4+wThx5IJutoT5Q==",
"version": "4.0.12",
"resolved": "https://registry.npmjs.org/@formatjs/intl-pluralrules/-/intl-pluralrules-4.0.12.tgz",
"integrity": "sha512-jXXsWGQbBMvuhvxuG1AXBMMNMS1ZphSt/rWsGo6bE3KyWmddJnnVokeUD8E2sTtXoCJZoGUQkOxxjFa/gGLyxw==",
"dev": true,
"requires": {
"@formatjs/ecma402-abstract": "1.6.2",
"@formatjs/ecma402-abstract": "1.6.3",
"tslib": "^2.1.0"
},
"dependencies": {
"@formatjs/ecma402-abstract": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.6.2.tgz",
"integrity": "sha512-aLBODrSRhHaL/0WdQ0T2UsGqRbdtRRHqqrs4zwNQoRsGBEtEAvlj/rgr6Uea4PSymVJrbZBoAyECM2Z3Pq4i0g==",
"dev": true,
"requires": {
"tslib": "^2.1.0"
}
},
"tslib": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
@ -1538,24 +1535,15 @@
}
},
"@formatjs/intl-relativetimeformat": {
"version": "8.1.2",
"resolved": "https://registry.npmjs.org/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-8.1.2.tgz",
"integrity": "sha512-LZUxbc9GHVGmDc4sqGAXugoxhvZV7EG2lG2c0aKERup2ixvmDMbbEN3iEEr5aKkP7YyGxXxgqDn2dwg7QCPR6Q==",
"version": "8.1.3",
"resolved": "https://registry.npmjs.org/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-8.1.3.tgz",
"integrity": "sha512-uUbtr4NRKgHK66bxO98RQlXypfRA5cto6nsFpgwe5wf1SWLBqxcNoo+zdAIftdvHnxPC4QH6oykMf2aYLm+pbA==",
"dev": true,
"requires": {
"@formatjs/ecma402-abstract": "1.6.2",
"@formatjs/ecma402-abstract": "1.6.3",
"tslib": "^2.1.0"
},
"dependencies": {
"@formatjs/ecma402-abstract": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.6.2.tgz",
"integrity": "sha512-aLBODrSRhHaL/0WdQ0T2UsGqRbdtRRHqqrs4zwNQoRsGBEtEAvlj/rgr6Uea4PSymVJrbZBoAyECM2Z3Pq4i0g==",
"dev": true,
"requires": {
"tslib": "^2.1.0"
}
},
"tslib": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
@ -8463,6 +8451,16 @@
"flat-cache": "^2.0.1"
}
},
"file-loader": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz",
"integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==",
"dev": true,
"requires": {
"loader-utils": "^1.0.2",
"schema-utils": "^1.0.0"
}
},
"filename-regex": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
@ -10928,6 +10926,19 @@
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true
},
"history": {
"version": "4.10.1",
"resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz",
"integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==",
"requires": {
"@babel/runtime": "^7.1.2",
"loose-envify": "^1.2.0",
"resolve-pathname": "^3.0.0",
"tiny-invariant": "^1.0.2",
"tiny-warning": "^1.0.0",
"value-equal": "^1.0.1"
}
},
"hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
@ -11609,6 +11620,21 @@
"integrity": "sha512-Zv/u8wRpekckv0cLkwpVdABYST4hZNTDaX7reFetrYTJwxExR2VyTqQm+l0WmL0Qo8Mjb9Tf33qnfj0T7pjxdQ==",
"dev": true
},
"intl-messageformat": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz",
"integrity": "sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=",
"dev": true,
"requires": {
"intl-messageformat-parser": "1.4.0"
}
},
"intl-messageformat-parser": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz",
"integrity": "sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU=",
"dev": true
},
"intl-relativeformat": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/intl-relativeformat/-/intl-relativeformat-2.2.0.tgz",
@ -14929,6 +14955,15 @@
"dom-walk": "^0.1.0"
}
},
"mini-create-react-context": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.1.tgz",
"integrity": "sha512-YWCYEmd5CQeHGSAKrYvXgmzzkrvssZcuuQDDeqkT+PziKGMgE+0MCCtcKbROzocGBG1meBLl2FotlRwf4gAzbQ==",
"requires": {
"@babel/runtime": "^7.12.1",
"tiny-warning": "^1.0.3"
}
},
"minilog": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/minilog/-/minilog-2.0.8.tgz",
@ -18731,11 +18766,6 @@
"requires": {
"lodash.debounce": "^3.0.0"
}
},
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
@ -18764,6 +18794,82 @@
"prop-types": "^15.5.7"
}
},
"react-router": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz",
"integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==",
"requires": {
"@babel/runtime": "^7.1.2",
"history": "^4.9.0",
"hoist-non-react-statics": "^3.1.0",
"loose-envify": "^1.3.1",
"mini-create-react-context": "^0.4.0",
"path-to-regexp": "^1.7.0",
"prop-types": "^15.6.2",
"react-is": "^16.6.0",
"tiny-invariant": "^1.0.2",
"tiny-warning": "^1.0.0"
},
"dependencies": {
"hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
"requires": {
"react-is": "^16.7.0"
}
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"path-to-regexp": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
"integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
"requires": {
"isarray": "0.0.1"
}
},
"prop-types": {
"version": "15.7.2",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
"integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
"requires": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
"react-is": "^16.8.1"
}
}
}
},
"react-router-dom": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz",
"integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==",
"requires": {
"@babel/runtime": "^7.1.2",
"history": "^4.9.0",
"loose-envify": "^1.3.1",
"prop-types": "^15.6.2",
"react-router": "5.2.0",
"tiny-invariant": "^1.0.2",
"tiny-warning": "^1.0.0"
},
"dependencies": {
"prop-types": {
"version": "15.7.2",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
"integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
"requires": {
"loose-envify": "^1.4.0",
"object-assign": "^4.1.1",
"react-is": "^16.8.1"
}
}
}
},
"react-side-effect": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-1.1.5.tgz",
@ -20018,6 +20124,11 @@
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"dev": true
},
"resolve-pathname": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
"integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
},
"resolve-protobuf-schema": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
@ -20882,9 +20993,9 @@
}
},
"scratch-blocks": {
"version": "0.1.0-prerelease.20210301035002",
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20210301035002.tgz",
"integrity": "sha512-+OB8MdKQ9q/h/0w6OCkUB6IfExxGdcWmm3iX6YnaqEEQfvSBrghWc9rKXzoz7esPrhgBHvwF+zR0wLjj9qw4Ig==",
"version": "0.1.0-prerelease.20210317033352",
"resolved": "https://registry.npmjs.org/scratch-blocks/-/scratch-blocks-0.1.0-prerelease.20210317033352.tgz",
"integrity": "sha512-K0cplZ5XSbQK5cjg49QQBlM9vlKLpdhIVeCLz/cXPXg/KLc1gpNIvhI4pQl3SiCcIAZP3BGnIdf0YUiyp58zjw==",
"dev": true,
"requires": {
"exports-loader": "0.6.3",
@ -20892,9 +21003,9 @@
}
},
"scratch-gui": {
"version": "0.1.0-prerelease.20210302213127",
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20210302213127.tgz",
"integrity": "sha512-qFlIt/bYK2mCCbng6Z4S5uXCVmOfb2uThRa1a7KKJ7+oj4ZQKZmPeeUK2L7eauGJSxzuv+YEAx2QgQECV+PTsA==",
"version": "0.1.0-prerelease.20210317035743",
"resolved": "https://registry.npmjs.org/scratch-gui/-/scratch-gui-0.1.0-prerelease.20210317035743.tgz",
"integrity": "sha512-r+s7QMVKFu2xqZCZxswdRxtJXwIemaiw9gxVoP5Fx5VVpJGZ6rwkNyDigRDupV8g7rRK7JXBkBAFDQDuH/ReBw==",
"dev": true,
"requires": {
"arraybuffer-loader": "^1.0.6",
@ -20945,13 +21056,14 @@
"redux": "3.7.2",
"redux-throttle": "0.1.1",
"scratch-audio": "0.1.0-prerelease.20200528195344",
"scratch-blocks": "0.1.0-prerelease.20210301035002",
"scratch-l10n": "3.11.20210301031451",
"scratch-paint": "0.2.0-prerelease.20210301035244",
"scratch-blocks": "0.1.0-prerelease.20210317033352",
"scratch-l10n": "3.11.20210317031517",
"scratch-paint": "0.2.0-prerelease.20210308034725",
"scratch-render": "0.1.0-prerelease.20210302210916",
"scratch-render-fonts": "1.0.0-prerelease.20200507182347",
"scratch-storage": "1.3.3",
"scratch-svg-renderer": "0.2.0-prerelease.20210225205629",
"scratch-vm": "0.2.0-prerelease.20210302185520",
"scratch-vm": "0.2.0-prerelease.20210316111200",
"startaudiocontext": "1.2.1",
"style-loader": "^0.23.0",
"text-encoding": "0.7.0",
@ -21114,21 +21226,11 @@
"dev": true
},
"electron-to-chromium": {
"version": "1.3.678",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.678.tgz",
"integrity": "sha512-E5ha1pE9+aWWrT2fUD5wdPBWUnYtKnEnloewbtVyrkAs79HvodOiNO4rMR94+hKbxgMFQG4fnPQACOc1cfMfBg==",
"version": "1.3.690",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.690.tgz",
"integrity": "sha512-zPbaSv1c8LUKqQ+scNxJKv01RYFkVVF1xli+b+3Ty8ONujHjAMg+t/COmdZqrtnS1gT+g4hbSodHillymt1Lww==",
"dev": true
},
"file-loader": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz",
"integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==",
"dev": true,
"requires": {
"loader-utils": "^1.0.2",
"schema-utils": "^1.0.0"
}
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@ -21154,21 +21256,6 @@
"resolve-from": "^3.0.0"
}
},
"intl-messageformat": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz",
"integrity": "sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=",
"dev": true,
"requires": {
"intl-messageformat-parser": "1.4.0"
}
},
"intl-messageformat-parser": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz",
"integrity": "sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU=",
"dev": true
},
"js-base64": {
"version": "2.4.9",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz",
@ -21361,18 +21448,6 @@
"integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
"dev": true
},
"scratch-l10n": {
"version": "3.11.20210301031451",
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.11.20210301031451.tgz",
"integrity": "sha512-lAGy7i42yxd72wwNsb9pPW3tzxl5PBfLXXEKYFDKxsPCTnG3mY6m/qZqYTkpQ8sYycxgFkUvuUmvvWKxP1Bz6A==",
"dev": true,
"requires": {
"@babel/cli": "^7.1.2",
"@babel/core": "^7.1.2",
"babel-plugin-react-intl": "^3.0.1",
"transifex": "1.6.6"
}
},
"scratch-storage": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-1.3.3.tgz",
@ -21440,9 +21515,9 @@
}
},
"scratch-l10n": {
"version": "3.11.20210310031445",
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.11.20210310031445.tgz",
"integrity": "sha512-h+xUGhPSjfXoIcYncCFAtD3+V8jblsaklV5epuhsu2l5+NTSw6ch4CafPRrzVl2UErIdxUpkRnY+fXRVgodj8w==",
"version": "3.11.20210317031517",
"resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-3.11.20210317031517.tgz",
"integrity": "sha512-ppVEV8VX1B6+9Zp0kcctqiSSvizO+7URXyK+X2ZbANXY5P37wxWPL2xO3REyghiA51XM54NOdKYzwk1z97NYkw==",
"dev": true,
"requires": {
"@babel/cli": "^7.1.2",
@ -21453,9 +21528,9 @@
}
},
"scratch-paint": {
"version": "0.2.0-prerelease.20210301035244",
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20210301035244.tgz",
"integrity": "sha512-Br/Wh8TkxJa907VoaDPCw14mTuUMb1SDHGyoHTokJxPmoYTJ4TtDavAMJB0Ge17LWhebyubcR7Pc5qjrOwOpeg==",
"version": "0.2.0-prerelease.20210308034725",
"resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-0.2.0-prerelease.20210308034725.tgz",
"integrity": "sha512-DBhOVZ1Q7TpCcUJXAUMQACWWOZMFJyBmXvOf11ifP6opiQgjLbSBvUqYySPQckgkj38KDqDED90zAHVFga//eA==",
"dev": true,
"requires": {
"@scratch/paper": "0.11.20200728195508",
@ -21489,6 +21564,15 @@
"requires": {
"microee": "0.0.6"
}
},
"scratch-render-fonts": {
"version": "1.0.0-prerelease.20200507182347",
"resolved": "https://registry.npmjs.org/scratch-render-fonts/-/scratch-render-fonts-1.0.0-prerelease.20200507182347.tgz",
"integrity": "sha512-tVt2s7lxsBhme9WKIZTnluMerdJVGEc80QSrDdIIzUvHXGCIYkLh6j7ytwXcyq2UsA34d93op9+I9Bh1SPkQkA==",
"dev": true,
"requires": {
"base64-loader": "1.0.0"
}
}
}
},
@ -21681,9 +21765,9 @@
"dev": true
},
"scratch-vm": {
"version": "0.2.0-prerelease.20210302185520",
"resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20210302185520.tgz",
"integrity": "sha512-yy7TQtb7I4ulDe3W1IfWGtdNNg7ZpJJRVk0FKbqUWO0COxFpGINP8O8Dsel9AjmuBRdN3JxIFjhz6qIBNeMrAA==",
"version": "0.2.0-prerelease.20210316111200",
"resolved": "https://registry.npmjs.org/scratch-vm/-/scratch-vm-0.2.0-prerelease.20210316111200.tgz",
"integrity": "sha512-KUlPZ8z0RZqNd1N2JABFCeYWNsQ1ghlzMZuAcjQ7nt3xpISr7pGv9dwG01WI8PohraUxsGRbzw8jAhTegbB1nw==",
"dev": true,
"requires": {
"@vernier/godirect": "1.5.0",
@ -21698,7 +21782,6 @@
"immutable": "3.8.1",
"jszip": "^3.1.5",
"minilog": "3.1.0",
"nets": "3.2.0",
"scratch-parser": "5.0.0",
"scratch-sb1-converter": "0.2.7",
"scratch-translate-extension-languages": "0.0.20191118205314",
@ -25451,6 +25534,11 @@
"integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
"dev": true
},
"tiny-invariant": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz",
"integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw=="
},
"tiny-sdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/tiny-sdf/-/tiny-sdf-1.0.2.tgz",
@ -25460,8 +25548,7 @@
"tiny-warning": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz",
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==",
"dev": true
"integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
},
"tinycolor2": {
"version": "1.4.2",
@ -26408,6 +26495,11 @@
"integrity": "sha1-uBNbn7E3K94C/dU60dDM1t55j+4=",
"dev": true
},
"value-equal": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz",
"integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw=="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",

View file

@ -49,6 +49,7 @@
"express-http-proxy": "1.1.0",
"lodash.defaults": "4.0.1",
"react-helmet": "5.2.0",
"react-router-dom": "^5.2.0",
"scratch-parser": "^5.0.0",
"scratch-storage": "^0.5.1"
},
@ -118,7 +119,7 @@
"redux-mock-store": "^1.2.3",
"redux-thunk": "2.0.1",
"sass-loader": "6.0.6",
"scratch-gui": "0.1.0-prerelease.20210302213127",
"scratch-gui": "0.1.0-prerelease.20210317035743",
"scratch-l10n": "latest",
"selenium-webdriver": "3.6.0",
"slick-carousel": "1.6.0",

View file

@ -4,5 +4,12 @@
"pattern": "^/components/?$",
"view": "components/components",
"title": "Components"
},
{
"name": "studio",
"pattern": "^/studios-playground/\\d+(/projects|/curators|/activity|/comments)?/?(\\?.*)?$",
"routeAlias": "/studios-playground/?$",
"view": "studio/studio",
"title": "Studio Playground"
}
]
]

View file

@ -3,7 +3,6 @@ const FormattedMessage = require('react-intl').FormattedMessage;
const React = require('react');
const render = require('../../../../lib/render.jsx');
const FlexRow = require('../../../../components/flex-row/flex-row.jsx');
const Page = require('../../../../components/page/conference/2020/page.jsx');
const TitleBanner = require('../../../../components/title-banner/title-banner.jsx');
@ -32,9 +31,6 @@ const ConferenceSplash = () => (
<strong><FormattedMessage id="conference-2020.desc1a" /></strong>
<br />
<br />
<FormattedMessage id="conference-2020.desc2" />
<br />
<br />
<FormattedMessage id="conference-2020.desc3" />
</p>
<table className="conf2020-panel-details">
@ -62,7 +58,6 @@ const ConferenceSplash = () => (
value={new Date(2021, 6, 24)}
year="numeric"
/>
<FormattedMessage id="conference-2020.dateDescMore" />
</td>
</tr>
<tr className="conf2020-panel-row">
@ -78,43 +73,16 @@ const ConferenceSplash = () => (
</tr>
</tbody>
</table>
</section>
<section className="conf2020-panel mod-registration">
<FlexRow className="conf2020-panel-title">
<div className="conf2020-panel-title-text">
<h3><FormattedMessage id="conference-2020.registrationTitle" /></h3>
</div>
</FlexRow>
<p className="conf2020-panel-desc">
<FormattedMessage id="conference-2020.registrationFee" />
<br />
<FormattedMessage id="conference-2020.registrationOpen" />
<br />
<br />
<FormattedMessage id="conference-2020.registrationDelayed" />
<br />
<br />
<FormattedMessage
id="conference-2020.connectNow"
values={{
scratchInPracticeLink: <a href="https://sip.scratch.mit.edu/">
<FormattedMessage id="conference-2020.scratchInPracticeText" />
</a>
}}
/>
</p>
<a
className="button mod-2020-panel"
href="http://scratch2020.eventbrite.com/"
>
<FormattedMessage id="conference-2020.register" />
</a>
</section>
<section className="conf2020-panel mod-stay">
<p className="conf2020-panel-desc">
<FormattedMessage id="conference-2020.stayDesc1" />
<br />
<br />
<FormattedMessage
id="conference-2020.stayDesc2"
values={{

View file

@ -1,27 +1,18 @@
{
"conference-2020.title": "Scratch Conference 2021:",
"conference-2020.subtitle": "Let's Create Together!",
"conference-2020.dateDesc": "July 22-24, 2021 | Cambridge, MA, USA",
"conference-2020.dateDescMore": " (with opening reception the evening of July 21)",
"conference-2020.locationDetails": "MIT Media Lab, Cambridge, MA",
"conference-2020.title": "Scratch Around the World:",
"conference-2020.subtitle": "An Online Conference",
"conference-2020.dateDesc": "July 22",
"conference-2020.locationDetails": "Online",
"conference-2020.date": "When:",
"conference-2020.location": "Where:",
"conference-2020.desc1": "Join us for the Scratch Conference, an international gathering where educators, researchers, and developers share ideas for supporting creative learning with Scratch.",
"conference-2020.desc1a": "Due to the global health crisis, we have delayed the conference for one year, to July 22-24, 2021.",
"conference-2020.desc2": "Scratch has become the world's largest coding community for children around the world. The conference offers hands-on workshops, panel discussions, and interactive demonstrations to explore ways for using Scratch to expand creative learning experiences for diverse learners across subject areas.",
"conference-2020.desc3": "Together we'll exchange ideas and strategies on how to use Scratch to engage students in learning to think creatively, reason systematically, and work collaboratively—essential skills for everyone in todays society.",
"conference-2020.desc1": "Join us for Scratch Around the World, an online conference for educators interested in creative learning with Scratch.",
"conference-2020.desc1a": "Although we are not able to meet in person this year, we are excited to find ways to connect and share with others in the global Scratch educator community.",
"conference-2020.desc3": "The conference will be free of charge.",
"conference-2020.registrationTitle": "Registration:",
"conference-2020.registrationFee": "Conference Fee: $250",
"conference-2020.registrationOpen": "The conference fee includes 7 meals (3 breakfast, 3 lunches, 1 dinner) plus refreshments during the day.",
"conference-2020.registrationDelayed": "In response to the coronavirus crisis (COVID-19), we have decided to delay the Scratch conference for one year, to July 22-24, 2021. We are sending well wishes to our entire global community and hope you can join us then!",
"conference-2020.connectNow": "Want to connect now? We invite you to learn more about our online conversations, resources, and events at {scratchInPracticeLink}.",
"conference-2020.scratchInPracticeText": "Scratch in Practice",
"conference-2020.register": "Go to registration page",
"conference-2020.stayDesc1": "We will be posting revised lodging options at the beginning of 2021.",
"conference-2020.stayDesc2": "For additional questions, contact the Scratch Conference Team at {emailLink}",
"conference-2020.organizedBy": "The Scratch Conference is organized by the Lifelong Kindergarten group at the MIT Media Lab in collaboration with the Scratch Foundation."
}

View file

@ -0,0 +1,15 @@
import React from 'react';
import {useParams} from 'react-router-dom';
const StudioActivity = () => {
const {studioId} = useParams();
return (
<div>
<h2>Activity</h2>
<p>Studio {studioId}</p>
</div>
);
};
export default StudioActivity;

View file

@ -0,0 +1,15 @@
import React from 'react';
import {useParams} from 'react-router-dom';
const StudioComments = () => {
const {studioId} = useParams();
return (
<div>
<h2>Comments</h2>
<p>Studio {studioId}</p>
</div>
);
};
export default StudioComments;

View file

@ -0,0 +1,16 @@
import React from 'react';
import {useParams} from 'react-router-dom';
const StudioCurators = () => {
const {studioId} = useParams();
return (
<div>
<h2>Curators</h2>
<p>Studio {studioId}</p>
</div>
);
};
export default StudioCurators;

View file

@ -0,0 +1,15 @@
import React from 'react';
import {useParams} from 'react-router-dom';
const StudioInfo = () => {
const {studioId} = useParams();
return (
<div>
<h2>Studio Info</h2>
<p>Studio {studioId}</p>
</div>
);
};
export default StudioInfo;

View file

@ -0,0 +1,15 @@
import React from 'react';
import {useParams} from 'react-router-dom';
const StudioProjects = () => {
const {studioId} = useParams();
return (
<div>
<h2>Projects</h2>
<p>Studio {studioId}</p>
</div>
);
};
export default StudioProjects;

View file

@ -0,0 +1,41 @@
import React from 'react';
import {useRouteMatch, NavLink} from 'react-router-dom';
const StudioTabNav = () => {
const match = useRouteMatch();
return (
<div>
<NavLink
activeStyle={{textDecoration: 'underline'}}
to={`${match.url}`}
exact
>
Projects
</NavLink>
&nbsp;|&nbsp;
<NavLink
activeStyle={{textDecoration: 'underline'}}
to={`${match.url}/curators`}
>
Curators
</NavLink>
&nbsp;|&nbsp;
<NavLink
activeStyle={{textDecoration: 'underline'}}
to={`${match.url}/comments`}
>
Comments
</NavLink>
&nbsp;|&nbsp;
<NavLink
activeStyle={{textDecoration: 'underline'}}
to={`${match.url}/activity`}
>
Activity
</NavLink>
</div>
);
};
export default StudioTabNav;

View file

@ -0,0 +1,63 @@
import React from 'react';
import {
BrowserRouter as Router,
Switch,
Route,
Redirect,
useRouteMatch
} from 'react-router-dom';
import Page from '../../components/page/www/page.jsx';
import render from '../../lib/render.jsx';
import StudioTabNav from './studio-tab-nav.jsx';
import StudioProjects from './studio-projects.jsx';
import StudioInfo from './studio-info.jsx';
import StudioCurators from './studio-curators.jsx';
import StudioComments from './studio-comments.jsx';
import StudioActivity from './studio-activity.jsx';
const StudioShell = () => {
const match = useRouteMatch();
return (
<div style={{maxWidth: '960px', margin: 'auto'}}>
<StudioInfo />
<hr />
<StudioTabNav />
<div>
<Switch>
<Route path={`${match.path}/curators`}>
<StudioCurators />
</Route>
<Route path={`${match.path}/comments`}>
<StudioComments />
</Route>
<Route path={`${match.path}/activity`}>
<StudioActivity />
</Route>
<Route path={`${match.path}/projects`}>
{/* We can force /projects back to / this way */}
<Redirect to={match.url} />
</Route>
<Route path={match.path}>
<StudioProjects />
</Route>
</Switch>
</div>
</div>
);
};
render(
<Page>
<Router>
<Switch>
{/* Use variable studioPath to support /studio-playground/ or future route */}
<Route path="/:studioPath/:studioId">
<StudioShell />
</Route>
</Switch>
</Router>
</Page>,
document.getElementById('app')
);