From 3d74aca45e6d416fb4a3da0ca7d2ad69c900a9b7 Mon Sep 17 00:00:00 2001 From: Omar Ibrahim Date: Thu, 22 Oct 2026 14:54:17 -0500 Subject: [PATCH 01/50] build(deps): upgrade nuxt to 4.6.2 --- apps/docs/app/error.vue | 2 +- apps/docs/app/pages/[...slug].vue | 4 +- apps/docs/app/pages/index.vue | 4 +- apps/docs/package.json | 28 +- .../app/composables/useArticleOgImage.ts | 2 +- apps/learn/app/composables/useArticleSEO.ts | 2 +- apps/learn/app/error.vue | 2 +- apps/learn/app/pages/index.vue | 4 +- .../app/pages/learning-paths/[path]/index.vue | 2 +- apps/learn/app/pages/product/[id]/index.vue | 4 +- apps/learn/app/pages/resources/[name].vue | 2 +- apps/learn/app/pages/resources/index.vue | 2 +- apps/learn/package.json | 32 +- apps/netlogo/app/error.vue | 2 +- apps/netlogo/package.json | 24 +- apps/nettango/app/error.vue | 2 +- apps/nettango/package.json | 28 +- package.json | 38 +- packages/markdown/package.json | 2 +- packages/netlogo-docs/package.json | 2 +- packages/nuxt-content-assets/package.json | 6 +- packages/nuxt-core/app/error.vue | 2 +- packages/nuxt-core/package.json | 26 +- packages/tailwind-config/package.json | 2 +- packages/template/package.json | 2 +- packages/vue-ui/package.json | 24 +- .../{DocsSeo.vue => DocsSeo.satori.vue} | 14 +- ...umbnailSeo.vue => ThumbnailSeo.satori.vue} | 15 +- yarn.lock | 6124 ++++++++++------- 29 files changed, 3742 insertions(+), 2661 deletions(-) rename packages/vue-ui/src/components/OgImage/{DocsSeo.vue => DocsSeo.satori.vue} (91%) rename packages/vue-ui/src/components/OgImage/{ThumbnailSeo.vue => ThumbnailSeo.satori.vue} (78%) diff --git a/apps/docs/app/error.vue b/apps/docs/app/error.vue index db2ba018..eb62122d 100644 --- a/apps/docs/app/error.vue +++ b/apps/docs/app/error.vue @@ -11,6 +11,6 @@ defineProps({ diff --git a/apps/docs/app/pages/[...slug].vue b/apps/docs/app/pages/[...slug].vue index 9475f367..5fabfa9a 100644 --- a/apps/docs/app/pages/[...slug].vue +++ b/apps/docs/app/pages/[...slug].vue @@ -49,7 +49,7 @@ const layoutComponent = computed(() => { } }); -defineOgImageComponent('DocsSeo', { +defineOgImage('DocsSeo', { title, description, theme: '#f31500', @@ -66,8 +66,8 @@ useSeoMeta({ ogType: 'article', title: `${title}`, description: description, - keywords: keywords, }); +useHead({ meta: [{ name: 'keywords', content: keywords }] }); function isPageContent(item: ContentCollectionItem | null | undefined): item is ContentCollectionItem { return item !== null && item !== undefined; diff --git a/apps/docs/app/pages/index.vue b/apps/docs/app/pages/index.vue index 66c22cf6..de154155 100644 --- a/apps/docs/app/pages/index.vue +++ b/apps/docs/app/pages/index.vue @@ -82,10 +82,10 @@ const beginnersLinks = ref(beginnersLinksData); useSeoMeta({ title: productName, description: productDescription, - keywords: productKeywords.join(', '), }); +useHead({ meta: [{ name: 'keywords', content: productKeywords.join(', ') }] }); -defineOgImageComponent('DocsSeo', { +defineOgImage('DocsSeo', { title: productName, theme: '#f31500', siteLogo: '/turtles.png', diff --git a/apps/docs/package.json b/apps/docs/package.json index 8ec9b640..806a7906 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -36,9 +36,9 @@ "dependencies": { "@nuxt/content": "^3.7.1", "@nuxt/eslint": "1.10.0", - "@nuxt/icon": "2.0.0", - "@nuxt/ui": "4.2.1", - "@nuxtjs/sitemap": "7.4.7", + "@nuxt/icon": "2.5.1", + "@nuxt/ui": "^4.12.0", + "@nuxtjs/sitemap": "9.1.0", "@repo/eslint-config": "0.0.0", "@repo/netlogo-docs": "0.0.0", "@repo/nuxt-core": "0.0.0", @@ -47,25 +47,25 @@ "@repo/typescript-config": "0.0.0", "@repo/utils": "0.0.0", "@repo/vue-ui": "1.0.0", - "@tailwindcss/postcss": "^4.1.13", - "@tailwindcss/vite": "^4.1.18", - "@vueuse/core": "^14.1.0", + "@tailwindcss/postcss": "^4.3.3", + "@tailwindcss/vite": "^4.3.3", + "@vueuse/core": "^14.4.0", "better-sqlite3": "^12.4.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "eslint": "^9.31.0", "minimatch": "^10.0.3", - "nuxt": "^4.1.2", + "nuxt": "4.6.2", "nuxt-gtag": "4.1.0", - "nuxt-link-checker": "4.3.6", - "nuxt-og-image": "^5.1.12", + "nuxt-link-checker": "6.0.1", + "nuxt-og-image": "^7.0.7", "nuxt-svgo": "4.2.6", - "reka-ui": "^2.6.0", + "reka-ui": "2.11.0", "tailwind-merge": "^3.3.1", - "tailwindcss": "^4.1.18", + "tailwindcss": "^4.3.3", "tw-animate-css": "^1.4.0", - "vue": "^3.5.24", - "vue-router": "^4.6.3", + "vue": "3.5.44", + "vue-router": "^5.4.0", "yaml": "^2.8.1" }, "devDependencies": { @@ -82,7 +82,7 @@ "@iconify-json/si": "^1.2.11", "@iconify-json/simple-icons": "^1.2.54", "@iconify-json/streamline": "^1.2.5", - "@nuxt/kit": "^4.2.1", + "@nuxt/kit": "4.6.2", "@repo/markdown": "0.0.0", "@repo/nuxt-content-assets": "1.5.0", "@types/html-minifier-terser": "^7.0.2", diff --git a/apps/learn/app/composables/useArticleOgImage.ts b/apps/learn/app/composables/useArticleOgImage.ts index da8f8d2c..b0b0520c 100644 --- a/apps/learn/app/composables/useArticleOgImage.ts +++ b/apps/learn/app/composables/useArticleOgImage.ts @@ -1,7 +1,7 @@ import type { ObjectModel } from '~/data'; export function useArticleOgImage(article: ObjectModel.Article) { - defineOgImageComponent('ThumbnailSeo', { + defineOgImage('ThumbnailSeo', { title: article.title, description: article.description, theme: '#f31500', diff --git a/apps/learn/app/composables/useArticleSEO.ts b/apps/learn/app/composables/useArticleSEO.ts index 04f9162b..62a3a683 100644 --- a/apps/learn/app/composables/useArticleSEO.ts +++ b/apps/learn/app/composables/useArticleSEO.ts @@ -27,6 +27,6 @@ export function useArticleSEO(article: ObjectModel.Article) { ogType: 'article', title: `${title}`, description: description, - keywords: keywords, }); + useHead({ meta: [{ name: 'keywords', content: keywords }] }); } diff --git a/apps/learn/app/error.vue b/apps/learn/app/error.vue index db2ba018..eb62122d 100644 --- a/apps/learn/app/error.vue +++ b/apps/learn/app/error.vue @@ -11,6 +11,6 @@ defineProps({ diff --git a/apps/learn/app/pages/index.vue b/apps/learn/app/pages/index.vue index bb806b15..fe0c6b17 100644 --- a/apps/learn/app/pages/index.vue +++ b/apps/learn/app/pages/index.vue @@ -94,10 +94,10 @@ onMounted(() => { useSeoMeta({ robots: 'index, follow', description: website.value.longDescription, - keywords: website.value.keywords.join(', '), }); +useHead({ meta: [{ name: 'keywords', content: website.value.keywords.join(', ') }] }); -defineOgImageComponent('DocsSeo', { +defineOgImage('DocsSeo', { title: website.value.name, description: website.value.longDescription, theme: '#f31500', diff --git a/apps/learn/app/pages/learning-paths/[path]/index.vue b/apps/learn/app/pages/learning-paths/[path]/index.vue index 096e788e..55535888 100644 --- a/apps/learn/app/pages/learning-paths/[path]/index.vue +++ b/apps/learn/app/pages/learning-paths/[path]/index.vue @@ -19,7 +19,7 @@ useSeoMeta({ twitterSite: '@netlogo', }); -defineOgImageComponent('ThumbnailSeo', { +defineOgImage('ThumbnailSeo', { title: lp.value.title, description: lp.value.subtitle, theme: '#f31500', diff --git a/apps/learn/app/pages/product/[id]/index.vue b/apps/learn/app/pages/product/[id]/index.vue index df3df919..5f51c60f 100644 --- a/apps/learn/app/pages/product/[id]/index.vue +++ b/apps/learn/app/pages/product/[id]/index.vue @@ -103,7 +103,7 @@ const prerequisites = computed(() => { .filter((req) => req !== null); }); -defineOgImageComponent('DocsSeo', { +defineOgImage('DocsSeo', { title: product.name, description: product.longDescription, theme: '#f31500', @@ -118,8 +118,8 @@ useSeoMeta({ ogType: 'website', title: `Learn ${product.name}`, description: product.description, - keywords: [product.name, 'NetLogo', 'Learn', 'Agent-Based Modeling', 'Simulations'].join(', '), }); +useHead({ meta: [{ name: 'keywords', content: [product.name, 'NetLogo', 'Learn', 'Agent-Based Modeling', 'Simulations'].join(', ') }] }); diff --git a/apps/learn/app/components/Articles/ArticleBody.vue b/apps/learn/app/components/Articles/ArticleBody.vue index 88c70d0c..6968aed4 100644 --- a/apps/learn/app/components/Articles/ArticleBody.vue +++ b/apps/learn/app/components/Articles/ArticleBody.vue @@ -2,6 +2,7 @@
Date: Thu, 22 Oct 2026 19:37:25 -0500 Subject: [PATCH 07/50] fix(learn,netlogo,nuxt-core): render MDC without Nuxt UI prose components --- .../components/Resources/ResourcePageBase.vue | 4 ++- .../app/pages/learning-paths/[path]/index.vue | 4 ++- apps/netlogo/app/components/IntroSplash.vue | 8 +++--- apps/netlogo/app/components/Newsfeed.vue | 4 ++- .../app/components/about/AboutSection.vue | 4 ++- .../announcements/AnnouncementsSection.vue | 4 ++- .../app/components/contact/ContactSection.vue | 4 ++- .../components/downloads/DonationSection.vue | 4 ++- .../app/components/news/NewsSection.vue | 4 ++- .../app/components/PrimTooltip.vue | 27 ++++++++++--------- 10 files changed, 41 insertions(+), 26 deletions(-) diff --git a/apps/learn/app/components/Resources/ResourcePageBase.vue b/apps/learn/app/components/Resources/ResourcePageBase.vue index 91121e87..27fbdfc0 100644 --- a/apps/learn/app/components/Resources/ResourcePageBase.vue +++ b/apps/learn/app/components/Resources/ResourcePageBase.vue @@ -49,7 +49,9 @@

{{ longDescriptionTitle }}

- + + +
diff --git a/apps/learn/app/pages/learning-paths/[path]/index.vue b/apps/learn/app/pages/learning-paths/[path]/index.vue index 55535888..a0163e32 100644 --- a/apps/learn/app/pages/learning-paths/[path]/index.vue +++ b/apps/learn/app/pages/learning-paths/[path]/index.vue @@ -51,7 +51,9 @@ defineOgImage('ThumbnailSeo', { }" /> - + + +