diff --git a/.gitignore b/.gitignore index dd0e9c3e03..6ef8697950 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,4 @@ build npm-debug.log* .eslintcache +.stylelintcache diff --git a/DEV.md b/DEV.md index 2697e562af..98346825c7 100644 --- a/DEV.md +++ b/DEV.md @@ -28,7 +28,13 @@ This command starts a local development server and opens up a browser window. Mo pnpm build ``` -This command generates static content into the `build` directory and can be served using any static contents hosting service. +This command generates static content in the `build` directory. The generated content can be served using any static hosting service. + +## Translation status dashboard + +The `/translation-status/` page is generated by the [`@lunariajs/starlight`](https://lunaria.dev/integrations/starlight/) plugin. It shows translation progress by file and locale, and is included in `pnpm build`. + +Lunaria uses git history to detect outdated translations, so CI needs the full git history. When using `actions/checkout`, set `fetch-depth: 0`; with a shallow clone, Lunaria may treat all translations as up to date. ## Preview diff --git a/astro.config.mjs b/astro.config.mjs index a7dca54323..e15c732cb5 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -4,6 +4,7 @@ import starlight from "@astrojs/starlight"; import remarkHeaderId from "remark-heading-id"; import starlightLlmsTxt from "starlight-llms-txt"; import starlightLinksValidator from "starlight-links-validator"; +import lunaria from "@lunariajs/starlight"; // https://astro.build/config export default defineConfig({ @@ -110,6 +111,7 @@ export default defineConfig({ errorOnFallbackPages: false, errorOnInconsistentLocale: true, }), + lunaria({ route: "translation-status" }), ], locales: { root: { @@ -223,6 +225,10 @@ export default defineConfig({ { slug: "docs/branding", }, + { + label: "Translation Status", + link: "/translation-status/", + }, ], }, { diff --git a/lunaria.config.json b/lunaria.config.json new file mode 100644 index 0000000000..e55f95583d --- /dev/null +++ b/lunaria.config.json @@ -0,0 +1,41 @@ +{ + "$schema": "./node_modules/@lunariajs/core/config.schema.json", + "repository": { + "name": "feature-sliced/documentation", + "branch": "master", + "rootDir": ".", + "hosting": "github" + }, + "dashboard": { + "title": "Feature-Sliced Design — Translation Status", + "description": "Translation progress for the Feature-Sliced Design documentation.", + "site": "https://fsd.how/translation-status/", + "basesToHide": ["src/content/docs"], + "customCss": ["./src/styles/lunaria.css"], + "favicon": { + "inline": "./static/img/favicon/adaptive.svg" + } + }, + "defaultLocale": { + "lang": "en", + "label": "English" + }, + "locales": [ + { "lang": "ru", "label": "Русский" }, + { "lang": "uz", "label": "O'zbekcha" }, + { "lang": "kr", "label": "한국어" }, + { "lang": "ja", "label": "日本語" }, + { "lang": "vi", "label": "Tiếng Việt" }, + { "lang": "zh", "label": "中文" } + ], + "files": [ + { + "type": "universal", + "location": "src/content/docs/**/*.{md,mdx}", + "pattern": "src/content/docs/@lang/@path", + "ignore": [] + } + ], + "outDir": "./static/translation-status", + "cloneDir": "./node_modules/.cache/lunaria" +} diff --git a/package.json b/package.json index e695aadd3d..732fe448d1 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ }, "devDependencies": { "@astrojs/starlight": "^0.37.4", + "@lunariajs/starlight": "^0.1.1", "@types/node": "^22.18.6", "astro": "^5.16.16", "eslint": "^10.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ed9040a6d0..36e0dca09b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: '@astrojs/starlight': specifier: ^0.37.4 version: 0.37.7(astro@5.18.1(@types/node@22.19.15)(jiti@1.21.7)(lightningcss@1.32.0)(rollup@4.59.0)(sass@1.98.0)(terser@5.46.0)(typescript@5.9.3)) + '@lunariajs/starlight': + specifier: ^0.1.1 + version: 0.1.1(@astrojs/starlight@0.37.7(astro@5.18.1(@types/node@22.19.15)(jiti@1.21.7)(lightningcss@1.32.0)(rollup@4.59.0)(sass@1.98.0)(terser@5.46.0)(typescript@5.9.3)))(astro@5.18.1(@types/node@22.19.15)(jiti@1.21.7)(lightningcss@1.32.0)(rollup@4.59.0)(sass@1.98.0)(terser@5.46.0)(typescript@5.9.3)) '@types/node': specifier: ^22.18.6 version: 22.19.15 @@ -106,6 +109,9 @@ packages: resolution: {integrity: sha512-VERIM64vtTP1C4mxQ5thVT9fK0apjPFobqybMtA1UdUujWka24ERHbRHFGmpbbhp73MhV+KSsHQH9C6uOTdEQA==} engines: {node: '>=18'} + '@clack/core@0.3.5': + resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} + '@ctrl/tinycolor@4.2.0': resolution: {integrity: sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==} engines: {node: '>=14'} @@ -656,9 +662,39 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@kwsites/file-exists@1.1.1': + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + + '@kwsites/promise-deferred@1.1.1': + resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + + '@lunariajs/core@0.1.1': + resolution: {integrity: sha512-sAqM9+DVsLe3xHM9wu2pEnKGYMs/bWS9qpR+CGHol3RihOELnOQTzHddXbdB1MtgesbI8dnQuG64Ocd8KkWsng==} + engines: {node: '>=18.17.0'} + hasBin: true + + '@lunariajs/starlight@0.1.1': + resolution: {integrity: sha512-tpkqv8TCGUvz0z5nVk1ACb/2bT3seqDx+CHimNQugcpAFSip9BqDPOiWqaCujzZFajfR/L4mUsPAnavnnE8KVw==} + engines: {node: '>=18.17.0'} + peerDependencies: + '@astrojs/starlight': '>=0.14.0' + astro: '>=4.0.0' + '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + '@oslojs/encoding@1.1.0': resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==} @@ -951,6 +987,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==} + '@types/braces@3.0.5': resolution: {integrity: sha512-SQFof9H+LXeWNz8wDe7oN5zu7ket0qwMu5vZubW4GCJ8Kkeh6nBWUz87+KTz/G3Kqsrp0j/W253XJb3KMEeg3w==} @@ -1467,12 +1509,19 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} + fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -1521,9 +1570,17 @@ packages: resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} engines: {node: '>=18'} + get-port@7.2.0: + resolution: {integrity: sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg==} + engines: {node: '>=16'} + github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} @@ -1887,6 +1944,10 @@ packages: mdn-data@2.27.1: resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + micromark-core-commonmark@2.0.3: resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} @@ -2101,6 +2162,9 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} + piccolore@0.1.3: resolution: {integrity: sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==} @@ -2157,6 +2221,9 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + radix3@1.1.2: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} @@ -2256,11 +2323,18 @@ packages: retext@9.0.0: resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rollup@4.59.0: resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + s.color@0.0.15: resolution: {integrity: sha512-AUNrbEUHeKY8XsYr/DYpl+qk5+aM+DChopnWOPEzn8YKzOhv4l2zH6LzZms3tOZP3wwdOyc0RmTciyi46HLIuA==} @@ -2296,6 +2370,9 @@ packages: shiki@3.23.0: resolution: {integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==} + simple-git@3.36.0: + resolution: {integrity: sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q==} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -2462,6 +2539,9 @@ packages: ultrahtml@1.6.0: resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==} + ultramatter@0.0.4: + resolution: {integrity: sha512-1f/hO3mR+/Hgue4eInOF/Qm/wzDqwhYha4DxM0hre9YIUyso3fE2XtrAU6B4njLqTC8CM49EZaYgsVSa+dXHGw==} + uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -2837,6 +2917,11 @@ snapshots: dependencies: fontkitten: 1.0.3 + '@clack/core@0.3.5': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + '@ctrl/tinycolor@4.2.0': {} '@emnapi/runtime@1.8.1': @@ -3190,6 +3275,37 @@ snapshots: '@jridgewell/sourcemap-codec': 1.5.5 optional: true + '@kwsites/file-exists@1.1.1': + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@kwsites/promise-deferred@1.1.1': {} + + '@lunariajs/core@0.1.1': + dependencies: + '@clack/core': 0.3.5 + fast-glob: 3.3.3 + get-port: 7.2.0 + jiti: 1.21.7 + micromatch: 4.0.8 + path-to-regexp: 6.3.0 + picocolors: 1.1.1 + simple-git: 3.36.0 + ultramatter: 0.0.4 + zod: 3.25.76 + transitivePeerDependencies: + - supports-color + + '@lunariajs/starlight@0.1.1(@astrojs/starlight@0.37.7(astro@5.18.1(@types/node@22.19.15)(jiti@1.21.7)(lightningcss@1.32.0)(rollup@4.59.0)(sass@1.98.0)(terser@5.46.0)(typescript@5.9.3)))(astro@5.18.1(@types/node@22.19.15)(jiti@1.21.7)(lightningcss@1.32.0)(rollup@4.59.0)(sass@1.98.0)(terser@5.46.0)(typescript@5.9.3))': + dependencies: + '@astrojs/starlight': 0.37.7(astro@5.18.1(@types/node@22.19.15)(jiti@1.21.7)(lightningcss@1.32.0)(rollup@4.59.0)(sass@1.98.0)(terser@5.46.0)(typescript@5.9.3)) + '@lunariajs/core': 0.1.1 + astro: 5.18.1(@types/node@22.19.15)(jiti@1.21.7)(lightningcss@1.32.0)(rollup@4.59.0)(sass@1.98.0)(terser@5.46.0)(typescript@5.9.3) + transitivePeerDependencies: + - supports-color + '@mdx-js/mdx@3.1.1': dependencies: '@types/estree': 1.0.8 @@ -3220,6 +3336,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.20.1 + '@oslojs/encoding@1.1.0': {} '@pagefind/darwin-arm64@1.4.0': @@ -3419,6 +3547,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 + '@types/braces@3.0.5': {} '@types/debug@4.1.12': @@ -4099,10 +4233,22 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} + fastq@1.20.1: + dependencies: + reusify: 1.1.0 + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -4142,8 +4288,14 @@ snapshots: get-east-asian-width@1.5.0: {} + get-port@7.2.0: {} + github-slugger@2.0.0: {} + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 @@ -4432,8 +4584,7 @@ snapshots: isexe@2.0.0: {} - jiti@1.21.7: - optional: true + jiti@1.21.7: {} js-yaml@4.1.1: dependencies: @@ -4721,6 +4872,8 @@ snapshots: mdn-data@2.27.1: {} + merge2@1.4.1: {} + micromark-core-commonmark@2.0.3: dependencies: decode-named-character-reference: 1.3.0 @@ -5113,6 +5266,8 @@ snapshots: path-key@3.1.1: {} + path-to-regexp@6.3.0: {} + piccolore@0.1.3: {} picocolors@1.1.1: {} @@ -5158,6 +5313,8 @@ snapshots: punycode@2.3.1: {} + queue-microtask@1.2.3: {} + radix3@1.1.2: {} readdirp@4.1.2: @@ -5346,6 +5503,8 @@ snapshots: retext-stringify: 4.0.0 unified: 11.0.5 + reusify@1.1.0: {} + rollup@4.59.0: dependencies: '@types/estree': 1.0.8 @@ -5377,6 +5536,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + s.color@0.0.15: {} sass-formatter@0.7.9: @@ -5444,6 +5607,16 @@ snapshots: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 + 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 + sisteransi@1.0.5: {} sitemap@9.0.1: @@ -5629,6 +5802,8 @@ snapshots: ultrahtml@1.6.0: {} + ultramatter@0.0.4: {} + uncrypto@0.1.3: {} undici-types@6.21.0: {} diff --git a/src/styles/lunaria.css b/src/styles/lunaria.css new file mode 100644 index 0000000000..8f4a95632e --- /dev/null +++ b/src/styles/lunaria.css @@ -0,0 +1,54 @@ +/* + * Styles for the Lunaria translation status dashboard. + * Based on the FSD documentation theme, with colors adapted from src/styles/custom.css. + */ + +:root { + --ln-font-body: system-ui, sans-serif; + + /* Light theme (default) — mirrors :root[data-theme="light"] in custom.css */ + --ln-color-white: #ffffff; + --ln-color-gray-1: #f1f5f9; + --ln-color-gray-2: #e2e8f0; + --ln-color-gray-3: #cbd5e1; + --ln-color-gray-4: #94a3b8; + --ln-color-gray-5: #64748b; + --ln-color-gray-6: #475569; + --ln-color-gray-7: #334155; + --ln-color-black: #0f172a; + + --ln-color-blue: #3193ff; + --ln-color-orange: #f97316; + --ln-color-purple: #8b5cf6; + + --ln-color-background: var(--ln-color-white); + --ln-color-link: var(--ln-color-blue); + --ln-color-done: var(--ln-color-purple); + --ln-color-outdated: var(--ln-color-orange); + --ln-color-missing: var(--ln-color-gray-4); + --ln-color-table-border: var(--ln-color-gray-2); + --ln-color-table-background: var(--ln-color-gray-1); +} + +@media (prefers-color-scheme: dark) { + :root { + /* Dark theme — mirrors :root[data-theme="dark"] in custom.css */ + --ln-color-white: #0f172a; + --ln-color-gray-1: #172033; + --ln-color-gray-2: #1e293b; + --ln-color-gray-3: #334155; + --ln-color-gray-4: #64748b; + --ln-color-gray-5: #94a3b8; + --ln-color-gray-6: #cbd5e1; + --ln-color-gray-7: #e2e8f0; + --ln-color-black: #f1f5f9; + + --ln-color-blue: #60a5fa; + --ln-color-orange: #fb923c; + --ln-color-purple: #a78bfa; + + --ln-color-missing: var(--ln-color-gray-5); + --ln-color-table-border: var(--ln-color-gray-3); + --ln-color-table-background: var(--ln-color-gray-2); + } +}