Compare commits

...

7 Commits

Author SHA1 Message Date
Renovate Bot
b6e4d3b22d Update dependency react-dom to v19.0.0
Some checks failed
Playwright Tests / test (pull_request) Has been skipped
Add copyright notice / copyright_notice (pull_request) Successful in 1m42s
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m10s
Build Nginx-based docker image / build-static-assets (push) Failing after 5m51s
2025-01-13 03:04:18 +00:00
0c05cf7661 Merge pull request 'Prevent duplicate groups in the tree list' (#178) from fix-dup-groups into main
All checks were successful
Playwright Tests / test (push) Has been skipped
Check usage of free licenses / build-static-assets (push) Successful in 22s
Build Nginx-based docker image / build-static-assets (push) Successful in 3m11s
Reviewed-on: #178
2025-01-12 22:17:27 +00:00
f0e6ff9425 Prevent duplicate groups in the tree list
All checks were successful
Playwright Tests / test (pull_request) Has been skipped
Check usage of free licenses / build-static-assets (pull_request) Successful in 30s
Add copyright notice / copyright_notice (pull_request) Successful in 32s
Build Nginx-based docker image / build-static-assets (push) Successful in 2m33s
2025-01-12 23:14:50 +01:00
20bd7f5983 Merge pull request 'Update dependency @tailwindcss/forms to v0.5.10' (#172) from renovate/tailwindcss-forms-0.x-lockfile into main
All checks were successful
Playwright Tests / test (push) Has been skipped
Check usage of free licenses / build-static-assets (push) Successful in 17s
Build Nginx-based docker image / build-static-assets (push) Successful in 4m6s
Reviewed-on: #172
2025-01-12 21:47:37 +00:00
52902ff2ba Merge pull request 'Define a button to load the default affinities of a group' (#177) from affinity-reset into main
All checks were successful
Playwright Tests / test (push) Has been skipped
Check usage of free licenses / build-static-assets (push) Successful in 1m29s
Build Nginx-based docker image / build-static-assets (push) Successful in 5m42s
Reviewed-on: #177
2025-01-12 21:27:56 +00:00
c233cb60de Define a button to load the default affinities of a group
All checks were successful
Playwright Tests / test (pull_request) Has been skipped
Add copyright notice / copyright_notice (pull_request) Successful in 2m0s
Check usage of free licenses / build-static-assets (pull_request) Successful in 3m18s
Build Nginx-based docker image / build-static-assets (push) Successful in 7m19s
2025-01-12 20:54:41 +01:00
Renovate Bot
44ba54db95 Update dependency @tailwindcss/forms to v0.5.10
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m20s
Playwright Tests / test (pull_request) Has been skipped
Add copyright notice / copyright_notice (pull_request) Successful in 2m26s
Build Nginx-based docker image / build-static-assets (push) Successful in 4m45s
2025-01-11 03:11:24 +00:00
5 changed files with 53 additions and 38 deletions

View File

@ -48,6 +48,16 @@ export default function AffinitiesFormDialog({ groups, group, visible, onHide }:
}); });
} }
function resetAffinities() {
fetch(`/api/${getSlug()}/groups/${group?.id}/affinities/default`, {
method: 'GET',
headers: {
'Accept': 'application/json',
}
}).then((response) => response.json())
.then(setAffinities);
}
return ( return (
<Dialog header="Update affinities" visible={visible} style={{ width: '60vw' }} onHide={onHide}> <Dialog header="Update affinities" visible={visible} style={{ width: '60vw' }} onHide={onHide}>
{!isLoadingAffinities && <div className="card justify-evenly py-5 bg-gray-200 flex flex-col"> {!isLoadingAffinities && <div className="card justify-evenly py-5 bg-gray-200 flex flex-col">
@ -61,7 +71,10 @@ export default function AffinitiesFormDialog({ groups, group, visible, onHide }:
</div>) </div>)
} }
<button className={classNames('primary')} onClick={submitAffinities} >Update</button> <div className="flex justify-center">
<button className={classNames('gray')} onClick={resetAffinities} >Reset</button>
<button className={classNames('primary')} onClick={submitAffinities} >Update</button>
</div>
</div> </div>
} }
</Dialog> </Dialog>

