From 8c594858982dfa2d95ac15f2205d08d0e8f429b4 Mon Sep 17 00:00:00 2001 From: Benjamin Singleton <19498453+tetrogem@users.noreply.github.com> Date: Sat, 4 Apr 2026 03:03:41 -0500 Subject: [PATCH 1/2] Auto Router, Discord Rules Page, & Vi18n lib (#52) feat: Auto Router, Discord Rules Page, & Vi18n lib (#52) --- apps/vdn-static/eslint.config.js | 84 +- apps/vdn-static/index.html | 28 +- apps/vdn-static/package.json | 12 +- apps/vdn-static/src/App.vue | 80 +- apps/vdn-static/src/assets.d.ts | 4 + apps/vdn-static/src/assets/locale/en_US.ftl | 78 ++ apps/vdn-static/src/assets/locale/vp_VL.ftl | 22 + apps/vdn-static/src/assets/locale/wp_VL.ftl | 23 + apps/vdn-static/src/assets/style.scss | 14 +- .../src/components/atoms/DropdownItem.vue | 14 + .../src/components/atoms/MarkdownDisplay.vue | 115 +++ .../src/components/atoms/MarkdownParts.vue | 67 ++ .../src/components/atoms/OptionalParent.vue | 12 + .../src/components/atoms/SmartLink.ts | 7 + .../src/components/atoms/SmartLink.vue | 56 ++ .../molecules/DiscordRuleOverview.vue | 38 + .../molecules/DiscordRuleSection.vue | 20 + .../molecules/LearningResourceWrapper.vue | 119 ++- .../src/components/organisms/LocalePicker.vue | 17 +- .../src/components/pages/HomePage.vue | 46 - .../src/components/pages/ResourcesPage.vue | 32 - apps/vdn-static/src/i18n/config.ts | 97 ++ apps/vdn-static/src/i18n/index.ts | 210 ++-- apps/vdn-static/src/i18n/locale.ts | 66 -- apps/vdn-static/src/locales/en_US.ts | 62 -- apps/vdn-static/src/locales/vp_VL.ts | 63 -- apps/vdn-static/src/locales/wp_VL.ts | 63 -- apps/vdn-static/src/main.ts | 2 +- apps/vdn-static/src/pages/discord/rules.vue | 49 + apps/vdn-static/src/pages/index.vue | 81 ++ .../pages/KotobaPage.vue => pages/kotoba.vue} | 15 +- apps/vdn-static/src/pages/resources.vue | 101 ++ apps/vdn-static/src/router.ts | 10 + apps/vdn-static/src/routes/index.ts | 21 - apps/vdn-static/src/typed-router.d.ts | 4 + apps/vdn-static/src/utils/css.ts | 1 + apps/vdn-static/src/utils/deep-partial.ts | 3 - apps/vdn-static/src/utils/ignore.ts | 2 + apps/vdn-static/src/utils/localizeLayout.ts | 16 - apps/vdn-static/src/utils/smart-dest.ts | 11 + apps/vdn-static/src/utils/types.ts | 8 + apps/vdn-static/src/utils/unsafe.ts | 11 + apps/vdn-static/src/vi18n-lib/compile.ts | 636 ++++++++++++ apps/vdn-static/src/vi18n-lib/config.ts | 106 ++ apps/vdn-static/src/vi18n-lib/markdown.ts | 944 ++++++++++++++++++ apps/vdn-static/src/vi18n-lib/setup.ts | 201 ++++ apps/vdn-static/src/vi18n-lib/spec.md | 79 ++ apps/vdn-static/tsconfig.app.json | 17 +- apps/vdn-static/tsconfig.json | 8 +- apps/vdn-static/vite.config.ts | 4 +- pnpm-lock.yaml | 482 +++++---- 51 files changed, 3479 insertions(+), 782 deletions(-) create mode 100644 apps/vdn-static/src/assets.d.ts create mode 100644 apps/vdn-static/src/assets/locale/en_US.ftl create mode 100644 apps/vdn-static/src/assets/locale/vp_VL.ftl create mode 100644 apps/vdn-static/src/assets/locale/wp_VL.ftl create mode 100644 apps/vdn-static/src/components/atoms/DropdownItem.vue create mode 100644 apps/vdn-static/src/components/atoms/MarkdownDisplay.vue create mode 100644 apps/vdn-static/src/components/atoms/MarkdownParts.vue create mode 100644 apps/vdn-static/src/components/atoms/OptionalParent.vue create mode 100644 apps/vdn-static/src/components/atoms/SmartLink.ts create mode 100644 apps/vdn-static/src/components/atoms/SmartLink.vue create mode 100644 apps/vdn-static/src/components/molecules/DiscordRuleOverview.vue create mode 100644 apps/vdn-static/src/components/molecules/DiscordRuleSection.vue delete mode 100644 apps/vdn-static/src/components/pages/HomePage.vue delete mode 100644 apps/vdn-static/src/components/pages/ResourcesPage.vue create mode 100644 apps/vdn-static/src/i18n/config.ts delete mode 100644 apps/vdn-static/src/i18n/locale.ts delete mode 100644 apps/vdn-static/src/locales/en_US.ts delete mode 100644 apps/vdn-static/src/locales/vp_VL.ts delete mode 100644 apps/vdn-static/src/locales/wp_VL.ts create mode 100644 apps/vdn-static/src/pages/discord/rules.vue create mode 100644 apps/vdn-static/src/pages/index.vue rename apps/vdn-static/src/{components/pages/KotobaPage.vue => pages/kotoba.vue} (59%) create mode 100644 apps/vdn-static/src/pages/resources.vue create mode 100644 apps/vdn-static/src/router.ts delete mode 100644 apps/vdn-static/src/routes/index.ts create mode 100644 apps/vdn-static/src/utils/css.ts delete mode 100644 apps/vdn-static/src/utils/deep-partial.ts create mode 100644 apps/vdn-static/src/utils/ignore.ts delete mode 100644 apps/vdn-static/src/utils/localizeLayout.ts create mode 100644 apps/vdn-static/src/utils/smart-dest.ts create mode 100644 apps/vdn-static/src/utils/types.ts create mode 100644 apps/vdn-static/src/utils/unsafe.ts create mode 100644 apps/vdn-static/src/vi18n-lib/compile.ts create mode 100644 apps/vdn-static/src/vi18n-lib/config.ts create mode 100644 apps/vdn-static/src/vi18n-lib/markdown.ts create mode 100644 apps/vdn-static/src/vi18n-lib/setup.ts create mode 100644 apps/vdn-static/src/vi18n-lib/spec.md diff --git a/apps/vdn-static/eslint.config.js b/apps/vdn-static/eslint.config.js index 6bf661b..8185819 100644 --- a/apps/vdn-static/eslint.config.js +++ b/apps/vdn-static/eslint.config.js @@ -1,24 +1,62 @@ -import js from '@eslint/js'; -import globals from 'globals'; -import ts from 'typescript-eslint'; -import vue from 'eslint-plugin-vue'; +import js from "@eslint/js"; +import globals from "globals"; +import ts from "typescript-eslint"; +import vue from "eslint-plugin-vue"; +import { defineConfig, globalIgnores } from "eslint/config"; +import vueParser from "vue-eslint-parser"; -export default ts.config( - { ignores: ['dist'] }, - { - extends: [ - js.configs.recommended, - ...ts.configs.recommendedTypeChecked, - ...vue.configs.recommendedTypeChecked, - ], - files: ['**/*.{js,ts,vue}'], - languageOptions: { - ecmaVersion: 2020, - globals: globals.browser, - parserOptions: { - projectService: true, - tsconfigRootDir: import.meta.dirname, - }, - }, - }, -) +export default defineConfig([ + globalIgnores(["dist"]), + { + extends: [ + js.configs.recommended, + ts.configs.strictTypeChecked, + ...vue.configs["flat/essential"], + ], + files: ["./src/**/*.{js,ts,vue}"], + plugins: { vue }, + languageOptions: { + ecmaVersion: "latest", + sourceType: "module", + globals: globals.browser, + parser: vueParser, + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + parser: ts.parser, + extraFileExtensions: [".vue"], + }, + }, + rules: { + "vue/no-restricted-html-elements": [ + "error", + { + element: ["a", "RouterLink"], + message: "Use instead.", + }, + { element: ["i18n-t"], message: "Use instead." }, + { + element: ["RichTemplateParts"], + message: + "Do not use the internal component. Use instead.", + }, + ], + // allow interfaces to only extend another interface without adding properties + // good for aliasing more complex types + "@typescript-eslint/no-empty-object-type": [ + "error", + { allowInterfaces: "with-single-extends" }, + ], + "vue/no-ref-object-reactivity-loss": ["error"], + "@typescript/no-unnecessary-conditions": [ + "error", + { allowConstantLoopConditions: "only-allowed-literals" }, + ], + }, + }, + // disable multi-word-component-names for unplugin-vue-router + { + files: ["src/pages/**/*.vue"], + rules: { "vue/multi-word-component-names": "off" }, + }, +]); diff --git a/apps/vdn-static/index.html b/apps/vdn-static/index.html index 0dc687b..f968c16 100644 --- a/apps/vdn-static/index.html +++ b/apps/vdn-static/index.html @@ -1,15 +1,19 @@ - - - - - - - Viossa.net - - -
- - + + + + + + + + Viossa.net + + + +
+ + + diff --git a/apps/vdn-static/package.json b/apps/vdn-static/package.json index 25a0d3c..8bd09d9 100644 --- a/apps/vdn-static/package.json +++ b/apps/vdn-static/package.json @@ -9,8 +9,9 @@ "preview": "vite preview" }, "dependencies": { + "@fluent/bundle": "^0.19.1", "@tailwindcss/vite": "^4.1.6", - "@types/node": "^22.15.17", + "@types/node": "^22.15.31", "@vueuse/components": "^13.3.0", "@vueuse/core": "^13.3.0", "arktype": "^2.1.29", @@ -22,17 +23,20 @@ "vue-router": "^4.5.1" }, "devDependencies": { + "@eslint/js": "^9.39.2", "@repo/common": "workspace:*", "@vitejs/plugin-vue": "^5.2.3", "@vue/tsconfig": "^0.7.0", - "eslint": "^9.26.0", - "eslint-plugin-vue": "^10.1.0", + "eslint": "^9.39.2", + "eslint-plugin-vue": "^10.7.0", + "globals": "^17.3.0", "prettier": "^3.5.3", "sass": "^1.87.0", "typescript": "~5.8.3", - "typescript-eslint": "^8.32.1", + "typescript-eslint": "^8.55.0", "unplugin-vue-router": "^0.12.0", "vite": "^6.3.5", + "vue-eslint-parser": "^10.2.0", "vue-tsc": "^2.2.8" }, "packageManager": "pnpm@10.11.0" diff --git a/apps/vdn-static/src/App.vue b/apps/vdn-static/src/App.vue index 21b089e..517c29a 100644 --- a/apps/vdn-static/src/App.vue +++ b/apps/vdn-static/src/App.vue @@ -1,9 +1,14 @@