chore(linting): refresh configs and sweep auto-fix
Pull in the refreshed linter and tooling configs (editorconfig, gitignore, gitattributes, prettierignore, prettierrc, markdownlint, yamllint, env.example, dotnet-tools) and run prettier and markdownlint in --fix / --write mode across the repo so the existing tree matches the new rules. - prettier 2-space indent on yaml/yml and json overrides, asterisk strong, underscore emphasis, proseWrap always - markdownlint MD007 indent aligned to 2 and MD049 to underscore so prettier output stays passing - preflight Block F also ignores CLAUDE.md (gitignored personal file) - prettierignore extended to keep HellionChat.yaml manifest and the NuGet packages.lock.json out of the formatter No semantic content changed; csharpier, build, full build-suite (729/729) and the new prettier/markdownlint/yamllint checks all green.
This commit is contained in:
+41
-33
@@ -4,8 +4,9 @@
|
||||
|
||||
# Theme Authoring Guide
|
||||
|
||||
> Built by **Hellion Forge** — the plugin workshop arm of [Hellion Online Media](https://hellion-media.de). HellionChat
|
||||
> ships with nine built-in themes; this guide walks you through writing your own.
|
||||
> Built by **Hellion Forge** — the plugin workshop arm of
|
||||
> [Hellion Online Media](https://hellion-media.de). HellionChat ships with nine built-in themes;
|
||||
> this guide walks you through writing your own.
|
||||
|
||||
## TL;DR
|
||||
|
||||
@@ -23,10 +24,11 @@ That's the whole loop. The rest of this document is reference.
|
||||
%APPDATA%\XIVLauncher\pluginConfigs\HellionChat\themes\
|
||||
```
|
||||
|
||||
(or the equivalent path on Linux/macOS — Settings → Themes → "Open themes folder" opens it directly).
|
||||
(or the equivalent path on Linux/macOS — Settings → Themes → "Open themes folder" opens it
|
||||
directly).
|
||||
|
||||
Each `*.json` file in this folder is loaded as one theme. The `example-theme.json` that HellionChat seeds on first
|
||||
launch is your starting template.
|
||||
Each `*.json` file in this folder is loaded as one theme. The `example-theme.json` that HellionChat
|
||||
seeds on first launch is your starting template.
|
||||
|
||||
## File format
|
||||
|
||||
@@ -60,7 +62,8 @@ Theme JSON has four blocks:
|
||||
|
||||
### Color slots
|
||||
|
||||
All values are 6-digit `#RRGGBB` or 8-digit `#RRGGBBAA` hex strings. Six-digit values get an implicit `FF` alpha.
|
||||
All values are 6-digit `#RRGGBB` or 8-digit `#RRGGBBAA` hex strings. Six-digit values get an
|
||||
implicit `FF` alpha.
|
||||
|
||||
| Slot | Role |
|
||||
| ---------------------------- | ------------------------------------------------------------------------------- |
|
||||
@@ -87,7 +90,8 @@ All values are 6-digit `#RRGGBB` or 8-digit `#RRGGBBAA` hex strings. Six-digit v
|
||||
|
||||
### Layout slots
|
||||
|
||||
All values are floats in pixels. `BorderSize` is 0 or 1 (no thicker borders look right with ImGui's edge anti-aliasing).
|
||||
All values are floats in pixels. `BorderSize` is 0 or 1 (no thicker borders look right with ImGui's
|
||||
edge anti-aliasing).
|
||||
|
||||
| Slot | Typical range | Notes |
|
||||
| ------------------- | ------------- | ------------------------------------------------- |
|
||||
@@ -103,8 +107,8 @@ All values are floats in pixels. `BorderSize` is 0 or 1 (no thicker borders look
|
||||
|
||||
### Optional `chatChannels`
|
||||
|
||||
If present, your theme proposes its own chat-channel colors. Property names are `ChatType` enum values
|
||||
(case-insensitive). Unknown names are skipped silently — safe for forward-compat.
|
||||
If present, your theme proposes its own chat-channel colors. Property names are `ChatType` enum
|
||||
values (case-insensitive). Unknown names are skipped silently — safe for forward-compat.
|
||||
|
||||
```json
|
||||
"chatChannels": {
|
||||
@@ -120,8 +124,9 @@ If present, your theme proposes its own chat-channel colors. Property names are
|
||||
}
|
||||
```
|
||||
|
||||
The user is asked **once per theme switch** whether to apply these colors — never auto-overwriting existing picks. The
|
||||
banner shows up only if your suggested colors differ from the user's current `Configuration.ChatColours`.
|
||||
The user is asked **once per theme switch** whether to apply these colors — never auto-overwriting
|
||||
existing picks. The banner shows up only if your suggested colors differ from the user's current
|
||||
`Configuration.ChatColours`.
|
||||
|
||||
#### Channel-identity rule
|
||||
|
||||
@@ -137,25 +142,26 @@ banner shows up only if your suggested colors differ from the user's current `Co
|
||||
| FreeCompany | cyan-teal | Guild ops. |
|
||||
| NoviceNetwork | lime-green | Mentor channel. |
|
||||
|
||||
A theme can tint these toward its brand family (e.g., a purple theme can shift Tell from `#FF99CC` to `#E090FF`), but
|
||||
**don't** flip them (Tell suddenly green, Yell suddenly cyan). RP groups and combat-spec setups depend on the visual
|
||||
hierarchy.
|
||||
A theme can tint these toward its brand family (e.g., a purple theme can shift Tell from `#FF99CC`
|
||||
to `#E090FF`), but **don't** flip them (Tell suddenly green, Yell suddenly cyan). RP groups and
|
||||
combat-spec setups depend on the visual hierarchy.
|
||||
|
||||
The eight colored built-in themes (Hellion Arctic, Hellion Spectrum, Event Horizon, Crystal Nocturne, Mint Grove, Night
|
||||
Blue, Indigo Violet, Forge Merchantman) all follow this rule — read their source for reference. Chat 2 Klassik
|
||||
intentionally ships without `chatChannels` so the user keeps their existing picks.
|
||||
The eight colored built-in themes (Hellion Arctic, Hellion Spectrum, Event Horizon, Crystal
|
||||
Nocturne, Mint Grove, Night Blue, Indigo Violet, Forge Merchantman) all follow this rule — read
|
||||
their source for reference. Chat 2 Klassik intentionally ships without `chatChannels` so the user
|
||||
keeps their existing picks.
|
||||
|
||||
## Theme families
|
||||
|
||||
Naming convention `<color>-<modifier>` is recommended for theme families. The first member of a family is the
|
||||
lightest/brightest:
|
||||
Naming convention `<color>-<modifier>` is recommended for theme families. The first member of a
|
||||
family is the lightest/brightest:
|
||||
|
||||
- `mint-grove` (current built-in, light mint)
|
||||
- `forest-grove` (planned, dark emerald)
|
||||
- `moss-grove` (planned, mid muted)
|
||||
|
||||
Code-wise families have no special handling — only the slug naming hints at the relationship. The picker may group
|
||||
families later, but that's not required.
|
||||
Code-wise families have no special handling — only the slug naming hints at the relationship. The
|
||||
picker may group families later, but that's not required.
|
||||
|
||||
## Validation and errors
|
||||
|
||||
@@ -164,8 +170,8 @@ When HellionChat loads your theme:
|
||||
- **Schema mismatch** (`schemaVersion != 1`): theme is skipped, warning written to `/xllog`.
|
||||
- **Missing required field** (e.g., no `slug`): theme is skipped, warning written.
|
||||
- **Invalid hex** (e.g., `#GGHHII`): theme is skipped, warning written.
|
||||
- **Unknown channel name** in `chatChannels`: that one channel is skipped silently, the rest of the theme loads
|
||||
normally.
|
||||
- **Unknown channel name** in `chatChannels`: that one channel is skipped silently, the rest of the
|
||||
theme loads normally.
|
||||
|
||||
Check `/xllog` after a plugin reload to see what loaded and what didn't.
|
||||
|
||||
@@ -177,23 +183,25 @@ Check `/xllog` after a plugin reload to see what loaded and what didn't.
|
||||
4. Watch every plugin window (chat, settings, pop-out) and pick something to fix.
|
||||
5. Tweak. Reload. Repeat.
|
||||
|
||||
Tip: the **Settings → Themes** picker shows a mini-mockup per theme — your colors are visible before you switch.
|
||||
Tip: the **Settings → Themes** picker shows a mini-mockup per theme — your colors are visible before
|
||||
you switch.
|
||||
|
||||
## Sharing themes
|
||||
|
||||
Themes are JSON, so sharing is just a file. Drop it into someone's `pluginConfigs/HellionChat/themes/` folder and their
|
||||
plugin picks it up on next reload.
|
||||
Themes are JSON, so sharing is just a file. Drop it into someone's
|
||||
`pluginConfigs/HellionChat/themes/` folder and their plugin picks it up on next reload.
|
||||
|
||||
A community theme repository is on the Hellion Forge roadmap. Until then: share via Discord or any pastebin.
|
||||
A community theme repository is on the Hellion Forge roadmap. Until then: share via Discord or any
|
||||
pastebin.
|
||||
|
||||
## Reference
|
||||
|
||||
- `docs/example-theme.json` (seeded automatically on first launch into `pluginConfigs/HellionChat/themes/`) — minimal
|
||||
valid theme.
|
||||
- The five built-in themes live in source under `HellionChat/Themes/Builtin/`. They are a good reference for Color
|
||||
choices that work.
|
||||
- [Hellion Online Media branding](https://hellion-media.de) — the Arctic Cyan + Ember Glow palette that drives the
|
||||
default Hellion Arctic theme.
|
||||
- `docs/example-theme.json` (seeded automatically on first launch into
|
||||
`pluginConfigs/HellionChat/themes/`) — minimal valid theme.
|
||||
- The five built-in themes live in source under `HellionChat/Themes/Builtin/`. They are a good
|
||||
reference for Color choices that work.
|
||||
- [Hellion Online Media branding](https://hellion-media.de) — the Arctic Cyan + Ember Glow palette
|
||||
that drives the default Hellion Arctic theme.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user