View File

@ -2,13 +2,14 @@
import clsx from "clsx"; import clsx from "clsx";
type ButtonColor = 'primary' | 'blue' | 'green' | 'red' | 'yellow'; type ButtonColor = 'primary' | 'blue' | 'green' | 'red' | 'yellow' | 'gray';
export function classNames(type: ButtonColor) { export function classNames(type: ButtonColor) {
return (clsx("text-white py-1 px-2 mx-1 rounded disabled:opacity-50 disabled:cursor-not-allowed", { return (clsx("text-white py-1 px-2 mx-1 rounded disabled:opacity-50 disabled:cursor-not-allowed", {
'bg-blue-400 hover:bg-blue-600': type === 'primary' || type === 'blue', 'bg-blue-400 hover:bg-blue-600': type === 'primary' || type === 'blue',
'bg-green-500 hover:bg-green-600': type === 'green', 'bg-green-500 hover:bg-green-600': type === 'green',
'bg-red-500 hover:bg-red-600': type === 'red', 'bg-red-500 hover:bg-red-600': type === 'red',
'bg-yellow-500 hover:bg-yellow-700': type === 'yellow' 'bg-yellow-500 hover:bg-yellow-700': type === 'yellow',
'bg-gray-500 hover:bg-gray-700': type === 'gray'
})) }))
} }

View File

