diff --git a/.astro/settings.json b/.astro/settings.json
index c02f64d47..3ffcf9347 100644
--- a/.astro/settings.json
+++ b/.astro/settings.json
@@ -1,8 +1,8 @@
{
- "devToolbar": {
- "enabled": false
- },
- "_variables": {
- "lastUpdateCheck": 1743851801172
- }
-}
\ No newline at end of file
+ "devToolbar": {
+ "enabled": false
+ },
+ "_variables": {
+ "lastUpdateCheck": 1743851801172
+ }
+}
diff --git a/package.json b/package.json
index 31008617b..ce4e2bb61 100644
--- a/package.json
+++ b/package.json
@@ -32,7 +32,7 @@
},
"dependencies": {
"@astrojs/node": "^8.3.4",
- "@astrojs/react": "^3.6.2",
+ "@astrojs/react": "^4.2.3",
"@astrojs/sitemap": "^3.2.0",
"@fingerprintjs/fingerprintjs": "^4.5.0",
"@microsoft/clarity": "^1.0.0",
@@ -42,8 +42,8 @@
"@roadmapsh/editor": "workspace:*",
"@tailwindcss/vite": "^4.1.3",
"@tanstack/react-query": "^5.59.16",
- "@types/react": "^18.3.11",
- "@types/react-dom": "^18.3.1",
+ "@types/react": "^19.0.0",
+ "@types/react-dom": "^19.0.0",
"astro": "^4.16.1",
"clsx": "^2.1.1",
"dayjs": "^1.11.13",
@@ -63,10 +63,10 @@
"npm-check-updates": "^17.1.3",
"playwright": "^1.48.0",
"prismjs": "^1.29.0",
- "react": "^18.3.1",
+ "react": "^19.0.0",
"react-calendar-heatmap": "^1.9.0",
"react-confetti": "^6.1.0",
- "react-dom": "^18.3.1",
+ "react-dom": "^19.0.0",
"react-resizable-panels": "^2.1.7",
"react-textarea-autosize": "^8.5.7",
"react-tooltip": "^5.28.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 70ae4ef0c..938f0b3e2 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -12,8 +12,8 @@ importers:
specifier: ^8.3.4
version: 8.3.4(astro@4.16.18(@types/node@18.19.86)(lightningcss@1.29.2)(rollup@4.39.0)(typescript@5.8.3))
'@astrojs/react':
- specifier: ^3.6.2
- version: 3.6.3(@types/node@18.19.86)(@types/react-dom@18.3.6(@types/react@18.3.20))(@types/react@18.3.20)(lightningcss@1.29.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: ^4.2.3
+ version: 4.2.3(@types/node@18.19.86)(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(jiti@2.4.2)(lightningcss@1.29.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tsx@4.19.3)
'@astrojs/sitemap':
specifier: ^3.2.0
version: 3.3.0
@@ -25,7 +25,7 @@ importers:
version: 1.0.0
'@nanostores/react':
specifier: ^0.8.0
- version: 0.8.4(nanostores@0.11.4)(react@18.3.1)
+ version: 0.8.4(nanostores@0.11.4)(react@19.1.0)
'@napi-rs/image':
specifier: ^1.9.2
version: 1.9.2
@@ -40,13 +40,13 @@ importers:
version: 4.1.3(vite@5.4.17(@types/node@18.19.86)(lightningcss@1.29.2))
'@tanstack/react-query':
specifier: ^5.59.16
- version: 5.71.10(react@18.3.1)
+ version: 5.72.0(react@19.1.0)
'@types/react':
- specifier: ^18.3.11
- version: 18.3.20
+ specifier: ^19.0.0
+ version: 19.1.0
'@types/react-dom':
- specifier: ^18.3.1
- version: 18.3.6(@types/react@18.3.20)
+ specifier: ^19.0.0
+ version: 19.1.1(@types/react@19.1.0)
astro:
specifier: ^4.16.1
version: 4.16.18(@types/node@18.19.86)(lightningcss@1.29.2)(rollup@4.39.0)(typescript@5.8.3)
@@ -79,7 +79,7 @@ importers:
version: 3.0.5
lucide-react:
specifier: ^0.452.0
- version: 0.452.0(react@18.3.1)
+ version: 0.452.0(react@19.1.0)
luxon:
specifier: ^3.5.0
version: 3.6.1
@@ -105,26 +105,26 @@ importers:
specifier: ^1.29.0
version: 1.30.0
react:
- specifier: ^18.3.1
- version: 18.3.1
+ specifier: ^19.0.0
+ version: 19.1.0
react-calendar-heatmap:
specifier: ^1.9.0
- version: 1.10.0(react@18.3.1)
+ version: 1.10.0(react@19.1.0)
react-confetti:
specifier: ^6.1.0
- version: 6.4.0(react@18.3.1)
+ version: 6.4.0(react@19.1.0)
react-dom:
- specifier: ^18.3.1
- version: 18.3.1(react@18.3.1)
+ specifier: ^19.0.0
+ version: 19.1.0(react@19.1.0)
react-resizable-panels:
specifier: ^2.1.7
- version: 2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
react-textarea-autosize:
specifier: ^8.5.7
- version: 8.5.9(@types/react@18.3.20)(react@18.3.1)
+ version: 8.5.9(@types/react@19.1.0)(react@19.1.0)
react-tooltip:
specifier: ^5.28.0
- version: 5.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ version: 5.28.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
rehype-external-links:
specifier: ^3.0.0
version: 3.0.0
@@ -169,7 +169,7 @@ importers:
version: 11.0.5
zustand:
specifier: ^5.0.1
- version: 5.0.3(@types/react@18.3.20)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1))
+ version: 5.0.3(@types/react@19.1.0)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0))
devDependencies:
'@ai-sdk/google':
specifier: ^1.1.19
@@ -206,7 +206,7 @@ importers:
version: 5.0.5
ai:
specifier: ^4.1.51
- version: 4.3.2(react@18.3.1)(zod@3.24.2)
+ version: 4.3.2(react@19.1.0)(zod@3.24.2)
csv-parser:
specifier: ^3.0.0
version: 3.2.0
@@ -221,7 +221,7 @@ importers:
version: 14.1.0
openai:
specifier: ^4.67.3
- version: 4.91.1(zod@3.24.2)
+ version: 4.92.0(zod@3.24.2)
prettier:
specifier: ^3.3.3
version: 3.5.3
@@ -239,7 +239,7 @@ importers:
dependencies:
'@xyflow/react':
specifier: ^12.4.2
- version: 12.5.4(@types/react@19.1.0)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)
+ version: 12.5.5(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
clsx:
specifier: ^2.1.1
version: 2.1.1
@@ -257,7 +257,7 @@ importers:
version: 11.0.0
tailwind-merge:
specifier: ^3.0.1
- version: 3.1.0
+ version: 3.2.0
unified:
specifier: ^11.0.5
version: 11.0.5
@@ -347,14 +347,14 @@ packages:
resolution: {integrity: sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==}
engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
- '@astrojs/react@3.6.3':
- resolution: {integrity: sha512-5ihLQDH5Runddug5AZYlnp/Q5T81QxhwnWJXA9rchBAdh11c6UhBbv9Kdk7b2PkXoEU70CGWBP9hSh0VCR58eA==}
- engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
+ '@astrojs/react@4.2.3':
+ resolution: {integrity: sha512-icL1hCnW1v+w+NCAz8REfsh9R1aGMW75fYBoeLjyhrVDxXQHiFbTfyBIHkgH79qqID7SM81+hPxHlqcgCuBP8w==}
+ engines: {node: ^18.17.1 || ^20.3.0 || >=22.0.0}
peerDependencies:
- '@types/react': ^17.0.50 || ^18.0.21
- '@types/react-dom': ^17.0.17 || ^18.0.6
- react: ^17.0.2 || ^18.0.0 || ^19.0.0-beta
- react-dom: ^17.0.2 || ^18.0.0 || ^19.0.0-beta
+ '@types/react': ^17.0.50 || ^18.0.21 || ^19.0.0
+ '@types/react-dom': ^17.0.17 || ^18.0.6 || ^19.0.0
+ react: ^17.0.2 || ^18.0.0 || ^19.0.0
+ react-dom: ^17.0.2 || ^18.0.0 || ^19.0.0
'@astrojs/sitemap@3.3.0':
resolution: {integrity: sha512-nYE4lKQtk+Kbrw/w0G0TTgT724co0jUsU4tPlHY9au5HmTBKbwiCLwO/15b1/y13aZ4Kr9ZbMeMHlXuwn0ty4Q==}
@@ -1335,11 +1335,11 @@ packages:
peerDependencies:
vite: ^5.2.0 || ^6
- '@tanstack/query-core@5.71.10':
- resolution: {integrity: sha512-/fKEY8fO1nbszfrBatzmhJa1nEwIKn0c6Tv2A1ocSA5OiD2GukOIV8nnBbvJRgZb/VIoBy9/N4PVbABI8YQLow==}
+ '@tanstack/query-core@5.72.0':
+ resolution: {integrity: sha512-aa3p6Mou++JLLxxxVX9AB9uGeRIGc0JWkw96GASXuMG8K3D+JpYbSFcqXbkGFJ1eX2jKHPurmCBoO43RjjXJCA==}
- '@tanstack/react-query@5.71.10':
- resolution: {integrity: sha512-mQYM/ObpL8YMDz8vCoUuHkbe8Yu7NnVRH8aBaBa/3zlufjp1f1VuWjeO3TcumNHfuVMDwEAGinsgwrB7OKADiQ==}
+ '@tanstack/react-query@5.72.0':
+ resolution: {integrity: sha512-4Dejq/IiXrPlr/0xxj4H2GbC6KckwfTCoHWbd02+UoIV0laC9yke0d0KegmFdXJA712I6UCuy8WpPM76uuPJ+w==}
peerDependencies:
react: ^18 || ^19
@@ -1447,23 +1447,17 @@ packages:
'@types/prismjs@1.26.5':
resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==}
- '@types/prop-types@15.7.14':
- resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==}
-
'@types/react-calendar-heatmap@1.9.0':
resolution: {integrity: sha512-BH8M/nsXoLGa3hxWbrq3guPwlK0cV+w1i4c/ktrTxTzN5fBths6WbeUZ4dK0+tE76qiGoVSo9Tse8WVVuMIV+w==}
- '@types/react-dom@18.3.6':
- resolution: {integrity: sha512-nf22//wEbKXusP6E9pfOCDwFdHAX4u172eaJI4YkDRQEZiorm6KfYnSC2SWLDMVWUOWPERmJnN0ujeAfTBLvrw==}
+ '@types/react-dom@19.1.1':
+ resolution: {integrity: sha512-jFf/woGTVTjUJsl2O7hcopJ1r0upqoq/vIOoCj0yLh3RIXxWcljlpuZ+vEBRXsymD1jhfeJrlyTy/S1UW+4y1w==}
peerDependencies:
- '@types/react': ^18.0.0
+ '@types/react': ^19.0.0
'@types/react-slick@0.23.13':
resolution: {integrity: sha512-bNZfDhe/L8t5OQzIyhrRhBr/61pfBcWaYJoq6UDqFtv5LMwfg4NsVDD2J8N01JqdAdxLjOt66OZEp6PX+dGs/A==}
- '@types/react@18.3.20':
- resolution: {integrity: sha512-IPaCZN7PShZK/3t6Q87pfTkRm6oLTd4vztyoj+cbHUF1g3FfVb2tFIL79uCRKEfv16AhqDMBywP2VW3KIZUvcg==}
-
'@types/react@19.1.0':
resolution: {integrity: sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==}
@@ -1488,14 +1482,14 @@ packages:
peerDependencies:
vite: ^4.2.0 || ^5.0.0 || ^6.0.0
- '@xyflow/react@12.5.4':
- resolution: {integrity: sha512-ITCW3h/pXVKwb0j3w8CxPyfmmxIqToctE55R+BcfTAe9j+qr/6Uc+NUsbIgnvEyiziJKq/sS0ovVfZ4482txww==}
+ '@xyflow/react@12.5.5':
+ resolution: {integrity: sha512-mAtHuS4ktYBL1ph5AJt7X/VmpzzlmQBN3+OXxyT/1PzxwrVto6AKc3caerfxzwBsg3cA4J8lB63F3WLAuPMmHw==}
peerDependencies:
react: '>=17'
react-dom: '>=17'
- '@xyflow/system@0.0.54':
- resolution: {integrity: sha512-DBoQTcSQ2620WMfakCcjRLrlqalWcZBPgMNrfSAybnVeyZm73rT1592GAXPcC3eoVmWcvGfBgqwAmmNtlrowdw==}
+ '@xyflow/system@0.0.55':
+ resolution: {integrity: sha512-6cngWlE4oMXm+zrsbJxerP3wUNUFJcv/cE5kDfu0qO55OWK3fAeSOLW9td3xEVQlomjIW5knds1MzeMnBeCfqw==}
abort-controller@3.0.0:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
@@ -2777,8 +2771,8 @@ packages:
oniguruma-to-es@4.1.0:
resolution: {integrity: sha512-SNwG909cSLo4vPyyPbU/VJkEc9WOXqu2ycBlfd1UCXLqk1IijcQktSBb2yRQ2UFPsDhpkaf+C1dtT3PkLK/yWA==}
- openai@4.91.1:
- resolution: {integrity: sha512-DbjrR0hIMQFbxz8+3qBsfPJnh3+I/skPgoSlT7f9eiZuhGBUissPQULNgx6gHNkLoZ3uS0uYS6eXPUdtg4nHzw==}
+ openai@4.92.0:
+ resolution: {integrity: sha512-vLIBP8gygD5M7XIrdBkUFKnfEq3EmaI+lmGjDDAmjahzmdhwdpzDA+GBA4ZZwj7rgu1WMNh9/SqyTysxMulC2g==}
hasBin: true
peerDependencies:
ws: ^8.18.0
@@ -3094,10 +3088,10 @@ packages:
peerDependencies:
react: ^16.3.0 || ^17.0.1 || ^18.0.0 || ^19.0.0
- react-dom@18.3.1:
- resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+ react-dom@19.1.0:
+ resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==}
peerDependencies:
- react: ^18.3.1
+ react: ^19.1.0
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
@@ -3124,10 +3118,6 @@ packages:
react: '>=16.14.0'
react-dom: '>=16.14.0'
- react@18.3.1:
- resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
- engines: {node: '>=0.10.0'}
-
react@19.1.0:
resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==}
engines: {node: '>=0.10.0'}
@@ -3245,8 +3235,8 @@ packages:
sax@1.4.1:
resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
- scheduler@0.23.2:
- resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+ scheduler@0.26.0:
+ resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==}
section-matter@1.0.0:
resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
@@ -3394,8 +3384,8 @@ packages:
tailwind-merge@2.6.0:
resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==}
- tailwind-merge@3.1.0:
- resolution: {integrity: sha512-aV27Oj8B7U/tAOMhJsSGdWqelfmudnGMdXIlMnk1JfsjwSjts6o8HyfN7SFH3EztzH4YH8kk6GbLTHzITJO39Q==}
+ tailwind-merge@3.2.0:
+ resolution: {integrity: sha512-FQT/OVqCD+7edmmJpsgCsY820RTD5AkBryuG5IUqR5YQZSdj5xlH5nLgH7YPths7WsLPSpSBNneJdM8aS8aeFA==}
tailwindcss@4.1.3:
resolution: {integrity: sha512-2Q+rw9vy1WFXu5cIxlvsabCwhU2qUwodGq03ODhLJ0jW4ek5BUtoCsnLB0qG+m8AHgEsSJcJGDSDe06FXlP74g==}
@@ -3640,6 +3630,46 @@ packages:
terser:
optional: true
+ vite@6.2.5:
+ resolution: {integrity: sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==}
+ engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
+ jiti: '>=1.21.0'
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
vitefu@1.0.6:
resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==}
peerDependencies:
@@ -3785,12 +3815,12 @@ snapshots:
dependencies:
json-schema: 0.4.0
- '@ai-sdk/react@1.2.6(react@18.3.1)(zod@3.24.2)':
+ '@ai-sdk/react@1.2.6(react@19.1.0)(zod@3.24.2)':
dependencies:
'@ai-sdk/provider-utils': 2.2.4(zod@3.24.2)
'@ai-sdk/ui-utils': 1.2.5(zod@3.24.2)
- react: 18.3.1
- swr: 2.3.3(react@18.3.1)
+ react: 19.1.0
+ swr: 2.3.3(react@19.1.0)
throttleit: 2.1.0
optionalDependencies:
zod: 3.24.2
@@ -3848,17 +3878,18 @@ snapshots:
dependencies:
prismjs: 1.30.0
- '@astrojs/react@3.6.3(@types/node@18.19.86)(@types/react-dom@18.3.6(@types/react@18.3.20))(@types/react@18.3.20)(lightningcss@1.29.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+ '@astrojs/react@4.2.3(@types/node@18.19.86)(@types/react-dom@19.1.1(@types/react@19.1.0))(@types/react@19.1.0)(jiti@2.4.2)(lightningcss@1.29.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(tsx@4.19.3)':
dependencies:
- '@types/react': 18.3.20
- '@types/react-dom': 18.3.6(@types/react@18.3.20)
- '@vitejs/plugin-react': 4.3.4(vite@5.4.17(@types/node@18.19.86)(lightningcss@1.29.2))
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ '@types/react': 19.1.0
+ '@types/react-dom': 19.1.1(@types/react@19.1.0)
+ '@vitejs/plugin-react': 4.3.4(vite@6.2.5(@types/node@18.19.86)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3))
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
ultrahtml: 1.6.0
- vite: 5.4.17(@types/node@18.19.86)(lightningcss@1.29.2)
+ vite: 6.2.5(@types/node@18.19.86)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)
transitivePeerDependencies:
- '@types/node'
+ - jiti
- less
- lightningcss
- sass
@@ -3867,6 +3898,8 @@ snapshots:
- sugarss
- supports-color
- terser
+ - tsx
+ - yaml
'@astrojs/sitemap@3.3.0':
dependencies:
@@ -4300,10 +4333,10 @@ snapshots:
'@mixmark-io/domino@2.2.0': {}
- '@nanostores/react@0.8.4(nanostores@0.11.4)(react@18.3.1)':
+ '@nanostores/react@0.8.4(nanostores@0.11.4)(react@19.1.0)':
dependencies:
nanostores: 0.11.4
- react: 18.3.1
+ react: 19.1.0
'@napi-rs/image-android-arm64@1.9.2':
optional: true
@@ -4657,12 +4690,12 @@ snapshots:
tailwindcss: 4.1.3
vite: 5.4.17(@types/node@18.19.86)(lightningcss@1.29.2)
- '@tanstack/query-core@5.71.10': {}
+ '@tanstack/query-core@5.72.0': {}
- '@tanstack/react-query@5.71.10(react@18.3.1)':
+ '@tanstack/react-query@5.72.0(react@19.1.0)':
dependencies:
- '@tanstack/query-core': 5.71.10
- react: 18.3.1
+ '@tanstack/query-core': 5.72.0
+ react: 19.1.0
'@tiptap/core@2.11.7(@tiptap/pm@2.11.7)':
dependencies:
@@ -4797,24 +4830,17 @@ snapshots:
'@types/prismjs@1.26.5': {}
- '@types/prop-types@15.7.14': {}
-
'@types/react-calendar-heatmap@1.9.0':
dependencies:
- '@types/react': 18.3.20
+ '@types/react': 19.1.0
- '@types/react-dom@18.3.6(@types/react@18.3.20)':
+ '@types/react-dom@19.1.1(@types/react@19.1.0)':
dependencies:
- '@types/react': 18.3.20
+ '@types/react': 19.1.0
'@types/react-slick@0.23.13':
dependencies:
- '@types/react': 18.3.20
-
- '@types/react@18.3.20':
- dependencies:
- '@types/prop-types': 15.7.14
- csstype: 3.1.3
+ '@types/react': 19.1.0
'@types/react@19.1.0':
dependencies:
@@ -4834,29 +4860,29 @@ snapshots:
'@ungap/structured-clone@1.3.0': {}
- '@vitejs/plugin-react@4.3.4(vite@5.4.17(@types/node@18.19.86)(lightningcss@1.29.2))':
+ '@vitejs/plugin-react@4.3.4(vite@6.2.5(@types/node@18.19.86)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3))':
dependencies:
'@babel/core': 7.26.10
'@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10)
'@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10)
'@types/babel__core': 7.20.5
react-refresh: 0.14.2
- vite: 5.4.17(@types/node@18.19.86)(lightningcss@1.29.2)
+ vite: 6.2.5(@types/node@18.19.86)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3)
transitivePeerDependencies:
- supports-color
- '@xyflow/react@12.5.4(@types/react@19.1.0)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)':
+ '@xyflow/react@12.5.5(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)':
dependencies:
- '@xyflow/system': 0.0.54
+ '@xyflow/system': 0.0.55
classcat: 5.0.5
react: 19.1.0
- react-dom: 18.3.1(react@19.1.0)
+ react-dom: 19.1.0(react@19.1.0)
zustand: 4.5.6(@types/react@19.1.0)(react@19.1.0)
transitivePeerDependencies:
- '@types/react'
- immer
- '@xyflow/system@0.0.54':
+ '@xyflow/system@0.0.55':
dependencies:
'@types/d3-drag': 3.0.7
'@types/d3-selection': 3.0.11
@@ -4876,17 +4902,17 @@ snapshots:
dependencies:
humanize-ms: 1.2.1
- ai@4.3.2(react@18.3.1)(zod@3.24.2):
+ ai@4.3.2(react@19.1.0)(zod@3.24.2):
dependencies:
'@ai-sdk/provider': 1.1.0
'@ai-sdk/provider-utils': 2.2.4(zod@3.24.2)
- '@ai-sdk/react': 1.2.6(react@18.3.1)(zod@3.24.2)
+ '@ai-sdk/react': 1.2.6(react@19.1.0)(zod@3.24.2)
'@ai-sdk/ui-utils': 1.2.5(zod@3.24.2)
'@opentelemetry/api': 1.9.0
jsondiffpatch: 0.6.0
zod: 3.24.2
optionalDependencies:
- react: 18.3.1
+ react: 19.1.0
ansi-align@3.0.1:
dependencies:
@@ -5878,9 +5904,9 @@ snapshots:
dependencies:
yallist: 3.1.1
- lucide-react@0.452.0(react@18.3.1):
+ lucide-react@0.452.0(react@19.1.0):
dependencies:
- react: 18.3.1
+ react: 19.1.0
lucide-react@0.474.0(react@19.1.0):
dependencies:
@@ -6330,7 +6356,7 @@ snapshots:
regex: 6.0.1
regex-recursion: 6.0.2
- openai@4.91.1(zod@3.24.2):
+ openai@4.92.0(zod@3.24.2):
dependencies:
'@types/node': 18.19.86
'@types/node-fetch': 2.6.12
@@ -6615,57 +6641,46 @@ snapshots:
range-parser@1.2.1: {}
- react-calendar-heatmap@1.10.0(react@18.3.1):
+ react-calendar-heatmap@1.10.0(react@19.1.0):
dependencies:
memoize-one: 5.2.1
prop-types: 15.8.1
- react: 18.3.1
+ react: 19.1.0
- react-confetti@6.4.0(react@18.3.1):
+ react-confetti@6.4.0(react@19.1.0):
dependencies:
- react: 18.3.1
+ react: 19.1.0
tween-functions: 1.2.0
- react-dom@18.3.1(react@18.3.1):
- dependencies:
- loose-envify: 1.4.0
- react: 18.3.1
- scheduler: 0.23.2
-
- react-dom@18.3.1(react@19.1.0):
+ react-dom@19.1.0(react@19.1.0):
dependencies:
- loose-envify: 1.4.0
react: 19.1.0
- scheduler: 0.23.2
+ scheduler: 0.26.0
react-is@16.13.1: {}
react-refresh@0.14.2: {}
- react-resizable-panels@2.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ react-resizable-panels@2.1.7(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
- react-textarea-autosize@8.5.9(@types/react@18.3.20)(react@18.3.1):
+ react-textarea-autosize@8.5.9(@types/react@19.1.0)(react@19.1.0):
dependencies:
'@babel/runtime': 7.27.0
- react: 18.3.1
- use-composed-ref: 1.4.0(@types/react@18.3.20)(react@18.3.1)
- use-latest: 1.3.0(@types/react@18.3.20)(react@18.3.1)
+ react: 19.1.0
+ use-composed-ref: 1.4.0(@types/react@19.1.0)(react@19.1.0)
+ use-latest: 1.3.0(@types/react@19.1.0)(react@19.1.0)
transitivePeerDependencies:
- '@types/react'
- react-tooltip@5.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ react-tooltip@5.28.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
dependencies:
'@floating-ui/dom': 1.6.13
classnames: 2.5.1
- react: 18.3.1
- react-dom: 18.3.1(react@18.3.1)
-
- react@18.3.1:
- dependencies:
- loose-envify: 1.4.0
+ react: 19.1.0
+ react-dom: 19.1.0(react@19.1.0)
react@19.1.0: {}
@@ -6872,9 +6887,7 @@ snapshots:
sax@1.4.1: {}
- scheduler@0.23.2:
- dependencies:
- loose-envify: 1.4.0
+ scheduler@0.26.0: {}
section-matter@1.0.0:
dependencies:
@@ -7053,15 +7066,15 @@ snapshots:
dependencies:
s.color: 0.0.15
- swr@2.3.3(react@18.3.1):
+ swr@2.3.3(react@19.1.0):
dependencies:
dequal: 2.0.3
- react: 18.3.1
- use-sync-external-store: 1.5.0(react@18.3.1)
+ react: 19.1.0
+ use-sync-external-store: 1.5.0(react@19.1.0)
tailwind-merge@2.6.0: {}
- tailwind-merge@3.1.0: {}
+ tailwind-merge@3.2.0: {}
tailwindcss@4.1.3: {}
@@ -7239,28 +7252,24 @@ snapshots:
escalade: 3.2.0
picocolors: 1.1.1
- use-composed-ref@1.4.0(@types/react@18.3.20)(react@18.3.1):
+ use-composed-ref@1.4.0(@types/react@19.1.0)(react@19.1.0):
dependencies:
- react: 18.3.1
+ react: 19.1.0
optionalDependencies:
- '@types/react': 18.3.20
+ '@types/react': 19.1.0
- use-isomorphic-layout-effect@1.2.0(@types/react@18.3.20)(react@18.3.1):
+ use-isomorphic-layout-effect@1.2.0(@types/react@19.1.0)(react@19.1.0):
dependencies:
- react: 18.3.1
+ react: 19.1.0
optionalDependencies:
- '@types/react': 18.3.20
+ '@types/react': 19.1.0
- use-latest@1.3.0(@types/react@18.3.20)(react@18.3.1):
+ use-latest@1.3.0(@types/react@19.1.0)(react@19.1.0):
dependencies:
- react: 18.3.1
- use-isomorphic-layout-effect: 1.2.0(@types/react@18.3.20)(react@18.3.1)
+ react: 19.1.0
+ use-isomorphic-layout-effect: 1.2.0(@types/react@19.1.0)(react@19.1.0)
optionalDependencies:
- '@types/react': 18.3.20
-
- use-sync-external-store@1.5.0(react@18.3.1):
- dependencies:
- react: 18.3.1
+ '@types/react': 19.1.0
use-sync-external-store@1.5.0(react@19.1.0):
dependencies:
@@ -7293,6 +7302,18 @@ snapshots:
fsevents: 2.3.3
lightningcss: 1.29.2
+ vite@6.2.5(@types/node@18.19.86)(jiti@2.4.2)(lightningcss@1.29.2)(tsx@4.19.3):
+ dependencies:
+ esbuild: 0.25.2
+ postcss: 8.5.3
+ rollup: 4.39.0
+ optionalDependencies:
+ '@types/node': 18.19.86
+ fsevents: 2.3.3
+ jiti: 2.4.2
+ lightningcss: 1.29.2
+ tsx: 4.19.3
+
vitefu@1.0.6(vite@5.4.17(@types/node@18.19.86)(lightningcss@1.29.2)):
optionalDependencies:
vite: 5.4.17(@types/node@18.19.86)(lightningcss@1.29.2)
@@ -7378,12 +7399,6 @@ snapshots:
'@types/react': 19.1.0
react: 19.1.0
- zustand@5.0.3(@types/react@18.3.20)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)):
- optionalDependencies:
- '@types/react': 18.3.20
- react: 18.3.1
- use-sync-external-store: 1.5.0(react@18.3.1)
-
zustand@5.0.3(@types/react@19.1.0)(react@19.1.0)(use-sync-external-store@1.5.0(react@19.1.0)):
optionalDependencies:
'@types/react': 19.1.0
diff --git a/src/components/RoadmapHeader.astro b/src/components/RoadmapHeader.astro
index 2ea1c6037..e7250f14c 100644
--- a/src/components/RoadmapHeader.astro
+++ b/src/components/RoadmapHeader.astro
@@ -28,6 +28,7 @@ export interface Props {
isUpcoming?: boolean;
hasSearch?: boolean;
projectCount?: number;
+ coursesCount?: number;
question?: RoadmapFrontmatter['question'];
hasTopics?: boolean;
isForkable?: boolean;
@@ -45,12 +46,11 @@ const {
projectCount = 0,
question,
activeTab = 'roadmap',
+ coursesCount = 0,
} = Astro.props;
-const roadmapTitle =
- roadmapId === 'devops'
- ? 'DevOps'
- : `${roadmapId.charAt(0).toUpperCase()}${roadmapId.slice(1)}`;
+const hasCourses = coursesCount > 0;
+const hasProjects = projectCount > 0;
---
+
{description}
Official Courses by roadmap.sh team
-