From c46717b3cffc8774dd4e543c481ea74728879970 Mon Sep 17 00:00:00 2001 From: Marvin <52848568+mleem97@users.noreply.github.com> Date: Thu, 9 Apr 2026 23:54:50 +0200 Subject: [PATCH] refactor: update project branding and structure for gregFramework - Changed project title and tagline in docusaurus.config.js to reflect the new branding. - Updated package.json and package-lock.json to rename the project to gregwiki-docs-site. - Adjusted sidebar and documentation files to align with the new project structure and naming conventions. - Enhanced documentation content for clarity and consistency across various sections. - Added Prettier as a development dependency for code formatting. This commit aligns the project with the new branding and improves overall documentation structure. --- .prettierignore | 8 + .prettierrc.json | 7 + docs/README.md | 6 + docs/getting-started.md | 39 +- docs/intro.md | 39 +- docs/reference/fmf-hook-naming.md | 2 +- .../mods/fmf-console-input-guard-release.mdx | 2 +- .../mods/fmf-gregify-employees-release.mdx | 2 +- .../mods/fmf-hex-label-mod-release.mdx | 2 +- .../mods/fmf-lang-compat-bridge-release.mdx | 2 +- .../ffm-plugin-asset-exporter-release.mdx | 4 +- .../ffm-plugin-multiplayer-release.mdx | 6 +- .../ffm-plugin-player-models-release.mdx | 4 +- .../plugins/ffm-plugin-sysadmin-release.mdx | 4 +- .../ffm-plugin-web-ui-bridge-release.mdx | 4 +- .../plugins/fmf-modpathredirector-release.mdx | 2 +- docusaurus.config.js | 40 +- .../current/getting-started.md | 49 ++ .../current/intro.md | 44 ++ package-lock.json | 23 +- package.json | 10 +- scripts/fix-wiki-import-en-links.mjs | 2 +- scripts/normalize-wiki-import-i18n.mjs | 4 +- scripts/sync-wiki-to-docs.mjs | 10 +- scripts/write-wiki-import-category-keys.mjs | 2 +- sidebars.js | 16 +- src/components/ModReleasePage.tsx | 319 +++++++----- src/css/custom.css | 100 ++-- src/data/moduleCatalog.ts | 37 +- src/pages/index.tsx | 455 ++++++++++++------ src/pages/mods.tsx | 192 +++++--- 31 files changed, 950 insertions(+), 486 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc.json create mode 100644 i18n/de/docusaurus-plugin-content-docs/current/getting-started.md create mode 100644 i18n/de/docusaurus-plugin-content-docs/current/intro.md diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..c8c28e4 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,8 @@ +node_modules +build +.docusaurus +.cache +package-lock.json +pnpm-lock.yaml +docs/wiki-import +i18n diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..11116d9 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "singleQuote": true, + "trailingComma": "all", + "printWidth": 100, + "bracketSpacing": false, + "arrowParens": "always" +} diff --git a/docs/README.md b/docs/README.md index 150889c..8554ae1 100644 --- a/docs/README.md +++ b/docs/README.md @@ -44,3 +44,9 @@ Details: [`topics/wiki-import/overview.md`](./topics/wiki-import/overview.md). | Sync `../.wiki` → `docs/wiki-import/` | `scripts/sync-wiki-to-docs.mjs` | Copies `*.md` from the sibling `.wiki/` clone under `gregFramework/`. | | Split DE/EN pairs | `scripts/normalize-wiki-import-i18n.mjs` | EN default locale, DE under `i18n/de/...`. | | Sidebar category keys | `scripts/write-wiki-import-category-keys.mjs` | Regenerates `_category_.json` keys under Guides/Reference/Troubleshooting (if present). | + +## Locales (EN / DE / others) + +- **Default locale:** `en` — curated pages live under `docs/` (e.g. `intro.md`, `getting-started.md`). +- **German:** override files under `i18n/de/docusaurus-plugin-content-docs/current/` with the **same path** as in `docs/` (same doc `id` / filename). Example: `intro.md` and `getting-started.md` are fully maintained in DE. +- **fr, es, ru, ja:** enabled in `docusaurus.config.js`; where no translated file exists, Docusaurus **falls back** to the English `docs/` markdown. Add more translated files under `i18n//docusaurus-plugin-content-docs/current/` as needed. diff --git a/docs/getting-started.md b/docs/getting-started.md index bf2b31b..ec5044b 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -1,50 +1,49 @@ --- title: Getting started sidebar_label: Getting started -description: "Aktueller Stand nach Repo-Split: Wrapper-Struktur, Core-Build und Mod-/Extension-Repos." +description: "Split-repo workspace: gregFramework layout, building the core, and where docs live." --- -Die Struktur ist jetzt **Multi-Repo** mit `gregFramework/` als lokalem Wrapper-Ordner. Darin liegen die eigenständigen Repositories, z. B.: +The workspace is **multi-repo** with a local `gregFramework/` folder containing standalone repositories, for example: -- `gregCore/` (Core SDK, inkl. `FrikaMF-StandaloneRepo/`) -- `gregMods/` (einzelne Mod-Repos) -- `gregExtensions/` (einzelne Extension-Repos) -- `gregWiki/` (Dokumentation) +- `gregCore/` (core SDK, including `FrikaMF-StandaloneRepo/`) +- `gregMods/` (per-mod repositories) +- `gregExtensions/` (per-extension repositories) +- `gregWiki/` (this documentation site) -`DataCenter-RustBridge` wird in den Core integriert und liegt im Core-Baum unter: +`DataCenter-RustBridge` is integrated into the core tree at: - `gregCore/FrikaMF-StandaloneRepo/bridges/gregSta.RustBridge/` -## Core bauen +## Build the core ```text dotnet build gregCore/FrikaMF-StandaloneRepo/FrikaMF.sln -c Release ``` -Alternativ in IDE: `gregCore/FrikaMF-StandaloneRepo/FrikaMF.sln` öffnen. +Or open `gregCore/FrikaMF-StandaloneRepo/FrikaMF.sln` in your IDE. ## Hook naming - **Target convention:** `FMF..` (see [`CONTRIBUTING.md`](https://github.com/mleem97/gregFramework/blob/master/CONTRIBUTING.md)). -- **Registry:** [`FrikaModFramework/fmf_hooks.json`](https://github.com/mleem97/gregFramework/blob/master/FrikaModFramework/fmf_hooks.json). +- **Registry:** [`FrikaModFramework/fmf_hooks.json`](https://github.com/mleem97/gregFramework/blob/master/FrikaModFramework/fmf_hooks.json) (path may vary by branch). - **Legacy runtime strings** may still use `FFM.*` in [`HookNames`](https://github.com/mleem97/gregFramework/blob/master/framework/FrikaMF/HookNames.cs) until migrated. -## Mod starten +## Start a mod -1. Neues Mod-Repo unter `gregMods/` nach Schema `gregMod.` anlegen. -2. Templates aus `gregCore/FrikaMF-StandaloneRepo/Templates/` nutzen. -3. Hook-Metadaten pflegen und Mod im eigenen Repo versionieren. +1. Create a new mod repo under `gregMods/` using the `gregMod.` pattern. +2. Use templates from `gregCore/FrikaMF-StandaloneRepo/Templates/`. +3. Maintain hook metadata and version the mod in its own repository. ## Documentation site -- **Repo:** `gregWiki/` -- **Inhalt:** Markdown/MDX in diesem Repo, angepasst an den Split-Stand. +- **Repository:** `gregWiki/` +- **Content:** Markdown/MDX in this repo, aligned with the split layout. ### Docker -- **Dev server with hot reload:** from the `gregWiki` repo root, `docker build -t gregwiki-docs .` then `docker run --rm -p 3000:3000 gregwiki-docs` (or use your host compose file if you mount this repo). -- **MCP:** see [`reference/mcp-server`](./reference/mcp-server.md) in the core repository (`gregCore/FrikaMF-StandaloneRepo/mcp-server/`). +From the `gregWiki` root: `docker build -t gregwiki-docs .` then `docker run --rm -p 3000:3000 gregwiki-docs`. -## Assistants / MCP +### MCP -Der MCP-Server für Framework-Scan/Tooling liegt im Core-Umfeld (`gregCore/FrikaMF-StandaloneRepo/mcp-server/`). +See [`reference/mcp-server`](./reference/mcp-server.md) — the server lives next to the core sources (`gregCore/FrikaMF-StandaloneRepo/mcp-server/`). diff --git a/docs/intro.md b/docs/intro.md index 97e839f..ed8256e 100644 --- a/docs/intro.md +++ b/docs/intro.md @@ -1,43 +1,44 @@ --- id: intro -title: FrikaMF Docs Start +title: gregFramework documentation slug: /docs +description: Entry point for the split-repo workspace — core, mods, extensions, and this wiki. --- -Diese Dokumentation beschreibt den **aktuellen Split-Stand**: `gregFramework/` als Wrapper mit Einzel-Repositories für Core, Mods, Extensions und Wiki. Sie richtet sich an **Spieler**, **Mod-Developer**, **Contributors** und **Sponsoren**. +This documentation describes the **current split layout**: a local `gregFramework/` workspace with separate repositories for **core**, **mods**, **extensions**, and **wiki**. It is written for **players**, **mod developers**, **contributors**, and **sponsors**. -## Für wen? — Who is this for? +## Who is this for? | Audience | Start here | |----------|------------| -| **Spieler** — install, play, troubleshoot | [End users (hub)](./topics/end-user/overview.md) · [End user wiki (import)](./wiki-import/EndUser/) | -| **Moddevs** — build mods, hooks, debugging | [Mod developers (hub)](./topics/mod-developers/overview.md) · [ModDevs wiki (import)](./wiki-import/ModDevs/) · [Framework](./mods/framework.md) | -| **Contributor** — PRs, docs, plugins, CI | [Contributors (workflow)](./topics/contributors/overview.md) · [Contributors wiki (import)](./wiki-import/Contributors/) | -| **Sponsorinnen & Sponsoren** — support & transparency | [Sponsors (hub)](./topics/sponsors/overview.md) · [Sponsors (EN)](./wiki-import/Sponsors) · [Sponsoren (DE)](./wiki-import/Sponsoren) | +| **Players** — install, play, troubleshoot | [End users (hub)](./topics/end-user/overview.md) · [End user wiki (import)](./wiki-import/EndUser/) | +| **Mod developers** — build mods, hooks, debugging | [Mod developers (hub)](./topics/mod-developers/overview.md) · [ModDevs wiki (import)](./wiki-import/ModDevs/) · [Framework](./mods/framework.md) | +| **Contributors** — PRs, docs, plugins, CI | [Contributors (workflow)](./topics/contributors/overview.md) · [Contributors wiki (import)](./wiki-import/Contributors/) | +| **Sponsors** — support & transparency | [Sponsors (hub)](./topics/sponsors/overview.md) · [Sponsors (EN)](./wiki-import/Sponsors) · [Sponsoren (DE)](./wiki-import/Sponsoren) | **Experience tracks** (newbies → pros): [By audience](./topics/audiences/overview.md) → [Newbies](./audiences/newbies.md), [Intermediates](./audiences/intermediates.md), [Professionals](./audiences/professionals.md). -## Repository Hub +## Repository hub - Core: `gregCore/FrikaMF-StandaloneRepo/` -- Mods: `gregMods/` (Repos `gregMod.`) -- Extensions: `gregExtensions/` (Repos `gregExt.`) -- Wiki: `gregWiki/` +- Mods: `gregMods/` (repos `gregMod.`) +- Extensions: `gregExtensions/` (repos `gregExt.`) +- Wiki: `gregWiki/` (this site) ## Hooks and releases - [FMF hook naming](./reference/fmf-hook-naming.md) — `FMF..…` and legacy `FFM.*` -- [FMF hooks catalog](./reference/fmf-hooks-catalog.md) — generated from `framework/FrikaMF/HookNames.cs` +- [FMF hooks catalog](./reference/fmf-hooks-catalog.md) — generated from core `HookNames.cs` - [Release channels](./reference/release-channels.md) — Steam Workshop vs GitHub (beta) -- [MCP server](./reference/mcp-server.md) — LLM/IDE tools over docs + `fmf_hooks.json` (optional Docker bundle) +- [MCP server](./reference/mcp-server.md) — optional LLM/IDE tooling over docs + `fmf_hooks.json` -## Repository layout (contributors) +## Layout (contributors) -- [Repo inventory](./contributors/repo-inventory.md) — aktuelle Projekt-/Repo-Übersicht -- Split-Konvention: `gregMod.`, `gregExt.`, `gregSta.` +- [Repo inventory](./contributors/repo-inventory.md) — project and repository overview +- Split naming: `gregMod.`, `gregExt.`, `gregSta.` ## Source model -- **Authoring:** Inhalte liegen im `gregWiki`-Repo. -- **Core source of truth:** technische Runtime-/Bridge-Details kommen aus `gregCore`. -- **RustBridge:** ist im Core integriert unter `FrikaMF-StandaloneRepo/bridges/gregSta.RustBridge/`. +- **Authoring:** Markdown/MDX lives in the **gregWiki** repository. +- **Technical source of truth:** runtime and bridge details come from **gregCore**. +- **Rust bridge:** integrated in the core tree under `FrikaMF-StandaloneRepo/bridges/gregSta.RustBridge/`. diff --git a/docs/reference/fmf-hook-naming.md b/docs/reference/fmf-hook-naming.md index 13ee061..c28b403 100644 --- a/docs/reference/fmf-hook-naming.md +++ b/docs/reference/fmf-hook-naming.md @@ -15,7 +15,7 @@ All **new** public hook and event identifiers should follow: FMF.. ``` -- **`FMF`** — Fixed prefix (Frika Mod Framework). +- **`FMF`** — Fixed prefix (Greg Mod Framework / **gregFramework** hook namespace). - **``** — Uppercase domain from the [approved domain list](#approved-domain-segments). Describes *where* the signal belongs in the game (player, rack, server, economy, …). - **``** — `PascalCase` segment(s), usually `OnSomething` for events or a verb phrase for commands. diff --git a/docs/releases/mods/fmf-console-input-guard-release.mdx b/docs/releases/mods/fmf-console-input-guard-release.mdx index 30c0135..3a26bfc 100644 --- a/docs/releases/mods/fmf-console-input-guard-release.mdx +++ b/docs/releases/mods/fmf-console-input-guard-release.mdx @@ -11,7 +11,7 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FMF.ConsoleInputGuard.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregFramework Community" category="Mod" dependencies={['MelonLoader', 'Harmony']} codeLanguages={['C#']} diff --git a/docs/releases/mods/fmf-gregify-employees-release.mdx b/docs/releases/mods/fmf-gregify-employees-release.mdx index 2d8a561..0329332 100644 --- a/docs/releases/mods/fmf-gregify-employees-release.mdx +++ b/docs/releases/mods/fmf-gregify-employees-release.mdx @@ -11,7 +11,7 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FMF.GregifyEmployees.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregFramework Community" category="Mod" dependencies={['MelonLoader', 'Harmony']} codeLanguages={['C#']} diff --git a/docs/releases/mods/fmf-hex-label-mod-release.mdx b/docs/releases/mods/fmf-hex-label-mod-release.mdx index 9dcf900..3cddf65 100644 --- a/docs/releases/mods/fmf-hex-label-mod-release.mdx +++ b/docs/releases/mods/fmf-hex-label-mod-release.mdx @@ -11,7 +11,7 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FMF.HexLabelMod.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregFramework Community" category="Mod" dependencies={['MelonLoader', 'Harmony']} codeLanguages={['C#']} diff --git a/docs/releases/mods/fmf-lang-compat-bridge-release.mdx b/docs/releases/mods/fmf-lang-compat-bridge-release.mdx index bfd5f15..72853ba 100644 --- a/docs/releases/mods/fmf-lang-compat-bridge-release.mdx +++ b/docs/releases/mods/fmf-lang-compat-bridge-release.mdx @@ -11,7 +11,7 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FMF.JoniMLCompatMod.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregFramework Community" category="Mod" dependencies={['MelonLoader']} codeLanguages={['C#']} diff --git a/docs/releases/plugins/ffm-plugin-asset-exporter-release.mdx b/docs/releases/plugins/ffm-plugin-asset-exporter-release.mdx index a7450cb..67a1271 100644 --- a/docs/releases/plugins/ffm-plugin-asset-exporter-release.mdx +++ b/docs/releases/plugins/ffm-plugin-asset-exporter-release.mdx @@ -11,9 +11,9 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FFM.Plugin.AssetExporter.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregFramework Community" category="Plugin" - dependencies={['MelonLoader', 'FrikaMF']} + dependencies={['MelonLoader', 'gregFramework']} codeLanguages={['C#']} description="Provides export-focused tooling for asset-related workflows in Data Center modding pipelines." banner="Asset exporter plugin release" diff --git a/docs/releases/plugins/ffm-plugin-multiplayer-release.mdx b/docs/releases/plugins/ffm-plugin-multiplayer-release.mdx index 69c4a6d..e39c471 100644 --- a/docs/releases/plugins/ffm-plugin-multiplayer-release.mdx +++ b/docs/releases/plugins/ffm-plugin-multiplayer-release.mdx @@ -11,11 +11,11 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FFM.Plugin.Multiplayer.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregFramework Community" category="Plugin" - dependencies={['MelonLoader', 'FrikaMF']} + dependencies={['MelonLoader', 'gregFramework']} codeLanguages={['C#']} - description="Contains multiplayer-oriented plugin functionality for FrikaMF ecosystems." + description="Contains multiplayer-oriented plugin functionality for gregFramework ecosystems." banner="Multiplayer plugin release" releaseNotesPath="/mods/extensions/ffm-plugin-multiplayer" /> diff --git a/docs/releases/plugins/ffm-plugin-player-models-release.mdx b/docs/releases/plugins/ffm-plugin-player-models-release.mdx index f998d01..0851a71 100644 --- a/docs/releases/plugins/ffm-plugin-player-models-release.mdx +++ b/docs/releases/plugins/ffm-plugin-player-models-release.mdx @@ -11,9 +11,9 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FFM.Plugin.PlayerModels.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregFramework Community" category="Plugin" - dependencies={['MelonLoader', 'FrikaMF']} + dependencies={['MelonLoader', 'gregFramework']} codeLanguages={['C#']} description="Extends player model handling and related rendering/gameplay presentation behavior." banner="Player models plugin release" diff --git a/docs/releases/plugins/ffm-plugin-sysadmin-release.mdx b/docs/releases/plugins/ffm-plugin-sysadmin-release.mdx index 073dbe7..fc57b2d 100644 --- a/docs/releases/plugins/ffm-plugin-sysadmin-release.mdx +++ b/docs/releases/plugins/ffm-plugin-sysadmin-release.mdx @@ -11,9 +11,9 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FFM.Plugin.Sysadmin.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregFramework Community" category="Plugin" - dependencies={['MelonLoader', 'FrikaMF']} + dependencies={['MelonLoader', 'gregFramework']} codeLanguages={['C#']} description="Provides sysadmin-focused controls and quality-of-life command utilities." banner="Sysadmin plugin release" diff --git a/docs/releases/plugins/ffm-plugin-web-ui-bridge-release.mdx b/docs/releases/plugins/ffm-plugin-web-ui-bridge-release.mdx index 41fafc9..9f16306 100644 --- a/docs/releases/plugins/ffm-plugin-web-ui-bridge-release.mdx +++ b/docs/releases/plugins/ffm-plugin-web-ui-bridge-release.mdx @@ -11,9 +11,9 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FFM.Plugin.WebUIBridge.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregFramework Community" category="Plugin" - dependencies={['MelonLoader', 'FrikaMF']} + dependencies={['MelonLoader', 'gregFramework']} codeLanguages={['C#']} description="Bridges runtime data to web interfaces for dashboards and remote overlays." banner="Web UI bridge plugin release" diff --git a/docs/releases/plugins/fmf-modpathredirector-release.mdx b/docs/releases/plugins/fmf-modpathredirector-release.mdx index 60084f3..d4c53cc 100644 --- a/docs/releases/plugins/fmf-modpathredirector-release.mdx +++ b/docs/releases/plugins/fmf-modpathredirector-release.mdx @@ -12,7 +12,7 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FMF.ModPathRedirector.dll" releaseReady={true} version="1.5.0" - author="DataCenterExporter / FrikaMF Community" + author="DataCenterExporter / gregFramework Community" category="MelonLoader plugin" dependencies={['MelonLoader', 'Steam (client)', 'Data Center']} codeLanguages={['C#']} diff --git a/docusaurus.config.js b/docusaurus.config.js index c7373a8..d539596 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -1,8 +1,9 @@ // @ts-check const config = { - title: 'Frika Mod Framework', - tagline: 'Community-driven docs for FrikaMF, plugins, Rust FFI, and multiplayer stacks', + title: 'gregFramework', + tagline: + 'Community docs for gregFramework — Data Center mods, FMF plugins, hooks, and split-repo layout', favicon: 'img/logo.svg', url: 'https://frikadellental.de', baseUrl: '/', @@ -140,7 +141,7 @@ const config = { respectPrefersColorScheme: false, }, navbar: { - title: 'Frika Mod Framework', + title: 'gregFramework', hideOnScroll: false, style: 'dark', items: [ @@ -163,10 +164,34 @@ const config = { dropdownItemsBefore: [], dropdownItemsAfter: [], }, - {to: '/mods', label: 'Mods', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-mods', 'aria-label': 'Mods'}, - {href: 'https://discord.gg/greg', label: 'Discord', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-discord', 'aria-label': 'Discord'}, - {href: 'https://github.com/mleem97/gregFramework/issues', label: 'Support', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-support', 'aria-label': 'Support'}, - {href: 'https://github.com/mleem97/gregFramework', label: 'GitHub', position: 'right', className: 'nav-right-icon nav-icon-only nav-link-github', 'aria-label': 'GitHub'}, + { + to: '/mods', + label: 'Mods', + position: 'right', + className: 'nav-right-icon nav-icon-only nav-link-mods', + 'aria-label': 'Mods', + }, + { + href: 'https://discord.gg/greg', + label: 'Discord', + position: 'right', + className: 'nav-right-icon nav-icon-only nav-link-discord', + 'aria-label': 'Discord', + }, + { + href: 'https://github.com/mleem97/gregFramework/issues', + label: 'Support', + position: 'right', + className: 'nav-right-icon nav-icon-only nav-link-support', + 'aria-label': 'Support', + }, + { + href: 'https://github.com/mleem97/gregFramework', + label: 'GitHub', + position: 'right', + className: 'nav-right-icon nav-icon-only nav-link-github', + 'aria-label': 'GitHub', + }, ], }, footer: { @@ -199,4 +224,3 @@ const config = { }; module.exports = config; - diff --git a/i18n/de/docusaurus-plugin-content-docs/current/getting-started.md b/i18n/de/docusaurus-plugin-content-docs/current/getting-started.md new file mode 100644 index 0000000..9405d66 --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-docs/current/getting-started.md @@ -0,0 +1,49 @@ +--- +title: Erste Schritte +sidebar_label: Erste Schritte +description: "Split-Repo-Workspace: gregFramework-Layout, Core bauen und wo die Doku liegt." +--- + +Die Struktur ist **Multi-Repo** mit `gregFramework/` als lokalem Wrapper-Ordner. Darin liegen die eigenständigen Repositories, z. B.: + +- `gregCore/` (Core SDK, inkl. `FrikaMF-StandaloneRepo/`) +- `gregMods/` (einzelne Mod-Repos) +- `gregExtensions/` (einzelne Extension-Repos) +- `gregWiki/` (Dokumentation) + +`DataCenter-RustBridge` wird in den Core integriert und liegt unter: + +- `gregCore/FrikaMF-StandaloneRepo/bridges/gregSta.RustBridge/` + +## Core bauen + +```text +dotnet build gregCore/FrikaMF-StandaloneRepo/FrikaMF.sln -c Release +``` + +Alternativ in der IDE: `gregCore/FrikaMF-StandaloneRepo/FrikaMF.sln` öffnen. + +## Hook-Naming + +- **Zielkonvention:** `FMF..` (siehe [`CONTRIBUTING.md`](https://github.com/mleem97/gregFramework/blob/master/CONTRIBUTING.md)). +- **Registry:** [`FrikaModFramework/fmf_hooks.json`](https://github.com/mleem97/gregFramework/blob/master/FrikaModFramework/fmf_hooks.json). +- **Legacy-Runtime-Strings** können noch `FFM.*` in [`HookNames`](https://github.com/mleem97/gregFramework/blob/master/framework/FrikaMF/HookNames.cs) nutzen, bis migriert. + +## Mod starten + +1. Neues Mod-Repo unter `gregMods/` nach Schema `gregMod.` anlegen. +2. Templates aus `gregCore/FrikaMF-StandaloneRepo/Templates/` nutzen. +3. Hook-Metadaten pflegen und Mod im eigenen Repo versionieren. + +## Dokumentations-Site + +- **Repo:** `gregWiki/` +- **Inhalt:** Markdown/MDX in diesem Repo, angepasst an den Split-Stand. + +### Docker + +Im `gregWiki`-Root: `docker build -t gregwiki-docs .` und `docker run --rm -p 3000:3000 gregwiki-docs`. + +### MCP + +Siehe [`reference/mcp-server`](./reference/mcp-server.md) im Core (`gregCore/FrikaMF-StandaloneRepo/mcp-server/`). diff --git a/i18n/de/docusaurus-plugin-content-docs/current/intro.md b/i18n/de/docusaurus-plugin-content-docs/current/intro.md new file mode 100644 index 0000000..1cadcac --- /dev/null +++ b/i18n/de/docusaurus-plugin-content-docs/current/intro.md @@ -0,0 +1,44 @@ +--- +id: intro +title: gregFramework Dokumentation +slug: /docs +description: Einstieg für den Split-Repo-Workspace — Core, Mods, Extensions und dieses Wiki. +--- + +Diese Dokumentation beschreibt den **aktuellen Split-Stand**: `gregFramework/` als Wrapper mit Einzel-Repositories für **Core**, **Mods**, **Extensions** und **Wiki**. Sie richtet sich an **Spieler**, **Mod-Developer**, **Contributors** und **Sponsoren**. + +## Für wen? + +| Zielgruppe | Einstieg | +|------------|----------| +| **Spieler** — installieren, spielen, Troubleshooting | [Endnutzer (Hub)](./topics/end-user/overview.md) · [Endnutzer-Wiki (Import)](./wiki-import/EndUser/) | +| **Moddevs** — Mods bauen, Hooks, Debugging | [Mod-Entwickler (Hub)](./topics/mod-developers/overview.md) · [ModDevs-Wiki (Import)](./wiki-import/ModDevs/) · [Framework](./mods/framework.md) | +| **Contributor** — PRs, Doku, Plugins, CI | [Contributors (Workflow)](./topics/contributors/overview.md) · [Contributors-Wiki (Import)](./wiki-import/Contributors/) | +| **Sponsorinnen & Sponsoren** | [Sponsors (Hub)](./topics/sponsors/overview.md) · [Sponsors (EN)](./wiki-import/Sponsors) · [Sponsoren (DE)](./wiki-import/Sponsoren) | + +**Erfahrungspfade** (Einsteiger → Profis): [Nach Zielgruppe](./topics/audiences/overview.md) → [Newbies](./audiences/newbies.md), [Intermediates](./audiences/intermediates.md), [Professionals](./audiences/professionals.md). + +## Repository-Hub + +- Core: `gregCore/FrikaMF-StandaloneRepo/` +- Mods: `gregMods/` (Repos `gregMod.`) +- Extensions: `gregExtensions/` (Repos `gregExt.`) +- Wiki: `gregWiki/` + +## Hooks und Releases + +- [FMF Hook-Naming](./reference/fmf-hook-naming.md) — `FMF..…` und Legacy `FFM.*` +- [FMF-Hooks-Katalog](./reference/fmf-hooks-catalog.md) — generiert aus Core-`HookNames.cs` +- [Release-Kanäle](./reference/release-channels.md) — Steam Workshop vs GitHub (Beta) +- [MCP-Server](./reference/mcp-server.md) — optionale LLM/IDE-Tools über Doku + `fmf_hooks.json` + +## Layout (Contributors) + +- [Repo-Inventar](./contributors/repo-inventory.md) — Projekt- und Repo-Übersicht +- Split-Konvention: `gregMod.`, `gregExt.`, `gregSta.` + +## Quellenmodell + +- **Authoring:** Inhalte liegen im **gregWiki**-Repo. +- **Technische Wahrheit:** Runtime/Bridge-Details kommen aus **gregCore**. +- **RustBridge:** im Core unter `FrikaMF-StandaloneRepo/bridges/gregSta.RustBridge/`. diff --git a/package-lock.json b/package-lock.json index 61a6867..2778121 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "frikamf-docs-site", + "name": "gregwiki-docs-site", "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "frikamf-docs-site", + "name": "gregwiki-docs-site", "version": "0.1.0", "dependencies": { "@docusaurus/core": "3.9.2", @@ -29,7 +29,8 @@ "tailwindcss": "^4.2.2" }, "devDependencies": { - "@docusaurus/eslint-plugin": "^3.9.2" + "@docusaurus/eslint-plugin": "^3.9.2", + "prettier": "^3.5.3" } }, "node_modules/@algolia/abtesting": { @@ -17203,6 +17204,22 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", + "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", diff --git a/package.json b/package.json index fa90b23..f64f0c2 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,18 @@ { - "name": "frikamf-docs-site", + "name": "gregwiki-docs-site", "version": "0.1.0", "private": true, "scripts": { "dev": "docusaurus clear && docusaurus build && docusaurus start --host 0.0.0.0 --port 3000", "start": "docusaurus start --host 0.0.0.0 --port 3000", "build": "docusaurus build", - "serve": "docusaurus serve", "clear": "docusaurus clear", "wiki:sync": "node ./scripts/sync-wiki-to-docs.mjs", "wiki:normalize-i18n": "node ./scripts/normalize-wiki-import-i18n.mjs", - "wiki:refresh": "node ./scripts/sync-wiki-to-docs.mjs && node ./scripts/normalize-wiki-import-i18n.mjs" + "wiki:refresh": "node ./scripts/sync-wiki-to-docs.mjs && node ./scripts/normalize-wiki-import-i18n.mjs", + "format": "prettier --write src scripts docusaurus.config.js sidebars.js README.md docs/README.md package.json .prettierrc.json", + "format:check": "prettier --check src scripts docusaurus.config.js sidebars.js README.md docs/README.md package.json .prettierrc.json" }, "dependencies": { "@docusaurus/core": "3.9.2", @@ -35,6 +36,7 @@ "tailwindcss": "^4.2.2" }, "devDependencies": { - "@docusaurus/eslint-plugin": "^3.9.2" + "@docusaurus/eslint-plugin": "^3.9.2", + "prettier": "^3.5.3" } } diff --git a/scripts/fix-wiki-import-en-links.mjs b/scripts/fix-wiki-import-en-links.mjs index 5494405..65e36a8 100644 --- a/scripts/fix-wiki-import-en-links.mjs +++ b/scripts/fix-wiki-import-en-links.mjs @@ -6,7 +6,7 @@ import fs from 'node:fs'; import path from 'node:path'; function walk(dir) { - for (const ent of fs.readdirSync(dir, { withFileTypes: true })) { + for (const ent of fs.readdirSync(dir, {withFileTypes: true})) { const p = path.join(dir, ent.name); if (ent.isDirectory()) walk(p); else if (ent.name.endsWith('.md')) { diff --git a/scripts/normalize-wiki-import-i18n.mjs b/scripts/normalize-wiki-import-i18n.mjs index 9c7f188..7c14b41 100644 --- a/scripts/normalize-wiki-import-i18n.mjs +++ b/scripts/normalize-wiki-import-i18n.mjs @@ -19,7 +19,7 @@ import { statSync, writeFileSync, } from 'node:fs'; -import { basename, dirname, join, relative, resolve } from 'node:path'; +import {basename, dirname, join, relative, resolve} from 'node:path'; const repoRoot = resolve(import.meta.dirname, '..'); const docsWikiImport = join(repoRoot, 'docs', 'wiki-import'); @@ -48,7 +48,7 @@ This page is available in **German** in the legacy wiki import. Use the language } function ensureDir(p) { - mkdirSync(p, { recursive: true }); + mkdirSync(p, {recursive: true}); } function walkMarkdownFiles(root, base = root) { diff --git a/scripts/sync-wiki-to-docs.mjs b/scripts/sync-wiki-to-docs.mjs index 456d5d0..79509d2 100644 --- a/scripts/sync-wiki-to-docs.mjs +++ b/scripts/sync-wiki-to-docs.mjs @@ -1,5 +1,5 @@ -import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs'; -import { join, resolve } from 'node:path'; +import {existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync} from 'node:fs'; +import {join, resolve} from 'node:path'; const projectRoot = resolve(process.cwd()); const gregFrameworkRoot = resolve(projectRoot, '..'); @@ -14,10 +14,10 @@ if (!existsSync(wikiDir)) { process.exit(1); } -mkdirSync(outDir, { recursive: true }); +mkdirSync(outDir, {recursive: true}); function collectMarkdownFiles(rootDir, prefix = '') { - const entries = readdirSync(join(rootDir, prefix), { withFileTypes: true }); + const entries = readdirSync(join(rootDir, prefix), {withFileTypes: true}); const results = []; for (const entry of entries) { @@ -42,7 +42,7 @@ for (const file of files) { const sanitizedRelative = file.replace(/\s+/g, '-'); const target = join(outDir, sanitizedRelative); const targetDir = resolve(target, '..'); - mkdirSync(targetDir, { recursive: true }); + mkdirSync(targetDir, {recursive: true}); const raw = readFileSync(source, 'utf8'); writeFileSync(target, raw, 'utf8'); } diff --git a/scripts/write-wiki-import-category-keys.mjs b/scripts/write-wiki-import-category-keys.mjs index 1e01b96..da72b3c 100644 --- a/scripts/write-wiki-import-category-keys.mjs +++ b/scripts/write-wiki-import-category-keys.mjs @@ -31,7 +31,7 @@ for (const base of bases) { const dir = path.join(base, rel); if (!fs.existsSync(dir)) continue; const target = path.join(dir, '_category_.json'); - const body = JSON.stringify({ key }, null, 2) + '\n'; + const body = JSON.stringify({key}, null, 2) + '\n'; fs.writeFileSync(target, body); console.log('wrote', target); } diff --git a/sidebars.js b/sidebars.js index fa44b46..b4bb321 100644 --- a/sidebars.js +++ b/sidebars.js @@ -48,11 +48,7 @@ const sidebars = { { type: 'category', label: 'Guides', - items: [ - 'guides/enduser-workshop', - 'guides/contributor-workshop', - 'guides/release', - ], + items: ['guides/enduser-workshop', 'guides/contributor-workshop', 'guides/release'], }, { type: 'category', @@ -74,9 +70,7 @@ const sidebars = { { type: 'category', label: 'Tool releases', - items: [ - 'releases/tools/gregtools-modmanager-1.0-release', - ], + items: ['releases/tools/gregtools-modmanager-1.0-release'], }, { type: 'category', @@ -127,11 +121,7 @@ const sidebars = { { type: 'category', label: 'Roadmap & planning', - items: [ - 'topics/roadmap/overview', - 'roadmap/unified-roadmap', - 'roadmap/mod-store-stages', - ], + items: ['topics/roadmap/overview', 'roadmap/unified-roadmap', 'roadmap/mod-store-stages'], }, { type: 'category', diff --git a/src/components/ModReleasePage.tsx b/src/components/ModReleasePage.tsx index 81297f3..26e7195 100644 --- a/src/components/ModReleasePage.tsx +++ b/src/components/ModReleasePage.tsx @@ -17,7 +17,6 @@ type ModReleasePageProps = { releaseReady?: boolean; banner?: string; releaseNotesPath?: string; - /** If set, replaces the default installation steps (e.g. MelonLoader `Plugins/` vs `Mods/`). */ installation?: React.ReactNode; }; @@ -25,13 +24,24 @@ function toTitleCase(value: ReleaseKind): string { return value.charAt(0).toUpperCase() + value.slice(1); } +function normalizeReleaseNotesPath(releaseNotesPath?: string): string | undefined { + if (!releaseNotesPath) return undefined; + if (releaseNotesPath.startsWith('/mods/')) { + return `/wiki${releaseNotesPath}`; + } + if (releaseNotesPath.startsWith('/wiki/')) { + return releaseNotesPath; + } + return releaseNotesPath; +} + export default function ModReleasePage({ title, kind, dllName, description, version = 'NotReleasedYet', - author = 'FrikaMF Community', + author = 'gregFramework Community', category = 'Mod', dependencies = [], codeLanguages = ['C#'], @@ -42,118 +52,205 @@ export default function ModReleasePage({ }: ModReleasePageProps): JSX.Element { const downloadPath = `/${kind}/${dllName}`; const downloadUrl = - typeof window !== 'undefined' ? new URL(downloadPath, window.location.origin).toString() : downloadPath; - const normalizedReleaseNotesPath = releaseNotesPath?.startsWith('/mods/') - ? `/wiki${releaseNotesPath}` - : releaseNotesPath; + typeof window !== 'undefined' + ? new URL(downloadPath, window.location.origin).toString() + : downloadPath; + const docPath = normalizeReleaseNotesPath(releaseNotesPath); return ( -
-
-