@ -35,6 +35,7 @@ export default function GroupsTable({ groups, onUpdate, onEdit, onEditAffinities
return acc; return acc;
}, new Map()); }, new Map());
groups.forEach(group => group.children = []);
groups.forEach(group => { groups.forEach(group => {
if (group.parentId) { if (group.parentId) {
const parent = index.get(group.parentId); const parent = index.get(group.parentId);

View File

@ -17,7 +17,7 @@
"primeicons": "^7.0.0", "primeicons": "^7.0.0",
"primereact": "^10.8.2", "primereact": "^10.8.2",
"react": "19.0.0-rc-f38c22b244-20240704", "react": "19.0.0-rc-f38c22b244-20240704",
"react-dom": "19.0.0-rc-f38c22b244-20240704", "react-dom": "19.0.0",
"tailwindcss": "3.4.17", "tailwindcss": "3.4.17",
"typescript": "5.7.3", "typescript": "5.7.3",
"use-debounce": "^10.0.1", "use-debounce": "^10.0.1",
@ -29,7 +29,7 @@
"@types/bcrypt": "^5.0.2", "@types/bcrypt": "^5.0.2",
"@types/node": "22.10.5", "@types/node": "22.10.5",
"@types/react": "18.3.18", "@types/react": "18.3.18",
"@types/react-dom": "18.3.5" "@types/react-dom": "19.0.3"
}, },
"engines": { "engines": {
"node": ">=23.0.0" "node": ">=23.0.0"

66
pnpm-lock.yaml generated
View File

@ -13,7 +13,7 @@ importers:
version: 2.2.0(react@19.0.0-rc-f38c22b244-20240704) version: 2.2.0(react@19.0.0-rc-f38c22b244-20240704)
'@tailwindcss/forms': '@tailwindcss/forms':
specifier: ^0.5.7 specifier: ^0.5.7
version: 0.5.9(tailwindcss@3.4.17) version: 0.5.10(tailwindcss@3.4.17)
autoprefixer: autoprefixer:
specifier: 10.4.20 specifier: 10.4.20
version: 10.4.20(postcss@8.4.49) version: 10.4.20(postcss@8.4.49)
@ -25,10 +25,10 @@ importers:
version: 2.1.1 version: 2.1.1
next: next:
specifier: 15.1.4 specifier: 15.1.4
version: 15.1.4(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) version: 15.1.4(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704)
next-auth: next-auth:
specifier: 5.0.0-beta.25 specifier: 5.0.0-beta.25
version: 5.0.0-beta.25(next@15.1.4(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) version: 5.0.0-beta.25(next@15.1.4(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704)
postcss: postcss:
specifier: 8.4.49 specifier: 8.4.49
version: 8.4.49 version: 8.4.49
@ -37,13 +37,13 @@ importers:
version: 7.0.0 version: 7.0.0
primereact: primereact:
specifier: ^10.8.2 specifier: ^10.8.2
version: 10.9.1(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) version: 10.9.1(@types/react@18.3.18)(react-dom@19.0.0(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704)
react: react:
specifier: 19.0.0-rc-f38c22b244-20240704 specifier: 19.0.0-rc-f38c22b244-20240704
version: 19.0.0-rc-f38c22b244-20240704 version: 19.0.0-rc-f38c22b244-20240704
react-dom: react-dom:
specifier: 19.0.0-rc-f38c22b244-20240704 specifier: 19.0.0
version: 19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704) version: 19.0.0(react@19.0.0-rc-f38c22b244-20240704)
tailwindcss: tailwindcss:
specifier: 3.4.17 specifier: 3.4.17
version: 3.4.17 version: 3.4.17
@ -73,8 +73,8 @@ importers:
specifier: 18.3.18 specifier: 18.3.18
version: 18.3.18 version: 18.3.18
'@types/react-dom': '@types/react-dom':
specifier: 18.3.5 specifier: 19.0.3
version: 18.3.5(@types/react@18.3.18) version: 19.0.3(@types/react@18.3.18)
packages: packages:
@ -320,10 +320,10 @@ packages:
'@swc/helpers@0.5.15': '@swc/helpers@0.5.15':
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
'@tailwindcss/forms@0.5.9': '@tailwindcss/forms@0.5.10':
resolution: {integrity: sha512-tM4XVr2+UVTxXJzey9Twx48c1gcxFStqn1pQz0tRsX8o3DvxhN5oY5pvyAbUx7VTaZxpej4Zzvc6h+1RJBzpIg==} resolution: {integrity: sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==}
peerDependencies: peerDependencies:
tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20' tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1'
'@types/bcrypt@5.0.2': '@types/bcrypt@5.0.2':
resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==} resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==}
@ -337,10 +337,10 @@ packages:
'@types/prop-types@15.7.12': '@types/prop-types@15.7.12':
resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==}
'@types/react-dom@18.3.5': '@types/react-dom@19.0.3':
resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} resolution: {integrity: sha512-0Knk+HJiMP/qOZgMyNFamlIjw9OFCsyC2ZbigmEEyXXixgre6IQpm/4V+r3qH4GC1JPvRJKInw+on2rV6YZLeA==}
peerDependencies: peerDependencies:
'@types/react': ^18.0.0 '@types/react': ^19.0.0
'@types/react-transition-group@4.4.12': '@types/react-transition-group@4.4.12':
resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==}
@ -928,10 +928,10 @@ packages:
queue-microtask@1.2.3: queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
react-dom@19.0.0-rc-f38c22b244-20240704: react-dom@19.0.0:
resolution: {integrity: sha512-g89q2pf3irdpKFUMgCQgtxgqo3TSV1k1J6Sc8God4FwfxuNmAOOthkijENe5XZe6VeV1tor9DPzpjdTD9EyvNw==} resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==}
peerDependencies: peerDependencies:
react: 19.0.0-rc-f38c22b244-20240704 react: ^19.0.0
react-is@16.13.1: react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
@ -979,8 +979,8 @@ packages:
safe-buffer@5.2.1: safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
scheduler@0.25.0-rc-f38c22b244-20240704: scheduler@0.25.0:
resolution: {integrity: sha512-uAELK9fHhvg7kDQhk29+uO8FUMWUpkg9WpzkNXFP+BJy5HEtqnajde3CxuSgh202WH9TqoaiWT1mdA3DvUu6cQ==} resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==}
semver@6.3.1: semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
@ -1358,7 +1358,7 @@ snapshots:
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1
'@tailwindcss/forms@0.5.9(tailwindcss@3.4.17)': '@tailwindcss/forms@0.5.10(tailwindcss@3.4.17)':
dependencies: dependencies:
mini-svg-data-uri: 1.4.4 mini-svg-data-uri: 1.4.4
tailwindcss: 3.4.17 tailwindcss: 3.4.17
@ -1375,7 +1375,7 @@ snapshots:
'@types/prop-types@15.7.12': {} '@types/prop-types@15.7.12': {}
'@types/react-dom@18.3.5(@types/react@18.3.18)': '@types/react-dom@19.0.3(@types/react@18.3.18)':
dependencies: dependencies:
'@types/react': 18.3.18 '@types/react': 18.3.18
@ -1740,13 +1740,13 @@ snapshots:
nanoid@3.3.7: {} nanoid@3.3.7: {}
next-auth@5.0.0-beta.25(next@15.1.4(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): next-auth@5.0.0-beta.25(next@15.1.4(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704):
dependencies: dependencies:
'@auth/core': 0.37.2 '@auth/core': 0.37.2
next: 15.1.4(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) next: 15.1.4(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704)
react: 19.0.0-rc-f38c22b244-20240704 react: 19.0.0-rc-f38c22b244-20240704
next@15.1.4(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): next@15.1.4(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704):
dependencies: dependencies:
'@next/env': 15.1.4 '@next/env': 15.1.4
'@swc/counter': 0.1.3 '@swc/counter': 0.1.3
@ -1755,7 +1755,7 @@ snapshots:
caniuse-lite: 1.0.30001651 caniuse-lite: 1.0.30001651
postcss: 8.4.31 postcss: 8.4.31
react: 19.0.0-rc-f38c22b244-20240704 react: 19.0.0-rc-f38c22b244-20240704
react-dom: 19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704) react-dom: 19.0.0(react@19.0.0-rc-f38c22b244-20240704)
styled-jsx: 5.1.6(react@19.0.0-rc-f38c22b244-20240704) styled-jsx: 5.1.6(react@19.0.0-rc-f38c22b244-20240704)
optionalDependencies: optionalDependencies:
'@next/swc-darwin-arm64': 15.1.4 '@next/swc-darwin-arm64': 15.1.4
@ -1888,12 +1888,12 @@ snapshots:
primeicons@7.0.0: {} primeicons@7.0.0: {}
primereact@10.9.1(@types/react@18.3.18)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): primereact@10.9.1(@types/react@18.3.18)(react-dom@19.0.0(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704):
dependencies: dependencies:
'@types/react-transition-group': 4.4.12(@types/react@18.3.18) '@types/react-transition-group': 4.4.12(@types/react@18.3.18)
react: 19.0.0-rc-f38c22b244-20240704 react: 19.0.0-rc-f38c22b244-20240704
react-dom: 19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704) react-dom: 19.0.0(react@19.0.0-rc-f38c22b244-20240704)
react-transition-group: 4.4.5(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704) react-transition-group: 4.4.5(react-dom@19.0.0(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704)
optionalDependencies: optionalDependencies:
'@types/react': 18.3.18 '@types/react': 18.3.18
@ -1905,21 +1905,21 @@ snapshots:
queue-microtask@1.2.3: {} queue-microtask@1.2.3: {}
react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704): react-dom@19.0.0(react@19.0.0-rc-f38c22b244-20240704):
dependencies: dependencies:
react: 19.0.0-rc-f38c22b244-20240704 react: 19.0.0-rc-f38c22b244-20240704
scheduler: 0.25.0-rc-f38c22b244-20240704 scheduler: 0.25.0
react-is@16.13.1: {} react-is@16.13.1: {}
react-transition-group@4.4.5(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704): react-transition-group@4.4.5(react-dom@19.0.0(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704):
dependencies: dependencies:
'@babel/runtime': 7.26.0 '@babel/runtime': 7.26.0
dom-helpers: 5.2.1 dom-helpers: 5.2.1
loose-envify: 1.4.0 loose-envify: 1.4.0
prop-types: 15.8.1 prop-types: 15.8.1
react: 19.0.0-rc-f38c22b244-20240704 react: 19.0.0-rc-f38c22b244-20240704
react-dom: 19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704) react-dom: 19.0.0(react@19.0.0-rc-f38c22b244-20240704)
react@19.0.0-rc-f38c22b244-20240704: {} react@19.0.0-rc-f38c22b244-20240704: {}
@ -1957,7 +1957,7 @@ snapshots:
safe-buffer@5.2.1: {} safe-buffer@5.2.1: {}
scheduler@0.25.0-rc-f38c22b244-20240704: {} scheduler@0.25.0: {}
semver@6.3.1: {} semver@6.3.1: {}