diff --git a/.github/workflows/lunaria.yml b/.github/workflows/lunaria.yml index f951b3afb88d8..643bcbf9c481d 100644 --- a/.github/workflows/lunaria.yml +++ b/.github/workflows/lunaria.yml @@ -33,6 +33,6 @@ jobs: uses: ./.github/actions/install - name: Generate Lunaria Overview - uses: lunariajs/action@4911ad0736d1e3b20af4cb70f5079aea2327ed8e # astro-docs + uses: lunariajs/action@e5ab09c3c8353fa80786d8c2149873ba3978a3a7 # v0.2.0 with: token: ${{ secrets.FREDKBOT_GITHUB_TOKEN }} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a661afd021a08..efcd78b0134e2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -160,7 +160,7 @@ git checkout -b add/partial-hydration-typo-fix ``` ### Opening a PR -One you have made your changes using any of the above methods, you’re ready to create a “Pull Request!” +Once you have made your changes using any of the above methods, you’re ready to create a “Pull Request!” This will let the Astro docs team know you have some changes to propose. At this point we can give you feedback and might request changes. For translations, we like to have at least one other person who knows the language you are translating into review the PR. diff --git a/lunaria.config.ts b/lunaria.config.ts index aaddd51d5dfa2..17741d053b718 100644 --- a/lunaria.config.ts +++ b/lunaria.config.ts @@ -1,3 +1,4 @@ +import { html } from '@lunariajs/core'; import { defineConfig } from '@lunariajs/core/config'; export default defineConfig({ @@ -132,4 +133,43 @@ export default defineConfig({ 'i18nIgnore', ], }, + dashboard: { + title: 'Astro Docs Translation Status', + description: + 'Translation progress tracker for the Astro Docs site. See how much has been translated in your language and get involved!', + site: 'https://i18n.docs.astro.build/', + basesToHide: ['src/content/docs/en/', 'src/i18n/en/', 'src/content/docs/', 'src/content/'], + customCss: ['./scripts/lunaria/styles.css'], + favicon: { + external: [ + { link: 'https://docs.astro.build/favicon.ico', type: 'image/x-icon' }, + { link: 'https://docs.astro.build/favicon.svg', type: 'image/svg+xml' }, + ], + }, + ui: { + 'statusByLocale.heading': 'Translation progress by locale', + 'statusByLocale.outdatedLocalizationLink': 'outdated translation', + 'statusByLocale.incompleteLocalizationLink': 'incomplete translation', + 'statusByLocale.completeLocalization': 'This translation is complete, amazing job! 🎉', + 'statusByFile.heading': 'Translation status by file', + }, + }, + renderer: { + slots: { + head: () => html``, + afterTitle: () => html` +
+ If you're interested in helping us translate + docs.astro.build into one of the languages listed + below, you've come to the right place! This auto-updating page always lists all the + content that could use your help right now. +
++ Before starting, please read our + i18n Guide + to learn about our translation process and how you can get involved. +
+ `, + }, + }, }); diff --git a/package.json b/package.json index ec2d650f0790f..7cfdc1e610e2e 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "@astrojs/sitemap": "^3.7.3", "@astrojs/starlight": "^0.42.0", "@expressive-code/plugin-collapsible-sections": "^0.44.1", - "@lunariajs/core": "https://pkg.pr.new/lunariajs/lunaria/@lunariajs/core@722c34c", + "@lunariajs/core": "^0.2.0", "canvas-confetti": "^1.6.0", "jsdoc-api": "^9.3.5", "satteri": "^0.10.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 23891b363ad0f..0e6cac730c021 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,13 +19,13 @@ importers: version: 3.7.3 '@astrojs/starlight': specifier: ^0.42.0 - version: 0.42.0(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3))(typescript@6.0.3) + version: 0.42.0(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1))(typescript@6.0.3) '@expressive-code/plugin-collapsible-sections': specifier: ^0.44.1 version: 0.44.1 '@lunariajs/core': - specifier: https://pkg.pr.new/lunariajs/lunaria/@lunariajs/core@722c34c - version: https://pkg.pr.new/lunariajs/lunaria/@lunariajs/core@722c34c + specifier: ^0.2.0 + version: 0.2.0 canvas-confetti: specifier: ^1.6.0 version: 1.6.0 @@ -62,16 +62,16 @@ importers: version: 24.12.2 '@typescript-eslint/parser': specifier: ^8.59.3 - version: 8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3) + version: 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) astro: specifier: ^7.2.10 - version: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3) + version: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1) astro-eslint-parser: specifier: ^1.4.0 version: 1.4.0 astro-og-canvas: specifier: ^0.11.1 - version: 0.11.1(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3)) + version: 0.11.1(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1)) canvaskit-wasm: specifier: ^0.41.1 version: 0.41.1 @@ -83,10 +83,10 @@ importers: version: 5.0.3 eslint: specifier: ^10.3.0 - version: 10.3.0(jiti@2.3.3) + version: 10.3.0(jiti@2.7.0) eslint-plugin-astro: specifier: ^1.6.0 - version: 1.7.0(eslint@10.3.0(jiti@2.3.3)) + version: 1.7.0(eslint@10.3.0(jiti@2.7.0)) fast-glob: specifier: ^3.3.3 version: 3.3.3 @@ -122,7 +122,7 @@ importers: version: 6.0.3 typescript-eslint: specifier: ^8.59.3 - version: 8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3) + version: 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) wrangler: specifier: ^4.99.0 version: 4.99.0 @@ -1269,10 +1269,10 @@ packages: '@kwsites/promise-deferred@1.1.1': resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} - '@lunariajs/core@https://pkg.pr.new/lunariajs/lunaria/@lunariajs/core@722c34c': - resolution: {tarball: https://pkg.pr.new/lunariajs/lunaria/@lunariajs/core@722c34c} - version: 0.1.1 + '@lunariajs/core@0.2.0': + resolution: {integrity: sha512-JuQsDStxiznw4Km0ab/FNH2VxVfWm08oJdjevRUOY7duN6nPKvBkk9rvXD6zPDlvauPWTf9RFuJ3lD4l+o9M4g==} engines: {node: '>=18.17.0'} + hasBin: true '@napi-rs/wasm-runtime@1.2.3': resolution: {integrity: sha512-UMduMbqO5s5zF2NkNacMT/yK5Y5QiKvWr2+50bzIIxFDwVJ2h49b+oyjaCGPhJxd2/gC2x39EHv/gHVuu36x2Q==} @@ -1483,6 +1483,12 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@simple-git/args-pathspec@1.0.3': + resolution: {integrity: sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA==} + + '@simple-git/argv-parser@1.1.1': + resolution: {integrity: sha512-Q9lBcfQ+VQCpQqGJFHe5yooOS5hGdLFFbJ5R+R5aDsnkPCahtn1hSkMcORX65J2Z5lxSkD0lQorMsncuBQxYUw==} + '@sindresorhus/is@7.2.0': resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==} engines: {node: '>=18'} @@ -1962,6 +1968,10 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + cookie-es@1.2.3: resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==} @@ -2112,6 +2122,9 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -2386,6 +2399,10 @@ packages: resolution: {integrity: sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==} engines: {node: '>=20.20.0'} + gettext-parser@9.1.1: + resolution: {integrity: sha512-ZLeqWPz9OMNrTgMuww0C22kkcNqis+e4059R94t7L7ERlZ2rUNpiDbaAUus+esBC6uBAQWbS9N+R5vJIJg//lw==} + engines: {node: '>=20'} + github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -2502,6 +2519,10 @@ packages: typescript: optional: true + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -2596,8 +2617,8 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jiti@2.3.3: - resolution: {integrity: sha512-EX4oNDwcXSivPrw2qKH2LB5PoFxEvgtv2JgwW0bU858HoLQ+kutSvjLMUqBd0PeJYEinLWhoI9Ol0eYMqj/wNQ==} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true js-yaml@3.14.1: @@ -3089,8 +3110,8 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - p-all@5.0.0: - resolution: {integrity: sha512-pofqu/1FhCVa+78xNAptCGc9V45exFz2pvBRyIvgXkNM0Rh18Py7j8pQuSjA+zpabI46v9hRjNWmL9EAFcEbpw==} + p-all@5.0.1: + resolution: {integrity: sha512-LMT7WX9ZSaq3J1zjloApkIVmtz0ZdMFSIqbuiEa3txGYPLjUPOvgOPOx3nFjo+f37ZYL+1aY666I2SG7GVwLOA==} engines: {node: '>=16'} p-limit@1.3.0: @@ -3206,6 +3227,10 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} + picomatch@4.0.7: + resolution: {integrity: sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==} + engines: {node: '>=12'} + pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -3384,6 +3409,9 @@ packages: s.color@0.0.15: resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sass-formatter@0.7.6: resolution: {integrity: sha512-hXdxU6PCkiV3XAiSnX+XLqz2ohHoEnVUlrd8LEVMAI80uB1+OTScIkH9n6qQwImZpTye1r1WG1rbGUteHNhoHg==} @@ -3443,8 +3471,8 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - simple-git@3.27.0: - resolution: {integrity: sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==} + simple-git@3.36.0: + resolution: {integrity: sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q==} sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -4046,6 +4074,11 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yaml@2.9.1: + resolution: {integrity: sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@22.0.0: resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} engines: {node: ^20.19.0 || ^22.12.0 || >=23} @@ -4068,12 +4101,12 @@ packages: youch@4.1.0-beta.10: resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zod@4.6.2: + resolution: {integrity: sha512-lh5RCAGFa1Cm2hjtNwLQhSs/AsqdWnTQaBER9fEwN/88pSh7KOtJavtBx/0VlkN/uFd61SwYmljLMDAsHlvzBQ==} + zwitch@1.0.5: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} @@ -4335,11 +4368,11 @@ snapshots: github-slugger: 2.0.0 satteri: 0.10.5 - '@astrojs/mdx@8.0.0(@astrojs/markdown-satteri@0.4.0)(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3))': + '@astrojs/mdx@8.0.0(@astrojs/markdown-satteri@0.4.0)(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1))': dependencies: '@astrojs/internal-helpers': 0.11.0 '@astrojs/markdown-satteri': 0.4.0 - astro: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3) + astro: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1) es-module-lexer: 2.0.0 '@astrojs/prism@4.0.2': @@ -4352,17 +4385,17 @@ snapshots: stream-replace-string: 2.0.0 zod: 4.3.6 - '@astrojs/starlight@0.42.0(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3))(typescript@6.0.3)': + '@astrojs/starlight@0.42.0(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1))(typescript@6.0.3)': dependencies: '@astrojs/markdown-satteri': 0.4.0 - '@astrojs/mdx': 8.0.0(@astrojs/markdown-satteri@0.4.0)(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3)) + '@astrojs/mdx': 8.0.0(@astrojs/markdown-satteri@0.4.0)(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1)) '@astrojs/sitemap': 3.7.3 '@pagefind/default-ui': 1.3.0 '@types/hast': 3.0.5 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3) - astro-expressive-code: 0.44.1(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3)) + astro: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1) + astro-expressive-code: 0.44.1(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1)) bcp-47: 2.1.0 hast-util-format: 1.1.0 hast-util-select: 6.0.4 @@ -4732,9 +4765,9 @@ snapshots: '@esbuild/win32-x64@0.28.1': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0(jiti@2.3.3))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0(jiti@2.7.0))': dependencies: - eslint: 10.3.0(jiti@2.3.3) + eslint: 10.3.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} @@ -5040,19 +5073,20 @@ snapshots: '@kwsites/promise-deferred@1.1.1': {} - '@lunariajs/core@https://pkg.pr.new/lunariajs/lunaria/@lunariajs/core@722c34c': + '@lunariajs/core@0.2.0': dependencies: consola: 3.4.2 - jiti: 2.3.3 - js-yaml: 4.3.1 - neotraverse: 0.6.18 - p-all: 5.0.0 + gettext-parser: 9.1.1 + jiti: 2.7.0 + neotraverse: 1.0.1 + p-all: 5.0.1 path-to-regexp: 6.3.0 - picomatch: 4.0.4 - simple-git: 3.27.0 + picomatch: 4.0.7 + simple-git: 3.36.0 tinyglobby: 0.2.17 ultramatter: 0.0.4 - zod: 3.25.76 + yaml: 2.9.1 + zod: 4.6.2 transitivePeerDependencies: - supports-color @@ -5224,6 +5258,12 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} + '@simple-git/args-pathspec@1.0.3': {} + + '@simple-git/argv-parser@1.1.1': + dependencies: + '@simple-git/args-pathspec': 1.0.3 + '@sindresorhus/is@7.2.0': {} '@speed-highlight/core@1.2.16': {} @@ -5422,15 +5462,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3))(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.59.3 - '@typescript-eslint/type-utils': 8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3) + '@typescript-eslint/type-utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.59.3 - eslint: 10.3.0(jiti@2.3.3) + eslint: 10.3.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -5438,14 +5478,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3)': + '@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.59.3 '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.59.3 debug: 4.4.3 - eslint: 10.3.0(jiti@2.3.3) + eslint: 10.3.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -5468,13 +5508,13 @@ snapshots: dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) debug: 4.4.3 - eslint: 10.3.0(jiti@2.3.3) + eslint: 10.3.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: @@ -5497,13 +5537,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3)': + '@typescript-eslint/utils@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.3.3)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.59.3 '@typescript-eslint/types': 8.59.3 '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) - eslint: 10.3.0(jiti@2.3.3) + eslint: 10.3.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -5659,20 +5699,20 @@ snapshots: transitivePeerDependencies: - supports-color - astro-expressive-code@0.44.1(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3)): + astro-expressive-code@0.44.1(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1)): dependencies: - astro: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3) + astro: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1) rehype-expressive-code: 0.44.1 url-extras: 0.1.0 - astro-og-canvas@0.11.1(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3)): + astro-og-canvas@0.11.1(astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1)): dependencies: - astro: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3) + astro: 7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1) canvaskit-wasm: 0.41.1 deterministic-object-hash: 2.0.2 entities: 8.0.0 - astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.3.3)(yaml@2.8.3): + astro@7.2.10(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3)(@types/node@24.12.2)(jiti@2.7.0)(yaml@2.9.1): dependencies: '@astrojs/compiler-rs': 0.4.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.3) '@astrojs/internal-helpers': 0.11.0 @@ -5722,8 +5762,8 @@ snapshots: ultrahtml: 1.6.0 unifont: 0.7.5 unstorage: 1.17.5 - vite: 8.0.16(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.3.3)(yaml@2.8.3) - vitefu: 1.1.2(vite@8.0.16(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.3.3)(yaml@2.8.3)) + vite: 8.0.16(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.7.0)(yaml@2.9.1) + vitefu: 1.1.2(vite@8.0.16(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.7.0)(yaml@2.9.1)) xxhash-wasm: 1.1.0 yargs-parser: 22.0.0 zod: 4.3.6 @@ -5903,6 +5943,8 @@ snapshots: consola@3.4.2: {} + content-type@1.0.5: {} + cookie-es@1.2.3: {} cookie@1.1.1: {} @@ -6038,6 +6080,10 @@ snapshots: emoji-regex@9.2.2: {} + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + entities@4.5.0: {} entities@6.0.0: {} @@ -6126,19 +6172,19 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.6.4(eslint@10.3.0(jiti@2.3.3)): + eslint-compat-utils@0.6.4(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 10.3.0(jiti@2.3.3) + eslint: 10.3.0(jiti@2.7.0) semver: 7.8.5 - eslint-plugin-astro@1.7.0(eslint@10.3.0(jiti@2.3.3)): + eslint-plugin-astro@1.7.0(eslint@10.3.0(jiti@2.7.0)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.3.3)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) '@jridgewell/sourcemap-codec': 1.5.5 '@typescript-eslint/types': 8.59.3 astro-eslint-parser: 1.4.0 - eslint: 10.3.0(jiti@2.3.3) - eslint-compat-utils: 0.6.4(eslint@10.3.0(jiti@2.3.3)) + eslint: 10.3.0(jiti@2.7.0) + eslint-compat-utils: 0.6.4(eslint@10.3.0(jiti@2.7.0)) globals: 16.5.0 postcss: 8.5.15 postcss-selector-parser: 7.0.0 @@ -6163,9 +6209,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.3.0(jiti@2.3.3): + eslint@10.3.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.3.3)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.5.5 @@ -6196,7 +6242,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.3.3 + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -6368,6 +6414,11 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + gettext-parser@9.1.1: + dependencies: + content-type: 1.0.5 + encoding: 0.1.13 + github-slugger@2.0.0: {} glob-parent@5.1.2: @@ -6542,6 +6593,10 @@ snapshots: optionalDependencies: typescript: 6.0.3 + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: {} ignore@5.3.2: {} @@ -6610,7 +6665,7 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jiti@2.3.3: {} + jiti@2.7.0: {} js-yaml@3.14.1: dependencies: @@ -7265,7 +7320,7 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - p-all@5.0.0: + p-all@5.0.1: dependencies: p-map: 6.0.0 @@ -7381,6 +7436,8 @@ snapshots: picomatch@4.0.4: {} + picomatch@4.0.7: {} + pify@2.3.0: {} pify@3.0.0: {} @@ -7584,6 +7641,8 @@ snapshots: s.color@0.0.15: {} + safer-buffer@2.1.2: {} + sass-formatter@0.7.6: dependencies: suf-log: 2.5.3 @@ -7712,10 +7771,12 @@ snapshots: signal-exit@4.1.0: {} - simple-git@3.27.0: + simple-git@3.36.0: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 + '@simple-git/args-pathspec': 1.0.3 + '@simple-git/argv-parser': 1.1.1 debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -7975,13 +8036,13 @@ snapshots: dependencies: semver: 7.8.5 - typescript-eslint@8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3): + typescript-eslint@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3))(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3) - '@typescript-eslint/parser': 8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.59.3(@typescript-eslint/parser@8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/parser': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/typescript-estree': 8.59.3(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.3.3))(typescript@6.0.3) - eslint: 10.3.0(jiti@2.3.3) + '@typescript-eslint/utils': 8.59.3(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.3.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -8129,7 +8190,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - vite@8.0.16(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.3.3)(yaml@2.8.3): + vite@8.0.16(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.7.0)(yaml@2.9.1): dependencies: lightningcss: 1.32.0 picomatch: 4.0.4 @@ -8140,12 +8201,12 @@ snapshots: '@types/node': 24.12.2 esbuild: 0.28.1 fsevents: 2.3.3 - jiti: 2.3.3 - yaml: 2.8.3 + jiti: 2.7.0 + yaml: 2.9.1 - vitefu@1.1.2(vite@8.0.16(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.3.3)(yaml@2.8.3)): + vitefu@1.1.2(vite@8.0.16(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.7.0)(yaml@2.9.1)): optionalDependencies: - vite: 8.0.16(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.3.3)(yaml@2.8.3) + vite: 8.0.16(@types/node@24.12.2)(esbuild@0.28.1)(jiti@2.7.0)(yaml@2.9.1) volar-service-css@0.0.70(@volar/language-service@2.4.28): dependencies: @@ -8322,6 +8383,8 @@ snapshots: yaml@2.8.3: {} + yaml@2.9.1: {} + yargs-parser@22.0.0: {} yargs@18.1.0: @@ -8350,10 +8413,10 @@ snapshots: cookie: 1.1.1 youch-core: 0.3.3 - zod@3.25.76: {} - zod@4.3.6: {} + zod@4.6.2: {} + zwitch@1.0.5: {} zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 3721b47ebc6a4..4b55438004fed 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -17,6 +17,7 @@ minimumReleaseAgeExclude: - '@astrojs/mdx@8.0.0' - '@astrojs/starlight@0.42.0' - '@astrojs/internal-helpers@0.11.0' + - '@lunariajs/core@0.2.0' # We don’t need to run these build scripts, so explicitly disallow them as a minor security measure. allowBuilds: diff --git a/public/logos/ishosting.svg b/public/logos/ishosting.svg new file mode 100644 index 0000000000000..90cf199e085d4 --- /dev/null +++ b/public/logos/ishosting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/scripts/lunaria.mts b/scripts/lunaria.mts index 394a3d0d9d1a7..66349446b4cf5 100644 --- a/scripts/lunaria.mts +++ b/scripts/lunaria.mts @@ -1,13 +1,12 @@ -import { createLunaria } from '@lunariajs/core'; +import { createLunaria, generateDashboard } from '@lunariajs/core'; import { mkdirSync, writeFileSync } from 'node:fs'; -import { Page, SvgSummary } from './lunaria/components.ts'; +import { join } from 'node:path'; +import { SvgSummary } from './lunaria/summary.ts'; const lunaria = await createLunaria(); const status = await lunaria.getFullStatus(); -const html = Page(lunaria.config, status, lunaria); -const svg = SvgSummary(lunaria.config, status); - -mkdirSync('dist/lunaria', { recursive: true }); -writeFileSync('dist/lunaria/index.html', html); -writeFileSync('dist/lunaria/summary.svg', svg); +const outDir = lunaria.config.outDir; +mkdirSync(outDir, { recursive: true }); +writeFileSync(join(outDir, 'index.html'), generateDashboard(lunaria.config, status)); +writeFileSync(join(outDir, 'summary.svg'), SvgSummary(lunaria.config, status)); diff --git a/scripts/lunaria/components.ts b/scripts/lunaria/components.ts deleted file mode 100644 index fed41a17bfc3c..0000000000000 --- a/scripts/lunaria/components.ts +++ /dev/null @@ -1,434 +0,0 @@ -import { - createLunaria, - type Locale, - type LunariaConfig, - type LunariaStatus, - type StatusEntry, -} from '@lunariajs/core'; -import { BaseStyles, CustomStyles } from './styles.ts'; - -export function html( - strings: TemplateStringsArray, - ...values: ((string | number) | (string | number)[])[] -) { - const treatedValues = values.map((value) => (Array.isArray(value) ? value.join('') : value)); - - return String.raw({ raw: strings }, ...treatedValues); -} - -type LunariaInstance = AwaitedThis translation is complete, amazing job! 🎉
` - : ''} -| ${col} | `)} -
|---|
- If you're interested in helping us translate - docs.astro.build into one of the languages listed below, - you've come to the right place! This auto-updating page always lists all the content that could - use your help right now. -
-- Before starting, please read our - i18n Guide - to learn about our translation process and how you can get involved. -
-`; - -/** - * Build an SVG file showing a summary of each language’s translation progress. - */ -export const SvgSummary = (config: LunariaConfig, status: LunariaStatus): string => { - const localeHeight = 56; // Each locale’s summary is 56px high. - const svgHeight = localeHeight * Math.ceil(config.locales.length / 2); - return html``; -}; - -function SvgLocaleSummary( - status: LunariaStatus, - { label, lang }: Locale -): { svg: string; progress: number } { - const missingFiles = status.filter( - (file) => - file.localizations.find((localization) => localization.lang === lang)?.status === 'missing' - ); - const outdatedFiles = status.filter((file) => { - const localization = file.localizations.find((localization) => localization.lang === lang); - if (!localization || localization.status === 'missing') { - return false; - } else if (file.type === 'dictionary') { - return 'missingKeys' in localization ? localization.missingKeys.length > 0 : false; - } else { - return ( - localization.status === 'outdated' || - ('missingKeys' in localization && localization.missingKeys.length > 0) - ); - } - }); - - const doneLength = status.length - outdatedFiles.length - missingFiles.length; - const barWidth = 184; - const doneFraction = doneLength / status.length; - const outdatedFraction = outdatedFiles.length / status.length; - const doneWidth = (doneFraction * barWidth).toFixed(2); - const outdatedWidth = ((outdatedFraction + doneFraction) * barWidth).toFixed(2); - - return { - progress: doneFraction, - svg: html`