From ed216b860ab271bec877fbc00a63491fd7703fb2 Mon Sep 17 00:00:00 2001 From: Christopher Willis-Ford <7019101+cwillisf@users.noreply.github.com> Date: Wed, 11 Jun 2025 14:58:48 -0700 Subject: [PATCH 001/129] chore!: support only the most recent 3 years of browser versions --- package.json | 12 ++++++------ src/views/faq/faq.jsx | 40 +++++++++++++++------------------------- src/views/faq/l10n.json | 12 ++---------- 3 files changed, 23 insertions(+), 41 deletions(-) diff --git a/package.json b/package.json index dcf56cd4d33..122365eb8a1 100644 --- a/package.json +++ b/package.json @@ -186,11 +186,11 @@ "all": true }, "browserslist": [ - "Chrome >= 63", - "Firefox >= 57", - "Edge >= 15", - "Safari >= 11", - "ChromeAndroid >= 63", - "ios_saf >= 11" + "Chrome >= 0 and last 3 years and not dead", + "Firefox >= 0 and last 3 years and not dead", + "Edge >= 0 and last 3 years and not dead", + "Safari >= 0 and last 3 years and not dead", + "ChromeAndroid >= 0 and last 3 years and not dead", + "ios_saf >= 0 and last 3 years and not dead" ] } diff --git a/src/views/faq/faq.jsx b/src/views/faq/faq.jsx index 2b8f70f4759..bd5a90f728b 100644 --- a/src/views/faq/faq.jsx +++ b/src/views/faq/faq.jsx @@ -40,31 +40,21 @@ const Faq = injectIntl(props => ( />
-
- - - - - - +
+

+

+

+

+
Date: Tue, 1 Jul 2025 12:23:48 +0200 Subject: [PATCH 002/129] add link to BAC --- src/views/splash/presentation.jsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/views/splash/presentation.jsx b/src/views/splash/presentation.jsx index 8af85947d2d..ecdfa27f4a6 100644 --- a/src/views/splash/presentation.jsx +++ b/src/views/splash/presentation.jsx @@ -476,6 +476,9 @@ class SplashPresentation extends React.Component { // eslint-disable-line react/
  • Email Search
  • +
  • + BAC +
  • Homepage Cache
    From cd474ebac3d9373ba7809bedd358221727ee389d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 5 Jul 2025 10:24:53 +0000 Subject: [PATCH 003/129] fix(deps): update dependency scratch-l10n to v5.0.295 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5688c175bec..34bc14fd8d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.294", + "scratch-l10n": "5.0.295", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -22848,9 +22848,9 @@ } }, "node_modules/scratch-l10n": { - "version": "5.0.294", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.294.tgz", - "integrity": "sha512-1YcThA9gzHusKVgylGgIqydcDaBhOYBWdiq6Y0sDvmHork9r0S7+cJI5KGxuQU19EyUCmXtQb+t9zLXCaEGGSg==", + "version": "5.0.295", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.295.tgz", + "integrity": "sha512-HcJHr8V5c/Eq9/kqR547x0pz2oT2mJg2orbk5Q+V/tX0fYsgvBpyMRv3GwmCc6fZMHt0IQTxMMMWPH31N/iUvw==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index e64d1eb3582..d27b9fa546a 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.294", + "scratch-l10n": "5.0.295", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From d92887c18363fecaa49848d333dcb9a7c49a2dd4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 5 Jul 2025 14:24:34 +0000 Subject: [PATCH 004/129] fix(deps): update dependency scratch-storage to ^4.0.180 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 34bc14fd8d2..b6ad322b061 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.179" + "scratch-storage": "^4.0.180" }, "devDependencies": { "@babel/cli": "7.27.2", @@ -22968,9 +22968,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.180", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.180.tgz", - "integrity": "sha512-EvBtMDtiA1mZqnFJduhaVoBQ5ekc2xJY3lu1turytNwKP0j9sVUnGmgz34AaHhkqJFwWr6Ivd7gEejNQOeQabA==", + "version": "4.0.181", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.181.tgz", + "integrity": "sha512-CY9MFywhLogYdOGi7jOEBhbvaPJtlVieDccBSIPm3Nakw1YsfsCqIrQ9CpQgC1A8uMUjlKMC2Iz/mV1NReVvSA==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index d27b9fa546a..d253625d435 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.179" + "scratch-storage": "^4.0.180" }, "devDependencies": { "@babel/cli": "7.27.2", From 1e057879942e0a8a25fb061fe1315129f98f2a9c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 5 Jul 2025 17:47:20 +0000 Subject: [PATCH 005/129] chore(deps): update babel monorepo to v7.28.0 --- package-lock.json | 278 +++++++++++++++++++++++----------------------- package.json | 10 +- 2 files changed, 146 insertions(+), 142 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6ad322b061..e084e40803a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,13 +26,13 @@ "scratch-storage": "^4.0.180" }, "devDependencies": { - "@babel/cli": "7.27.2", - "@babel/core": "7.27.7", - "@babel/eslint-parser": "7.27.5", + "@babel/cli": "7.28.0", + "@babel/core": "7.28.0", + "@babel/eslint-parser": "7.28.0", "@babel/plugin-syntax-dynamic-import": "7.8.3", "@babel/plugin-transform-async-to-generator": "7.27.1", - "@babel/plugin-transform-object-rest-spread": "7.27.7", - "@babel/preset-env": "7.27.2", + "@babel/plugin-transform-object-rest-spread": "7.28.0", + "@babel/preset-env": "7.28.0", "@babel/preset-react": "7.27.1", "@formatjs/intl-datetimeformat": "6.18.0", "@formatjs/intl-locale": "3.4.6", @@ -161,13 +161,13 @@ "dev": true }, "node_modules/@babel/cli": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.27.2.tgz", - "integrity": "sha512-cfd7DnGlhH6OIyuPSSj3vcfIdnbXukhAyKY8NaZrFadC7pXyL9mOL5WgjcptiEJLi5k3j8aYvLIVCzezrWTaiA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.0.tgz", + "integrity": "sha512-CYrZG7FagtE8ReKDBfItxnrEBf2khq2eTMnPuqO8UVN0wzhp1eMX1wfda8b1a32l2aqYLwRRIOGNovm8FVzmMw==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", + "@jridgewell/trace-mapping": "^0.3.28", "commander": "^6.2.0", "convert-source-map": "^2.0.0", "fs-readdir-recursive": "^1.1.0", @@ -228,9 +228,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz", - "integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", "dev": true, "license": "MIT", "engines": { @@ -238,22 +238,22 @@ } }, "node_modules/@babel/core": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.7.tgz", - "integrity": "sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", + "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.5", + "@babel/generator": "^7.28.0", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.27.3", "@babel/helpers": "^7.27.6", - "@babel/parser": "^7.27.7", + "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.27.7", - "@babel/types": "^7.27.7", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -269,9 +269,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.27.5.tgz", - "integrity": "sha512-HLkYQfRICudzcOtjGwkPvGc5nF1b4ljLZh1IRDj50lRZ718NAKVgQpIAUX8bfg6u/yuSKY3L7E0YzIV+OxrB8Q==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.28.0.tgz", + "integrity": "sha512-N4ntErOlKvcbTt01rr5wj3y55xnIdx1ymrfIr8C2WnM1Y9glFgWaGDEULJIazOX3XM9NRzhfJ6zZnQ1sBNWU+w==", "dev": true, "license": "MIT", "dependencies": { @@ -288,16 +288,16 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", - "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", + "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.5", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -375,22 +375,32 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", - "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz", + "integrity": "sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-plugin-utils": "^7.27.1", + "debug": "^4.4.1", "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "resolve": "^1.22.10" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", @@ -570,13 +580,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.7.tgz", - "integrity": "sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.27.7" + "@babel/types": "^7.28.0" }, "bin": { "parser": "bin/babel-parser.js" @@ -984,15 +994,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", - "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz", + "integrity": "sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -1036,9 +1046,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.5.tgz", - "integrity": "sha512-JF6uE2s67f0y2RZcm2kpAUEbD50vH62TyWVebxwHAlbSdM49VqPz8t4a1uIjp4NIOIZ4xzLfjY5emt/RCyC7TQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.0.tgz", + "integrity": "sha512-gKKnwjpdx5sER/wl0WN0efUBFzF/56YZO0RJrSYP4CljXnP31ByY7fol89AzomdlLNzI36AvOTmYHsnZTCkq8Q==", "dev": true, "license": "MIT", "dependencies": { @@ -1086,18 +1096,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", - "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz", + "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-compilation-targets": "^7.27.1", + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.27.1", - "globals": "^11.1.0" + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -1124,14 +1134,14 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.7.tgz", - "integrity": "sha512-pg3ZLdIKWCP0CrJm0O4jYjVthyBeioVfvz9nwt6o5paUxsgJ/8GucSMAIaj6M7xA4WY+SrvtGu2LijzkdyecWQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.0.tgz", + "integrity": "sha512-v1nrSMBiKcodhsyJ4Gf+Z0U/yawmJDBOTpEB3mcQY52r9RIyPneGyAS/yM6seP/8I+mWI3elOMtT5dB8GJVs+A==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.7" + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -1206,6 +1216,23 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-explicit-resource-management": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz", + "integrity": "sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-exponentiation-operator": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", @@ -1473,17 +1500,17 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.7.tgz", - "integrity": "sha512-201B1kFTWhckclcXpWHc8uUpYziDX/Pl4rxl0ZX0DiCZ3jknwfSUALL3QCYeeXXB37yWxJbo+g+Vfq8pAaHi3w==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.0.tgz", + "integrity": "sha512-9VNGikXxzu5eCiQjdE4IZn8sb9q7Xsk5EXLDBKUYg1e/Tve8/05+KJEtcxGxAgCY5t/BpKQM+JEL/yT4tvgiUA==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.7", + "@babel/plugin-transform-destructuring": "^7.28.0", "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.27.7" + "@babel/traverse": "^7.28.0" }, "engines": { "node": ">=6.9.0" @@ -1679,9 +1706,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.5.tgz", - "integrity": "sha512-uhB8yHerfe3MWnuLAhEbeQ4afVoqv8BQsPqrTv7e/jZ9y00kJL6l9a/f4OWaKxotmjzewfEyXE1vgDJenkQ2/Q==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.0.tgz", + "integrity": "sha512-LOAozRVbqxEVjSKfhGnuLoE4Kz4Oc5UJzuvFUhSsQzdCdaAQu06mG8zDv2GFSerM62nImUZ7K92vxnQcLSDlCQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1876,13 +1903,13 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.27.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", - "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.0.tgz", + "integrity": "sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.27.2", + "@babel/compat-data": "^7.28.0", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", @@ -1896,19 +1923,20 @@ "@babel/plugin-syntax-import-attributes": "^7.27.1", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.27.1", + "@babel/plugin-transform-async-generator-functions": "^7.28.0", "@babel/plugin-transform-async-to-generator": "^7.27.1", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.27.1", + "@babel/plugin-transform-block-scoping": "^7.28.0", "@babel/plugin-transform-class-properties": "^7.27.1", "@babel/plugin-transform-class-static-block": "^7.27.1", - "@babel/plugin-transform-classes": "^7.27.1", + "@babel/plugin-transform-classes": "^7.28.0", "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.27.1", + "@babel/plugin-transform-destructuring": "^7.28.0", "@babel/plugin-transform-dotall-regex": "^7.27.1", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", "@babel/plugin-transform-dynamic-import": "^7.27.1", + "@babel/plugin-transform-explicit-resource-management": "^7.28.0", "@babel/plugin-transform-exponentiation-operator": "^7.27.1", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", @@ -1925,15 +1953,15 @@ "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.27.2", + "@babel/plugin-transform-object-rest-spread": "^7.28.0", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.27.1", "@babel/plugin-transform-optional-chaining": "^7.27.1", - "@babel/plugin-transform-parameters": "^7.27.1", + "@babel/plugin-transform-parameters": "^7.27.7", "@babel/plugin-transform-private-methods": "^7.27.1", "@babel/plugin-transform-private-property-in-object": "^7.27.1", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.27.1", + "@babel/plugin-transform-regenerator": "^7.28.0", "@babel/plugin-transform-regexp-modifiers": "^7.27.1", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", @@ -1946,10 +1974,10 @@ "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.11.0", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.40.0", + "babel-plugin-polyfill-corejs2": "^0.4.14", + "babel-plugin-polyfill-corejs3": "^0.13.0", + "babel-plugin-polyfill-regenerator": "^0.6.5", + "core-js-compat": "^3.43.0", "semver": "^6.3.1" }, "engines": { @@ -2020,28 +2048,28 @@ } }, "node_modules/@babel/traverse": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.7.tgz", - "integrity": "sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", + "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.5", - "@babel/parser": "^7.27.7", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", "@babel/template": "^7.27.2", - "@babel/types": "^7.27.7", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/types": "^7.28.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.7.tgz", - "integrity": "sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.0.tgz", + "integrity": "sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==", "dev": true, "license": "MIT", "dependencies": { @@ -3183,18 +3211,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -3207,16 +3231,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", @@ -3235,9 +3249,9 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6038,14 +6052,14 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", - "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz", + "integrity": "sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.4", + "@babel/compat-data": "^7.27.7", + "@babel/helper-define-polyfill-provider": "^0.6.5", "semver": "^6.3.1" }, "peerDependencies": { @@ -6053,27 +6067,27 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", - "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz", + "integrity": "sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3", - "core-js-compat": "^3.40.0" + "@babel/helper-define-polyfill-provider": "^0.6.5", + "core-js-compat": "^3.43.0" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", - "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz", + "integrity": "sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.4" + "@babel/helper-define-polyfill-provider": "^0.6.5" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -12768,16 +12782,6 @@ "process": "^0.11.10" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/globalthis": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", diff --git a/package.json b/package.json index d253625d435..a4aaa3c25af 100644 --- a/package.json +++ b/package.json @@ -61,13 +61,13 @@ "scratch-storage": "^4.0.180" }, "devDependencies": { - "@babel/cli": "7.27.2", - "@babel/core": "7.27.7", - "@babel/eslint-parser": "7.27.5", + "@babel/cli": "7.28.0", + "@babel/core": "7.28.0", + "@babel/eslint-parser": "7.28.0", "@babel/plugin-syntax-dynamic-import": "7.8.3", "@babel/plugin-transform-async-to-generator": "7.27.1", - "@babel/plugin-transform-object-rest-spread": "7.27.7", - "@babel/preset-env": "7.27.2", + "@babel/plugin-transform-object-rest-spread": "7.28.0", + "@babel/preset-env": "7.28.0", "@babel/preset-react": "7.27.1", "@formatjs/intl-datetimeformat": "6.18.0", "@formatjs/intl-locale": "3.4.6", From 52a00dd06f1724d821fd052fb5c9d333a9a0b993 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 6 Jul 2025 05:43:11 +0000 Subject: [PATCH 006/129] fix(deps): update dependency scratch-l10n to v5.0.296 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e084e40803a..f6218117746 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.295", + "scratch-l10n": "5.0.296", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -22852,9 +22852,9 @@ } }, "node_modules/scratch-l10n": { - "version": "5.0.295", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.295.tgz", - "integrity": "sha512-HcJHr8V5c/Eq9/kqR547x0pz2oT2mJg2orbk5Q+V/tX0fYsgvBpyMRv3GwmCc6fZMHt0IQTxMMMWPH31N/iUvw==", + "version": "5.0.296", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.296.tgz", + "integrity": "sha512-wAUqKqhkOWZYkuUToUExEY2DOkr4SnhSmaJIIK2zHvV+8S69UWIgRMob5D7c/6fWtQSPab+aftc1OTVbKeYBxA==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index a4aaa3c25af..8e732741445 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.295", + "scratch-l10n": "5.0.296", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From a9c122613d9c45c054e3551d79e33093acd3660c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 6 Jul 2025 20:45:09 +0000 Subject: [PATCH 007/129] chore(deps): update dependency query-string to v9.2.2 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index f6218117746..af85d460119 100644 --- a/package-lock.json +++ b/package-lock.json @@ -94,7 +94,7 @@ "postcss-loader": "4.3.0", "postcss-simple-vars": "5.0.2", "prop-types": "15.8.1", - "query-string": "9.2.1", + "query-string": "9.2.2", "react": "16.14.0", "react-dom": "16.14.0", "react-intl": "5.25.1", @@ -20514,9 +20514,9 @@ } }, "node_modules/query-string": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-9.2.1.tgz", - "integrity": "sha512-3jTGGLRzlhu/1ws2zlr4Q+GVMLCQTLFOj8CMX5x44cdZG9FQE07x2mQhaNxaKVPNmIDu0mvJ/cEwtY7Pim7hqA==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-9.2.2.tgz", + "integrity": "sha512-pDSIZJ9sFuOp6VnD+5IkakSVf+rICAuuU88Hcsr6AKL0QtxSIfVuKiVP2oahFI7tk3CRSexwV+Ya6MOoTxzg9g==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 8e732741445..516b7abb2a5 100644 --- a/package.json +++ b/package.json @@ -129,7 +129,7 @@ "postcss-loader": "4.3.0", "postcss-simple-vars": "5.0.2", "prop-types": "15.8.1", - "query-string": "9.2.1", + "query-string": "9.2.2", "react": "16.14.0", "react-dom": "16.14.0", "react-intl": "5.25.1", From ff01298d968101df5eb73275e75943aff15257db Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Jul 2025 05:55:12 +0000 Subject: [PATCH 008/129] fix(deps): update dependency scratch-l10n to v5.0.297 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index af85d460119..e1a72697288 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.296", + "scratch-l10n": "5.0.297", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -22852,9 +22852,9 @@ } }, "node_modules/scratch-l10n": { - "version": "5.0.296", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.296.tgz", - "integrity": "sha512-wAUqKqhkOWZYkuUToUExEY2DOkr4SnhSmaJIIK2zHvV+8S69UWIgRMob5D7c/6fWtQSPab+aftc1OTVbKeYBxA==", + "version": "5.0.297", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.297.tgz", + "integrity": "sha512-zO+vdrIGHi8bhqEXA4pLbZ+hc1LrhTNJZY/BOEo7A3jIS+N3IYQNtxqLUxYbDIn4XYnTYzF4ocCTgQK0ulS5xw==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 516b7abb2a5..b8e22252d5d 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.296", + "scratch-l10n": "5.0.297", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 32f7ac8f9ca280f15c01214e9958f9a5d6a70a8f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Jul 2025 08:04:47 +0000 Subject: [PATCH 009/129] fix(deps): update dependency scratch-l10n to v5.0.299 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e1a72697288..5583bce33aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.297", + "scratch-l10n": "5.0.299", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -22852,9 +22852,9 @@ } }, "node_modules/scratch-l10n": { - "version": "5.0.297", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.297.tgz", - "integrity": "sha512-zO+vdrIGHi8bhqEXA4pLbZ+hc1LrhTNJZY/BOEo7A3jIS+N3IYQNtxqLUxYbDIn4XYnTYzF4ocCTgQK0ulS5xw==", + "version": "5.0.299", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.299.tgz", + "integrity": "sha512-OEhAgIZzWk9h+y/KrDlaiCdBe6gT85K6eeY7dJ7cI/Bs5PUFanZS7M7s1F9ztxYkLDfyd1c0V6hNNEheostLOg==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index b8e22252d5d..5a96d04df3e 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.297", + "scratch-l10n": "5.0.299", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 2bc169c6220f03c0031c73b239e4c648af412bff Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Jul 2025 13:01:37 +0000 Subject: [PATCH 010/129] fix(deps): update dependency scratch-storage to ^4.0.181 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5583bce33aa..d848a8c7b55 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.180" + "scratch-storage": "^4.0.181" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -22972,9 +22972,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.181", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.181.tgz", - "integrity": "sha512-CY9MFywhLogYdOGi7jOEBhbvaPJtlVieDccBSIPm3Nakw1YsfsCqIrQ9CpQgC1A8uMUjlKMC2Iz/mV1NReVvSA==", + "version": "4.0.182", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.182.tgz", + "integrity": "sha512-4bbgQKbR/dQ5D+/26zj+gyRL9J0vFKvqkNjhIEtnVNttS4pt3iyG4NFWd/KoQY2sREBtNrlMyw+6KckE3bzHjw==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index 5a96d04df3e..7f2d94e02f6 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.180" + "scratch-storage": "^4.0.181" }, "devDependencies": { "@babel/cli": "7.28.0", From ede0540af6f89ddbf5bacaad944888d9dadb57ea Mon Sep 17 00:00:00 2001 From: MiroslavDionisiev Date: Wed, 9 Jul 2025 13:38:30 +0300 Subject: [PATCH 011/129] feat: [UEPR-252] add manual save of thumnails --- src/views/preview/presentation.jsx | 4 ++++ src/views/preview/project-view.jsx | 2 ++ webpack.config.js | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/views/preview/presentation.jsx b/src/views/preview/presentation.jsx index e5f86a8a20f..759c64b10db 100644 --- a/src/views/preview/presentation.jsx +++ b/src/views/preview/presentation.jsx @@ -92,6 +92,7 @@ const PreviewPresentation = ({ justShared, loveCount, loved, + manuallySaveThumbnails, modInfo, moreCommentsToLoad, onAddComment, @@ -414,6 +415,8 @@ const PreviewPresentation = ({ onUpdateProjectId={onUpdateProjectId} onUpdateProjectThumbnail={onUpdateProjectThumbnail} shouldStopProject={shouldStopProject} + manuallySaveThumbnails={manuallySaveThumbnails} + userOwnsProject={userOwnsProject} /> @@ -782,6 +785,7 @@ PreviewPresentation.propTypes = { justShared: PropTypes.bool, loveCount: PropTypes.number, loved: PropTypes.bool, + manuallySaveThumbnails: PropTypes.bool, modInfo: PropTypes.shape({ scriptCount: PropTypes.number, spriteCount: PropTypes.number diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index c0376afc48d..53796842db8 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -982,6 +982,7 @@ class Preview extends React.Component { onUpdateProjectData={this.handleUpdateProjectData} onUpdateProjectId={this.handleUpdateProjectId} onUpdateProjectThumbnail={this.props.handleUpdateProjectThumbnail} + manuallySaveThumbnails={process.env.MANUALLY_SAVE_THUMBNAILS} /> : @@ -1035,6 +1036,7 @@ class Preview extends React.Component { onActivateDeck={this.props.onActivateDeck} displayFeedback={this.props.displayFeedback} feedback={this.props.feedback} + manuallySaveThumbnails={process.env.MANUALLY_SAVE_THUMBNAILS} /> )} diff --git a/webpack.config.js b/webpack.config.js index 554c79e1f80..f9893b61f85 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -335,6 +335,9 @@ module.exports = { }"`, 'process.env.IDEAS_GENERATOR_SOURCE': `"${ process.env.IDEAS_GENERATOR_SOURCE || 'https://scratch.mit.edu/projects/1108790117' + }"`, + 'process.env.MANUALLY_SAVE_THUMBNAILS': `"${ + process.env.MANUALLY_SAVE_THUMBNAILS || true }"` }) ]) From 9f177b16c78664b617c7c49d93b0127bfd234f38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Jul 2025 13:12:15 +0000 Subject: [PATCH 012/129] fix(deps): update dependency scratch-l10n to v5.0.301 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index d848a8c7b55..9232e1fddd0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.299", + "scratch-l10n": "5.0.301", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -22852,9 +22852,9 @@ } }, "node_modules/scratch-l10n": { - "version": "5.0.299", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.299.tgz", - "integrity": "sha512-OEhAgIZzWk9h+y/KrDlaiCdBe6gT85K6eeY7dJ7cI/Bs5PUFanZS7M7s1F9ztxYkLDfyd1c0V6hNNEheostLOg==", + "version": "5.0.301", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.301.tgz", + "integrity": "sha512-1u3TzX4Bpko29mA1S80Hxltd21OcEAu+hWafIOeZMLGn/8MOTnYhiO6Uga+OR1JuAk1vQaGGDRz4dWLImS1mhw==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 7f2d94e02f6..890d4e4aaf1 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.299", + "scratch-l10n": "5.0.301", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 4a47ce2022aed639475309ec75b49d57cefbb741 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Jul 2025 20:11:06 +0000 Subject: [PATCH 013/129] fix(deps): update dependency scratch-storage to ^4.0.182 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9232e1fddd0..5bd00264b61 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.181" + "scratch-storage": "^4.0.182" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -22972,9 +22972,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.182", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.182.tgz", - "integrity": "sha512-4bbgQKbR/dQ5D+/26zj+gyRL9J0vFKvqkNjhIEtnVNttS4pt3iyG4NFWd/KoQY2sREBtNrlMyw+6KckE3bzHjw==", + "version": "4.0.183", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.183.tgz", + "integrity": "sha512-q8m7+CMX1m9PmfGao2aGvQhePUnl6AeizExn/W0Vb7+MuMR5CX4NwCv9DokJECesZnqkoNoZVdFD6hklqkLRkA==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index 890d4e4aaf1..2a838b32076 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.181" + "scratch-storage": "^4.0.182" }, "devDependencies": { "@babel/cli": "7.28.0", From a14b4379bb7a22c4e7f3b8785ec7f9f10d7715a7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Jul 2025 12:29:38 +0000 Subject: [PATCH 014/129] fix(deps): update dependency scratch-l10n to v5.0.303 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5bd00264b61..7a54dbf4b85 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.301", + "scratch-l10n": "5.0.303", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -22852,9 +22852,9 @@ } }, "node_modules/scratch-l10n": { - "version": "5.0.301", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.301.tgz", - "integrity": "sha512-1u3TzX4Bpko29mA1S80Hxltd21OcEAu+hWafIOeZMLGn/8MOTnYhiO6Uga+OR1JuAk1vQaGGDRz4dWLImS1mhw==", + "version": "5.0.303", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.303.tgz", + "integrity": "sha512-31ds3rGGAveLRQh2/JctUrjrpRO5AHxKXzITg4i8DT6jIUUogknQbB2NfCEK4cIOR1UCE4dr4fj1b1dWrkGZYg==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 2a838b32076..e5a1b1339a2 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.301", + "scratch-l10n": "5.0.303", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From ecf6d2e9b6e536a020ad246b5716670526ee8416 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Jul 2025 19:10:12 +0000 Subject: [PATCH 015/129] fix(deps): update dependency scratch-storage to ^4.0.183 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7a54dbf4b85..e621c667f63 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.182" + "scratch-storage": "^4.0.183" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -22972,9 +22972,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.183", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.183.tgz", - "integrity": "sha512-q8m7+CMX1m9PmfGao2aGvQhePUnl6AeizExn/W0Vb7+MuMR5CX4NwCv9DokJECesZnqkoNoZVdFD6hklqkLRkA==", + "version": "4.0.184", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.184.tgz", + "integrity": "sha512-V+KVR4mz6b3Y38yIuHFiyPzr+wt6QhEQOdv7CBF/lbeN/Nywqo5tPJgjTnyYXFfmREJYSZMaPwU/lff8pdnbew==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index e5a1b1339a2..1e4a55f1e36 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.182" + "scratch-storage": "^4.0.183" }, "devDependencies": { "@babel/cli": "7.28.0", From 87b82c17be21ffd637ab8b6017fc041833d43f0e Mon Sep 17 00:00:00 2001 From: Varun Biniwale Date: Thu, 10 Jul 2025 22:52:09 +0200 Subject: [PATCH 016/129] search: send along token if admin --- src/views/search/search.jsx | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/views/search/search.jsx b/src/views/search/search.jsx index 738f2ae0d05..be10cd2a3b4 100644 --- a/src/views/search/search.jsx +++ b/src/views/search/search.jsx @@ -16,6 +16,7 @@ import TitleBanner from '../../components/title-banner/title-banner.jsx'; import Tabs from '../../components/tabs/tabs.jsx'; import {selectIsTotallyNormal} from '../../redux/session'; +import sessionActions from '../../redux/session.js'; import Page from '../../components/page/www/page.jsx'; import render from '../../lib/render.jsx'; @@ -90,7 +91,13 @@ class Search extends React.Component { this.props.dispatch(navigationActions.setSearchTerm(term)); } componentDidUpdate (prevProps) { - if (this.props.searchTerm !== prevProps.searchTerm) { + const sessionLoaded = this.props.session.status === sessionActions.Status.FETCHED; + const wasSessionLoaded = prevProps.session.status === sessionActions.Status.FETCHED; + + const becameAuthenticated = !wasSessionLoaded && sessionLoaded; + const searchChanged = this.props.searchTerm !== prevProps.searchTerm; + + if (sessionLoaded && (searchChanged || becameAuthenticated)) { this.handleGetSearchMore(); } } @@ -133,9 +140,13 @@ class Search extends React.Component { if (termText) { queryString += `&q=${termText}`; } + + const isAdmin = this.props.session?.session?.permissions?.admin + const token = this.props.session?.session?.user?.token api({ - uri: `/search/${this.state.tab}?${queryString}` + uri: `${isAdmin ? '/admin' : ''}/search/${this.state.tab}?${queryString}`, + ...(isAdmin && token ? { authentication: token } : {}) }, (err, body) => { const loadedSoFar = this.state.loaded; Array.prototype.push.apply(loadedSoFar, body); @@ -284,12 +295,14 @@ class Search extends React.Component { Search.propTypes = { dispatch: PropTypes.func, intl: intlShape, + searchTerm: PropTypes.string, + session: PropTypes.object, isTotallyNormal: PropTypes.bool, // eslint-disable-line react/no-unused-prop-types - searchTerm: PropTypes.string }; const mapStateToProps = state => ({ searchTerm: state.navigation.searchTerm, + session: state.session, isTotallyNormal: selectIsTotallyNormal(state) }); From 6dd379966ccebca18d8d52a627ace9ab6220db3f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Jul 2025 05:39:39 +0000 Subject: [PATCH 017/129] fix(deps): update dependency scratch-l10n to v5.0.304 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e621c667f63..a8e212b3a30 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.303", + "scratch-l10n": "5.0.304", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -22852,9 +22852,9 @@ } }, "node_modules/scratch-l10n": { - "version": "5.0.303", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.303.tgz", - "integrity": "sha512-31ds3rGGAveLRQh2/JctUrjrpRO5AHxKXzITg4i8DT6jIUUogknQbB2NfCEK4cIOR1UCE4dr4fj1b1dWrkGZYg==", + "version": "5.0.304", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.304.tgz", + "integrity": "sha512-mCJDa030oyW7CRkguLGulqbQtiJBME9Z0GZer+VGcJhyZtOsah26HNZBj7AHleF51kV4REoJtW/6VA8WuKdQiQ==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 1e4a55f1e36..1840286a36c 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.303", + "scratch-l10n": "5.0.304", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 38658b106809136467dae22300fcd9230805e22f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Jul 2025 10:58:45 +0000 Subject: [PATCH 018/129] fix(deps): update dependency scratch-storage to ^4.0.184 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index a8e212b3a30..83217686cf0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.183" + "scratch-storage": "^4.0.184" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -22972,9 +22972,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.184", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.184.tgz", - "integrity": "sha512-V+KVR4mz6b3Y38yIuHFiyPzr+wt6QhEQOdv7CBF/lbeN/Nywqo5tPJgjTnyYXFfmREJYSZMaPwU/lff8pdnbew==", + "version": "4.0.185", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.185.tgz", + "integrity": "sha512-Y07z/2rCU+aR9I+ubZj0CDEDXq5NsSrWbNUzl/neDuD/nklt86qGqffQ7tWPynLeIFTwqpajsLXbE/rQq7EzAA==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index 1840286a36c..7e5507dabea 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.183" + "scratch-storage": "^4.0.184" }, "devDependencies": { "@babel/cli": "7.28.0", From 371ca6b36efbb9748123f1d5eead25f09f2a6d76 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Jul 2025 10:24:21 +0000 Subject: [PATCH 019/129] fix(deps): update dependency scratch-l10n to v5.0.306 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 83217686cf0..0a6dda74a94 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.304", + "scratch-l10n": "5.0.306", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -22852,9 +22852,9 @@ } }, "node_modules/scratch-l10n": { - "version": "5.0.304", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.304.tgz", - "integrity": "sha512-mCJDa030oyW7CRkguLGulqbQtiJBME9Z0GZer+VGcJhyZtOsah26HNZBj7AHleF51kV4REoJtW/6VA8WuKdQiQ==", + "version": "5.0.306", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.306.tgz", + "integrity": "sha512-9nSYubcH3LvH27z+H6EPyzMTkjTg2MhaOFaZ4UNj6a/zsHHvL9yjuFvyCLMPIPEG+5FAoTkfwAI8aHPGF4C8BA==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 7e5507dabea..e4f0d53ef1b 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.304", + "scratch-l10n": "5.0.306", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 1776f44f0b045246a84b0229eb917d0cd38e08f2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Jul 2025 12:34:18 +0000 Subject: [PATCH 020/129] fix(deps): update dependency scratch-storage to ^4.0.185 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0a6dda74a94..17fc217ead1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.184" + "scratch-storage": "^4.0.185" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -22972,9 +22972,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.185", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.185.tgz", - "integrity": "sha512-Y07z/2rCU+aR9I+ubZj0CDEDXq5NsSrWbNUzl/neDuD/nklt86qGqffQ7tWPynLeIFTwqpajsLXbE/rQq7EzAA==", + "version": "4.0.186", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.186.tgz", + "integrity": "sha512-og8WS+fnT9QRrVcK7ypkIPz6jJmPKegeHm36RVJqNOWC8gab0xeKHMoTFGc6kMm/upRn023H+CVhSe9jZdQWXQ==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index e4f0d53ef1b..1fe4bf25318 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.184" + "scratch-storage": "^4.0.185" }, "devDependencies": { "@babel/cli": "7.28.0", From 3ad8f2727e05bddc2b29229f07238c46d75ed36a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Jul 2025 17:50:48 +0000 Subject: [PATCH 021/129] chore(deps): update dependency webpack to v5.100.0 --- package-lock.json | 30 ++++++++++++++++++++++-------- package.json | 2 +- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 17fc217ead1..5e3d75381d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -120,7 +120,7 @@ "tap": "14.11.0", "url-loader": "3.0.0", "use-onclickoutside": "0.4.1", - "webpack": "5.99.9", + "webpack": "5.100.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-middleware": "5.3.4", @@ -5155,6 +5155,19 @@ "acorn-walk": "^8.0.2" } }, + "node_modules/acorn-import-phases": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.3.tgz", + "integrity": "sha512-jtKLnfoOzm28PazuQ4dVBcE9Jeo6ha1GAJvq3N0LlNOszmTfx+wSycBehn+FN0RnyeR77IBxN/qVYMw0Rlj0Xw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -28287,22 +28300,23 @@ } }, "node_modules/webpack": { - "version": "5.99.9", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", - "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", + "version": "5.100.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.0.tgz", + "integrity": "sha512-H8yBSBTk+BqxrINJnnRzaxU94SVP2bjd7WmA+PfCphoIdDpeQMJ77pq9/4I7xjLq38cB1bNKfzYPZu8pB3zKtg==", "dev": true, "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", + "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", + "enhanced-resolve": "^5.17.2", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", @@ -28316,7 +28330,7 @@ "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.11", "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" diff --git a/package.json b/package.json index 1fe4bf25318..b14c7724cb0 100644 --- a/package.json +++ b/package.json @@ -155,7 +155,7 @@ "tap": "14.11.0", "url-loader": "3.0.0", "use-onclickoutside": "0.4.1", - "webpack": "5.99.9", + "webpack": "5.100.0", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-middleware": "5.3.4", From 4a7bea08beb6c45f45acda4dc7ce470211e958c9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 13 Jul 2025 08:47:14 +0000 Subject: [PATCH 022/129] fix(deps): update dependency scratch-l10n to v5.0.307 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5e3d75381d9..2d495a95bdd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.306", + "scratch-l10n": "5.0.307", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -22865,9 +22865,9 @@ } }, "node_modules/scratch-l10n": { - "version": "5.0.306", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.306.tgz", - "integrity": "sha512-9nSYubcH3LvH27z+H6EPyzMTkjTg2MhaOFaZ4UNj6a/zsHHvL9yjuFvyCLMPIPEG+5FAoTkfwAI8aHPGF4C8BA==", + "version": "5.0.307", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.307.tgz", + "integrity": "sha512-sI9MA1gewTEEeoMYWXUARnHb/Bx6cmrQd62q3AhmcesQ9EwI61GBX6ZVI+rXhotBIHkeKf37oK7cX25Aevw4RA==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index b14c7724cb0..2776d9791bc 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.306", + "scratch-l10n": "5.0.307", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 0348d6abf842b9d15c26adaef1c8d6f21d2bc599 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 13 Jul 2025 14:31:46 +0000 Subject: [PATCH 023/129] fix(deps): update dependency scratch-storage to ^4.0.186 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2d495a95bdd..7590fecad3e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.185" + "scratch-storage": "^4.0.186" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -22985,9 +22985,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.186", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.186.tgz", - "integrity": "sha512-og8WS+fnT9QRrVcK7ypkIPz6jJmPKegeHm36RVJqNOWC8gab0xeKHMoTFGc6kMm/upRn023H+CVhSe9jZdQWXQ==", + "version": "4.0.187", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.187.tgz", + "integrity": "sha512-/taGNUOedcUjHZ785KN5h6RpGeqLw21hu4cTXkkDnB0sh4c+rrlrAf43uM70kYPWMeiSabOxXqhRhy3bfSvOcA==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index 2776d9791bc..1e2e9189c38 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.185" + "scratch-storage": "^4.0.186" }, "devDependencies": { "@babel/cli": "7.28.0", From db95194f3a870430a8d761b00e1c7a5d25b32c34 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Jul 2025 16:40:11 +0000 Subject: [PATCH 024/129] chore(deps): update dependency webpack to v5.100.1 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7590fecad3e..c383b1077d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -120,7 +120,7 @@ "tap": "14.11.0", "url-loader": "3.0.0", "use-onclickoutside": "0.4.1", - "webpack": "5.100.0", + "webpack": "5.100.1", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-middleware": "5.3.4", @@ -28300,9 +28300,9 @@ } }, "node_modules/webpack": { - "version": "5.100.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.0.tgz", - "integrity": "sha512-H8yBSBTk+BqxrINJnnRzaxU94SVP2bjd7WmA+PfCphoIdDpeQMJ77pq9/4I7xjLq38cB1bNKfzYPZu8pB3zKtg==", + "version": "5.100.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.1.tgz", + "integrity": "sha512-YJB/ESPUe2Locd0NKXmw72Dx8fZQk1gTzI6rc9TAT4+Sypbnhl8jd8RywB1bDsDF9Dy1RUR7gn3q/ZJTd0OZZg==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 1e2e9189c38..94f3b5aeed1 100644 --- a/package.json +++ b/package.json @@ -155,7 +155,7 @@ "tap": "14.11.0", "url-loader": "3.0.0", "use-onclickoutside": "0.4.1", - "webpack": "5.100.0", + "webpack": "5.100.1", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-middleware": "5.3.4", From f8f5e989d108f0d8523ca812340d0b0424ef4c0a Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Tue, 15 Jul 2025 12:10:48 +0300 Subject: [PATCH 025/129] feat: add user messaging on first open of thumbnail update feature --- src/views/preview/l10n.json | 6 +- src/views/preview/project-view.jsx | 104 ++++++++++++++++-- src/views/preview/project-view.scss | 27 +++++ .../preview/update-thumbnail-info-modal.jsx | 43 ++++++++ .../preview/update-thumbnail-info-modal.scss | 64 +++++++++++ 5 files changed, 232 insertions(+), 12 deletions(-) create mode 100644 src/views/preview/project-view.scss create mode 100644 src/views/preview/update-thumbnail-info-modal.jsx create mode 100644 src/views/preview/update-thumbnail-info-modal.scss diff --git a/src/views/preview/l10n.json b/src/views/preview/l10n.json index 64febb77c4a..29992dcda56 100644 --- a/src/views/preview/l10n.json +++ b/src/views/preview/l10n.json @@ -67,5 +67,9 @@ "project.journey.controls.onMyOwn": "On my own", "project.highlight.tutorials": "Click here for tutorials", "project.journey.play": "Click the green flag to see what this project does.", - "project.journey.remix": "Make your own version!" + "project.journey.remix": "Make your own version!", + "project.updateThumbnailTooltip": "Hi! Try out our new feature.", + "project.updateThumbnailInfoModal.title": "Set Thumbnail", + "project.updateThumbnailInfoModal.description": "When you press the button, a snapshot of your project canvas is taken and saved as the project thumbnail. You can also use it while the project is playing.", + "project.updateThumbnailInfoModal.button": "Okay, I got it" } diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index 53796842db8..d60675f8b61 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -10,6 +10,7 @@ const injectIntl = require('react-intl').injectIntl; const parser = require('scratch-parser'); const queryString = require('query-string').default; +const intlShape = require('../../lib/intl-shape'); const api = require('../../lib/api'); const Page = require('../../components/page/www/page.jsx'); const storage = require('../../lib/storage.js').default; @@ -25,6 +26,8 @@ const ConnectedLogin = require('../../components/login/connected-login.jsx'); const CanceledDeletionModal = require('../../components/login/canceled-deletion-modal.jsx'); const NotAvailable = require('../../components/not-available/not-available.jsx'); const Meta = require('./meta.jsx'); +const {UpdateThumbnailInfoModal} = require('./update-thumbnail-info-modal.jsx'); +const {driver} = require('driver.js'); const sessionActions = require('../../redux/session.js'); const {selectProjectCommentsGloballyEnabled, selectIsTotallyNormal} = require('../../redux/session'); @@ -52,6 +55,11 @@ const {shouldDisplayFeedbackWidget, sendUserPropertiesForFeedback} = require('.. const {displayQualitativeFeedback} = require('../../redux/qualitative-feedback.js'); const {DebuggingFeedback} = require('../../components/modal/feedback/debugging-feedback.jsx'); const {TutorialsFeedback} = require('../../components/modal/feedback/tutorials-feedback.jsx'); +require('./project-view.scss'); + +function isFirstManualThumbnailUpdate() { + return localStorage.getItem('isFirstManualThumbnailUpdate') !== 'false'; +} const IntlGUIWithProjectHandler = ({...props}) => { const [showJourney, setShowJourney] = useState(false); @@ -160,6 +168,7 @@ class Preview extends React.Component { 'handleCloseEmailConfirmationModal', 'handleBannerDismiss', 'handleIsRemixing', + 'handleManualThumbnailUpdate', 'handleOpenAdminPanel', 'handleReportClick', 'handleReportClose', @@ -180,6 +189,10 @@ class Preview extends React.Component { 'handleUpdateProjectId', 'handleUpdateProjectTitle', 'handleToggleComments', + 'showThumbnailUpdateInfoTooltip', + 'hideThumbnailUpdateInfoTooltip', + 'showThumbnailUpdateInfoModal', + 'hideThumbnailUpdateInfoModal', 'initCounts', 'pushHistory', 'renderLogin', @@ -209,6 +222,7 @@ class Preview extends React.Component { favoriteCount: 0, isProjectLoaded: false, isRemixing: false, + isThumbnailUpdateInfoModalOpen: false, invalidProject: parts.length === 1, justRemixed: false, justShared: false, @@ -230,6 +244,9 @@ class Preview extends React.Component { } componentDidMount () { this.addEventListeners(); + if (this.props.playerMode && isFirstManualThumbnailUpdate()) { + this.showThumbnailUpdateInfoTooltip(); + } } componentDidUpdate (prevProps, prevState) { if (this.state.projectId > 0 && @@ -832,6 +849,57 @@ class Preview extends React.Component { this.props.user.token ); } + handleManualThumbnailUpdate (id, blob) { + return this.props.handleUpdateProjectThumbnail( + id, + blob, + isFirstManualThumbnailUpdate(), + this.hideThumbnailUpdateInfoTooltip, + this.showThumbnailUpdateInfoModal + ); + } + showThumbnailUpdateInfoModal () { + this.setState({ + isThumbnailUpdateInfoModalOpen: true + }); + } + hideThumbnailUpdateInfoModal () { + this.setState({ + isThumbnailUpdateInfoModalOpen: false + }); + } + showThumbnailUpdateInfoTooltip () { + this.tooltipDriver = driver({ + allowClose: false, + overlayColor: 'transparent', + popoverOffset: 4, + steps: [{ + element: 'span[class*="stage-header_setThumbnailButton"]', + popover: { + title: this.props.intl.formatMessage({id: 'project.updateThumbnailTooltip'}), + side: 'bottom', + align: 'center', + popoverClass: 'tooltip-set-thumbnail', + showButtons: [] + }, + }] + }); + + const showThumbnailUpdateInfoTooltipWhenGuiReady = () => { + const el = document.querySelector('span[class*="stage-header_setThumbnailButton"]'); + if (el) { + this.tooltipDriver.drive(); + } else { + setTimeout(showThumbnailUpdateInfoTooltipWhenGuiReady, 1000); + } + }; + showThumbnailUpdateInfoTooltipWhenGuiReady(); + } + hideThumbnailUpdateInfoTooltip () { + if (this.tooltipDriver) { + this.tooltipDriver.destroy(); + } + } initCounts (favorites, loves) { this.setState({ favoriteCount: favorites, @@ -856,7 +924,6 @@ class Preview extends React.Component { ); } render () { - // Only show GUI if the project has no id, is a loaded local project, or has the project token loaded const showGUI = (!this.state.projectId || this.state.projectId === '0' || this.state.isProjectLoaded || (this.props.projectInfo && this.props.projectInfo.project_token)); @@ -884,6 +951,7 @@ class Preview extends React.Component { 'admin-panel-open': this.state.adminPanelOpen })} > + : @@ -1028,7 +1096,8 @@ class Preview extends React.Component { onToggleLoginOpen={this.props.handleToggleLoginOpen} onUpdateProjectData={this.handleUpdateProjectData} onUpdateProjectId={this.handleUpdateProjectId} - onUpdateProjectThumbnail={this.props.handleUpdateProjectThumbnail} + // TODO: Do we need to also modify GUI code to prevent + // thumbnail updates? onUpdateProjectTitle={this.handleUpdateProjectTitle} user={this.props.user} platform={'WEB'} @@ -1036,7 +1105,7 @@ class Preview extends React.Component { onActivateDeck={this.props.onActivateDeck} displayFeedback={this.props.displayFeedback} feedback={this.props.feedback} - manuallySaveThumbnails={process.env.MANUALLY_SAVE_THUMBNAILS} + manuallySaveThumbnails={process.env.MANUALLY_SAVE_THUMBNAILS === 'true'} /> )} @@ -1058,6 +1127,7 @@ class Preview extends React.Component { } Preview.propTypes = { + intl: intlShape, assetHost: PropTypes.string.isRequired, // If there's no author, this will be false` authorId: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]), @@ -1293,8 +1363,18 @@ const mapDispatchToProps = dispatch => ({ dispatch(projectCommentActions.resetComments()); dispatch(projectCommentActions.getTopLevelComments(id, 0, ownerUsername, isAdmin, token)); }, - handleUpdateProjectThumbnail: (id, blob) => { - dispatch(previewActions.updateProjectThumbnail(id, blob)); + handleUpdateProjectThumbnail: (id, blob, isFirstManualThumbnailUpdate, hideThumbnailUpdateInfoTooltip, showThumbnailUpdateInfoModal) => { + // If this is the first manual thumbnail update, show an + // information modal to introduce the new feature. + // Otherwise, just update the thumbnail. + // TODO: Remove this after a few months. + if (isFirstManualThumbnailUpdate) { + hideThumbnailUpdateInfoTooltip(); + showThumbnailUpdateInfoModal(); + localStorage.setItem('isFirstManualThumbnailUpdate', 'false'); + } else { + dispatch(previewActions.updateProjectThumbnail(id, blob)); + } }, getOriginalInfo: id => { dispatch(previewActions.getOriginalInfo(id)); @@ -1384,10 +1464,12 @@ const mapDispatchToProps = dispatch => ({ } }); -module.exports.View = connect( - mapStateToProps, - mapDispatchToProps -)(Preview); +module.exports.View = injectIntl( + connect( + mapStateToProps, + mapDispatchToProps + )(Preview) +); // replace old Scratch 2.0-style hashtag URLs with updated format if (window.location.hash) { diff --git a/src/views/preview/project-view.scss b/src/views/preview/project-view.scss new file mode 100644 index 00000000000..ec60e5c7e66 --- /dev/null +++ b/src/views/preview/project-view.scss @@ -0,0 +1,27 @@ +@import "../../colors"; +@import "../../frameless"; + +.driver-active *{ + pointer-events: auto !important; +} + +.driver-overlay { + z-index: -1 !important; +} + +.driver-popover.tooltip-set-thumbnail { + padding: 18px; + background-color: $ui-blue; + color: white; + text-align: center; +} + +.driver-popover.tooltip-set-thumbnail .driver-popover-title { + font-weight: 700; + line-height: 1.25rem; + font-size: 1rem; +} + +.driver-popover.tooltip-set-thumbnail .driver-popover-arrow-side-bottom { + border-bottom-color: $ui-blue; +} \ No newline at end of file diff --git a/src/views/preview/update-thumbnail-info-modal.jsx b/src/views/preview/update-thumbnail-info-modal.jsx new file mode 100644 index 00000000000..960405f5325 --- /dev/null +++ b/src/views/preview/update-thumbnail-info-modal.jsx @@ -0,0 +1,43 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import Modal from '../../components/modal/base/modal.jsx'; +import ModalTitle from '../../components/modal/base/modal-title.jsx'; +import ModalInnerContent from '../../components/modal/base/modal-inner-content.jsx'; +import { FormattedMessage } from 'react-intl'; +import './update-thumbnail-info-modal.scss'; + +const UpdateThumbnailInfoModal = ({ isOpen, hideModal }) => { + return ( + + } + /> + +
    + +
    +
    + +
    +
    +
    + ); +}; + +UpdateThumbnailInfoModal.propTypes = { + isOpen: PropTypes.bool.isRequired, + hideModal: PropTypes.func.isRequired +}; + +export { UpdateThumbnailInfoModal }; \ No newline at end of file diff --git a/src/views/preview/update-thumbnail-info-modal.scss b/src/views/preview/update-thumbnail-info-modal.scss new file mode 100644 index 00000000000..3eddd675631 --- /dev/null +++ b/src/views/preview/update-thumbnail-info-modal.scss @@ -0,0 +1,64 @@ +@import "../../colors"; +@import "../../frameless"; + +.update-thumbnail-info-modal { + margin-top: 30vh; + width: 26rem; + overflow: hidden; + + .update-thumbnail-info-modal-title { + display: flex; + box-shadow: inset 0 -1px 0 0 $ui-blue; + background: $ui-blue; + border-top-left-radius: 12px; + border-top-right-radius: 12px; + padding-top: .75rem; + width: 100%; + height: 3rem; + padding-left: 12px; + } + + .update-thumbnail-info-modal-title-text { + text-align: center; + color: white; + font-size: 1rem; + font-weight: 700; + line-height: 1.25rem; + } + + .update-thumbnail-info-modal-inner { + padding: 1.5rem; + padding-bottom: 1rem; + gap: 1.5rem; + background: white; + font-size: 1rem; + font-weight: 400; + line-height: 1.75rem; + } + + .update-thumbnail-info-modal-button-row { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + } + + .update-thumbnail-info-modal-ok-button { + width: 100%; + max-width: 368px; + background: $ui-blue; + color: white; + border: none; + border-radius: 8px; + padding: 0.75rem; + font-size: 1rem; + font-weight: 700; + line-height: 1.25rem; + text-align: center; + cursor: pointer; + } +} + +.update-thumbnail-info-modal-overlay { + background-color: $active-gray; +} From 367f414ef616840e200876025a9a0df072f5f302 Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov <39345482+KManolov3@users.noreply.github.com> Date: Tue, 15 Jul 2025 12:18:27 +0300 Subject: [PATCH 026/129] Update webpack.config.js Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- webpack.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack.config.js b/webpack.config.js index f9893b61f85..35320273697 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -337,7 +337,7 @@ module.exports = { process.env.IDEAS_GENERATOR_SOURCE || 'https://scratch.mit.edu/projects/1108790117' }"`, 'process.env.MANUALLY_SAVE_THUMBNAILS': `"${ - process.env.MANUALLY_SAVE_THUMBNAILS || true + process.env.MANUALLY_SAVE_THUMBNAILS || 'true' }"` }) ]) From 5a0299faca83616b5adc87159a51403404425e37 Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Tue, 15 Jul 2025 12:23:24 +0300 Subject: [PATCH 027/129] fix: lint errors --- src/views/preview/project-view.jsx | 33 ++++++----- .../preview/update-thumbnail-info-modal.jsx | 58 +++++++++---------- 2 files changed, 45 insertions(+), 46 deletions(-) diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index d60675f8b61..57e7f03ac35 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -57,9 +57,7 @@ const {DebuggingFeedback} = require('../../components/modal/feedback/debugging-f const {TutorialsFeedback} = require('../../components/modal/feedback/tutorials-feedback.jsx'); require('./project-view.scss'); -function isFirstManualThumbnailUpdate() { - return localStorage.getItem('isFirstManualThumbnailUpdate') !== 'false'; -} +const isFirstManualThumbnailUpdate = () => localStorage.getItem('isFirstManualThumbnailUpdate') !== 'false'; const IntlGUIWithProjectHandler = ({...props}) => { const [showJourney, setShowJourney] = useState(false); @@ -246,7 +244,7 @@ class Preview extends React.Component { this.addEventListeners(); if (this.props.playerMode && isFirstManualThumbnailUpdate()) { this.showThumbnailUpdateInfoTooltip(); - } + } } componentDidUpdate (prevProps, prevState) { if (this.state.projectId > 0 && @@ -853,7 +851,6 @@ class Preview extends React.Component { return this.props.handleUpdateProjectThumbnail( id, blob, - isFirstManualThumbnailUpdate(), this.hideThumbnailUpdateInfoTooltip, this.showThumbnailUpdateInfoModal ); @@ -881,7 +878,7 @@ class Preview extends React.Component { align: 'center', popoverClass: 'tooltip-set-thumbnail', showButtons: [] - }, + } }] }); @@ -951,7 +948,10 @@ class Preview extends React.Component { 'admin-panel-open': this.state.adminPanelOpen })} > - + ({ dispatch(projectCommentActions.resetComments()); dispatch(projectCommentActions.getTopLevelComments(id, 0, ownerUsername, isAdmin, token)); }, - handleUpdateProjectThumbnail: (id, blob, isFirstManualThumbnailUpdate, hideThumbnailUpdateInfoTooltip, showThumbnailUpdateInfoModal) => { + handleUpdateProjectThumbnail: + (id, blob, hideThumbnailUpdateInfoTooltip, showThumbnailUpdateInfoModal) => { // If this is the first manual thumbnail update, show an // information modal to introduce the new feature. // Otherwise, just update the thumbnail. // TODO: Remove this after a few months. - if (isFirstManualThumbnailUpdate) { - hideThumbnailUpdateInfoTooltip(); - showThumbnailUpdateInfoModal(); - localStorage.setItem('isFirstManualThumbnailUpdate', 'false'); - } else { - dispatch(previewActions.updateProjectThumbnail(id, blob)); - } - }, + if (isFirstManualThumbnailUpdate()) { + hideThumbnailUpdateInfoTooltip(); + showThumbnailUpdateInfoModal(); + localStorage.setItem('isFirstManualThumbnailUpdate', 'false'); + } else { + dispatch(previewActions.updateProjectThumbnail(id, blob)); + } + }, getOriginalInfo: id => { dispatch(previewActions.getOriginalInfo(id)); }, diff --git a/src/views/preview/update-thumbnail-info-modal.jsx b/src/views/preview/update-thumbnail-info-modal.jsx index 960405f5325..68c31f40145 100644 --- a/src/views/preview/update-thumbnail-info-modal.jsx +++ b/src/views/preview/update-thumbnail-info-modal.jsx @@ -3,41 +3,39 @@ import PropTypes from 'prop-types'; import Modal from '../../components/modal/base/modal.jsx'; import ModalTitle from '../../components/modal/base/modal-title.jsx'; import ModalInnerContent from '../../components/modal/base/modal-inner-content.jsx'; -import { FormattedMessage } from 'react-intl'; +import {FormattedMessage} from 'react-intl'; import './update-thumbnail-info-modal.scss'; -const UpdateThumbnailInfoModal = ({ isOpen, hideModal }) => { - return ( - - } - /> - -
    - -
    -
    - -
    -
    -
    - ); -}; +const UpdateThumbnailInfoModal = ({isOpen, hideModal}) => ( + + } + /> + +
    + +
    +
    + +
    +
    +
    +); UpdateThumbnailInfoModal.propTypes = { isOpen: PropTypes.bool.isRequired, hideModal: PropTypes.func.isRequired }; -export { UpdateThumbnailInfoModal }; \ No newline at end of file +export {UpdateThumbnailInfoModal}; From 71e3a9aad707e7dcc0b125d6bad72481377d0560 Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Tue, 15 Jul 2025 14:17:16 +0300 Subject: [PATCH 028/129] fix: remove todo --- src/views/preview/project-view.jsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index 57e7f03ac35..fda328b2811 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -1096,8 +1096,6 @@ class Preview extends React.Component { onToggleLoginOpen={this.props.handleToggleLoginOpen} onUpdateProjectData={this.handleUpdateProjectData} onUpdateProjectId={this.handleUpdateProjectId} - // TODO: Do we need to also modify GUI code to prevent - // thumbnail updates? onUpdateProjectTitle={this.handleUpdateProjectTitle} user={this.props.user} platform={'WEB'} From 95226f5a5cdf70b35407c8d61d67392b312ff6e4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Jul 2025 12:02:53 +0000 Subject: [PATCH 029/129] fix(deps): update dependency scratch-l10n to v5.0.308 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index c383b1077d5..392aea3cda4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.307", + "scratch-l10n": "5.0.308", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -22865,9 +22865,9 @@ } }, "node_modules/scratch-l10n": { - "version": "5.0.307", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.307.tgz", - "integrity": "sha512-sI9MA1gewTEEeoMYWXUARnHb/Bx6cmrQd62q3AhmcesQ9EwI61GBX6ZVI+rXhotBIHkeKf37oK7cX25Aevw4RA==", + "version": "5.0.308", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.308.tgz", + "integrity": "sha512-Pbk9HgMgU81HxehGDDBlIWeq1rutarhWNH4AcMPT9pTW4XBZGBSe+uClS3KBRguggI01XZtrglmltjK8FT6wWQ==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 94f3b5aeed1..412d1249e67 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.307", + "scratch-l10n": "5.0.308", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 4ba6b778d6e76d9c1838b25dc6d1ca32541997e3 Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Tue, 15 Jul 2025 16:34:33 +0300 Subject: [PATCH 030/129] feat: support thumbnail save on project creation --- src/views/preview/project-view.jsx | 58 +++++++++++++++++++----------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index fda328b2811..a6933d148e6 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -235,7 +235,8 @@ class Preview extends React.Component { projectId: parts[1] === 'editor' ? '0' : parts[1], reportOpen: false, singleCommentId: singleCommentId, - greenFlagRecorded: false + greenFlagRecorded: false, + tooltipDriver: null }; /* In the beginning, if user is on mobile and landscape, go to fullscreen */ this.setScreenFromOrientation(); @@ -307,6 +308,13 @@ class Preview extends React.Component { this.pushHistory(history.state === null); } + // If we switch to player mode or fullscreen, hide the thumbnail tooltip + if (((!this.props.playerMode && prevProps.playerMode) || + (this.props.fullScreen && !prevProps.fullScreen)) && + this.state.tooltipDriver) { + this.hideThumbnailUpdateInfoTooltip(); + } + // Switching out of editor mode, refresh data that comes from project json if (this.props.playerMode && !prevProps.playerMode) { storage.setProjectToken(this.props.projectInfo.project_token); @@ -851,6 +859,7 @@ class Preview extends React.Component { return this.props.handleUpdateProjectThumbnail( id, blob, + true, // isManualUpdate this.hideThumbnailUpdateInfoTooltip, this.showThumbnailUpdateInfoModal ); @@ -866,26 +875,27 @@ class Preview extends React.Component { }); } showThumbnailUpdateInfoTooltip () { - this.tooltipDriver = driver({ - allowClose: false, - overlayColor: 'transparent', - popoverOffset: 4, - steps: [{ - element: 'span[class*="stage-header_setThumbnailButton"]', - popover: { - title: this.props.intl.formatMessage({id: 'project.updateThumbnailTooltip'}), - side: 'bottom', - align: 'center', - popoverClass: 'tooltip-set-thumbnail', - showButtons: [] - } - }] - }); + this.setState({ + tooltipDriver: driver({ + allowClose: false, + overlayColor: 'transparent', + popoverOffset: 4, + steps: [{ + element: 'span[class*="stage-header_setThumbnailButton"]', + popover: { + title: this.props.intl.formatMessage({id: 'project.updateThumbnailTooltip'}), + side: 'bottom', + align: 'center', + popoverClass: 'tooltip-set-thumbnail', + showButtons: [] + } + }] + })}); const showThumbnailUpdateInfoTooltipWhenGuiReady = () => { const el = document.querySelector('span[class*="stage-header_setThumbnailButton"]'); if (el) { - this.tooltipDriver.drive(); + this.state.tooltipDriver.drive(); } else { setTimeout(showThumbnailUpdateInfoTooltipWhenGuiReady, 1000); } @@ -893,8 +903,11 @@ class Preview extends React.Component { showThumbnailUpdateInfoTooltipWhenGuiReady(); } hideThumbnailUpdateInfoTooltip () { - if (this.tooltipDriver) { - this.tooltipDriver.destroy(); + if (this.state.tooltipDriver) { + this.state.tooltipDriver.destroy(); + this.setState({ + tooltipDriver: null + }); } } initCounts (favorites, loves) { @@ -1103,6 +1116,9 @@ class Preview extends React.Component { onActivateDeck={this.props.onActivateDeck} displayFeedback={this.props.displayFeedback} feedback={this.props.feedback} + // In this case, pass the base handleUpdateProjectThumbnail + // function, to be used on project creation + onUpdateProjectThumbnail={this.props.handleUpdateProjectThumbnail} manuallySaveThumbnails={process.env.MANUALLY_SAVE_THUMBNAILS === 'true'} /> @@ -1362,12 +1378,12 @@ const mapDispatchToProps = dispatch => ({ dispatch(projectCommentActions.getTopLevelComments(id, 0, ownerUsername, isAdmin, token)); }, handleUpdateProjectThumbnail: - (id, blob, hideThumbnailUpdateInfoTooltip, showThumbnailUpdateInfoModal) => { + (id, blob, isManualUpdate, hideThumbnailUpdateInfoTooltip, showThumbnailUpdateInfoModal) => { // If this is the first manual thumbnail update, show an // information modal to introduce the new feature. // Otherwise, just update the thumbnail. // TODO: Remove this after a few months. - if (isFirstManualThumbnailUpdate()) { + if (isManualUpdate && isFirstManualThumbnailUpdate()) { hideThumbnailUpdateInfoTooltip(); showThumbnailUpdateInfoModal(); localStorage.setItem('isFirstManualThumbnailUpdate', 'false'); From 8ca09ca79fed5eec4c7f0facf287c8d17b8ae746 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Jul 2025 16:47:53 +0000 Subject: [PATCH 031/129] fix(deps): update dependency scratch-storage to ^4.0.187 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 392aea3cda4..a8929d417ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.186" + "scratch-storage": "^4.0.187" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -22985,9 +22985,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.187", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.187.tgz", - "integrity": "sha512-/taGNUOedcUjHZ785KN5h6RpGeqLw21hu4cTXkkDnB0sh4c+rrlrAf43uM70kYPWMeiSabOxXqhRhy3bfSvOcA==", + "version": "4.0.188", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.188.tgz", + "integrity": "sha512-je/B85qEAKsVeQQEIXRjs0dmSFwW8iAJ01HVfKQc2WvDsrXFcVHtf+kepCjLTujWXLbW8c9UqwvzxRXXrBvWsw==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index 412d1249e67..4f39dc0852c 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.186" + "scratch-storage": "^4.0.187" }, "devDependencies": { "@babel/cli": "7.28.0", From f73f818e36c277c5160741e9eba7cddf37009acf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Jul 2025 12:13:26 +0000 Subject: [PATCH 032/129] fix(deps): update dependency scratch-l10n to v5.0.309 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index a8929d417ef..284501f64de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.308", + "scratch-l10n": "5.0.309", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -22865,9 +22865,9 @@ } }, "node_modules/scratch-l10n": { - "version": "5.0.308", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.308.tgz", - "integrity": "sha512-Pbk9HgMgU81HxehGDDBlIWeq1rutarhWNH4AcMPT9pTW4XBZGBSe+uClS3KBRguggI01XZtrglmltjK8FT6wWQ==", + "version": "5.0.309", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.309.tgz", + "integrity": "sha512-Hx1llD/6fVhx46K1PD/uZxAXfhHxsrS9fk7xIMw+miAurpfqtqWgVJuhPN+sHuzF4bcnK49QtYIUdh6igDXlAA==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 4f39dc0852c..4a3d11bc355 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.308", + "scratch-l10n": "5.0.309", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 4fd2b84c6d479d48f9fd5b1d79e55b89998c021d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Jul 2025 17:13:08 +0000 Subject: [PATCH 033/129] chore(deps): update dependency scratch-l10n to v6 --- package-lock.json | 543 +++++++++++++++++++++++++++++++++++++++++++++- package.json | 2 +- 2 files changed, 536 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 284501f64de..59d05be6f00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.309", + "scratch-l10n": "6.0.0", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -2234,6 +2234,448 @@ "node": ">=10.0.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz", + "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.6.tgz", + "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz", + "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.6.tgz", + "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz", + "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz", + "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz", + "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz", + "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz", + "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz", + "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz", + "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz", + "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz", + "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz", + "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz", + "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz", + "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz", + "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz", + "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz", + "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz", + "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz", + "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz", + "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz", + "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz", + "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz", + "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz", + "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", @@ -10309,6 +10751,48 @@ "es6-symbol": "^3.1.1" } }, + "node_modules/esbuild": { + "version": "0.25.6", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.6.tgz", + "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.6", + "@esbuild/android-arm": "0.25.6", + "@esbuild/android-arm64": "0.25.6", + "@esbuild/android-x64": "0.25.6", + "@esbuild/darwin-arm64": "0.25.6", + "@esbuild/darwin-x64": "0.25.6", + "@esbuild/freebsd-arm64": "0.25.6", + "@esbuild/freebsd-x64": "0.25.6", + "@esbuild/linux-arm": "0.25.6", + "@esbuild/linux-arm64": "0.25.6", + "@esbuild/linux-ia32": "0.25.6", + "@esbuild/linux-loong64": "0.25.6", + "@esbuild/linux-mips64el": "0.25.6", + "@esbuild/linux-ppc64": "0.25.6", + "@esbuild/linux-riscv64": "0.25.6", + "@esbuild/linux-s390x": "0.25.6", + "@esbuild/linux-x64": "0.25.6", + "@esbuild/netbsd-arm64": "0.25.6", + "@esbuild/netbsd-x64": "0.25.6", + "@esbuild/openbsd-arm64": "0.25.6", + "@esbuild/openbsd-x64": "0.25.6", + "@esbuild/openharmony-arm64": "0.25.6", + "@esbuild/sunos-x64": "0.25.6", + "@esbuild/win32-arm64": "0.25.6", + "@esbuild/win32-ia32": "0.25.6", + "@esbuild/win32-x64": "0.25.6" + } + }, "node_modules/escalade": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", @@ -12237,6 +12721,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-tsconfig": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/get-user-media-promise": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/get-user-media-promise/-/get-user-media-promise-1.1.4.tgz", @@ -22186,6 +22683,16 @@ "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", "license": "MIT" }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve-protobuf-schema": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", @@ -22865,19 +23372,19 @@ } }, "node_modules/scratch-l10n": { - "version": "5.0.309", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-5.0.309.tgz", - "integrity": "sha512-Hx1llD/6fVhx46K1PD/uZxAXfhHxsrS9fk7xIMw+miAurpfqtqWgVJuhPN+sHuzF4bcnK49QtYIUdh6igDXlAA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.0.tgz", + "integrity": "sha512-y1rbHB0lsdVD66WswJCLik6p3UGQsu/pexhlf7OiXieUiloujfZ23LDgWC4GaYrwAsSVgopMJybelZfaZpMMrg==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { "@transifex/api": "7.1.4", - "download": "8.0.0", - "transifex": "1.6.6" + "transifex": "1.6.6", + "tsx": "4.19.4" }, "bin": { - "build-i18n-src": "scripts/build-i18n-src.js", - "tx-push-src": "scripts/tx-push-src.js" + "build-i18n-src": "scripts/build-i18n-src.mts", + "tx-push-src": "scripts/tx-push-src.mts" } }, "node_modules/scratch-paint": { @@ -27351,6 +27858,26 @@ "dev": true, "license": "0BSD" }, + "node_modules/tsx": { + "version": "4.19.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", + "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", diff --git a/package.json b/package.json index 4a3d11bc355..d852832bd5c 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "5.0.309", + "scratch-l10n": "6.0.0", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 1e7b7668114e129c736778b92caef3711b824882 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Jul 2025 17:28:16 +0000 Subject: [PATCH 034/129] fix(deps): update dependency scratch-storage to ^4.0.188 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 59d05be6f00..7fce52495ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.187" + "scratch-storage": "^4.0.188" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -23492,9 +23492,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.188", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.188.tgz", - "integrity": "sha512-je/B85qEAKsVeQQEIXRjs0dmSFwW8iAJ01HVfKQc2WvDsrXFcVHtf+kepCjLTujWXLbW8c9UqwvzxRXXrBvWsw==", + "version": "4.0.189", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.189.tgz", + "integrity": "sha512-IJJrN2u391M2GV8F8BBKQY9M4utxUH/DcCB3onJ6fImoxkMEXoaLIig3V50aTUwbrhWytFwZeffFoMJeDTPZsw==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index d852832bd5c..85c0ebc497f 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.187" + "scratch-storage": "^4.0.188" }, "devDependencies": { "@babel/cli": "7.28.0", From 2c287ba9319a04ca6da6b1e6c20e7baa8098bb53 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 17 Jul 2025 06:08:45 +0000 Subject: [PATCH 035/129] fix(deps): update dependency scratch-l10n to v6.0.2 --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7fce52495ab..9ccbe4ea2bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.0", + "scratch-l10n": "6.0.2", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23372,15 +23372,15 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.0.tgz", - "integrity": "sha512-y1rbHB0lsdVD66WswJCLik6p3UGQsu/pexhlf7OiXieUiloujfZ23LDgWC4GaYrwAsSVgopMJybelZfaZpMMrg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.2.tgz", + "integrity": "sha512-nhk00yk9slhiqwli1j1Tc59ufkpCJNxpmDjXW2RiFogPo9DxVbCRJlw6zlFZawgpM35bVwle1geAlfo1aSHjAA==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { "@transifex/api": "7.1.4", "transifex": "1.6.6", - "tsx": "4.19.4" + "tsx": "4.20.3" }, "bin": { "build-i18n-src": "scripts/build-i18n-src.mts", @@ -27859,9 +27859,9 @@ "license": "0BSD" }, "node_modules/tsx": { - "version": "4.19.4", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.4.tgz", - "integrity": "sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==", + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.3.tgz", + "integrity": "sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 85c0ebc497f..7b43dfa6494 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.0", + "scratch-l10n": "6.0.2", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From dab7666bbd3d9b21ef76fa6530b6704102c31aad Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 17 Jul 2025 12:27:33 +0000 Subject: [PATCH 036/129] fix(deps): update dependency scratch-storage to ^4.0.189 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9ccbe4ea2bd..10a7e3ea51d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.188" + "scratch-storage": "^4.0.189" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -23492,9 +23492,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.189", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.189.tgz", - "integrity": "sha512-IJJrN2u391M2GV8F8BBKQY9M4utxUH/DcCB3onJ6fImoxkMEXoaLIig3V50aTUwbrhWytFwZeffFoMJeDTPZsw==", + "version": "4.0.190", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.190.tgz", + "integrity": "sha512-VHNMoH70htlHU2mQrcWv9x0HhfCtkh9V5oOKFnN8ZnLbo1Q5DaPEH3ekCsyl8XMYxWOeLAQAXfVpDpq1fOPQcw==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index 7b43dfa6494..28eded41ea2 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.188" + "scratch-storage": "^4.0.189" }, "devDependencies": { "@babel/cli": "7.28.0", From 71150b04f715f87d1608aaaefa7435d213bb3997 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 17 Jul 2025 20:43:53 +0000 Subject: [PATCH 037/129] fix(deps): update dependency scratch-l10n to v6.0.3 --- package-lock.json | 51 +++++++++++++++++++++++++++++++++++++++++++---- package.json | 2 +- 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 10a7e3ea51d..5724a7219eb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.2", + "scratch-l10n": "6.0.3", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23372,13 +23372,18 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.2.tgz", - "integrity": "sha512-nhk00yk9slhiqwli1j1Tc59ufkpCJNxpmDjXW2RiFogPo9DxVbCRJlw6zlFZawgpM35bVwle1geAlfo1aSHjAA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.3.tgz", + "integrity": "sha512-dW7NN/yDYafQJu94Nt+qmtvQodCp2+px59sVgVfcR4GgwDBabtEG22RpVBzv4ueDG74RKoracKdj6sjwLO4eJw==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { "@transifex/api": "7.1.4", + "async": "3.2.6", + "format-message-parse": "6.2.4", + "glob": "7.2.3", + "lodash.defaultsdeep": "4.6.1", + "mkdirp": "3.0.1", "transifex": "1.6.6", "tsx": "4.20.3" }, @@ -23387,6 +23392,44 @@ "tx-push-src": "scripts/tx-push-src.mts" } }, + "node_modules/scratch-l10n/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/scratch-l10n/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/scratch-paint": { "version": "3.0.314", "resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-3.0.314.tgz", diff --git a/package.json b/package.json index 28eded41ea2..810fab955af 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.2", + "scratch-l10n": "6.0.3", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 73f6c9217dc47dbc76ef08f01cf5f38a5ac02d42 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 18 Jul 2025 06:25:36 +0000 Subject: [PATCH 038/129] fix(deps): update dependency scratch-l10n to v6.0.4 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5724a7219eb..05404438e72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.3", + "scratch-l10n": "6.0.4", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23372,9 +23372,9 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.3.tgz", - "integrity": "sha512-dW7NN/yDYafQJu94Nt+qmtvQodCp2+px59sVgVfcR4GgwDBabtEG22RpVBzv4ueDG74RKoracKdj6sjwLO4eJw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.4.tgz", + "integrity": "sha512-DhgCHZWmjZiWKvboFBYvqq7qb1gM3up68XOD97UP+oAxk3ZB7oFxMePMZAlcyZxXxP/SQGqSqP6Y/Zvc/0Np3A==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 810fab955af..cc24b4f4b12 100644 --- a/package.json +++ b/package.json @@ -147,7 +147,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.3", + "scratch-l10n": "6.0.4", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From ef928691c2dceea83a8af49b8db12cbb2b64bd71 Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov <39345482+KManolov3@users.noreply.github.com> Date: Fri, 18 Jul 2025 15:32:33 +0300 Subject: [PATCH 039/129] Update comment in src/views/preview/project-view.jsx Co-authored-by: Christopher Willis-Ford <7019101+cwillisf@users.noreply.github.com> --- src/views/preview/project-view.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index a6933d148e6..bdcdd1ac96d 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -308,7 +308,7 @@ class Preview extends React.Component { this.pushHistory(history.state === null); } - // If we switch to player mode or fullscreen, hide the thumbnail tooltip + // If we leave player mode or switch to fullscreen, hide the thumbnail tooltip if (((!this.props.playerMode && prevProps.playerMode) || (this.props.fullScreen && !prevProps.fullScreen)) && this.state.tooltipDriver) { From 26ed05581654679918d81d3180d3dd93a5b7916d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 18 Jul 2025 13:41:45 +0000 Subject: [PATCH 040/129] fix(deps): update dependency scratch-storage to ^4.0.190 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 05404438e72..b795518c075 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.189" + "scratch-storage": "^4.0.190" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -23535,9 +23535,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.190", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.190.tgz", - "integrity": "sha512-VHNMoH70htlHU2mQrcWv9x0HhfCtkh9V5oOKFnN8ZnLbo1Q5DaPEH3ekCsyl8XMYxWOeLAQAXfVpDpq1fOPQcw==", + "version": "4.0.192", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.192.tgz", + "integrity": "sha512-qnFjL5ZaMR20I6FcGj7fOYGPe/qUTedawHwtWBfNQDtV/Lb35dEr8YZnpGZXmDOxjjhwz5ARgDM5e+jc1crlhg==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index cc24b4f4b12..9e6df47a22f 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.189" + "scratch-storage": "^4.0.190" }, "devDependencies": { "@babel/cli": "7.28.0", From 7a8121e88c47bbefbd260e6a8a465d04424ec4d8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 18 Jul 2025 13:52:05 +0000 Subject: [PATCH 041/129] chore(deps): update dependency webpack to v5.100.2 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index b795518c075..7e2ae8cf788 100644 --- a/package-lock.json +++ b/package-lock.json @@ -120,7 +120,7 @@ "tap": "14.11.0", "url-loader": "3.0.0", "use-onclickoutside": "0.4.1", - "webpack": "5.100.1", + "webpack": "5.100.2", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-middleware": "5.3.4", @@ -28870,9 +28870,9 @@ } }, "node_modules/webpack": { - "version": "5.100.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.1.tgz", - "integrity": "sha512-YJB/ESPUe2Locd0NKXmw72Dx8fZQk1gTzI6rc9TAT4+Sypbnhl8jd8RywB1bDsDF9Dy1RUR7gn3q/ZJTd0OZZg==", + "version": "5.100.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.100.2.tgz", + "integrity": "sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 9e6df47a22f..2d24644084d 100644 --- a/package.json +++ b/package.json @@ -155,7 +155,7 @@ "tap": "14.11.0", "url-loader": "3.0.0", "use-onclickoutside": "0.4.1", - "webpack": "5.100.1", + "webpack": "5.100.2", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-middleware": "5.3.4", From 809a22bcfd29cfc30f51a3e83ad0343d43a13cbe Mon Sep 17 00:00:00 2001 From: Varun Biniwale Date: Fri, 18 Jul 2025 17:01:12 +0200 Subject: [PATCH 042/129] explore: WIP admin mode --- src/components/grid/grid.jsx | 12 ++++++++-- .../thumbnail/thumbnail-remove-button.jsx | 17 ++++++++++++++ .../thumbnail/thumbnail-remove-button.scss | 22 +++++++++++++++++++ src/components/thumbnail/thumbnail.jsx | 14 ++++++++++-- src/components/thumbnail/thumbnail.scss | 1 + src/views/explore/explore.jsx | 19 ++++++++++++++++ 6 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 src/components/thumbnail/thumbnail-remove-button.jsx create mode 100644 src/components/thumbnail/thumbnail-remove-button.scss diff --git a/src/components/grid/grid.jsx b/src/components/grid/grid.jsx index fd738fe5543..5f1a8a00db5 100644 --- a/src/components/grid/grid.jsx +++ b/src/components/grid/grid.jsx @@ -28,11 +28,13 @@ const Grid = props => ( showLoves={props.showLoves} showRemixes={props.showRemixes} showViews={props.showViews} + showRemoveButton={props.showRemoveButton} src={item.image} title={item.title} type={'project'} views={item.stats.views} alt={item.alt} + onRemove={() => props.onRemove(item)} /> ); } @@ -45,6 +47,8 @@ const Grid = props => ( alt={item.alt} title={item.title} type={'gallery'} + showRemoveButton={props.showRemoveButton} + onRemove={() => props.onRemove(item)} /> ); })} @@ -60,7 +64,9 @@ Grid.propTypes = { showFavorites: PropTypes.bool, showLoves: PropTypes.bool, showRemixes: PropTypes.bool, - showViews: PropTypes.bool + showViews: PropTypes.bool, + showRemoveButton: PropTypes.bool, + onRemove: PropTypes.func }; Grid.defaultProps = { @@ -70,7 +76,9 @@ Grid.defaultProps = { showFavorites: false, showRemixes: false, showViews: false, - showAvatar: false + showAvatar: false, + showRemoveButton: false, + onRemove: null }; module.exports = Grid; diff --git a/src/components/thumbnail/thumbnail-remove-button.jsx b/src/components/thumbnail/thumbnail-remove-button.jsx new file mode 100644 index 00000000000..a01d03a2cd9 --- /dev/null +++ b/src/components/thumbnail/thumbnail-remove-button.jsx @@ -0,0 +1,17 @@ +const React = require('react'); +const PropTypes = require('prop-types'); +require('./thumbnail-remove-button.scss'); + +const ThumbnailRemoveButton = ({ onClick }) => ( + +); + + +module.exports = ThumbnailRemoveButton; diff --git a/src/components/thumbnail/thumbnail-remove-button.scss b/src/components/thumbnail/thumbnail-remove-button.scss new file mode 100644 index 00000000000..24f93f22b1b --- /dev/null +++ b/src/components/thumbnail/thumbnail-remove-button.scss @@ -0,0 +1,22 @@ +@import "../../colors"; + +.thumbnail-remove-button { + position: absolute; + top: -4px; + right: -4px; + background: $ui-white; + border: 1px solid $ui-border; + color: $type-gray; + font-size: 12px; + width: 24px; + height: 24px; + line-height: 24px; + text-align: center; + border-radius: 50%; + cursor: pointer; + z-index: 2; + + &:hover { + background: $ui-border; + } +} diff --git a/src/components/thumbnail/thumbnail.jsx b/src/components/thumbnail/thumbnail.jsx index 461cd67b1a4..9bfd7e6899a 100644 --- a/src/components/thumbnail/thumbnail.jsx +++ b/src/components/thumbnail/thumbnail.jsx @@ -4,6 +4,8 @@ const React = require('react'); require('./thumbnail.scss'); +const ThumbnailRemoveButton = require('./thumbnail-remove-button.jsx'); + const Thumbnail = props => { const extra = []; const info = []; @@ -110,6 +112,7 @@ const Thumbnail = props => { ); } + return (
    {
    {extra} + {props.showRemoveButton && + + } ); }; @@ -145,10 +151,12 @@ Thumbnail.propTypes = { showLoves: PropTypes.bool, showRemixes: PropTypes.bool, showViews: PropTypes.bool, + showRemoveButton: PropTypes.bool, src: PropTypes.string, title: PropTypes.string, type: PropTypes.string, - views: PropTypes.oneOfType([PropTypes.number, PropTypes.string]) + views: PropTypes.oneOfType([PropTypes.number, PropTypes.string]), + onRemove: PropTypes.func }; Thumbnail.defaultProps = { @@ -161,9 +169,11 @@ Thumbnail.defaultProps = { showLoves: false, showRemixes: false, showViews: false, + showRemoveButton: false, src: '', title: 'Project', - type: 'project' + type: 'project', + onRemove: null }; module.exports = Thumbnail; diff --git a/src/components/thumbnail/thumbnail.scss b/src/components/thumbnail/thumbnail.scss index e1f1bf79549..039caec2d33 100644 --- a/src/components/thumbnail/thumbnail.scss +++ b/src/components/thumbnail/thumbnail.scss @@ -1,6 +1,7 @@ @import "../../colors"; .thumbnail { + position: relative; .thumbnail-image { display: block; diff --git a/src/views/explore/explore.jsx b/src/views/explore/explore.jsx index 7d4e9dd4221..9d825c08b3b 100644 --- a/src/views/explore/explore.jsx +++ b/src/views/explore/explore.jsx @@ -27,12 +27,14 @@ class Explore extends React.Component { 'getExploreState', 'handleGetExploreMore', 'handleChangeSortMode', + 'handleToggleRemoveButton', 'getBubble' ]); this.state = this.getExploreState(); this.state.loaded = []; this.state.offset = 0; + this.state.showRemoveButton = false; } componentDidMount () { this.handleGetExploreMore(); @@ -101,6 +103,11 @@ class Explore extends React.Component { `${window.location.origin}/explore/${this.state.itemType}/${this.state.category}/${value}`; } } + + handleToggleRemoveButton (e) { + this.setState({showRemoveButton: e.target.checked}); + } + getBubble (type) { const classes = classNames({ active: (this.state.category === type) @@ -215,6 +222,16 @@ class Explore extends React.Component { /> +
    + +
    { console.log(item) }} />
    -
    - -
    + {this.props.session?.session?.permissions?.admin && ( +
    + +
    + )}
    ({ + session: state.session +}); + const WrappedExplore = injectIntl(Explore); -render(, document.getElementById('app')); +const ConnectedExplore = connect(mapStateToProps)(injectIntl(Explore)); +render(, document.getElementById('app')); From 4e08e778fdbff9ee0acc1737252e9e51aac65137 Mon Sep 17 00:00:00 2001 From: Varun Biniwale Date: Fri, 18 Jul 2025 17:46:16 +0200 Subject: [PATCH 044/129] explore: admin mode call endpoint --- src/views/explore/explore.jsx | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/views/explore/explore.jsx b/src/views/explore/explore.jsx index 57058f729a2..34010502ff8 100644 --- a/src/views/explore/explore.jsx +++ b/src/views/explore/explore.jsx @@ -30,6 +30,7 @@ class Explore extends React.Component { 'handleGetExploreMore', 'handleChangeSortMode', 'handleToggleRemoveButton', + 'handleRemove', 'getBubble' ]); @@ -110,6 +111,24 @@ class Explore extends React.Component { this.setState({showRemoveButton: e.target.checked}); } + handleRemove (item) { + // if (!window.confirm('Are you sure you want to remove this item from the search index?')) return; + + // TODO: don't slice the itemType + api({ + uri: `/admin/search/${this.state.itemType.slice(0, -1)}/${item.id}`, + method: 'DELETE' + }, (err, res) => { + if (err) { + alert('Error removing project.'); + console.error(err); + } else { + const updated = this.state.loaded.filter(p => p.id !== item.id); + this.setState({loaded: updated}); + } + }); + } + getBubble (type) { const classes = classNames({ active: (this.state.category === type) @@ -249,7 +268,7 @@ class Explore extends React.Component { showLoves={false} showViews={false} showRemoveButton={this.state.showRemoveButton} - onRemove={(item) => { console.log(item) }} + onRemove={this.handleRemove} /> ); +ThumbnailRemoveButton.propTypes = { + onClick: PropTypes.func +}; module.exports = ThumbnailRemoveButton; diff --git a/src/views/explore/explore.jsx b/src/views/explore/explore.jsx index 34010502ff8..d485bac82cf 100644 --- a/src/views/explore/explore.jsx +++ b/src/views/explore/explore.jsx @@ -112,15 +112,13 @@ class Explore extends React.Component { } handleRemove (item) { - // if (!window.confirm('Are you sure you want to remove this item from the search index?')) return; - - // TODO: don't slice the itemType + // TODO: don't slice the itemType (this was a hacky way to turn 'projects' --> 'project') api({ uri: `/admin/search/${this.state.itemType.slice(0, -1)}/${item.id}`, method: 'DELETE' - }, (err, res) => { + }, err => { if (err) { - alert('Error removing project.'); + alert('Error removing project.'); // eslint-disable-line no-alert console.error(err); } else { const updated = this.state.loaded.filter(p => p.id !== item.id); @@ -292,7 +290,5 @@ const mapStateToProps = state => ({ session: state.session }); -const WrappedExplore = injectIntl(Explore); - const ConnectedExplore = connect(mapStateToProps)(injectIntl(Explore)); render(, document.getElementById('app')); diff --git a/src/views/search/search.jsx b/src/views/search/search.jsx index be10cd2a3b4..73ba2f392ac 100644 --- a/src/views/search/search.jsx +++ b/src/views/search/search.jsx @@ -91,7 +91,7 @@ class Search extends React.Component { this.props.dispatch(navigationActions.setSearchTerm(term)); } componentDidUpdate (prevProps) { - const sessionLoaded = this.props.session.status === sessionActions.Status.FETCHED; + const sessionLoaded = this.props.session.status === sessionActions.Status.FETCHED; const wasSessionLoaded = prevProps.session.status === sessionActions.Status.FETCHED; const becameAuthenticated = !wasSessionLoaded && sessionLoaded; @@ -141,12 +141,12 @@ class Search extends React.Component { queryString += `&q=${termText}`; } - const isAdmin = this.props.session?.session?.permissions?.admin - const token = this.props.session?.session?.user?.token + const isAdmin = this.props.session?.session?.permissions?.admin; + const token = this.props.session?.session?.user?.token; api({ uri: `${isAdmin ? '/admin' : ''}/search/${this.state.tab}?${queryString}`, - ...(isAdmin && token ? { authentication: token } : {}) + ...(isAdmin && token ? {authentication: token} : {}) }, (err, body) => { const loadedSoFar = this.state.loaded; Array.prototype.push.apply(loadedSoFar, body); @@ -297,7 +297,7 @@ Search.propTypes = { intl: intlShape, searchTerm: PropTypes.string, session: PropTypes.object, - isTotallyNormal: PropTypes.bool, // eslint-disable-line react/no-unused-prop-types + isTotallyNormal: PropTypes.bool // eslint-disable-line react/no-unused-prop-types }; const mapStateToProps = state => ({ From 6acf36b7812b449be16ade4179d842d546509f28 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Aug 2025 12:41:07 +0000 Subject: [PATCH 086/129] fix(deps): update dependency scratch-l10n to v6.0.19 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index d3259579a37..755304d5d64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.17", + "scratch-l10n": "6.0.19", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23854,9 +23854,9 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.17", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.17.tgz", - "integrity": "sha512-P0+M1PLZkvV429pjt9w5G9hYs58Zz3MKk7mQFUoKd2pb1RZJAPcV4H5D2CnUHeu8Ykk0CK/D5kDmg7sim8W6nQ==", + "version": "6.0.19", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.19.tgz", + "integrity": "sha512-jboFSZ5us8ZStAijtakbiThPPnrLjGoZAzFj7KS4QZdAR90gFUzIXyvqS3NhkW5NUN0Xwt2pGW5sVd7SVSX83g==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 6c5df9af997..8f7f3005794 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.17", + "scratch-l10n": "6.0.19", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From e6da01be9a46cf0b4440d776b2f1ba47bf794415 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 6 Aug 2025 18:48:27 +0000 Subject: [PATCH 087/129] fix(deps): update dependency scratch-storage to ^4.0.203 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 755304d5d64..b450ffda9f9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.202" + "scratch-storage": "^4.0.203" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -24020,9 +24020,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.203", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.203.tgz", - "integrity": "sha512-bdAL0ImEL+A+DlFjO+Wo3uscor8P/XP4h9mHUisaXIhl/mPTrkmkgGRuOiF0cRtM5ONxJ4cbgrSMN1Tjj6TMfw==", + "version": "4.0.204", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.204.tgz", + "integrity": "sha512-IfYSZLSGLb5p2AQ2xYdYK3db70lRA3w3rWq/7NfSrqdqo/9j1mS9zC8Tq3pAhqHg08QSmtiWK9b9dZPQKNUdAg==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index 8f7f3005794..7b4559064c2 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.202" + "scratch-storage": "^4.0.203" }, "devDependencies": { "@babel/cli": "7.28.0", From 63b3dcce0059e502fbb35e1f992b0d08adf29836 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 7 Aug 2025 12:39:27 +0000 Subject: [PATCH 088/129] fix(deps): update dependency scratch-l10n to v6.0.20 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index b450ffda9f9..7450d6719fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.19", + "scratch-l10n": "6.0.20", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23854,9 +23854,9 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.19.tgz", - "integrity": "sha512-jboFSZ5us8ZStAijtakbiThPPnrLjGoZAzFj7KS4QZdAR90gFUzIXyvqS3NhkW5NUN0Xwt2pGW5sVd7SVSX83g==", + "version": "6.0.20", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.20.tgz", + "integrity": "sha512-Nc/Va2OQuS+ZxEmYV6SjZqRuoo10DDh3kyhAcKsRnkd68mSl3sV+XcJFGpLnX6YCapjqnuB09j8oweprd2hE/w==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 7b4559064c2..38d5ab31dbb 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.19", + "scratch-l10n": "6.0.20", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 3bfa421e3124bdb713e8946f533820366234755c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 7 Aug 2025 16:52:27 +0000 Subject: [PATCH 089/129] fix(deps): update dependency scratch-storage to ^4.0.204 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7450d6719fd..9b5a7bba748 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.203" + "scratch-storage": "^4.0.204" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -24020,9 +24020,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.204", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.204.tgz", - "integrity": "sha512-IfYSZLSGLb5p2AQ2xYdYK3db70lRA3w3rWq/7NfSrqdqo/9j1mS9zC8Tq3pAhqHg08QSmtiWK9b9dZPQKNUdAg==", + "version": "4.0.206", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.206.tgz", + "integrity": "sha512-VThdQY73qZDwnvBMNVs2jy0iSLi6RcCgiNHLuOQyz14fsi5YSddpqAKVEKBohUZQe+16I+h9GTrFuIcmIemCtA==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index 38d5ab31dbb..86504548a5d 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.203" + "scratch-storage": "^4.0.204" }, "devDependencies": { "@babel/cli": "7.28.0", From dc004fd2cd479e09c46bf9932214672be366354c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 8 Aug 2025 09:11:21 +0000 Subject: [PATCH 090/129] fix(deps): update dependency scratch-l10n to v6.0.21 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9b5a7bba748..0be97f64f9e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.20", + "scratch-l10n": "6.0.21", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23854,9 +23854,9 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.20", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.20.tgz", - "integrity": "sha512-Nc/Va2OQuS+ZxEmYV6SjZqRuoo10DDh3kyhAcKsRnkd68mSl3sV+XcJFGpLnX6YCapjqnuB09j8oweprd2hE/w==", + "version": "6.0.21", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.21.tgz", + "integrity": "sha512-gvARUWCWQz+3zMIcQtvI/rKFzneTlpfiIVhrL+mO8THLFdSqYr3YTqtgMm1t1M/5WaVF2lWHjHot+tz4r/p1qA==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 86504548a5d..532fdb6be3a 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.89.2", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.20", + "scratch-l10n": "6.0.21", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 4a9b73bed7efdaa73421fdd05b59274e4e58fd56 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 8 Aug 2025 13:38:46 +0000 Subject: [PATCH 091/129] fix(deps): update dependency scratch-storage to ^4.0.206 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0be97f64f9e..f473bd260a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.204" + "scratch-storage": "^4.0.206" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -24020,9 +24020,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.206", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.206.tgz", - "integrity": "sha512-VThdQY73qZDwnvBMNVs2jy0iSLi6RcCgiNHLuOQyz14fsi5YSddpqAKVEKBohUZQe+16I+h9GTrFuIcmIemCtA==", + "version": "4.0.207", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.207.tgz", + "integrity": "sha512-aGU3pQ2EE51fDkIbmRVxze6IVOnMaIhUx4PJClRhlsIepXZEdyed7hRZ40CZ1+EA8H49tLzTjpd7lkWYmopsFA==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index 532fdb6be3a..825fcc0a4cb 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.204" + "scratch-storage": "^4.0.206" }, "devDependencies": { "@babel/cli": "7.28.0", From c424d3073705a8491648d5cb5e5c08266c19a496 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 9 Aug 2025 00:56:26 +0000 Subject: [PATCH 092/129] chore(deps): update dependency sass to v1.90.0 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index f473bd260a0..dac8f772d5f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -110,7 +110,7 @@ "redux-mock-store": "1.5.5", "redux-thunk": "2.4.2", "regenerator-runtime": "0.13.9", - "sass": "1.89.2", + "sass": "1.90.0", "sass-loader": "10.5.2", "scratch-l10n": "6.0.21", "selenium-webdriver": "4.34.0", @@ -23548,9 +23548,9 @@ "license": "MIT" }, "node_modules/sass": { - "version": "1.89.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.89.2.tgz", - "integrity": "sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==", + "version": "1.90.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.90.0.tgz", + "integrity": "sha512-9GUyuksjw70uNpb1MTYWsH9MQHOHY6kwfnkafC24+7aOMZn9+rVMBxRbLvw756mrBFbIsFg6Xw9IkR2Fnn3k+Q==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 825fcc0a4cb..6d98c8daf65 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,7 @@ "redux-mock-store": "1.5.5", "redux-thunk": "2.4.2", "regenerator-runtime": "0.13.9", - "sass": "1.89.2", + "sass": "1.90.0", "sass-loader": "10.5.2", "scratch-l10n": "6.0.21", "selenium-webdriver": "4.34.0", From 3a97163c5c77df7e98d4e342ae0675d0188c2464 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 9 Aug 2025 05:36:07 +0000 Subject: [PATCH 093/129] fix(deps): update dependency scratch-l10n to v6.0.22 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index dac8f772d5f..078ab3058a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.21", + "scratch-l10n": "6.0.22", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23854,9 +23854,9 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.21", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.21.tgz", - "integrity": "sha512-gvARUWCWQz+3zMIcQtvI/rKFzneTlpfiIVhrL+mO8THLFdSqYr3YTqtgMm1t1M/5WaVF2lWHjHot+tz4r/p1qA==", + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.22.tgz", + "integrity": "sha512-L7BT0HmkwQ4BlIBmWibosPS3y7hjc41rjM3c42pGra6GugM1uHXy61cvTF0whJHrMZPdqox8nW1y3rmVlYlhKA==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 6d98c8daf65..8c85eb1b520 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.21", + "scratch-l10n": "6.0.22", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 84b92a67db4afac6cd9ed0194f91418cd45bd606 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 9 Aug 2025 09:07:45 +0000 Subject: [PATCH 094/129] fix(deps): update dependency scratch-storage to ^4.0.207 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 078ab3058a9..bcd0e5ac3c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.206" + "scratch-storage": "^4.0.207" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -24020,9 +24020,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.207", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.207.tgz", - "integrity": "sha512-aGU3pQ2EE51fDkIbmRVxze6IVOnMaIhUx4PJClRhlsIepXZEdyed7hRZ40CZ1+EA8H49tLzTjpd7lkWYmopsFA==", + "version": "4.0.209", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.209.tgz", + "integrity": "sha512-R0/mTnlCKxQTJohrceEvyIwpPywDI7OsRIieWbM7f838HLlT91c9MS11RndQzzckCAvRp5U+S8L5FP3Y1XyQTA==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index 8c85eb1b520..eb8896109b8 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.206" + "scratch-storage": "^4.0.207" }, "devDependencies": { "@babel/cli": "7.28.0", From 50382e17205c67c36900025bbeac0b14478e81a7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 9 Aug 2025 12:46:33 +0000 Subject: [PATCH 095/129] fix(deps): update dependency scratch-l10n to v6.0.23 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index bcd0e5ac3c1..e400fa3b796 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.22", + "scratch-l10n": "6.0.23", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23854,9 +23854,9 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.22", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.22.tgz", - "integrity": "sha512-L7BT0HmkwQ4BlIBmWibosPS3y7hjc41rjM3c42pGra6GugM1uHXy61cvTF0whJHrMZPdqox8nW1y3rmVlYlhKA==", + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.23.tgz", + "integrity": "sha512-LLMefea+EtW6X2zNYqnNfRfSDvQIV5QYEU7oLth/bY6TFBJlDYWI+C3SqoQh8itInyAdEfnSq4A5dghDH62dKg==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index eb8896109b8..12bedaa826a 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.22", + "scratch-l10n": "6.0.23", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 442d5bb0879888ba8ba810c681e13f8f2e762242 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 10 Aug 2025 09:35:10 +0000 Subject: [PATCH 096/129] fix(deps): update dependency scratch-l10n to v6.0.24 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index e400fa3b796..6bbc71d7f15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.23", + "scratch-l10n": "6.0.24", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23854,9 +23854,9 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.23.tgz", - "integrity": "sha512-LLMefea+EtW6X2zNYqnNfRfSDvQIV5QYEU7oLth/bY6TFBJlDYWI+C3SqoQh8itInyAdEfnSq4A5dghDH62dKg==", + "version": "6.0.24", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.24.tgz", + "integrity": "sha512-dzVxD3liRcZCs9Bo/SFNgB947/nolmFMm2YJPGBr3obbBJbWMk0PLxlRuWzqj6mPm9Cg0CH9NlN72w4Feh6/fQ==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 12bedaa826a..339912d23cc 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.23", + "scratch-l10n": "6.0.24", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 174fda4297a98f028299582552258c1aaafc1d7d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 10 Aug 2025 15:04:17 +0000 Subject: [PATCH 097/129] fix(deps): update dependency scratch-storage to ^4.0.209 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6bbc71d7f15..33338c2ff7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.207" + "scratch-storage": "^4.0.209" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -24020,9 +24020,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.209", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.209.tgz", - "integrity": "sha512-R0/mTnlCKxQTJohrceEvyIwpPywDI7OsRIieWbM7f838HLlT91c9MS11RndQzzckCAvRp5U+S8L5FP3Y1XyQTA==", + "version": "4.0.210", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.210.tgz", + "integrity": "sha512-Kr+kG3BqK/Xa1ZlkUDtwRsD5KPblP2Smy9U7TT9CyEKxBxvkeOjfyr2LNdEZi29tqpTL1cXZC/Olc+rH6SU2LA==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index 339912d23cc..8e5b7ec477b 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.207" + "scratch-storage": "^4.0.209" }, "devDependencies": { "@babel/cli": "7.28.0", From 10b0a8ec0e69574e49202c26367d3fd78e3f2f90 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 11 Aug 2025 12:54:21 +0000 Subject: [PATCH 098/129] fix(deps): update dependency scratch-l10n to v6.0.25 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 33338c2ff7e..b19ad05a143 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.24", + "scratch-l10n": "6.0.25", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23854,9 +23854,9 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.24", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.24.tgz", - "integrity": "sha512-dzVxD3liRcZCs9Bo/SFNgB947/nolmFMm2YJPGBr3obbBJbWMk0PLxlRuWzqj6mPm9Cg0CH9NlN72w4Feh6/fQ==", + "version": "6.0.25", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.25.tgz", + "integrity": "sha512-DUfnxeH7p4hk0DIx3YGlG9OSochjVcZaMLxIVkH5KPMBr+zTYozAw6z9avEhSAJrIQr/isTRK6gvIY+/vpbExA==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 8e5b7ec477b..c6c03cbcd05 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.24", + "scratch-l10n": "6.0.25", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 66c9a07365f9005ab8977df3b4e200dcdd98175a Mon Sep 17 00:00:00 2001 From: Ayshe Dzhindzhi Date: Mon, 11 Aug 2025 17:49:37 +0300 Subject: [PATCH 099/129] feat: copy mediapipe files to the build folder to enable local serving --- webpack.config.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/webpack.config.js b/webpack.config.js index 35320273697..4ceff985bad 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -243,6 +243,11 @@ module.exports = { from: 'node_modules/@scratch/scratch-gui/dist/static/blocks-media', to: 'static/blocks-media' }, + { + context: 'node_modules/@scratch/scratch-gui/dist/', + from: 'chunks/mediapipe/face_detection/face_detection_*.{js,wasm,tflite,binarypb}', + noErrorOnMissing: true + }, { context: 'node_modules/@scratch/scratch-gui/dist/', from: 'chunks/fetch-worker.*.{js,js.map}' From e354cea4ab52d83d9fc4845edd1e80ed98c3ec26 Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Tue, 12 Aug 2025 11:39:12 +0300 Subject: [PATCH 100/129] feat: enhance manual thumbnail with modal on share --- src/components/checkbox/simple-checkbox.jsx | 26 +++++ src/components/checkbox/simple-checkbox.scss | 40 +++++++ src/components/modal/share/modal.jsx | 115 +++++++++++++++++++ src/components/modal/share/modal.scss | 97 ++++++++++++++++ src/lib/local-storage.js | 32 ++++++ src/views/preview/l10n.json | 9 +- src/views/preview/project-view.jsx | 115 ++++++++++++++++--- src/views/preview/project-view.scss | 9 +- 8 files changed, 421 insertions(+), 22 deletions(-) create mode 100644 src/components/checkbox/simple-checkbox.jsx create mode 100644 src/components/checkbox/simple-checkbox.scss create mode 100644 src/components/modal/share/modal.jsx create mode 100644 src/components/modal/share/modal.scss create mode 100644 src/lib/local-storage.js diff --git a/src/components/checkbox/simple-checkbox.jsx b/src/components/checkbox/simple-checkbox.jsx new file mode 100644 index 00000000000..5e4b2ce23ce --- /dev/null +++ b/src/components/checkbox/simple-checkbox.jsx @@ -0,0 +1,26 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import './simple-checkbox.scss'; + +export const SimpleCheckbox = ({id, checked, onChange, label}) => ( + +); + +SimpleCheckbox.propTypes = { + id: PropTypes.string.isRequired, + checked: PropTypes.bool.isRequired, + onChange: PropTypes.func.isRequired, + label: PropTypes.node.isRequired +}; diff --git a/src/components/checkbox/simple-checkbox.scss b/src/components/checkbox/simple-checkbox.scss new file mode 100644 index 00000000000..54a2958d5f9 --- /dev/null +++ b/src/components/checkbox/simple-checkbox.scss @@ -0,0 +1,40 @@ +@import "../../colors"; +@import "../../frameless"; + +.checkbox-container { + display: flex; + cursor: pointer; + align-items: center; + color: $header-gray; + font-size: 0.75rem; + font-style: normal; + line-height: 1rem; + + input { + &[type=checkbox] { + cursor: pointer; + appearance: none; + border: 2px solid $active-gray; + border-radius: 4px; + width: 1.25rem; + height: 1.25rem; + + &:checked, + &:focus { + transition: all .25s ease; + } + + &:checked { + background-color: $ui-blue; + text-align: center; + text-indent: .125rem; + line-height: 1.1rem; + + &:after { + color: $type-white; + content: "\2714"; + } + } + } + } +} \ No newline at end of file diff --git a/src/components/modal/share/modal.jsx b/src/components/modal/share/modal.jsx new file mode 100644 index 00000000000..d77347375b6 --- /dev/null +++ b/src/components/modal/share/modal.jsx @@ -0,0 +1,115 @@ +import React, {useCallback, useState} from 'react'; +import PropTypes from 'prop-types'; +import Modal from '../base/modal.jsx'; +import ModalTitle from '../base/modal-title.jsx'; +import ModalInnerContent from '../base/modal-inner-content.jsx'; +import {SimpleCheckbox} from '../../checkbox/simple-checkbox.jsx'; +import {FormattedMessage, useIntl} from 'react-intl'; +import {setLocalStorageValue} from '../../../lib/local-storage.js'; +import './modal.scss'; + +const updateLocalStorage = (username = 'guest', value) => { + if (value === false) { + return; + } + + // `dontShowAgain` is true => we need to update the preference to false + setLocalStorageValue('shareModalPreference', username, false); +}; + +// This modal uses texts from preview/l10n.json +// Parametrise texts if needed to be used outside of the preview context. +const ShareModal = ({isOpen, onClose, onChangeThumbnail, onShare, projectThumbnailUrl, username}) => { + const intl = useIntl(); + // TODO: Set local storage if submitted + const [dontShowAgain, setDontShowAgain] = useState(false); + + const handleCheckboxChange = useCallback(e => { + setDontShowAgain(e.target.checked); + }, []); + + const handleChangeThumbnail = useCallback(() => { + updateLocalStorage(username, dontShowAgain); + onChangeThumbnail(); + }, [username, dontShowAgain, onChangeThumbnail]); + + const handleShare = useCallback(() => { + updateLocalStorage(username, dontShowAgain); + onShare(); + }, [username, dontShowAgain, onShare]); + + return ( + + } + /> + +
    + +
    +
    + Project thumbnail +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    + + + ); +}; + +ShareModal.propTypes = { + isOpen: PropTypes.bool.isRequired, + onClose: PropTypes.func.isRequired, + onChangeThumbnail: PropTypes.func.isRequired, + onShare: PropTypes.func.isRequired, + projectThumbnailUrl: PropTypes.string, + username: PropTypes.string +}; + +export {ShareModal}; diff --git a/src/components/modal/share/modal.scss b/src/components/modal/share/modal.scss new file mode 100644 index 00000000000..c71fc4f5f41 --- /dev/null +++ b/src/components/modal/share/modal.scss @@ -0,0 +1,97 @@ +@import "../../../colors"; +@import "../../../frameless"; + +.share-modal { + margin-top: 15vh; + width: 40rem; + border-radius: .5rem; + overflow: hidden; + + .title { + display: flex; + box-shadow: inset 0 -1px 0 0 $ui-blue; + background: $ui-blue; + padding-top: .75rem; + width: 100%; + height: 3rem; + padding-left: 12px; + } + + .title-text { + text-align: center; + color: white; + font-size: 1rem; + font-weight: 700; + line-height: 1.25rem; + } + + .share-modal-inner { + padding: 1.5rem; + padding-bottom: 1rem; + gap: 1.5rem; + background: white; + font-size: 1rem; + font-weight: 400; + line-height: 1.75rem; + } + + .thumbnail-container { + display: flex; + justify-content: center; + } + + .thumbnail-img { + width: 300px; + height: 240px; + } + + .footer { + display: flex; + flex-direction: column; + gap: 1rem; + } + + .divider { + width: 100%; + border-top: 1px solid $ui-blue-25percent; + } + + .button-row { + display: flex; + justify-content: space-between; + align-items: center; + width: 100%; + } + + .actions { + display: flex; + gap: 1rem; + } + + .ok-button, .change-thumbnail-button { + border: none; + border-radius: 4px; + padding: 0.75rem 1rem; + font-size: 1rem; + font-weight: 700; + line-height: 1.25rem; + text-align: center; + cursor: pointer; + } + + .ok-button { + background: $ui-blue; + color: $type-white; + border: none; + } + + .change-thumbnail-button { + background: white; + color: $ui-blue; + border: 1px solid $ui-blue; + } +} + +.share-modal-overlay { + background-color: $active-gray; +} diff --git a/src/lib/local-storage.js b/src/lib/local-storage.js new file mode 100644 index 00000000000..568f7efdd94 --- /dev/null +++ b/src/lib/local-storage.js @@ -0,0 +1,32 @@ +/** + * Util functions for managing local storage entries as key-value pairs. + */ + +const getMap = key => { + try { + const raw = localStorage.getItem(key); + return raw ? JSON.parse(raw) : {}; + } catch (e) { + return {}; + } +}; + +const setMap = (key, map) => { + localStorage.setItem(key, JSON.stringify(map)); +}; + +const getLocalStorageValue = (key, id) => { + const map = getMap(key); + return map[id]; +}; + +const setLocalStorageValue = (key, id, value) => { + const map = getMap(key); + map[id] = value; + setMap(key, map); +}; + +module.exports = { + getLocalStorageValue, + setLocalStorageValue +}; diff --git a/src/views/preview/l10n.json b/src/views/preview/l10n.json index 808efc91cbb..6748a40d467 100644 --- a/src/views/preview/l10n.json +++ b/src/views/preview/l10n.json @@ -73,5 +73,12 @@ "project.updateThumbnailInfoModal.description": "When you press the button, a snapshot of your project canvas is taken and saved as the project thumbnail. You can also use it while the project is playing.", "project.updateThumbnailInfoModal.button": "Okay, I got it", "project.updateThumbnail.success": "Thumbnail updated successfully.", - "project.updateThumbnail.error": "Couldn't set thumbnail. Please try again later." + "project.updateThumbnail.error": "Couldn't set thumbnail. Please try again later.", + "project.shareModal.title": "Share Project", + "project.shareModal.description1": "You're about to share your project with this thumbnail:", + "project.shareModal.description2": "Project thumbnails act like the front cover of your project. This image will appear in places like search results and your profile page to show other Scratchers what your project is about. If you'd like to change your project thumbnail, you can do so by clicking the \"Set Thumbnail\" button on your project page.", + "project.shareModal.description3": "Are you sure you want to proceed with this thumbnail?", + "project.shareModal.changeThumbnail": "No, change thumbnail", + "project.shareModal.okay": "Yes, I am sure", + "project.shareModal.dontShowAgain": "Don't show this message again" } diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index 8a7f938a0f1..93699b3c06d 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -29,6 +29,7 @@ const Alert = require('../../components/alert/alert.jsx').default; const AlertContext = require('../../components/alert/alert-context.js').default; const Meta = require('./meta.jsx'); const {UpdateThumbnailInfoModal} = require('./update-thumbnail-info-modal.jsx'); +const {ShareModal} = require('../../components/modal/share/modal.jsx'); const {driver} = require('driver.js'); const sessionActions = require('../../redux/session.js'); @@ -57,9 +58,18 @@ const {shouldDisplayFeedbackWidget, sendUserPropertiesForFeedback} = require('.. const {displayQualitativeFeedback} = require('../../redux/qualitative-feedback.js'); const {DebuggingFeedback} = require('../../components/modal/feedback/debugging-feedback.jsx'); const {TutorialsFeedback} = require('../../components/modal/feedback/tutorials-feedback.jsx'); +const {getLocalStorageValue, setLocalStorageValue} = require('../../lib/local-storage.js'); require('./project-view.scss'); -const isFirstManualThumbnailUpdate = () => localStorage.getItem('isFirstManualThumbnailUpdate') !== 'false'; +const shouldShowShareModal = (username = 'guest') => + getLocalStorageValue('shareModalPreference', username) !== false; + +const isFirstManualThumbnailUpdate = (username = 'guest') => + getLocalStorageValue('isFirstManualThumbnailUpdate', username) !== false; + +const setFirstManualThumbnailUpdate = (username = 'guest') => { + setLocalStorageValue('isFirstManualThumbnailUpdate', username, false); +}; const IntlGUIWithProjectHandler = ({...props}) => { const [showJourney, setShowJourney] = useState(false); @@ -151,6 +161,7 @@ class Preview extends React.Component { super(props); bindAll(this, [ 'addEventListeners', + 'doShare', 'fetchCommunityData', 'handleAddComment', 'handleClickLogo', @@ -191,6 +202,10 @@ class Preview extends React.Component { 'handleToggleComments', 'showThumbnailUpdateInfoTooltip', 'hideThumbnailUpdateInfoTooltip', + 'showShareModal', + 'hideShareModal', + 'highlightChangeThumbnailButton', + 'hideHighlightChangeThumbnailButton', 'showThumbnailUpdateInfoModal', 'hideThumbnailUpdateInfoModal', 'initCounts', @@ -223,6 +238,7 @@ class Preview extends React.Component { isProjectLoaded: false, isRemixing: false, isThumbnailUpdateInfoModalOpen: false, + isShareModalOpen: false, invalidProject: parts.length === 1, justRemixed: false, justShared: false, @@ -238,16 +254,14 @@ class Preview extends React.Component { reportOpen: false, singleCommentId: singleCommentId, greenFlagRecorded: false, - tooltipDriver: null + tooltipDriver: null, + highlightDriver: null }; /* In the beginning, if user is on mobile and landscape, go to fullscreen */ this.setScreenFromOrientation(); } componentDidMount () { this.addEventListeners(); - if (this.props.playerMode && isFirstManualThumbnailUpdate()) { - this.showThumbnailUpdateInfoTooltip(true); - } } componentDidUpdate (prevProps, prevState) { if (this.state.projectId > 0 && @@ -310,16 +324,28 @@ class Preview extends React.Component { this.pushHistory(history.state === null); } - // If we leave player mode or switch to fullscreen, hide the thumbnail tooltip + // eslint-disable-next-line no-undefined + if (prevProps.user.username !== this.props.user.username && + this.props.user.username && + this.props.playerMode && + isFirstManualThumbnailUpdate(this.props.user.username)) { + this.showThumbnailUpdateInfoTooltip(); + } + + // Hide the tooltip in case of any absolute position element opened if (((!this.props.playerMode && prevProps.playerMode) || - (this.props.fullScreen && !prevProps.fullScreen)) && + (this.props.fullScreen && !prevProps.fullScreen) || + this.state.isShareModalOpen || + this.state.isThumbnailUpdateInfoModalOpen) && this.state.tooltipDriver) { this.hideThumbnailUpdateInfoTooltip(); } if (((this.props.playerMode && !prevProps.playerMode) || (this.props.playerMode && !this.props.fullScreen && prevProps.fullScreen)) && - !this.state.tooltipDriver && isFirstManualThumbnailUpdate()) { + !this.state.tooltipDriver && + isFirstManualThumbnailUpdate(this.props.user.username) && + !this.state.isShareModalOpen) { this.showThumbnailUpdateInfoTooltip(); } @@ -789,7 +815,7 @@ class Preview extends React.Component { }); } } - handleShare () { + doShare () { this.props.shareProject( this.props.projectInfo.id, this.props.user.token @@ -799,6 +825,13 @@ class Preview extends React.Component { justShared: true }); } + handleShare () { + if (shouldShowShareModal(this.props.user.username)) { + this.showShareModal(); + } else { + this.doShare(); + } + } handleShareAttempt () { this.setState({ showEmailConfirmationModal: true @@ -873,16 +906,47 @@ class Preview extends React.Component { const onError = () => this.context.errorAlert({ id: 'project.updateThumbnail.error' }); + this.hideHighlightChangeThumbnailButton(); return this.props.handleUpdateProjectThumbnail( id, blob, true, // isManualUpdate - this.hideThumbnailUpdateInfoTooltip, + this.props.user.username, this.showThumbnailUpdateInfoModal, onSuccess, onError ); } + showShareModal () { + this.setState({ + isShareModalOpen: true + }); + } + hideShareModal () { + this.setState({ + isShareModalOpen: false + }); + } + highlightChangeThumbnailButton () { + const highlightDriver = driver({ + popoverClass: 'driverjs-theme' + }); + highlightDriver.highlight({ + element: 'span[class*="stage-header_setThumbnailButton"]' + }); + + this.setState({ + highlightDriver + }); + } + hideHighlightChangeThumbnailButton () { + if (this.state.highlightDriver) { + this.state.highlightDriver.destroy(); + this.setState({ + highlightDriver: null + }); + } + } showThumbnailUpdateInfoModal () { this.setState({ isThumbnailUpdateInfoModalOpen: true @@ -893,7 +957,7 @@ class Preview extends React.Component { isThumbnailUpdateInfoModalOpen: false }); } - showThumbnailUpdateInfoTooltip (isFirstLoad = false) { + showThumbnailUpdateInfoTooltip () { this.setState({ tooltipDriver: driver({ allowClose: false, @@ -913,12 +977,12 @@ class Preview extends React.Component { const showThumbnailUpdateInfoTooltipWhenGuiReady = () => { const setThumbnailButton = document.querySelector('span[class*="stage-header_setThumbnailButton"]'); - const greenFlag = document.querySelector('div[class*="stage_green-flag-overlay"] img'); + const loadingProjectIndicator = document.querySelector('div[class*="loader_block-animation"]'); // Has the project loaded? - if (setThumbnailButton && this.state.tooltipDriver && (!isFirstLoad || greenFlag)) { + if (setThumbnailButton && !loadingProjectIndicator && this.state.tooltipDriver) { this.state.tooltipDriver.drive(); } else { - setTimeout(showThumbnailUpdateInfoTooltipWhenGuiReady, 500); + setTimeout(showThumbnailUpdateInfoTooltipWhenGuiReady, 200); } }; showThumbnailUpdateInfoTooltipWhenGuiReady(); @@ -987,6 +1051,20 @@ class Preview extends React.Component { isOpen={this.state.isThumbnailUpdateInfoModalOpen} hideModal={this.hideThumbnailUpdateInfoModal} /> + this.hideShareModal()} + onChangeThumbnail={() => { + this.hideShareModal(); + this.highlightChangeThumbnailButton(); + }} + onShare={() => { + this.hideShareModal(); + this.doShare(); + }} + projectThumbnailUrl={this.props.projectInfo.image} + username={this.props.user.username} + /> ({ id, blob, isManualUpdate, - hideThumbnailUpdateInfoTooltip, + username, showThumbnailUpdateInfoModal, onSuccess, onError ) => { - // If this is the first manual thumbnail update, show an + // If this is the first manual thumbnail update for this user, show an // information modal to introduce the new feature. // Otherwise, just update the thumbnail. // TODO: Remove this after a few months. - if (isManualUpdate && isFirstManualThumbnailUpdate()) { - hideThumbnailUpdateInfoTooltip(); + if (isManualUpdate && isFirstManualThumbnailUpdate(username)) { showThumbnailUpdateInfoModal(); - localStorage.setItem('isFirstManualThumbnailUpdate', 'false'); + setFirstManualThumbnailUpdate(username); } else { dispatch(previewActions.updateProjectThumbnail(id, blob, onSuccess, onError)); } diff --git a/src/views/preview/project-view.scss b/src/views/preview/project-view.scss index e611b1ce36a..737128cabf7 100644 --- a/src/views/preview/project-view.scss +++ b/src/views/preview/project-view.scss @@ -1,11 +1,15 @@ @import "../../colors"; @import "../../frameless"; -.driver-active *{ +// Below selectors are much hackier than I'd like, but we can't style the overlay +// directly, and since we have two driverjs instances in the component requiring +// different behaviors (one acts like a tooltip, the other like a highlight), +// we need to be specific. +.driver-active:has(.tooltip-set-thumbnail) * { pointer-events: auto !important; } -.driver-overlay { +.tooltip-set-thumbnail ~ .driver-overlay { z-index: -1 !important; } @@ -14,6 +18,7 @@ background-color: $ui-blue; color: white; text-align: center; + z-index: 10; } .driver-popover.tooltip-set-thumbnail .driver-popover-title { From c9a90d5de4f31e9027a69cabd91b1ab5bba48f65 Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Tue, 12 Aug 2025 11:50:29 +0300 Subject: [PATCH 101/129] fix: address comment --- src/components/modal/share/modal.jsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/modal/share/modal.jsx b/src/components/modal/share/modal.jsx index d77347375b6..3d0dfaf7886 100644 --- a/src/components/modal/share/modal.jsx +++ b/src/components/modal/share/modal.jsx @@ -8,8 +8,8 @@ import {FormattedMessage, useIntl} from 'react-intl'; import {setLocalStorageValue} from '../../../lib/local-storage.js'; import './modal.scss'; -const updateLocalStorage = (username = 'guest', value) => { - if (value === false) { +const updateLocalStorage = (username = 'guest', dontShowAgain) => { + if (dontShowAgain === false) { return; } @@ -21,7 +21,6 @@ const updateLocalStorage = (username = 'guest', value) => { // Parametrise texts if needed to be used outside of the preview context. const ShareModal = ({isOpen, onClose, onChangeThumbnail, onShare, projectThumbnailUrl, username}) => { const intl = useIntl(); - // TODO: Set local storage if submitted const [dontShowAgain, setDontShowAgain] = useState(false); const handleCheckboxChange = useCallback(e => { From 60a4e97328db8c11864dbf543b1d27599708920a Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Tue, 12 Aug 2025 12:50:04 +0300 Subject: [PATCH 102/129] feat: move update thumbnail info modal to modal/ directory --- .../modal/update-thumbnail-info/modal.jsx} | 8 ++++---- .../modal/update-thumbnail-info/modal.scss} | 4 ++-- src/views/preview/project-view.jsx | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) rename src/{views/preview/update-thumbnail-info-modal.jsx => components/modal/update-thumbnail-info/modal.jsx} (83%) rename src/{views/preview/update-thumbnail-info-modal.scss => components/modal/update-thumbnail-info/modal.scss} (96%) diff --git a/src/views/preview/update-thumbnail-info-modal.jsx b/src/components/modal/update-thumbnail-info/modal.jsx similarity index 83% rename from src/views/preview/update-thumbnail-info-modal.jsx rename to src/components/modal/update-thumbnail-info/modal.jsx index 68c31f40145..c8329cf7aef 100644 --- a/src/views/preview/update-thumbnail-info-modal.jsx +++ b/src/components/modal/update-thumbnail-info/modal.jsx @@ -1,10 +1,10 @@ import React from 'react'; import PropTypes from 'prop-types'; -import Modal from '../../components/modal/base/modal.jsx'; -import ModalTitle from '../../components/modal/base/modal-title.jsx'; -import ModalInnerContent from '../../components/modal/base/modal-inner-content.jsx'; +import Modal from '../base/modal.jsx'; +import ModalTitle from '../base/modal-title.jsx'; +import ModalInnerContent from '../base/modal-inner-content.jsx'; import {FormattedMessage} from 'react-intl'; -import './update-thumbnail-info-modal.scss'; +import './modal.scss'; const UpdateThumbnailInfoModal = ({isOpen, hideModal}) => ( Date: Tue, 12 Aug 2025 12:55:56 +0300 Subject: [PATCH 103/129] fix: align modal title text vertically --- src/components/modal/share/modal.scss | 2 +- src/components/modal/update-thumbnail-info/modal.scss | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/modal/share/modal.scss b/src/components/modal/share/modal.scss index c71fc4f5f41..17a8d2709eb 100644 --- a/src/components/modal/share/modal.scss +++ b/src/components/modal/share/modal.scss @@ -9,9 +9,9 @@ .title { display: flex; + align-items: center; box-shadow: inset 0 -1px 0 0 $ui-blue; background: $ui-blue; - padding-top: .75rem; width: 100%; height: 3rem; padding-left: 12px; diff --git a/src/components/modal/update-thumbnail-info/modal.scss b/src/components/modal/update-thumbnail-info/modal.scss index 484f16fd8d8..f65b56a14e2 100644 --- a/src/components/modal/update-thumbnail-info/modal.scss +++ b/src/components/modal/update-thumbnail-info/modal.scss @@ -9,9 +9,9 @@ .update-thumbnail-info-modal-title { display: flex; + align-items: center; box-shadow: inset 0 -1px 0 0 $ui-blue; background: $ui-blue; - padding-top: .75rem; width: 100%; height: 3rem; padding-left: 12px; From 7e9960de7d81e3f10308724ad27c8e532f826f8f Mon Sep 17 00:00:00 2001 From: Ayshe Dzhindzhi Date: Tue, 12 Aug 2025 14:48:12 +0300 Subject: [PATCH 104/129] fix: copy the whole mediapipe folder instead of specific files --- webpack.config.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/webpack.config.js b/webpack.config.js index 4ceff985bad..01b4b81e2a7 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -244,9 +244,8 @@ module.exports = { to: 'static/blocks-media' }, { - context: 'node_modules/@scratch/scratch-gui/dist/', - from: 'chunks/mediapipe/face_detection/face_detection_*.{js,wasm,tflite,binarypb}', - noErrorOnMissing: true + from: 'node_modules/@scratch/scratch-gui/dist/chunks/mediapipe/face_detection/', + to: 'chunks/mediapipe/face_detection' }, { context: 'node_modules/@scratch/scratch-gui/dist/', From aecc75d0f56428b5ed086593ab2b34344a1a6898 Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Tue, 12 Aug 2025 15:28:56 +0300 Subject: [PATCH 105/129] feat: add MANUALLY_SAVE_THUMBNAILS env variable to cicd workflow --- .github/workflows/ci-cd.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml index 6e574a60a00..39bce0edf18 100644 --- a/.github/workflows/ci-cd.yml +++ b/.github/workflows/ci-cd.yml @@ -107,6 +107,7 @@ jobs: QUALITATIVE_FEEDBACK_TUTORIALS_USER_FREQUENCY: "${{ vars.QUALITATIVE_FEEDBACK_TUTORIALS_USER_FREQUENCY }}" QUALITATIVE_FEEDBACK_ENDING_DATE: "${{ vars.QUALITATIVE_FEEDBACK_ENDING_DATE }}" IDEAS_GENERATOR_SOURCE: "${{ vars.IDEAS_GENERATOR_SOURCE }}" + MANUALLY_SAVE_THUMBNAILS: "${{ vars.MANUALLY_SAVE_THUMBNAILS }}" # used by src/template-config.js GTM_ID: ${{ secrets.GTM_ID }} From dc2b6234f0fffd31a94394073f3d7973023a69f2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 13 Aug 2025 06:42:10 +0000 Subject: [PATCH 106/129] fix(deps): update dependency scratch-storage to ^4.0.210 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index b19ad05a143..574bf9948ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.209" + "scratch-storage": "^4.0.210" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -24020,9 +24020,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.210", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.210.tgz", - "integrity": "sha512-Kr+kG3BqK/Xa1ZlkUDtwRsD5KPblP2Smy9U7TT9CyEKxBxvkeOjfyr2LNdEZi29tqpTL1cXZC/Olc+rH6SU2LA==", + "version": "4.0.211", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.211.tgz", + "integrity": "sha512-ZRCHBRHXvndc7UyywsZocBiWEypDL5XUJw2VyS1Wmyje9SBvuo9XNlmMYKyjkXL9ctRz7PQHsx8Lm9CGUos60A==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index c6c03cbcd05..0fc3ff1926c 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.209" + "scratch-storage": "^4.0.210" }, "devDependencies": { "@babel/cli": "7.28.0", From def51b8ce85d55e1bf37e51476b8b712f9c4ac60 Mon Sep 17 00:00:00 2001 From: Ayshe Dzhindzhi Date: Wed, 13 Aug 2025 11:23:30 +0300 Subject: [PATCH 107/129] fix: change the icon displayed on the face sensing extension chip to be black --- static/svgs/project/extension-facesensing.svg | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/static/svgs/project/extension-facesensing.svg b/static/svgs/project/extension-facesensing.svg index 86b6f51f6d9..c825b65ea5b 100644 --- a/static/svgs/project/extension-facesensing.svg +++ b/static/svgs/project/extension-facesensing.svg @@ -1,10 +1,10 @@ - - - - - - + + + + + + From 13c32868b62cac82569a58d19a518b5701027698 Mon Sep 17 00:00:00 2001 From: Ayshe Dzhindzhi Date: Wed, 13 Aug 2025 16:04:48 +0300 Subject: [PATCH 108/129] chore: update scratch-gui version to face-sensing.2 --- package-lock.json | 46 +++++++++++++++++++++++++++------------------- package.json | 2 +- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index b450ffda9f9..c422e25b31e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -39,7 +39,7 @@ "@formatjs/intl-numberformat": "8.15.4", "@formatjs/intl-pluralrules": "5.4.4", "@formatjs/intl-relativetimeformat": "11.4.11", - "@scratch/scratch-gui": "11.6.0-face-sensing", + "@scratch/scratch-gui": "11.6.0-face-sensing.2", "@types/jest": "29.5.14", "async": "3.2.6", "autoprefixer": "10.4.21", @@ -3827,6 +3827,13 @@ "node": ">=6.0.0" } }, + "node_modules/@mediapipe/face_detection": { + "version": "0.4.1646425229", + "resolved": "https://registry.npmjs.org/@mediapipe/face_detection/-/face_detection-0.4.1646425229.tgz", + "integrity": "sha512-aeCN+fRAojv9ch3NXorP6r5tcGVLR3/gC1HmtqB0WEZBRXrdP6/3W/sGR0dHr1iT6ueiK95G9PVjbzFosf/hrg==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/@microbit/microbit-universal-hex": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/@microbit/microbit-universal-hex/-/microbit-universal-hex-0.2.2.tgz", @@ -4310,16 +4317,17 @@ } }, "node_modules/@scratch/scratch-gui": { - "version": "11.6.0-face-sensing", - "resolved": "https://registry.npmjs.org/@scratch/scratch-gui/-/scratch-gui-11.6.0-face-sensing.tgz", - "integrity": "sha512-SAEQAPREgkIoBoiyZHEhNNIgoiOmWbe/Bwhc5/nHh5zIfrtEZH4u6JNDBqaZmfFiVb/PKBqkLFW7gtlSIZ1tbw==", + "version": "11.6.0-face-sensing.2", + "resolved": "https://registry.npmjs.org/@scratch/scratch-gui/-/scratch-gui-11.6.0-face-sensing.2.tgz", + "integrity": "sha512-TqlkOCr/WxGlD7T9YTXg8/5Ges0Pob/7qpllS5XNFoRiAE7JPmYNo8BdEmQumiUFGRWZbtTpyKJyvnBBzN+ZSA==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { + "@mediapipe/face_detection": "0.4.1646425229", "@microbit/microbit-universal-hex": "0.2.2", - "@scratch/scratch-render": "11.6.0-face-sensing", - "@scratch/scratch-svg-renderer": "11.6.0-face-sensing", - "@scratch/scratch-vm": "11.6.0-face-sensing", + "@scratch/scratch-render": "11.6.0-face-sensing.2", + "@scratch/scratch-svg-renderer": "11.6.0-face-sensing.2", + "@scratch/scratch-vm": "11.6.0-face-sensing.2", "@tensorflow-models/face-detection": "^1.0.3", "@tensorflow/tfjs": "^4.22.0", "arraybuffer-loader": "1.0.8", @@ -4631,13 +4639,13 @@ } }, "node_modules/@scratch/scratch-render": { - "version": "11.6.0-face-sensing", - "resolved": "https://registry.npmjs.org/@scratch/scratch-render/-/scratch-render-11.6.0-face-sensing.tgz", - "integrity": "sha512-wUPqUwm0PQUUwHQDoyMN7+xlwA23nbvMc8Ua+lW2+UV9Q7XrGityIwevYiYPBavk/WiTjnGM+znQ8bdSfJG3Bg==", + "version": "11.6.0-face-sensing.2", + "resolved": "https://registry.npmjs.org/@scratch/scratch-render/-/scratch-render-11.6.0-face-sensing.2.tgz", + "integrity": "sha512-M7J105fwGHdVcc0DJjMYlf21xS3Fk0AI3hgzq5GAZm6WbnAPKHWITmWaotA8a1vQ6+kTG0OHd2xjNtkcaZR34A==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { - "@scratch/scratch-svg-renderer": "11.6.0-face-sensing", + "@scratch/scratch-svg-renderer": "11.6.0-face-sensing.2", "grapheme-breaker": "0.3.2", "hull.js": "0.2.10", "ify-loader": "1.1.0", @@ -4674,9 +4682,9 @@ "dev": true }, "node_modules/@scratch/scratch-svg-renderer": { - "version": "11.6.0-face-sensing", - "resolved": "https://registry.npmjs.org/@scratch/scratch-svg-renderer/-/scratch-svg-renderer-11.6.0-face-sensing.tgz", - "integrity": "sha512-a9Yr4NbpuhYonsU7sNSwVgKoEH8mQA9S02BDyCc7soBU6W67I1QOZgWL+J2eunE2G8qyS7IDhTwdkURMmqYnWQ==", + "version": "11.6.0-face-sensing.2", + "resolved": "https://registry.npmjs.org/@scratch/scratch-svg-renderer/-/scratch-svg-renderer-11.6.0-face-sensing.2.tgz", + "integrity": "sha512-T/V4FKki5JeO72EEHxpI+hwp9MqBU7ghRuXqvUt5miIVTLl0UlokEKS9UP9LOZ3nJTir7cUX9/YjizU6S9gtDw==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { @@ -4710,14 +4718,14 @@ } }, "node_modules/@scratch/scratch-vm": { - "version": "11.6.0-face-sensing", - "resolved": "https://registry.npmjs.org/@scratch/scratch-vm/-/scratch-vm-11.6.0-face-sensing.tgz", - "integrity": "sha512-is+pyVkB/vuIFgToVS4tJj37agVIqgmwhnLYiKxl9pSwNNyYvvfksXS9bfR79Z3oz/fV03yXm+OKqWrtPVwdgg==", + "version": "11.6.0-face-sensing.2", + "resolved": "https://registry.npmjs.org/@scratch/scratch-vm/-/scratch-vm-11.6.0-face-sensing.2.tgz", + "integrity": "sha512-8FPrELSZOz6jgq39DvTST6nuV1XaUMozI7w+MsfRIR6baloYQLKwarUKGBE8W4KU9qZGcMmLirQDM6LRfrT4KA==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { - "@scratch/scratch-render": "11.6.0-face-sensing", - "@scratch/scratch-svg-renderer": "11.6.0-face-sensing", + "@scratch/scratch-render": "11.6.0-face-sensing.2", + "@scratch/scratch-svg-renderer": "11.6.0-face-sensing.2", "@vernier/godirect": "1.8.3", "arraybuffer-loader": "1.0.8", "atob": "2.1.2", diff --git a/package.json b/package.json index 7b4559064c2..b9e9b8628bb 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "@formatjs/intl-numberformat": "8.15.4", "@formatjs/intl-pluralrules": "5.4.4", "@formatjs/intl-relativetimeformat": "11.4.11", - "@scratch/scratch-gui": "11.6.0-face-sensing", + "@scratch/scratch-gui": "11.6.0-face-sensing.2", "@types/jest": "29.5.14", "async": "3.2.6", "autoprefixer": "10.4.21", From 146d4b28506b972ce98dbcb3e967e85453024905 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 13 Aug 2025 13:18:13 +0000 Subject: [PATCH 109/129] fix(deps): update dependency scratch-l10n to v6.0.26 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index d8a36a83c37..51c381ab955 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.25", + "scratch-l10n": "6.0.26", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23862,9 +23862,9 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.25", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.25.tgz", - "integrity": "sha512-DUfnxeH7p4hk0DIx3YGlG9OSochjVcZaMLxIVkH5KPMBr+zTYozAw6z9avEhSAJrIQr/isTRK6gvIY+/vpbExA==", + "version": "6.0.26", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.26.tgz", + "integrity": "sha512-YcnaEnESjM8kybbAA2moxlyeYJaDuKxR2EGuAwHp7/32NScLkblU/cs7tSK3URIiYnhnbNLUdra/8iHxTCS5EA==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index d555c3ac381..9dbd41b3075 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.25", + "scratch-l10n": "6.0.26", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From deee478fa635eaab2cc21ba74899335f3d17e79b Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Thu, 14 Aug 2025 15:08:12 +0300 Subject: [PATCH 110/129] fix: share preview modal fixes --- src/components/checkbox/simple-checkbox.jsx | 1 - src/components/checkbox/simple-checkbox.scss | 1 + src/components/modal/share/modal.scss | 2 +- src/views/preview/project-view.jsx | 48 +++++++++++++++----- 4 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/components/checkbox/simple-checkbox.jsx b/src/components/checkbox/simple-checkbox.jsx index 5e4b2ce23ce..ae0f3f32e6c 100644 --- a/src/components/checkbox/simple-checkbox.jsx +++ b/src/components/checkbox/simple-checkbox.jsx @@ -12,7 +12,6 @@ export const SimpleCheckbox = ({id, checked, onChange, label}) => ( type="checkbox" checked={checked} onChange={onChange} - style={{marginRight: 8}} /> {label} diff --git a/src/components/checkbox/simple-checkbox.scss b/src/components/checkbox/simple-checkbox.scss index 54a2958d5f9..892614a3962 100644 --- a/src/components/checkbox/simple-checkbox.scss +++ b/src/components/checkbox/simple-checkbox.scss @@ -5,6 +5,7 @@ display: flex; cursor: pointer; align-items: center; + gap: 0.5rem; color: $header-gray; font-size: 0.75rem; font-style: normal; diff --git a/src/components/modal/share/modal.scss b/src/components/modal/share/modal.scss index 17a8d2709eb..67f8e382cb8 100644 --- a/src/components/modal/share/modal.scss +++ b/src/components/modal/share/modal.scss @@ -3,7 +3,7 @@ .share-modal { margin-top: 15vh; - width: 40rem; + width: 39.25rem; border-radius: .5rem; overflow: hidden; diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index bdf370b59a8..f247b9b86f9 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -61,6 +61,12 @@ const {TutorialsFeedback} = require('../../components/modal/feedback/tutorials-f const {getLocalStorageValue, setLocalStorageValue} = require('../../lib/local-storage.js'); require('./project-view.scss'); +const hasIntroducedShareModalFlow = (username = 'guest') => + getLocalStorageValue('hasIntroducedShareModalFlow', username) === true; + +const setHasIntroducedShareModalFlow = (username = 'guest') => + setLocalStorageValue('hasIntroducedShareModalFlow', username, true); + const shouldShowShareModal = (username = 'guest') => getLocalStorageValue('shareModalPreference', username) !== false; @@ -163,6 +169,7 @@ class Preview extends React.Component { 'addEventListeners', 'doShare', 'fetchCommunityData', + 'fetchProjectInfo', 'handleAddComment', 'handleClickLogo', 'handleDeleteComment', @@ -196,6 +203,7 @@ class Preview extends React.Component { 'handleSetProjectThumbnailer', 'handleShare', 'handleShareAttempt', + 'handleShareModalChangeThumbnailButton', 'handleUpdateProjectData', 'handleUpdateProjectId', 'handleUpdateProjectTitle', @@ -204,8 +212,8 @@ class Preview extends React.Component { 'hideThumbnailUpdateInfoTooltip', 'showShareModal', 'hideShareModal', - 'highlightChangeThumbnailButton', - 'hideHighlightChangeThumbnailButton', + 'highlightSetThumbnailButton', + 'hidehighlightSetThumbnailButton', 'showThumbnailUpdateInfoModal', 'hideThumbnailUpdateInfoModal', 'initCounts', @@ -411,6 +419,13 @@ class Preview extends React.Component { this.props.getRemixes(this.state.projectId); } } + fetchProjectInfo () { + if (this.props.userPresent) { + this.props.getProjectInfo(this.state.projectId, this.props.user.token); + } else { + this.props.getProjectInfo(this.state.projectId); + } + } // This is copy of what is in save-project-to-server in GUI that adds // an extra get of the project info from api. We do this to wait for replication @@ -900,13 +915,17 @@ class Preview extends React.Component { ); } handleManualThumbnailUpdate (id, blob) { - const onSuccess = () => this.context.successAlert({ - id: 'project.updateThumbnail.success' - }); + const onSuccess = () => { + this.context.successAlert({ + id: 'project.updateThumbnail.success' + }); + // Reload the project info to get the new thumbnail + this.fetchProjectInfo(); + }; const onError = () => this.context.errorAlert({ id: 'project.updateThumbnail.error' }); - this.hideHighlightChangeThumbnailButton(); + this.hidehighlightSetThumbnailButton(); return this.props.handleUpdateProjectThumbnail( id, blob, @@ -917,6 +936,14 @@ class Preview extends React.Component { onError ); } + handleShareModalChangeThumbnailButton () { + this.hideShareModal(); + // Only highlight the 'Set Thumbnail' button the first time + if (!hasIntroducedShareModalFlow(this.props.user.username)) { + this.highlightSetThumbnailButton(); + setHasIntroducedShareModalFlow(this.props.user.username); + } + } showShareModal () { this.setState({ isShareModalOpen: true @@ -927,7 +954,7 @@ class Preview extends React.Component { isShareModalOpen: false }); } - highlightChangeThumbnailButton () { + highlightSetThumbnailButton () { const highlightDriver = driver({ popoverClass: 'driverjs-theme' }); @@ -939,7 +966,7 @@ class Preview extends React.Component { highlightDriver }); } - hideHighlightChangeThumbnailButton () { + hidehighlightSetThumbnailButton () { if (this.state.highlightDriver) { this.state.highlightDriver.destroy(); this.setState({ @@ -1054,10 +1081,7 @@ class Preview extends React.Component { this.hideShareModal()} - onChangeThumbnail={() => { - this.hideShareModal(); - this.highlightChangeThumbnailButton(); - }} + onChangeThumbnail={this.handleShareModalChangeThumbnailButton} onShare={() => { this.hideShareModal(); this.doShare(); From 864d4c6e260f983ac3ad2bf947bde668dcb7a2a5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 14 Aug 2025 12:42:47 +0000 Subject: [PATCH 111/129] fix(deps): lock file maintenance --- package-lock.json | 907 ++++++++++++++++++++-------------------------- 1 file changed, 385 insertions(+), 522 deletions(-) diff --git a/package-lock.json b/package-lock.json index 51c381ab955..2029373f1d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -290,14 +290,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.0.tgz", - "integrity": "sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -337,18 +337,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", - "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.3.tgz", + "integrity": "sha512-V9f6ZFIYSLNEbuGA/92uOvYsGCJNsuA8ESZ4ldc09bWk/j8H8TKiPw8Mk1eG6olpnO0ALHJmYfZvF4MEE4gajg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.27.1", + "@babel/traverse": "^7.28.3", "semver": "^6.3.1" }, "engines": { @@ -432,15 +432,15 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz", - "integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.27.3" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -553,24 +553,24 @@ } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", - "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz", + "integrity": "sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g==", "dev": true, "license": "MIT", "dependencies": { - "@babel/template": "^7.27.1", - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", - "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", + "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", "dev": true, "license": "MIT", "dependencies": { @@ -582,13 +582,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.0.tgz", - "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.28.0" + "@babel/types": "^7.28.2" }, "bin": { "parser": "bin/babel-parser.js" @@ -665,14 +665,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", - "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz", + "integrity": "sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw==", "dev": true, "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -1081,13 +1081,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", - "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz", + "integrity": "sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg==", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", + "@babel/helper-create-class-features-plugin": "^7.28.3", "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { @@ -1098,9 +1098,9 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.0.tgz", - "integrity": "sha512-IjM1IoJNw72AZFlj33Cu8X0q2XK/6AaVC3jQu+cgQ5lThWD5ajnuUAml80dqRmOhmPkTH8uAwnpMu9Rvj0LTRA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.3.tgz", + "integrity": "sha512-DoEWC5SuxuARF2KdKmGUq3ghfPMO6ZzR12Dnp5gubwbeWJo4dbNWXJPVlwvh4Zlq6Z7YVvL8VFxeSOJgjsx4Sg==", "dev": true, "license": "MIT", "dependencies": { @@ -1109,7 +1109,7 @@ "@babel/helper-globals": "^7.28.0", "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.0" + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -1708,9 +1708,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.1.tgz", - "integrity": "sha512-P0QiV/taaa3kXpLY+sXla5zec4E+4t4Aqc9ggHlfZ7a2cp8/x/Gv08jfwEtn9gnnYIMvHx6aoOZ8XJL8eU71Dg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.3.tgz", + "integrity": "sha512-K3/M/a4+ESb5LEldjQb+XSrpY0nF+ZBFlTCbSnKaYAMfD8v33O6PMs4uYnOk19HlcsI8WMu3McdFPTiQHF/1/A==", "dev": true, "license": "MIT", "dependencies": { @@ -2026,9 +2026,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.28.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", - "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.3.tgz", + "integrity": "sha512-9uIQ10o0WGdpP6GDhXcdOJPJuDgFtIDtN/9+ArJQ2NAfAmiuhTQdzkaTGR33v43GYS2UrSA0eX2pPPHoFVvpxA==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -2050,18 +2050,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.0.tgz", - "integrity": "sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.0", + "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", - "@babel/types": "^7.28.0", + "@babel/types": "^7.28.2", "debug": "^4.3.1" }, "engines": { @@ -2242,9 +2242,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", - "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.9.tgz", + "integrity": "sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==", "cpu": [ "ppc64" ], @@ -2259,9 +2259,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", - "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.9.tgz", + "integrity": "sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==", "cpu": [ "arm" ], @@ -2276,9 +2276,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", - "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.9.tgz", + "integrity": "sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==", "cpu": [ "arm64" ], @@ -2293,9 +2293,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", - "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.9.tgz", + "integrity": "sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==", "cpu": [ "x64" ], @@ -2310,9 +2310,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", - "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.9.tgz", + "integrity": "sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==", "cpu": [ "arm64" ], @@ -2327,9 +2327,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", - "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.9.tgz", + "integrity": "sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==", "cpu": [ "x64" ], @@ -2344,9 +2344,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", - "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.9.tgz", + "integrity": "sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==", "cpu": [ "arm64" ], @@ -2361,9 +2361,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", - "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.9.tgz", + "integrity": "sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==", "cpu": [ "x64" ], @@ -2378,9 +2378,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", - "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.9.tgz", + "integrity": "sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==", "cpu": [ "arm" ], @@ -2395,9 +2395,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", - "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.9.tgz", + "integrity": "sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==", "cpu": [ "arm64" ], @@ -2412,9 +2412,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", - "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.9.tgz", + "integrity": "sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==", "cpu": [ "ia32" ], @@ -2429,9 +2429,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", - "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.9.tgz", + "integrity": "sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==", "cpu": [ "loong64" ], @@ -2446,9 +2446,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", - "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.9.tgz", + "integrity": "sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==", "cpu": [ "mips64el" ], @@ -2463,9 +2463,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", - "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.9.tgz", + "integrity": "sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==", "cpu": [ "ppc64" ], @@ -2480,9 +2480,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", - "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.9.tgz", + "integrity": "sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==", "cpu": [ "riscv64" ], @@ -2497,9 +2497,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", - "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.9.tgz", + "integrity": "sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==", "cpu": [ "s390x" ], @@ -2514,9 +2514,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", - "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.9.tgz", + "integrity": "sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==", "cpu": [ "x64" ], @@ -2531,9 +2531,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", - "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.9.tgz", + "integrity": "sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==", "cpu": [ "arm64" ], @@ -2548,9 +2548,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", - "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.9.tgz", + "integrity": "sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==", "cpu": [ "x64" ], @@ -2565,9 +2565,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", - "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.9.tgz", + "integrity": "sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==", "cpu": [ "arm64" ], @@ -2582,9 +2582,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", - "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.9.tgz", + "integrity": "sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==", "cpu": [ "x64" ], @@ -2599,9 +2599,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", - "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.9.tgz", + "integrity": "sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==", "cpu": [ "arm64" ], @@ -2616,9 +2616,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", - "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.9.tgz", + "integrity": "sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==", "cpu": [ "x64" ], @@ -2633,9 +2633,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", - "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.9.tgz", + "integrity": "sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==", "cpu": [ "arm64" ], @@ -2650,9 +2650,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", - "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.9.tgz", + "integrity": "sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==", "cpu": [ "ia32" ], @@ -2667,9 +2667,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", - "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.9.tgz", + "integrity": "sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==", "cpu": [ "x64" ], @@ -3145,16 +3145,6 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/@istanbuljs/load-nyc-config/node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -3249,13 +3239,6 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -3631,9 +3614,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", - "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "license": "MIT", "dependencies": { @@ -3652,9 +3635,9 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.10.tgz", - "integrity": "sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "license": "MIT", "dependencies": { @@ -3663,15 +3646,15 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", - "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.29", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", - "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4883,13 +4866,6 @@ "@tensorflow/tfjs-core": "4.22.0" } }, - "node_modules/@tensorflow/tfjs-backend-cpu/node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dev": true, - "license": "MIT" - }, "node_modules/@tensorflow/tfjs-backend-webgl": { "version": "4.22.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-4.22.0.tgz", @@ -4909,13 +4885,6 @@ "@tensorflow/tfjs-core": "4.22.0" } }, - "node_modules/@tensorflow/tfjs-backend-webgl/node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dev": true, - "license": "MIT" - }, "node_modules/@tensorflow/tfjs-converter": { "version": "4.22.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-4.22.0.tgz", @@ -4952,59 +4921,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@tensorflow/tfjs-core/node_modules/node-fetch": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", - "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@tensorflow/tfjs-core/node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tensorflow/tfjs-core/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tensorflow/tfjs-core/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/@tensorflow/tfjs-core/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/@tensorflow/tfjs-data": { "version": "4.22.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-4.22.0.tgz", @@ -5021,52 +4937,6 @@ "seedrandom": "^3.0.5" } }, - "node_modules/@tensorflow/tfjs-data/node_modules/node-fetch": { - "version": "2.6.13", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", - "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/@tensorflow/tfjs-data/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tensorflow/tfjs-data/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/@tensorflow/tfjs-data/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/@tensorflow/tfjs-layers": { "version": "4.22.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-4.22.0.tgz", @@ -5077,16 +4947,6 @@ "@tensorflow/tfjs-core": "4.22.0" } }, - "node_modules/@tensorflow/tfjs/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/@tensorflow/tfjs/node_modules/core-js": { "version": "3.29.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.29.1.tgz", @@ -5099,42 +4959,6 @@ "url": "https://opencollective.com/core-js" } }, - "node_modules/@tensorflow/tfjs/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@tensorflow/tfjs/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tensorflow/tfjs/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -5159,9 +4983,9 @@ } }, "node_modules/@transifex/api/node_modules/core-js": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.44.0.tgz", - "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==", + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.45.0.tgz", + "integrity": "sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5206,13 +5030,13 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/eslint": { @@ -5371,13 +5195,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.1.0.tgz", - "integrity": "sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==", + "version": "24.2.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.1.tgz", + "integrity": "sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.8.0" + "undici-types": "~7.10.0" } }, "node_modules/@types/node-fetch": { @@ -5391,23 +5215,6 @@ "form-data": "^4.0.4" } }, - "node_modules/@types/node-fetch/node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@types/node-hid": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/@types/node-hid/-/node-hid-1.3.4.tgz", @@ -6398,11 +6205,14 @@ "license": "MIT" }, "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "license": "Python-2.0" + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } }, "node_modules/array-bounds": { "version": "1.0.1", @@ -7006,9 +6816,9 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, "license": "MIT", "dependencies": { @@ -7029,7 +6839,7 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -7362,9 +7172,9 @@ "license": "ISC" }, "node_modules/browserslist": { - "version": "4.25.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", - "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "version": "4.25.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.2.tgz", + "integrity": "sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==", "dev": true, "funding": [ { @@ -7382,8 +7192,8 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001726", - "electron-to-chromium": "^1.5.173", + "caniuse-lite": "^1.0.30001733", + "electron-to-chromium": "^1.5.199", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.3" }, @@ -7936,9 +7746,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001727", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", - "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "version": "1.0.30001735", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001735.tgz", + "integrity": "sha512-EV/laoX7Wq2J9TQlyIXRxTJqIw4sxfXS4OYgudGxBYRuTv0q7AM6yMEpU/Vo1I94thg9U6EZ2NfZx9GJq83u7w==", "dev": true, "funding": [ { @@ -8753,9 +8563,9 @@ "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.44.0.tgz", - "integrity": "sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==", + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.45.0.tgz", + "integrity": "sha512-gRoVMBawZg0OnxaVv3zpqLLxaHmsubEGyTnqdpI/CEBvX4JadI1dMSHxagThprYRtSVbuQxvi6iUatdPxohHpA==", "dev": true, "license": "MIT", "dependencies": { @@ -8823,16 +8633,6 @@ "node": ">=6" } }, - "node_modules/coveralls/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/coveralls/node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -8847,6 +8647,21 @@ "node": ">=4" } }, + "node_modules/coveralls/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/coveralls/node_modules/js-yaml": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", @@ -8904,13 +8719,6 @@ "node": ">= 6" } }, - "node_modules/coveralls/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/coveralls/node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -9006,6 +8814,48 @@ "node-fetch": "^2.7.0" } }, + "node_modules/cross-fetch/node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/cross-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/cross-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/cross-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -10657,9 +10507,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.191", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.191.tgz", - "integrity": "sha512-xcwe9ELcuxYLUFqZZxL19Z6HVKcvNkIwhbHUz7L3us6u12yR+7uY89dSl570f/IqNthx8dAw3tojG7i4Ni4tDA==", + "version": "1.5.200", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.200.tgz", + "integrity": "sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w==", "dev": true, "license": "ISC" }, @@ -10772,9 +10622,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.18.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", - "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", "dev": true, "license": "MIT", "dependencies": { @@ -11194,9 +11044,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.8", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", - "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.9.tgz", + "integrity": "sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -11207,32 +11057,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.8", - "@esbuild/android-arm": "0.25.8", - "@esbuild/android-arm64": "0.25.8", - "@esbuild/android-x64": "0.25.8", - "@esbuild/darwin-arm64": "0.25.8", - "@esbuild/darwin-x64": "0.25.8", - "@esbuild/freebsd-arm64": "0.25.8", - "@esbuild/freebsd-x64": "0.25.8", - "@esbuild/linux-arm": "0.25.8", - "@esbuild/linux-arm64": "0.25.8", - "@esbuild/linux-ia32": "0.25.8", - "@esbuild/linux-loong64": "0.25.8", - "@esbuild/linux-mips64el": "0.25.8", - "@esbuild/linux-ppc64": "0.25.8", - "@esbuild/linux-riscv64": "0.25.8", - "@esbuild/linux-s390x": "0.25.8", - "@esbuild/linux-x64": "0.25.8", - "@esbuild/netbsd-arm64": "0.25.8", - "@esbuild/netbsd-x64": "0.25.8", - "@esbuild/openbsd-arm64": "0.25.8", - "@esbuild/openbsd-x64": "0.25.8", - "@esbuild/openharmony-arm64": "0.25.8", - "@esbuild/sunos-x64": "0.25.8", - "@esbuild/win32-arm64": "0.25.8", - "@esbuild/win32-ia32": "0.25.8", - "@esbuild/win32-x64": "0.25.8" + "@esbuild/aix-ppc64": "0.25.9", + "@esbuild/android-arm": "0.25.9", + "@esbuild/android-arm64": "0.25.9", + "@esbuild/android-x64": "0.25.9", + "@esbuild/darwin-arm64": "0.25.9", + "@esbuild/darwin-x64": "0.25.9", + "@esbuild/freebsd-arm64": "0.25.9", + "@esbuild/freebsd-x64": "0.25.9", + "@esbuild/linux-arm": "0.25.9", + "@esbuild/linux-arm64": "0.25.9", + "@esbuild/linux-ia32": "0.25.9", + "@esbuild/linux-loong64": "0.25.9", + "@esbuild/linux-mips64el": "0.25.9", + "@esbuild/linux-ppc64": "0.25.9", + "@esbuild/linux-riscv64": "0.25.9", + "@esbuild/linux-s390x": "0.25.9", + "@esbuild/linux-x64": "0.25.9", + "@esbuild/netbsd-arm64": "0.25.9", + "@esbuild/netbsd-x64": "0.25.9", + "@esbuild/openbsd-arm64": "0.25.9", + "@esbuild/openbsd-x64": "0.25.9", + "@esbuild/openharmony-arm64": "0.25.9", + "@esbuild/sunos-x64": "0.25.9", + "@esbuild/win32-arm64": "0.25.9", + "@esbuild/win32-ia32": "0.25.9", + "@esbuild/win32-x64": "0.25.9" } }, "node_modules/escalade": { @@ -12488,9 +12338,9 @@ } }, "node_modules/flow-remove-types": { - "version": "2.277.1", - "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.277.1.tgz", - "integrity": "sha512-xg4n6tHaRIocPNwrX3rN622kpWs1c97uV1J+oYAfIQmbZRGL/HrEdS1zenfYUv5PuZ3Ch4UGKFn8KS/EhfG/Fg==", + "version": "2.278.0", + "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.278.0.tgz", + "integrity": "sha512-0tqh3y8wGoTrgqGR9dT4UJdlmrE2IfzgTiuZyH+bUIfNdZcJ3ZagBW82+4BINftGlWiAf2eY+n7FKhx1spdmBg==", "dev": true, "license": "MIT", "dependencies": { @@ -12629,18 +12479,20 @@ } }, "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" } }, "node_modules/form-data-to-object": { @@ -14230,16 +14082,6 @@ "node": ">=0.10.0" } }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/gray-matter/node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -14268,13 +14110,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/gray-matter/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/grid-index": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", @@ -16338,6 +16173,50 @@ } } }, + "node_modules/jest-cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/jest-cli/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/jest-config": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", @@ -16548,23 +16427,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/jest-environment-jsdom/node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/jest-environment-jsdom/node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -17289,6 +17151,13 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -19297,9 +19166,10 @@ "optional": true }, "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-StxNAxh15zr77QvvkmveSQ8uCQ4+v5FkvNTj0OESmiHu+VRi/gXArXtkWMElOsOUNLtUEvI4yS+rdtOHZTwlQA==", + "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -19320,18 +19190,21 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, "license": "MIT" }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, "license": "BSD-2-Clause" }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -19615,16 +19488,6 @@ "node": ">=4" } }, - "node_modules/nyc/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, "node_modules/nyc/node_modules/cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", @@ -19930,13 +19793,6 @@ "rimraf": "bin.js" } }, - "node_modules/nyc/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/nyc/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -23796,9 +23652,9 @@ } }, "node_modules/scratch-blocks/node_modules/core-js": { - "version": "3.44.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.44.0.tgz", - "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==", + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.45.0.tgz", + "integrity": "sha512-c2KZL9lP4DjkN3hk/an4pWn5b5ZefhRJnAc42n6LJ19kSnbeRbdQZE5dSeE2LBol1OwJD3X1BQvFTAsa8ReeDA==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -24084,9 +23940,9 @@ "license": "MIT" }, "node_modules/seedrandom": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz", - "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", + "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", "dev": true, "license": "MIT" }, @@ -24444,6 +24300,13 @@ "seedrandom": "^2.4.2" } }, + "node_modules/shuffle-seed/node_modules/seedrandom": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz", + "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==", + "dev": true, + "license": "MIT" + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -24920,9 +24783,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", "dev": true, "license": "CC0-1.0" }, @@ -24963,9 +24826,9 @@ } }, "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, @@ -28006,9 +27869,9 @@ "license": "MIT" }, "node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, "license": "MIT", "engines": { @@ -28182,6 +28045,21 @@ "dev": true, "license": "MIT" }, + "node_modules/transifex/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/transifex/node_modules/qs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", @@ -28783,9 +28661,9 @@ } }, "node_modules/undici-types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", - "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", "dev": true, "license": "MIT" }, @@ -30058,22 +29936,22 @@ "license": "ISC" }, "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "license": "MIT", "dependencies": { - "cliui": "^8.0.1", + "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.3", + "string-width": "^4.2.0", "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/yargs-parser": { @@ -30087,29 +29965,14 @@ "decamelize": "^1.2.0" } }, - "node_modules/yargs/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/yauzl": { From 384ec3de6bb682e056a0470a26f9428906b00e02 Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Thu, 14 Aug 2025 16:25:12 +0300 Subject: [PATCH 112/129] fix: ensure thumbnail is refetched upon successful thumbnail update --- src/components/modal/share/modal.jsx | 13 +++++++++++-- src/components/modal/share/modal.scss | 1 + src/views/preview/project-view.jsx | 18 +++++++----------- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/components/modal/share/modal.jsx b/src/components/modal/share/modal.jsx index 3d0dfaf7886..9cde43596b5 100644 --- a/src/components/modal/share/modal.jsx +++ b/src/components/modal/share/modal.jsx @@ -19,7 +19,15 @@ const updateLocalStorage = (username = 'guest', dontShowAgain) => { // This modal uses texts from preview/l10n.json // Parametrise texts if needed to be used outside of the preview context. -const ShareModal = ({isOpen, onClose, onChangeThumbnail, onShare, projectThumbnailUrl, username}) => { +const ShareModal = ({ + isOpen, + onClose, + onChangeThumbnail, + onShare, + projectThumbnailUrl, + thumbnailRefreshKey = '', + username +}) => { const intl = useIntl(); const [dontShowAgain, setDontShowAgain] = useState(false); @@ -54,7 +62,7 @@ const ShareModal = ({isOpen, onClose, onChangeThumbnail, onShare, projectThumbna
    Project thumbnail @@ -108,6 +116,7 @@ ShareModal.propTypes = { onChangeThumbnail: PropTypes.func.isRequired, onShare: PropTypes.func.isRequired, projectThumbnailUrl: PropTypes.string, + thumbnailRefreshKey: PropTypes.string, username: PropTypes.string }; diff --git a/src/components/modal/share/modal.scss b/src/components/modal/share/modal.scss index 67f8e382cb8..0f7e5fcc9ad 100644 --- a/src/components/modal/share/modal.scss +++ b/src/components/modal/share/modal.scss @@ -28,6 +28,7 @@ .share-modal-inner { padding: 1.5rem; padding-bottom: 1rem; + border-radius: .5rem; gap: 1.5rem; background: white; font-size: 1rem; diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index f247b9b86f9..73e518c2fec 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -169,7 +169,6 @@ class Preview extends React.Component { 'addEventListeners', 'doShare', 'fetchCommunityData', - 'fetchProjectInfo', 'handleAddComment', 'handleClickLogo', 'handleDeleteComment', @@ -263,7 +262,8 @@ class Preview extends React.Component { singleCommentId: singleCommentId, greenFlagRecorded: false, tooltipDriver: null, - highlightDriver: null + highlightDriver: null, + thumbnailUrlRefreshKey: Date.now() }; /* In the beginning, if user is on mobile and landscape, go to fullscreen */ this.setScreenFromOrientation(); @@ -419,13 +419,6 @@ class Preview extends React.Component { this.props.getRemixes(this.state.projectId); } } - fetchProjectInfo () { - if (this.props.userPresent) { - this.props.getProjectInfo(this.state.projectId, this.props.user.token); - } else { - this.props.getProjectInfo(this.state.projectId); - } - } // This is copy of what is in save-project-to-server in GUI that adds // an extra get of the project info from api. We do this to wait for replication @@ -919,8 +912,10 @@ class Preview extends React.Component { this.context.successAlert({ id: 'project.updateThumbnail.success' }); - // Reload the project info to get the new thumbnail - this.fetchProjectInfo(); + // Force the thumbnail to be refetched on places where it is used + this.setState({ + thumbnailUrlRefreshKey: Date.now() + }); }; const onError = () => this.context.errorAlert({ id: 'project.updateThumbnail.error' @@ -1087,6 +1082,7 @@ class Preview extends React.Component { this.doShare(); }} projectThumbnailUrl={this.props.projectInfo.image} + thumbnailRefreshKey={this.state.thumbnailUrlRefreshKey} username={this.props.user.username} /> Date: Fri, 15 Aug 2025 10:10:45 +0000 Subject: [PATCH 113/129] fix(deps): update dependency scratch-l10n to v6.0.27 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2029373f1d5..195b0d0d554 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.26", + "scratch-l10n": "6.0.27", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23718,9 +23718,9 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.26", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.26.tgz", - "integrity": "sha512-YcnaEnESjM8kybbAA2moxlyeYJaDuKxR2EGuAwHp7/32NScLkblU/cs7tSK3URIiYnhnbNLUdra/8iHxTCS5EA==", + "version": "6.0.27", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.27.tgz", + "integrity": "sha512-3Cv7Sv3OFgK9aQCMNWuLHmFXG0cpMvBuwyWVaeJ3zJPjJWxroUL2LXHemmfZw1/1NjlLNEJrev3T44mU3cY5yA==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 9dbd41b3075..a4ff2a4b0e1 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.26", + "scratch-l10n": "6.0.27", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From f3dae5baf93b04cda584678ab5128b808543d92b Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Fri, 15 Aug 2025 15:13:15 +0300 Subject: [PATCH 114/129] feat: update thumbnail preview modal texts --- src/views/preview/l10n.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/preview/l10n.json b/src/views/preview/l10n.json index 6748a40d467..aefcfb2864a 100644 --- a/src/views/preview/l10n.json +++ b/src/views/preview/l10n.json @@ -78,7 +78,7 @@ "project.shareModal.description1": "You're about to share your project with this thumbnail:", "project.shareModal.description2": "Project thumbnails act like the front cover of your project. This image will appear in places like search results and your profile page to show other Scratchers what your project is about. If you'd like to change your project thumbnail, you can do so by clicking the \"Set Thumbnail\" button on your project page.", "project.shareModal.description3": "Are you sure you want to proceed with this thumbnail?", - "project.shareModal.changeThumbnail": "No, change thumbnail", - "project.shareModal.okay": "Yes, I am sure", + "project.shareModal.setNewThumbnail": "Set new thumbnail", + "project.shareModal.proceed": "Proceed with share", "project.shareModal.dontShowAgain": "Don't show this message again" } From 50714900cd5ed2c1c476839707acec94ab45ff4e Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Fri, 15 Aug 2025 15:13:56 +0300 Subject: [PATCH 115/129] feat: use local blob on page when updating thumbnail instead of refetching --- src/components/modal/share/modal.jsx | 17 +++++++++----- src/views/preview/project-view.jsx | 34 +++++++++++++++++++++------- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/components/modal/share/modal.jsx b/src/components/modal/share/modal.jsx index 9cde43596b5..5f0955758fa 100644 --- a/src/components/modal/share/modal.jsx +++ b/src/components/modal/share/modal.jsx @@ -1,4 +1,4 @@ -import React, {useCallback, useState} from 'react'; +import React, {useCallback, useState, useEffect} from 'react'; import PropTypes from 'prop-types'; import Modal from '../base/modal.jsx'; import ModalTitle from '../base/modal-title.jsx'; @@ -25,7 +25,6 @@ const ShareModal = ({ onChangeThumbnail, onShare, projectThumbnailUrl, - thumbnailRefreshKey = '', username }) => { const intl = useIntl(); @@ -45,6 +44,13 @@ const ShareModal = ({ onShare(); }, [username, dontShowAgain, onShare]); + // Preload the project thumbnail image to ensure it is ready when the modal opens. + useEffect(() => { + if (projectThumbnailUrl) { + new Image().src = projectThumbnailUrl; + } + }, [projectThumbnailUrl]); + return (
    Project thumbnail @@ -94,13 +100,13 @@ const ShareModal = ({ className="change-thumbnail-button" onClick={handleChangeThumbnail} > - +
    @@ -116,7 +122,6 @@ ShareModal.propTypes = { onChangeThumbnail: PropTypes.func.isRequired, onShare: PropTypes.func.isRequired, projectThumbnailUrl: PropTypes.string, - thumbnailRefreshKey: PropTypes.string, username: PropTypes.string }; diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index 73e518c2fec..f5bd2702b0e 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -218,7 +218,8 @@ class Preview extends React.Component { 'initCounts', 'pushHistory', 'renderLogin', - 'setScreenFromOrientation' + 'setScreenFromOrientation', + 'updateLocalThumbnailFromBlob' ]); const pathname = window.location.pathname.toLowerCase(); const parts = pathname.split('/').filter(Boolean); @@ -263,7 +264,7 @@ class Preview extends React.Component { greenFlagRecorded: false, tooltipDriver: null, highlightDriver: null, - thumbnailUrlRefreshKey: Date.now() + projectThumbnailUrl: '' }; /* In the beginning, if user is on mobile and landscape, go to fullscreen */ this.setScreenFromOrientation(); @@ -321,6 +322,12 @@ class Preview extends React.Component { } } } + if (this.props.projectInfo.image !== prevProps.projectInfo.image && + this.props.projectInfo.image !== this.state.projectThumbnailUrl) { + this.setState({ + projectThumbnailUrl: this.props.projectInfo.image + }); + } if (this.props.faved !== prevProps.faved || this.props.loved !== prevProps.loved) { this.setState({ // eslint-disable-line react/no-did-update-set-state clientFaved: this.props.faved, @@ -420,6 +427,18 @@ class Preview extends React.Component { } } + updateLocalThumbnailFromBlob (blob) { + const reader = new FileReader(); + + reader.readAsDataURL(blob); + reader.onload = () => { + const dataUri = reader.result; + this.setState({ + projectThumbnailUrl: dataUri + }); + }; + } + // This is copy of what is in save-project-to-server in GUI that adds // an extra get of the project info from api. We do this to wait for replication // lag to pass. This is intended to be a temporary fix until we use the data @@ -912,10 +931,10 @@ class Preview extends React.Component { this.context.successAlert({ id: 'project.updateThumbnail.success' }); - // Force the thumbnail to be refetched on places where it is used - this.setState({ - thumbnailUrlRefreshKey: Date.now() - }); + // Update the thumbnail to point to the blob, + // to avoid having to make another request to + // refetch the thumbnail. + this.updateLocalThumbnailFromBlob(blob); }; const onError = () => this.context.errorAlert({ id: 'project.updateThumbnail.error' @@ -1081,8 +1100,7 @@ class Preview extends React.Component { this.hideShareModal(); this.doShare(); }} - projectThumbnailUrl={this.props.projectInfo.image} - thumbnailRefreshKey={this.state.thumbnailUrlRefreshKey} + projectThumbnailUrl={this.state.projectThumbnailUrl} username={this.props.user.username} /> Date: Fri, 15 Aug 2025 15:19:25 +0300 Subject: [PATCH 116/129] feat: update default value of thumbnail url --- src/views/preview/project-view.jsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index f5bd2702b0e..a7a3190609a 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -264,7 +264,7 @@ class Preview extends React.Component { greenFlagRecorded: false, tooltipDriver: null, highlightDriver: null, - projectThumbnailUrl: '' + projectThumbnailUrl: this.props.projectInfo.image ?? '' }; /* In the beginning, if user is on mobile and landscape, go to fullscreen */ this.setScreenFromOrientation(); @@ -437,6 +437,7 @@ class Preview extends React.Component { projectThumbnailUrl: dataUri }); }; + reader.onerror = error => console.error('Error reading thumbnail blob:', error); } // This is copy of what is in save-project-to-server in GUI that adds From 02c781045c17437aedbb2942b42950d9f925ff64 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 15 Aug 2025 13:02:35 +0000 Subject: [PATCH 117/129] fix(deps): update dependency scratch-storage to ^4.0.211 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 195b0d0d554..680a0a18935 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.210" + "scratch-storage": "^4.0.211" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -23884,9 +23884,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.211", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.211.tgz", - "integrity": "sha512-ZRCHBRHXvndc7UyywsZocBiWEypDL5XUJw2VyS1Wmyje9SBvuo9XNlmMYKyjkXL9ctRz7PQHsx8Lm9CGUos60A==", + "version": "4.0.213", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.213.tgz", + "integrity": "sha512-SNlUp+opyxDslS/B9uYvc8hkibG2E4B63t3x0IjshJKNSupA/+2gDFYCKrqoR86t/UVVZ9NN++su942cuThTFg==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index a4ff2a4b0e1..e037320a0b6 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.210" + "scratch-storage": "^4.0.211" }, "devDependencies": { "@babel/cli": "7.28.0", From ab537ea8384783c9d6b77c7416dcf0ea1c415a4b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 15 Aug 2025 17:36:16 +0000 Subject: [PATCH 118/129] fix(deps): update dependency scratch-l10n to v6.0.28 --- package-lock.json | 30 +++++++++++++++++++++++++----- package.json | 2 +- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 680a0a18935..a8471c7ef96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.27", + "scratch-l10n": "6.0.28", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23718,9 +23718,9 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.27", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.27.tgz", - "integrity": "sha512-3Cv7Sv3OFgK9aQCMNWuLHmFXG0cpMvBuwyWVaeJ3zJPjJWxroUL2LXHemmfZw1/1NjlLNEJrev3T44mU3cY5yA==", + "version": "6.0.28", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.28.tgz", + "integrity": "sha512-DF0QIiazIfs2ehZvDlXV8BStDRluz0+k2xQaPyanNlP9uzwqsLjeYwsnGk4JgijhZq8UKGSycCO+6vA15pkizA==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { @@ -23731,7 +23731,7 @@ "lodash.defaultsdeep": "4.6.1", "mkdirp": "3.0.1", "transifex": "1.6.6", - "tsx": "4.20.3" + "tsx": "4.20.4" }, "bin": { "build-i18n-src": "scripts/build-i18n-src.mts", @@ -23776,6 +23776,26 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/scratch-l10n/node_modules/tsx": { + "version": "4.20.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.4.tgz", + "integrity": "sha512-yyxBKfORQ7LuRt/BQKBXrpcq59ZvSW0XxwfjAt3w2/8PmdxaFzijtMhTawprSHhpzeM5BgU2hXHG3lklIERZXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/scratch-paint": { "version": "3.0.339", "resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-3.0.339.tgz", diff --git a/package.json b/package.json index e037320a0b6..ee97a1d74ce 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.27", + "scratch-l10n": "6.0.28", "selenium-webdriver": "4.34.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From fe6df54d713076ba9dce7429829bbc03998b1a03 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 15 Aug 2025 21:12:14 +0000 Subject: [PATCH 119/129] chore(deps): update dependency webpack to v5.101.1 --- package-lock.json | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index a8471c7ef96..4ec1a84067f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -120,7 +120,7 @@ "tap": "14.11.0", "url-loader": "3.0.0", "use-onclickoutside": "0.4.1", - "webpack": "5.101.0", + "webpack": "5.101.1", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-middleware": "5.3.4", @@ -29248,9 +29248,9 @@ } }, "node_modules/webpack": { - "version": "5.101.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.0.tgz", - "integrity": "sha512-B4t+nJqytPeuZlHuIKTbalhljIFXeNRqrUGAQgTGlfOl2lXXKXw+yZu6bicycP+PUlM44CxBjCFD6aciKFT3LQ==", + "version": "5.101.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.1.tgz", + "integrity": "sha512-rHY3vHXRbkSfhG6fH8zYQdth/BtDgXXuR2pHF++1f/EBkI8zkgM5XWfsC3BvOoW9pr1CvZ1qQCxhCEsbNgT50g==", "dev": true, "license": "MIT", "dependencies": { @@ -29264,7 +29264,7 @@ "acorn-import-phases": "^1.0.3", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.2", + "enhanced-resolve": "^5.17.3", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", diff --git a/package.json b/package.json index ee97a1d74ce..dae6f91b177 100644 --- a/package.json +++ b/package.json @@ -156,7 +156,7 @@ "tap": "14.11.0", "url-loader": "3.0.0", "use-onclickoutside": "0.4.1", - "webpack": "5.101.0", + "webpack": "5.101.1", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-middleware": "5.3.4", From ebc8654bcd8d73f8cf486b005d14b24635b4a845 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 16 Aug 2025 01:21:47 +0000 Subject: [PATCH 120/129] chore(deps): update dependency selenium-webdriver to v4.35.0 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4ec1a84067f..b0e85214455 100644 --- a/package-lock.json +++ b/package-lock.json @@ -113,7 +113,7 @@ "sass": "1.90.0", "sass-loader": "10.5.2", "scratch-l10n": "6.0.28", - "selenium-webdriver": "4.34.0", + "selenium-webdriver": "4.35.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", "style-loader": "4.0.0", @@ -23988,9 +23988,9 @@ "license": "MIT" }, "node_modules/selenium-webdriver": { - "version": "4.34.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.34.0.tgz", - "integrity": "sha512-zGfQFcsASAv3KrYzYh+iw4fFqB7iZAgHW7BU6rRz7isK1i1X4x3LvjmZad4bUUgHDwTnAhlqTzDh21byB+zHMg==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.35.0.tgz", + "integrity": "sha512-Baaeiuyu7BIIsSYf0SI7Mi55gsNmdI00KM0Hcofw1RnAY+0QEVpdh5yAxueDxgTZS8vcbGZFU0NJ6Qc1riIrLg==", "dev": true, "funding": [ { diff --git a/package.json b/package.json index dae6f91b177..746ea84eeab 100644 --- a/package.json +++ b/package.json @@ -149,7 +149,7 @@ "sass": "1.90.0", "sass-loader": "10.5.2", "scratch-l10n": "6.0.28", - "selenium-webdriver": "4.34.0", + "selenium-webdriver": "4.35.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", "style-loader": "4.0.0", From 13d61d3dd64e13e50032a4c5adfed0a17048b1cb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Aug 2025 09:12:46 +0000 Subject: [PATCH 121/129] fix(deps): update dependency scratch-l10n to v6.0.30 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index b0e85214455..0e009dab003 100644 --- a/package-lock.json +++ b/package-lock.json @@ -112,7 +112,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.28", + "scratch-l10n": "6.0.30", "selenium-webdriver": "4.35.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", @@ -23718,9 +23718,9 @@ } }, "node_modules/scratch-l10n": { - "version": "6.0.28", - "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.28.tgz", - "integrity": "sha512-DF0QIiazIfs2ehZvDlXV8BStDRluz0+k2xQaPyanNlP9uzwqsLjeYwsnGk4JgijhZq8UKGSycCO+6vA15pkizA==", + "version": "6.0.30", + "resolved": "https://registry.npmjs.org/scratch-l10n/-/scratch-l10n-6.0.30.tgz", + "integrity": "sha512-put22RWdf6jEq8jZopYFpXCR7/he/O1tEB+ene3fB1xRoknkdQxE1LrCq6D5WYl8kb+dbr7YmiyVJhOHsZ2MKg==", "dev": true, "license": "AGPL-3.0-only", "dependencies": { diff --git a/package.json b/package.json index 746ea84eeab..020109acb6d 100644 --- a/package.json +++ b/package.json @@ -148,7 +148,7 @@ "regenerator-runtime": "0.13.9", "sass": "1.90.0", "sass-loader": "10.5.2", - "scratch-l10n": "6.0.28", + "scratch-l10n": "6.0.30", "selenium-webdriver": "4.35.0", "slick-carousel": "1.8.1", "stream-browserify": "3.0.0", From 883c5f3c610b06ccf4f571fcd747538d87b804e9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Aug 2025 12:58:41 +0000 Subject: [PATCH 122/129] fix(deps): update dependency scratch-storage to ^4.0.213 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0e009dab003..95b9d1f9dc6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.211" + "scratch-storage": "^4.0.213" }, "devDependencies": { "@babel/cli": "7.28.0", @@ -23904,9 +23904,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.213", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.213.tgz", - "integrity": "sha512-SNlUp+opyxDslS/B9uYvc8hkibG2E4B63t3x0IjshJKNSupA/+2gDFYCKrqoR86t/UVVZ9NN++su942cuThTFg==", + "version": "4.0.214", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.214.tgz", + "integrity": "sha512-ybAfeJ8v4JyTUYR7ui5vxVdSJJWzrte6WuoWA2VWTp2BXWICr+bYRDvDNV/IKVasIKQ4cDDD5ZYKSkKKwiPC/Q==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index 020109acb6d..544a482cce2 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.211" + "scratch-storage": "^4.0.213" }, "devDependencies": { "@babel/cli": "7.28.0", From 8f12031c35d59ce558f603078ade28755af764b4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Aug 2025 17:43:46 +0000 Subject: [PATCH 123/129] chore(deps): update babel monorepo to v7.28.3 --- package-lock.json | 44 ++++++++++++++++++++++---------------------- package.json | 6 +++--- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/package-lock.json b/package-lock.json index 95b9d1f9dc6..6da91f652b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -26,13 +26,13 @@ "scratch-storage": "^4.0.213" }, "devDependencies": { - "@babel/cli": "7.28.0", - "@babel/core": "7.28.0", + "@babel/cli": "7.28.3", + "@babel/core": "7.28.3", "@babel/eslint-parser": "7.28.0", "@babel/plugin-syntax-dynamic-import": "7.8.3", "@babel/plugin-transform-async-to-generator": "7.27.1", "@babel/plugin-transform-object-rest-spread": "7.28.0", - "@babel/preset-env": "7.28.0", + "@babel/preset-env": "7.28.3", "@babel/preset-react": "7.27.1", "@formatjs/intl-datetimeformat": "6.18.0", "@formatjs/intl-locale": "3.4.6", @@ -163,9 +163,9 @@ "license": "ISC" }, "node_modules/@babel/cli": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.0.tgz", - "integrity": "sha512-CYrZG7FagtE8ReKDBfItxnrEBf2khq2eTMnPuqO8UVN0wzhp1eMX1wfda8b1a32l2aqYLwRRIOGNovm8FVzmMw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.28.3.tgz", + "integrity": "sha512-n1RU5vuCX0CsaqaXm9I0KUCNKNQMy5epmzl/xdSSm70bSqhg9GWhgeosypyQLc0bK24+Xpk1WGzZlI9pJtkZdg==", "dev": true, "license": "MIT", "dependencies": { @@ -240,22 +240,22 @@ } }, "node_modules/@babel/core": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.0.tgz", - "integrity": "sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", + "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.0", + "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.27.3", - "@babel/helpers": "^7.27.6", - "@babel/parser": "^7.28.0", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.0", - "@babel/types": "^7.28.0", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -1905,9 +1905,9 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.0.tgz", - "integrity": "sha512-VmaxeGOwuDqzLl5JUkIRM1X2Qu2uKGxHEQWh+cvvbl7JuJRgKGJSfsEF/bUaxFhJl/XAyxBe7q7qSuTbKFuCyg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.3.tgz", + "integrity": "sha512-ROiDcM+GbYVPYBOeCR6uBXKkQpBExLl8k9HO1ygXEyds39j+vCCsjmj7S8GOniZQlEs81QlkdJZe76IpLSiqpg==", "dev": true, "license": "MIT", "dependencies": { @@ -1919,7 +1919,7 @@ "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.27.1", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.27.1", "@babel/plugin-syntax-import-attributes": "^7.27.1", @@ -1930,8 +1930,8 @@ "@babel/plugin-transform-block-scoped-functions": "^7.27.1", "@babel/plugin-transform-block-scoping": "^7.28.0", "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.27.1", - "@babel/plugin-transform-classes": "^7.28.0", + "@babel/plugin-transform-class-static-block": "^7.28.3", + "@babel/plugin-transform-classes": "^7.28.3", "@babel/plugin-transform-computed-properties": "^7.27.1", "@babel/plugin-transform-destructuring": "^7.28.0", "@babel/plugin-transform-dotall-regex": "^7.27.1", @@ -1963,7 +1963,7 @@ "@babel/plugin-transform-private-methods": "^7.27.1", "@babel/plugin-transform-private-property-in-object": "^7.27.1", "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.0", + "@babel/plugin-transform-regenerator": "^7.28.3", "@babel/plugin-transform-regexp-modifiers": "^7.27.1", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", diff --git a/package.json b/package.json index 544a482cce2..403d6f36107 100644 --- a/package.json +++ b/package.json @@ -62,13 +62,13 @@ "scratch-storage": "^4.0.213" }, "devDependencies": { - "@babel/cli": "7.28.0", - "@babel/core": "7.28.0", + "@babel/cli": "7.28.3", + "@babel/core": "7.28.3", "@babel/eslint-parser": "7.28.0", "@babel/plugin-syntax-dynamic-import": "7.8.3", "@babel/plugin-transform-async-to-generator": "7.27.1", "@babel/plugin-transform-object-rest-spread": "7.28.0", - "@babel/preset-env": "7.28.0", + "@babel/preset-env": "7.28.3", "@babel/preset-react": "7.27.1", "@formatjs/intl-datetimeformat": "6.18.0", "@formatjs/intl-locale": "3.4.6", From 20106cc111b0e7edc4eacc289a0847392d240ec1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 17 Aug 2025 21:26:42 +0000 Subject: [PATCH 124/129] chore(deps): update dependency webpack to v5.101.2 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6da91f652b0..0109cd2af15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -120,7 +120,7 @@ "tap": "14.11.0", "url-loader": "3.0.0", "use-onclickoutside": "0.4.1", - "webpack": "5.101.1", + "webpack": "5.101.2", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-middleware": "5.3.4", @@ -29248,9 +29248,9 @@ } }, "node_modules/webpack": { - "version": "5.101.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.1.tgz", - "integrity": "sha512-rHY3vHXRbkSfhG6fH8zYQdth/BtDgXXuR2pHF++1f/EBkI8zkgM5XWfsC3BvOoW9pr1CvZ1qQCxhCEsbNgT50g==", + "version": "5.101.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.101.2.tgz", + "integrity": "sha512-4JLXU0tD6OZNVqlwzm3HGEhAHufSiyv+skb7q0d2367VDMzrU1Q/ZeepvkcHH0rZie6uqEtTQQe0OEOOluH3Mg==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 403d6f36107..7714582e8f9 100644 --- a/package.json +++ b/package.json @@ -156,7 +156,7 @@ "tap": "14.11.0", "url-loader": "3.0.0", "use-onclickoutside": "0.4.1", - "webpack": "5.101.1", + "webpack": "5.101.2", "webpack-bundle-analyzer": "4.10.2", "webpack-cli": "5.1.4", "webpack-dev-middleware": "5.3.4", From e19c183e4e0477924261aa5e88a5754c28de2c34 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Aug 2025 02:06:42 +0000 Subject: [PATCH 125/129] fix(deps): lock file maintenance --- package-lock.json | 70 +++++++++++++++++++++++------------------------ 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0109cd2af15..89edd69ee8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4621,6 +4621,26 @@ "minilog": "^3.1.0" } }, + "node_modules/@scratch/scratch-gui/node_modules/tsx": { + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.3.tgz", + "integrity": "sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.25.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, "node_modules/@scratch/scratch-render": { "version": "11.6.0-face-sensing.2", "resolved": "https://registry.npmjs.org/@scratch/scratch-render/-/scratch-render-11.6.0-face-sensing.2.tgz", @@ -5195,9 +5215,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.2.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.1.tgz", - "integrity": "sha512-DRh5K+ka5eJic8CjH7td8QpYEV6Zo10gfRkjHCO3weqZHWDtAaSTFtl4+VMqOJ4N5jcuhZ9/l+yy8rVgw7BQeQ==", + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", + "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", "dev": true, "license": "MIT", "dependencies": { @@ -10507,9 +10527,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.200", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.200.tgz", - "integrity": "sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w==", + "version": "1.5.203", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.203.tgz", + "integrity": "sha512-uz4i0vLhfm6dLZWbz/iH88KNDV+ivj5+2SA+utpgjKaj9Q0iDLuwk6Idhe9BTxciHudyx6IvTvijhkPvFGUQ0g==", "dev": true, "license": "ISC" }, @@ -12338,9 +12358,9 @@ } }, "node_modules/flow-remove-types": { - "version": "2.278.0", - "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.278.0.tgz", - "integrity": "sha512-0tqh3y8wGoTrgqGR9dT4UJdlmrE2IfzgTiuZyH+bUIfNdZcJ3ZagBW82+4BINftGlWiAf2eY+n7FKhx1spdmBg==", + "version": "2.279.0", + "resolved": "https://registry.npmjs.org/flow-remove-types/-/flow-remove-types-2.279.0.tgz", + "integrity": "sha512-bPFloMR/A2b/r/sIsf7Ix0LaMicCJNjwhXc4xEEQVzJCIz5u7C7XDaEOXOiqveKlCYK7DcBNn6R01Cbbc9gsYA==", "dev": true, "license": "MIT", "dependencies": { @@ -13500,9 +13520,9 @@ "license": "MIT" }, "node_modules/gl-vec3": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gl-vec3/-/gl-vec3-1.1.3.tgz", - "integrity": "sha512-jduKUqT0SGH02l8Yl+mV1yVsDfYgQAJyXGxkJQGyxPLHRiW25DwVIRPt6uvhrEMHftJfqhqKthRcyZqNEl9Xdw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gl-vec3/-/gl-vec3-1.2.0.tgz", + "integrity": "sha512-ynW7j5ZshRTHXG5UPC5u6G52cBCNx53LbNlq2HQ1bAosZbO4wOCEBufXS7KGiKL1slMgy4j/77Ikt+vMznouLg==", "dev": true, "license": "zlib" }, @@ -23776,26 +23796,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/scratch-l10n/node_modules/tsx": { - "version": "4.20.4", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.4.tgz", - "integrity": "sha512-yyxBKfORQ7LuRt/BQKBXrpcq59ZvSW0XxwfjAt3w2/8PmdxaFzijtMhTawprSHhpzeM5BgU2hXHG3lklIERZXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.25.0", - "get-tsconfig": "^4.7.5" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, "node_modules/scratch-paint": { "version": "3.0.339", "resolved": "https://registry.npmjs.org/scratch-paint/-/scratch-paint-3.0.339.tgz", @@ -28276,9 +28276,9 @@ "license": "0BSD" }, "node_modules/tsx": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.3.tgz", - "integrity": "sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==", + "version": "4.20.4", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.4.tgz", + "integrity": "sha512-yyxBKfORQ7LuRt/BQKBXrpcq59ZvSW0XxwfjAt3w2/8PmdxaFzijtMhTawprSHhpzeM5BgU2hXHG3lklIERZXg==", "dev": true, "license": "MIT", "dependencies": { From b6e23e8ddadd15aa4902ae7740d0a3032de2c92d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 18 Aug 2025 07:10:22 +0000 Subject: [PATCH 126/129] fix(deps): update dependency scratch-storage to ^4.0.214 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 89edd69ee8d..7a1a7d8ba01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.213" + "scratch-storage": "^4.0.214" }, "devDependencies": { "@babel/cli": "7.28.3", @@ -23904,9 +23904,9 @@ } }, "node_modules/scratch-storage": { - "version": "4.0.214", - "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.214.tgz", - "integrity": "sha512-ybAfeJ8v4JyTUYR7ui5vxVdSJJWzrte6WuoWA2VWTp2BXWICr+bYRDvDNV/IKVasIKQ4cDDD5ZYKSkKKwiPC/Q==", + "version": "4.0.215", + "resolved": "https://registry.npmjs.org/scratch-storage/-/scratch-storage-4.0.215.tgz", + "integrity": "sha512-ZMEbX1Zhj9PJGrVceaV4leU2HJ5dPgzt4h0tki9Jo+SyUJkICC9Hspjh+nz+T3GJoY3494T0tFouIaKLf0Mgog==", "license": "AGPL-3.0-only", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/package.json b/package.json index 7714582e8f9..386c4fb6411 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "react-twitter-embed": "3.0.3", "react-use": "17.6.0", "scratch-parser": "6.0.0", - "scratch-storage": "^4.0.213" + "scratch-storage": "^4.0.214" }, "devDependencies": { "@babel/cli": "7.28.3", From 24791c0e4bff78ddb5690a2ced6994c0da7a9d10 Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Tue, 19 Aug 2025 13:01:10 +0300 Subject: [PATCH 127/129] feat: track set thumbnail button clicks --- src/views/preview/project-view.jsx | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index a7a3190609a..05935543401 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -941,6 +941,17 @@ class Preview extends React.Component { id: 'project.updateThumbnail.error' }); this.hidehighlightSetThumbnailButton(); + + // Track the button click in GA + triggerAnalyticsEvent({ + event: 'thumbnail-update-button-clicked', + // This is a user property - ideally it would be set once on page load, + // but since this is the only event that uses it, we can set it here + // for simplicity for now. + user_id: this.props.user.id?.toString(), + project_id: id + }); + return this.props.handleUpdateProjectThumbnail( id, blob, From f5e6216a66407f227e9bdbf1920a6d7a3a0858b0 Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Tue, 19 Aug 2025 13:01:51 +0300 Subject: [PATCH 128/129] bugfix: fix thumbnail image border radius --- src/components/modal/share/modal.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/modal/share/modal.scss b/src/components/modal/share/modal.scss index 0f7e5fcc9ad..4b5f3fd8350 100644 --- a/src/components/modal/share/modal.scss +++ b/src/components/modal/share/modal.scss @@ -28,7 +28,6 @@ .share-modal-inner { padding: 1.5rem; padding-bottom: 1rem; - border-radius: .5rem; gap: 1.5rem; background: white; font-size: 1rem; @@ -42,6 +41,7 @@ } .thumbnail-img { + border-radius: .5rem; width: 300px; height: 240px; } From 83e8ae12aa0ef72dd8a78c29aafe371ea4ff1875 Mon Sep 17 00:00:00 2001 From: Kaloyan Manolov Date: Tue, 19 Aug 2025 13:06:02 +0300 Subject: [PATCH 129/129] feat: change event name --- src/views/preview/project-view.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/preview/project-view.jsx b/src/views/preview/project-view.jsx index 05935543401..2daf3e03371 100644 --- a/src/views/preview/project-view.jsx +++ b/src/views/preview/project-view.jsx @@ -944,7 +944,7 @@ class Preview extends React.Component { // Track the button click in GA triggerAnalyticsEvent({ - event: 'thumbnail-update-button-clicked', + event: 'set-thumbnail-button-click', // This is a user property - ideally it would be set once on page load, // but since this is the only event that uses it, we can set it here // for simplicity for now.