{toTitleCase(kind)}

-

{title}

-

- {banner ?? ( - Official release download and module details - )} -

-
- -
-
-

- Description -

-

{description}

- -

- Installation -

- {installation ?? ( -
    -
  1. - Download the release DLL. -
  2. -
  3. - Copy it to your Data Center `Mods/` folder. -
  4. -
  5. - Start the game with MelonLoader. -
  6. -
- )} - -

- Direct DLL Route -

-

- {downloadPath} -

-
- - -
+

+ {title} +

+

+ {banner ?? ( + + Official release download and module details + + )} +

+ + +
+
+
+

+ description + Description +

+
+

{description}

+
+
+ +
+

+ terminal + Installation +

+ {installation ?? ( +
    +
  1. + + 01 + +
    +

    + + Download the release DLL. + +

    +

    + + Use the GitHub release asset or the route below. + +

    +
    +
  2. +
  3. + + 02 + +
    +

    + + Copy into the game folder + +

    +

    + + Copy it to your Data Center `Mods/` folder. + +

    +
    +
  4. +
  5. + + 03 + +
    +

    + Launch +

    +

    + + Start the game with MelonLoader. + +

    +
    +
  6. +
+ )} +
+ +
+

+ code + Direct DLL route +

+
+
+
+ {downloadPath} +
+
+
+
+ + +
+
); } diff --git a/src/css/custom.css b/src/css/custom.css index 9dc51a3..f0fed1a 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -1,5 +1,5 @@ -@import url("https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&family=Space+Grotesk:wght@300;500;700&display=swap"); -@import "tailwindcss"; +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600&family=Space+Grotesk:wght@300;500;700&display=swap'); +@import 'tailwindcss'; /* Luminescent Architect — design tokens (see docs/contributors/luminescent-design-system.md) */ @theme { @@ -61,13 +61,13 @@ --color-accent-violet: #1cede1; --color-code-bg: #001110; --color-code-surface: #002b29; - --font-sans: "Inter", ui-sans-serif, system-ui, sans-serif; - --font-headline: "Space Grotesk", ui-sans-serif, system-ui, sans-serif; - --font-mono: "JetBrains Mono", ui-monospace, "Cascadia Code", monospace; + --font-sans: 'Inter', ui-sans-serif, system-ui, sans-serif; + --font-headline: 'Space Grotesk', ui-sans-serif, system-ui, sans-serif; + --font-mono: 'JetBrains Mono', ui-monospace, 'Cascadia Code', monospace; } :root, -[data-theme="dark"] { +[data-theme='dark'] { --ifm-color-primary: #61f4d8; --ifm-color-primary-dark: #4fe5ca; --ifm-color-primary-darker: #08c1a6; @@ -92,7 +92,7 @@ html { } html.dark, -html[data-theme="dark"] { +html[data-theme='dark'] { color-scheme: dark; } @@ -166,7 +166,7 @@ body { box-shadow: inset 0 -2px 0 0 var(--color-primary); } -.navbar [class*="colorModeToggle"] { +.navbar [class*='colorModeToggle'] { display: none !important; } @@ -193,23 +193,23 @@ body { } .nav-link-mods::before { - content: "🧩"; + content: '🧩'; } .nav-link-discord::before { - content: "💬"; + content: '💬'; } .nav-link-support::before { - content: "🛟"; + content: '🛟'; } .nav-link-github::before { - content: "⌁"; + content: '⌁'; } .nav-locale::before { - content: "🌐"; + content: '🌐'; } /* Editorial bleed + hero (homepage) */ @@ -275,7 +275,12 @@ body { } .text-gradient-brand { - background-image: linear-gradient(90deg, var(--color-primary), var(--color-secondary), var(--color-tertiary)); + background-image: linear-gradient( + 90deg, + var(--color-primary), + var(--color-secondary), + var(--color-tertiary) + ); -webkit-background-clip: text; background-clip: text; color: transparent; @@ -307,7 +312,10 @@ body { box-shadow: 0 18px 36px rgba(0, 0, 0, 0.35); -webkit-backdrop-filter: blur(12px) saturate(125%); backdrop-filter: blur(12px) saturate(125%); - transition: transform 0.28s ease, box-shadow 0.28s ease, border-color 0.28s ease; + transition: + transform 0.28s ease, + box-shadow 0.28s ease, + border-color 0.28s ease; } .app-card-glow { @@ -315,7 +323,7 @@ body { } .app-card-glow::after { - content: ""; + content: ''; position: absolute; inset: -1px; border-radius: inherit; @@ -326,7 +334,9 @@ body { .app-card-motion:hover { transform: translateY(-5px); border-color: rgba(97, 244, 216, 0.25); - box-shadow: 0 24px 42px rgba(0, 0, 0, 0.4), 0 0 32px -4px rgba(0, 191, 165, 0.12); + box-shadow: + 0 24px 42px rgba(0, 0, 0, 0.4), + 0 0 32px -4px rgba(0, 191, 165, 0.12); } .btn-primary, @@ -337,7 +347,11 @@ body { justify-content: center; gap: 0.5rem; text-decoration: none !important; - transition: transform 0.25s ease, box-shadow 0.25s ease, background 0.25s ease, color 0.25s ease; + transition: + transform 0.25s ease, + box-shadow 0.25s ease, + background 0.25s ease, + color 0.25s ease; } /* Primary CTA: 135° primary → primary-container, on-primary text */ @@ -354,7 +368,9 @@ body { .btn-primary:hover { color: var(--color-on-primary); transform: translateY(-2px); - box-shadow: 0 0 20px rgba(97, 244, 216, 0.3), 0 14px 28px rgba(0, 0, 0, 0.35); + box-shadow: + 0 0 20px rgba(97, 244, 216, 0.3), + 0 14px 28px rgba(0, 0, 0, 0.35); } /* Secondary: ghost border outline-variant @ 40% */ @@ -405,10 +421,15 @@ body { outline-offset: 2px; } +/* Doc canvas — editorial bleed (wiki layout alignment); no hard section borders */ +.theme-doc-wrapper { + background: linear-gradient(180deg, var(--color-surface-container-low) 0%, var(--color-background) 42%); +} + .theme-doc-root .theme-doc-sidebar-container { border: 0; - background: var(--color-surface-container-low); - box-shadow: inset -1px 0 0 rgba(15, 81, 76, 0.12); + background: color-mix(in srgb, var(--color-surface-container-low) 92%, transparent); + box-shadow: inset -1px 0 0 color-mix(in srgb, var(--color-outline-variant) 12%, transparent); } .menu { @@ -423,7 +444,10 @@ body { padding-left: 0.75rem; color: var(--color-on-surface-variant); font-weight: 500; - transition: color 0.22s ease, background 0.22s ease, border-color 0.22s ease; + transition: + color 0.22s ease, + background 0.22s ease, + border-color 0.22s ease; } .menu__link:hover { @@ -458,7 +482,7 @@ body { .theme-doc-markdown h2::after, .theme-doc-markdown h3::after { - content: ""; + content: ''; display: block; width: 64px; height: 2px; @@ -494,10 +518,16 @@ body { } .theme-doc-markdown pre { - background: linear-gradient(180deg, var(--color-surface-container-highest) 0%, var(--color-surface-container-high) 100%) !important; + background: linear-gradient( + 180deg, + var(--color-surface-container-highest) 0%, + var(--color-surface-container-high) 100% + ) !important; border-radius: 0.75rem; border: 0; - box-shadow: 0 18px 32px rgba(0, 0, 0, 0.35), inset 0 0 0 1px rgba(15, 81, 76, 0.12); + box-shadow: + 0 18px 32px rgba(0, 0, 0, 0.35), + inset 0 0 0 1px rgba(15, 81, 76, 0.12); } .theme-doc-markdown pre code { @@ -506,7 +536,7 @@ body { .footer { border: 0; - border-top: 1px solid rgba(0, 36, 34, 0.15); + box-shadow: 0 -12px 40px -28px color-mix(in srgb, var(--color-primary) 14%, transparent); background: var(--color-background); color: rgba(192, 252, 246, 0.4); font-size: 0.75rem; @@ -540,15 +570,15 @@ body { } .footer-link-github::before { - content: "⌁"; + content: '⌁'; } .footer-link-discord::before { - content: "💬"; + content: '💬'; } .footer-link-support::before { - content: "🛟"; + content: '🛟'; } .button.button--primary { @@ -573,7 +603,9 @@ body { .mod-release-card { background: linear-gradient(180deg, rgba(0, 30, 28, 0.85) 0%, rgba(0, 17, 16, 0.92) 100%); border-radius: 0.8rem; - box-shadow: inset 0 0 0 1px rgba(15, 81, 76, 0.12), 0 12px 24px rgba(0, 0, 0, 0.35); + box-shadow: + inset 0 0 0 1px rgba(15, 81, 76, 0.12), + 0 12px 24px rgba(0, 0, 0, 0.35); } .mod-release-badge { @@ -637,8 +669,12 @@ body { /* Optional: Material Symbols (loaded via docusaurus.config.js headTags) */ .material-symbols-outlined { - font-family: "Material Symbols Outlined", sans-serif; - font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 24; + font-family: 'Material Symbols Outlined', sans-serif; + font-variation-settings: + 'FILL' 0, + 'wght' 400, + 'GRAD' 0, + 'opsz' 24; font-style: normal; line-height: 1; letter-spacing: normal; diff --git a/src/data/moduleCatalog.ts b/src/data/moduleCatalog.ts index d5384a2..16c1b34 100644 --- a/src/data/moduleCatalog.ts +++ b/src/data/moduleCatalog.ts @@ -22,9 +22,9 @@ export const moduleCatalog: ModuleEntry[] = [ type: 'plugin', description: 'Export-focused asset tooling for Data Center workflows.', version: 'NotReleasedYet', - author: 'mleem97 / FrikaMF Community', + author: 'mleem97 / gregFramework Community', languages: ['C#'], - dependencies: ['MelonLoader', 'FrikaMF'], + dependencies: ['MelonLoader', 'gregFramework'], wikiPath: '/wiki/mods/extensions/ffm-plugin-asset-exporter', releasePath: '/wiki/releases/plugins/ffm-plugin-asset-exporter-release', downloadPath: '/plugin/FFM.Plugin.AssetExporter.dll', @@ -34,11 +34,11 @@ export const moduleCatalog: ModuleEntry[] = [ id: 'ffm-plugin-multiplayer', name: 'FFM.Plugin.Multiplayer', type: 'plugin', - description: 'Multiplayer-oriented plugin surface for FrikaMF ecosystems.', + description: 'Multiplayer-oriented plugin surface for gregFramework ecosystems.', version: 'NotReleasedYet', - author: 'mleem97 / FrikaMF Community', + author: 'mleem97 / gregFramework Community', languages: ['C#'], - dependencies: ['MelonLoader', 'FrikaMF'], + dependencies: ['MelonLoader', 'gregFramework'], wikiPath: '/wiki/mods/extensions/ffm-plugin-multiplayer', releasePath: '/wiki/releases/plugins/ffm-plugin-multiplayer-release', downloadPath: '/plugin/FFM.Plugin.Multiplayer.dll', @@ -50,9 +50,9 @@ export const moduleCatalog: ModuleEntry[] = [ type: 'plugin', description: 'Player model extension plugin for runtime and presentation logic.', version: 'NotReleasedYet', - author: 'mleem97 / FrikaMF Community', + author: 'mleem97 / gregFramework Community', languages: ['C#'], - dependencies: ['MelonLoader', 'FrikaMF'], + dependencies: ['MelonLoader', 'gregFramework'], wikiPath: '/wiki/mods/extensions/ffm-plugin-player-models', releasePath: '/wiki/releases/plugins/ffm-plugin-player-models-release', downloadPath: '/plugin/FFM.Plugin.PlayerModels.dll', @@ -64,9 +64,9 @@ export const moduleCatalog: ModuleEntry[] = [ type: 'plugin', description: 'Sysadmin utility plugin for diagnostics and operations.', version: 'NotReleasedYet', - author: 'mleem97 / FrikaMF Community', + author: 'mleem97 / gregFramework Community', languages: ['C#'], - dependencies: ['MelonLoader', 'FrikaMF'], + dependencies: ['MelonLoader', 'gregFramework'], wikiPath: '/wiki/mods/extensions/ffm-plugin-sysadmin', releasePath: '/wiki/releases/plugins/ffm-plugin-sysadmin-release', downloadPath: '/plugin/FFM.Plugin.Sysadmin.dll', @@ -78,9 +78,9 @@ export const moduleCatalog: ModuleEntry[] = [ type: 'plugin', description: 'Bridge plugin between game runtime data and web UI overlays.', version: 'NotReleasedYet', - author: 'mleem97 / FrikaMF Community', + author: 'mleem97 / gregFramework Community', languages: ['C#'], - dependencies: ['MelonLoader', 'FrikaMF'], + dependencies: ['MelonLoader', 'gregFramework'], wikiPath: '/wiki/mods/extensions/ffm-plugin-web-ui-bridge', releasePath: '/wiki/releases/plugins/ffm-plugin-web-ui-bridge-release', downloadPath: '/plugin/FFM.Plugin.WebUIBridge.dll', @@ -90,9 +90,10 @@ export const moduleCatalog: ModuleEntry[] = [ id: 'fmf-modpathredirector', name: 'FMF.ModPathRedirector', type: 'plugin', - description: 'MelonLoader plugin: waits for each subscribed Workshop item (Steam + StreamingAssets/Mods/workshop_*) before MelonMods load.', + description: + 'MelonLoader plugin: waits for each subscribed Workshop item (Steam + StreamingAssets/Mods/workshop_*) before MelonMods load.', version: '1.5.0', - author: 'DataCenterExporter / FrikaMF Community', + author: 'DataCenterExporter / gregFramework Community', languages: ['C#'], dependencies: ['MelonLoader', 'Steam client'], wikiPath: '/wiki/workshop-uploader', @@ -106,7 +107,7 @@ export const moduleCatalog: ModuleEntry[] = [ type: 'mod', description: 'Console interaction guardrails for safer gameplay input handling.', version: 'NotReleasedYet', - author: 'mleem97 / FrikaMF Community', + author: 'mleem97 / gregFramework Community', languages: ['C#'], dependencies: ['MelonLoader', 'Harmony'], wikiPath: '/wiki/mods/mods/fmf-console-input-guard', @@ -120,7 +121,7 @@ export const moduleCatalog: ModuleEntry[] = [ type: 'mod', description: 'Gameplay mod for employee theming and behavior customization.', version: 'NotReleasedYet', - author: 'mleem97 / FrikaMF Community', + author: 'mleem97 / gregFramework Community', languages: ['C#'], dependencies: ['MelonLoader', 'Harmony'], wikiPath: '/wiki/mods/mods/fmf-gregify-employees', @@ -134,7 +135,7 @@ export const moduleCatalog: ModuleEntry[] = [ type: 'mod', description: 'In-world hex color labels for cable spinners and racks.', version: 'NotReleasedYet', - author: 'mleem97 / FrikaMF Community', + author: 'mleem97 / gregFramework Community', languages: ['C#'], dependencies: ['MelonLoader', 'Harmony'], wikiPath: '/wiki/mods/extensions/fmf-hex-label-mod', @@ -148,7 +149,7 @@ export const moduleCatalog: ModuleEntry[] = [ type: 'mod', description: 'Localization compatibility bridge for mixed mod stacks.', version: 'NotReleasedYet', - author: 'mleem97 / FrikaMF Community', + author: 'mleem97 / gregFramework Community', languages: ['C#'], dependencies: ['MelonLoader'], wikiPath: '/wiki/mods/extensions/fmf-lang-compat-bridge', @@ -162,7 +163,7 @@ export const moduleCatalog: ModuleEntry[] = [ type: 'mod', description: 'Replaces and modernizes selected in-game UI layers.', version: 'NotReleasedYet', - author: 'mleem97 / FrikaMF Community', + author: 'mleem97 / gregFramework Community', languages: ['C#'], dependencies: ['MelonLoader', 'Harmony'], wikiPath: '/wiki/mods/extensions/fmf-ui-replacement-mod', diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 7fc7269..4efa660 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,45 +1,23 @@ -import React, { useMemo } from 'react'; +import React, {useMemo} from 'react'; import Layout from '@theme/Layout'; import Link from '@docusaurus/Link'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; -import { motion, type Variants, useReducedMotion } from 'framer-motion'; -import { getHomepageContent } from '../i18n/homepage'; +import {motion, type Variants, useReducedMotion} from 'framer-motion'; +import {getHomepageContent} from '../i18n/homepage'; import gregImage from '../image.png'; -import { - FaArrowUpRightFromSquare, - FaBookOpen, - FaCode, - FaDiscord, - FaGithub, - FaLifeRing, - FaPeopleGroup, - FaShop, - FaScrewdriverWrench, -} from 'react-icons/fa6'; +import {FaArrowUpRightFromSquare, FaDiscord, FaGithub, FaLifeRing, FaShop} from 'react-icons/fa6'; -type FeatureItem = { - icon: React.ReactNode; - title: string; - description: string; -}; - -type DocPathItem = { - title: string; - description: string; - link: string; -}; - -const viewport = { once: true, margin: '-90px' }; +const viewport = {once: true, margin: '-90px'}; function buildVariants(reducedMotion: boolean) { const section: Variants = reducedMotion - ? { hidden: { opacity: 0 }, show: { opacity: 1 } } + ? {hidden: {opacity: 0}, show: {opacity: 1}} : { - hidden: { opacity: 0, y: 26 }, + hidden: {opacity: 0, y: 26}, show: { opacity: 1, y: 0, - transition: { duration: 0.65, ease: [0.16, 1, 0.3, 1] }, + transition: {duration: 0.65, ease: [0.16, 1, 0.3, 1]}, }, }; @@ -54,100 +32,75 @@ function buildVariants(reducedMotion: boolean) { }; const card: Variants = reducedMotion - ? { hidden: { opacity: 0 }, show: { opacity: 1 } } + ? {hidden: {opacity: 0}, show: {opacity: 1}} : { - hidden: { opacity: 0, y: 18, scale: 0.98 }, + hidden: {opacity: 0, y: 18, scale: 0.98}, show: { opacity: 1, y: 0, scale: 1, - transition: { duration: 0.45, ease: [0.16, 1, 0.3, 1] }, + transition: {duration: 0.45, ease: [0.16, 1, 0.3, 1]}, }, }; const textReveal: Variants = reducedMotion - ? { hidden: { opacity: 0 }, show: { opacity: 1 } } + ? {hidden: {opacity: 0}, show: {opacity: 1}} : { - hidden: { opacity: 0, y: 18 }, + hidden: {opacity: 0, y: 18}, show: { opacity: 1, y: 0, - transition: { duration: 0.5, ease: [0.16, 1, 0.3, 1] }, + transition: {duration: 0.5, ease: [0.16, 1, 0.3, 1]}, }, }; - return { section, grid, card, textReveal }; + return {section, grid, card, textReveal}; } export default function HomePage(): JSX.Element { const { - i18n: { currentLocale }, + i18n: {currentLocale}, } = useDocusaurusContext(); const t = getHomepageContent(currentLocale); const reducedMotion = useReducedMotion(); const variants = useMemo(() => buildVariants(Boolean(reducedMotion)), [reducedMotion]); - const features: FeatureItem[] = [ - { - icon: , - title: t.featureTitles[0], - description: t.featureDescriptions[0], - }, - { - icon: , - title: t.featureTitles[1], - description: t.featureDescriptions[1], - }, - { - icon: , - title: t.featureTitles[2], - description: t.featureDescriptions[2], - }, - { - icon: , - title: t.featureTitles[3], - description: t.featureDescriptions[3], - }, - ]; - - const knowledgePaths: DocPathItem[] = [ - { title: 'Wiki Overview', description: 'Canonical docs entrypoint under /wiki.', link: '/wiki' }, - { title: 'Framework Core', description: 'Runtime hooks, bridge, events and architecture.', link: '/wiki/mods/framework' }, - { title: 'Plugin Wiki', description: 'Plugin-specific docs and release pages.', link: '/wiki/mods/extensions/' }, - { title: 'Mod Wiki', description: 'Gameplay mods, release state and module docs.', link: '/wiki/mods/mods' }, - { title: 'FMF Hooks Catalog', description: 'Auto-generated hook strings and event-id map from framework sources.', link: '/wiki/reference/fmf-hooks-catalog' }, - { title: 'Release Channels', description: 'Steam Workshop for discovery; GitHub for beta and alternate DLLs.', link: '/wiki/reference/release-channels' }, - { title: 'Unified Roadmap', description: 'Consolidated roadmap with duplicate tracks removed.', link: '/wiki/roadmap/unified-roadmap' }, - { title: 'Mods Catalog', description: 'Dynamic /mods catalog with wiki and download links.', link: '/mods' }, - ]; - - const workflowPaths: DocPathItem[] = [ - { title: 'End-User Docs', description: 'Install, update and troubleshooting paths.', link: '/wiki/wiki-import/EndUser/End-User-Release' }, - { title: 'Mod Developer Docs', description: 'Setup, debug and hook integration guides.', link: '/wiki/wiki-import/ModDevs/Mod-Developer-Debug' }, - { title: 'Repo Inventory', description: 'Monorepo layout, projects, and solution drift for contributors.', link: '/wiki/contributors/repo-inventory' }, - { title: 'Contributor Workflow', description: 'Contribution standards and repository workflow.', link: '/wiki/contributors/docusaurus-workflow' }, - { title: 'Plugin Security Audit', description: 'Git-link submission and malicious-code audit process.', link: '/wiki/contributors/plugin-submission-audit' }, - ]; - return ( + title="Home" + description="Community documentation for gregFramework — Data Center modding, plugins, and hooks." + >
-
+
-
); } - diff --git a/src/pages/mods.tsx b/src/pages/mods.tsx index 2a47fee..4cd22be 100644 --- a/src/pages/mods.tsx +++ b/src/pages/mods.tsx @@ -1,9 +1,16 @@ import React, {useMemo} from 'react'; import Layout from '@theme/Layout'; import Link from '@docusaurus/Link'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import {moduleCatalog} from '../data/moduleCatalog'; +import {getModsPageStrings} from '../i18n/modsPage'; export default function ModsCatalogPage(): JSX.Element { + const { + i18n: {currentLocale}, + } = useDocusaurusContext(); + const m = useMemo(() => getModsPageStrings(currentLocale), [currentLocale]); + const grouped = useMemo(() => { const plugins = moduleCatalog.filter((entry) => entry.type === 'plugin'); const mods = moduleCatalog.filter((entry) => entry.type === 'mod'); @@ -11,85 +18,116 @@ export default function ModsCatalogPage(): JSX.Element { }, []); return ( - -
-
-

Mods & Plugins Catalog

-

- This page is generated from the module catalog and links each entry to its wiki page, release page, and - download route. -

-
- -
-

Plugins

-
- {grouped.plugins.map((entry) => ( -
-

{entry.name}

-

{entry.description}

-

Version: {entry.version}

-

Languages: {entry.languages.join(', ')}

-
- - Wiki - - - Release - - {entry.releaseReady ? ( - - Download DLL - - ) : ( - - NotReleasedYet - - )} -
-
- ))} + +
+
+
+
+ extension + + gregFramework + +
+

+ {m.title} +

+

{m.description}

-
+ -
-

Mods

-
- {grouped.mods.map((entry) => ( -
-

{entry.name}

-

{entry.description}

-

Version: {entry.version}

-

Dependencies: {entry.dependencies.join(', ')}

-
- - Wiki - - - Release - - {entry.releaseReady ? ( - - Download DLL - - ) : ( - - NotReleasedYet - - )} -
-
- ))} -
-
+
+
+

+ widgets + {m.pluginsHeading} +

+
+ {grouped.plugins.map((entry) => ( +
+

+ {entry.name} +

+

{entry.description}

+

Version: {entry.version}

+

+ Languages: {entry.languages.join(', ')} +

+
+ + {m.wiki} + + + {m.release} + + {entry.releaseReady ? ( + + {m.download} + + ) : ( + + {m.notReleased} + + )} +
+
+ ))} +
+
+ +
+

+ sports_esports + {m.modsHeading} +

+
+ {grouped.mods.map((entry) => ( +
+

+ {entry.name} +

+

{entry.description}

+

Version: {entry.version}

+

+ Dependencies: {entry.dependencies.join(', ')} +

+
+ + {m.wiki} + + + {m.release} + + {entry.releaseReady ? ( + + {m.download} + + ) : ( + + {m.notReleased} + + )} +
+
+ ))} +
+
+
);