1690 Commits
Author SHA1 Message Date
JonKazama-Hellion e98cefa0b2 A2: name Sheen tuning knobs + SmoothStep crossfade easing 2026-06-16 12:29:57 +02:00
JonKazama-Hellion c1765ce8ca A1: harden HoverSheenAllocStep with real dictionary-footprint assertion 2026-06-16 12:22:29 +02:00
JonKazama-Hellion 7ead120213 A1: scharfschalten DrawHoverSheen accent-tint (Variante A) 2026-06-16 12:17:39 +02:00
JonKazama-Hellion f5ba1c0246 A1: add ColourUtil.LerpTowardWhite accent-tint helper 2026-06-16 12:02:53 +02:00
JonKazama-Hellion b372ab84c3 Merge branch 'feature/v1.8.0' into main 2026-06-16 09:18:12 +02:00
JonKazama-Hellion c27785f9f6 Merge branch 'feature/v1.8.0-closeout' into feature/v1.8.0 2026-06-16 09:07:57 +02:00
JonKazama-Hellion 6f71b09331 fix(closeout): address closure-review findings
- gate keybind pill-sync on IsChannelOrExistingLinkshell so an empty
  linkshell slot no longer desyncs the pill from the real send channel
- close manually-popped pop-out windows on logout via an IsOpen filter
  instead of the PopOut flag (which manual pops never set)
- read the router's tell-tab lookup through a lock-wrapped accessor so the
  framework thread cannot enumerate Config.Tabs mid worker-thread mutation
- add a "switch on every tell" toggle (default on) and make the auto-open
  mode pick the matching layout, so Sidebar vs Top-tab are distinct
- comment corrections (stale/contradictory text, TEST-MIRROR path depth)
2026-06-16 09:04:18 +02:00
JonKazama-Hellion 49f5119b17 feat(popout): arm the auto-tell pop-out settings and add the pool self-test 2026-06-16 01:29:59 +02:00
JonKazama-Hellion 6578c10b13 feat(settings): restore the tab-cycle keybind binder UI 2026-06-16 01:21:05 +02:00
JonKazama-Hellion 3878869904 feat(keybind): cycle tabs and switch channel with pill sync 2026-06-16 01:21:05 +02:00
JonKazama-Hellion 88491902eb feat(chat): prefill the input bar for context-menu and direct-chat tells 2026-06-16 01:04:34 +02:00
JonKazama-Hellion 47a49de8c0 feat(tell-router): auto-open incoming tells per TellAutoOpenMode 2026-06-16 00:50:45 +02:00
JonKazama-Hellion 7b6871fea4 feat(autotell): wire temp-tab pop-outs to the channel-popout pool 2026-06-16 00:39:01 +02:00
JonKazama-Hellion 8e2d333130 fix(toptab): size each tab selectable to its label width 2026-06-16 00:24:18 +02:00
JonKazama-Hellion 4db2ad99b9 Merge branch 'feature/v1.8.8' into feature/v1.8.0
v1.8.8 Block 4b -> full theme/window restoration (last of the 1.8.x restore
series). B4b export-button + schema-v2 default-fill, then P1-P8: custom-theme
selection, typography font-size apply, font-selection UI, theme-card mockup,
chat-colour editor, header theme/tab quick-picker, window/display toggles
(title bar, hide button, 24h clock), and hide-window + Enter-to-restore.
Local-only; manifest 1.8.8; all self-tests green.
2026-06-15 21:08:30 +02:00
JonKazama-Hellion a73f4d0d0c feat(window): restore hide-chat-window + Enter-to-restore (1.5.6)
The eye/hide button now hides the HellionChat window (runtime-only, via a new
DrawConditions gate) instead of toggling native-chat suppression, matching 1.5.6.
The chat-activation keybind (Enter / "/"), whose dispatch was a dead stub in the
KeybindManager since the v1.6.0 rewrite, is re-wired to MainWindow.ActivateChat:
it un-hides, opens if closed, brings the window to front and focuses the input --
so the chat reacts to Enter again from any state. /hellion is a reliable one-press
recovery (Toggle now clears the hide), and the window always shows on login
(start state no longer read from the persisted flag). Adds HideRestoreSelfTestStep.
2026-06-15 20:49:14 +02:00
JonKazama-Hellion b397591ba4 feat(window): restore the title-bar, hide-button, and 24-hour-clock toggles
Re-wires four 1.5.6 settings that survived the v1.6.0 rewrite as dormant config
fields but lost their UI + consumers:
- ShowTitleBar / ShowPopOutTitleBar: gate ImGuiWindowFlags.NoTitleBar on the main
  window (ResolveFlags) and pop-out windows (new PreDraw). Inverted logic matches
  1.5.6 (flag set only when the toggle is off).
- ShowHideButton: gate the input-bar hide button on the toggle.
- Use24HourClock: add the toggle (MessageList already consumes the field).
New 'Window style' section in WindowTab; Use24HourClock in ChatTab display modes.
MainWindowFlagsStep extended with the NoTitleBar fresh-base contract.
2026-06-15 20:19:59 +02:00
JonKazama-Hellion 6813b80d58 feat(themes): restore the header theme/tab quick-picker
Brings back the 1.5.4 quick-picker lost in the v1.6.0 rewrite: a palette button
in the input-bar button row (left of the cog) opens a popup that switches the
theme (built-in + custom, active row checked) and jumps between chat tabs without
opening settings. Theme switch mirrors the settings ThemePicker; the tab jump
routes through a new MainWindow.ActivateTab that replays the click path
(previous -> set -> OnTabActivated) so tell/unread handling is unchanged. Main
window only -- pop-out InputBars get a null picker. Adds QuickPickerSelfTestStep.
2026-06-15 19:53:31 +02:00
JonKazama-Hellion 0352e6c199 feat(themes): restore the chat-channel colour editor in the appearance tab
Brings back the 1.5.6 per-channel colour editor lost in the v1.6.0 rewrite:
presets (incl. brand styling), per-ChatType reset/import-from-game/colour-edit
over Config.ChatColours, the colour-selected-input-channel toggle, and the
theme adopt-banner. The colour-edit drag recolours live but defers SaveConfig
to release (IsItemDeactivatedAfterEdit) to avoid a per-frame full-config write.
2026-06-15 19:12:09 +02:00
JonKazama-Hellion 8cbf9c554f feat(themes): restore the per-card theme preview mockup in the picker 2026-06-15 18:49:45 +02:00
JonKazama-Hellion 18834cddae feat(fonts): restore the font-selection UI in the appearance tab 2026-06-15 18:41:03 +02:00
JonKazama-Hellion fe0414dd2b feat(themes): apply theme typography font-size overrides on every activation path 2026-06-15 18:19:08 +02:00
JonKazama-Hellion ec92cf2c04 feat(themes): list custom themes in the theme picker 2026-06-15 18:03:39 +02:00
JonKazama-Hellion 512533ed3a feat(themes): default-fill missing colour/layout slots on theme load 2026-06-15 16:55:50 +02:00
JonKazama-Hellion a2d8a9c223 feat(themes): add an export button for the active theme 2026-06-15 16:55:50 +02:00
JonKazama-Hellion dcf089b886 chore(release): bump manifest to 1.8.8 for theme export, default-fill, font-apply 2026-06-15 16:18:05 +02:00
JonKazama-Hellion c4562dd6a0 style(selftests): wrap HonorificTitleData ctor to satisfy csharpier
Inherited csharpier drift from the 1.8.7 merge (72099c8); format-only, no behaviour change.
2026-06-15 16:18:05 +02:00
JonKazama-Hellion 74f7bb3fc1 Merge branch 'feature/v1.8.7' into feature/v1.8.0 2026-06-15 14:50:02 +02:00
JonKazama-Hellion 8afcb87624 test(about): assert integrations status through the real render 2026-06-15 14:44:26 +02:00
JonKazama-Hellion f9ed487ae2 feat(about): restore the integrations section with honorific status 2026-06-15 14:40:21 +02:00
JonKazama-Hellion 72099c8871 test(honorific): assert the title gate through the real draw path 2026-06-15 14:35:20 +02:00
JonKazama-Hellion fe766285ad feat(honorific): wire title gate + colour + truncation, restore preview glyphs 2026-06-15 14:26:22 +02:00
JonKazama-Hellion 8db2dee38c chore(release): bump manifest to 1.8.7 for honorific + integrations restoration 2026-06-15 13:53:06 +02:00
JonKazama-Hellion a38afbcf67 Merge LastTab-decoupling fix + unread-badge restore (1.8.6) into v1.8.x track 2026-06-13 18:53:28 +02:00
JonKazama-Hellion 5dfe8e3b49 fix(unread): restore the tab unread badge and fix the post-F2 unread decision
The v1.8.x sidebar/top-bar rebuild never re-rendered the unread dot, so inactive tabs showed no badge even though the counter was tracked. Draw it again top-right of the tab icon in both Sidebar and TopTabBar, gated on !active && UnreadMode != None && Unread > 0, and zero the active tab's counter every frame (1.5.6 convention) so the dot only ever shows on tabs you are not looking at.

The unread decision moves to MessageManager.ShouldCountUnread and snapshots the active tab + whether it shows the message once before the loop: Unseen suppresses unread on an inactive tab only when the active (real, post-F2) tab also shows that message. Adds SidebarUnreadDotStep (render) and UnreadDecisionStep (decision) self-tests (step count 32 -> 34).
2026-06-13 18:49:27 +02:00
JonKazama-Hellion 0ca8513065 fix(tell): couple CurrentTab to the active tab, retire LastTab
Plugin.CurrentTab now delegates to MainWindow.ActiveTab (fallback Tabs[0]) instead of the never-assigned LastTab index, so the game hooks, unread tracking, notification sounds, InputDisabled and Foray/Eureka paths all operate on the tab the user actually has selected. The dead LastTab/WantedTab fields and both WantedTab writes are removed.

A reference-based MainWindow.ResetActiveTabIfRemoved repairs the active-tab reference on eviction/logout (immune to the SaveConfig temp-tab strip window). The worker-thread eviction path marshals it onto the framework thread so the strip mutation serializes with Draw; logout is already framework-thread. The Draw-seed gains a lazy re-seed for a wholesale config swap. Adds CurrentTabCouplingStep (headless) and the interactive CurrentTabGuidedStep self-test (step count 30 -> 32).
2026-06-13 16:09:59 +02:00
JonKazama-Hellion ad635c77c1 fix(tell): strip stale tell state on tab activation
OnTabActivated clears the runtime tell state the game-side detour leaves on a tab (CurrentChannel tell target + partner label) when a DIFFERENT tab becomes the input surface, so a normal typed line can no longer route as a silent /tell to the old partner. Re-clicking the active tab and tabs carrying their own Tab.TellTarget binding (leg1) are preserved.

All four activation paths route through it: Sidebar, TopTabBar, ChannelPopoutPool.TryOpen, and the MainWindow draw-seed. EnsureCurrentChannel becomes a pure derive-helper reached only via OnTabActivated. Adds the TellResetOnActivateStep self-test (step count 29 -> 30).
2026-06-13 15:09:38 +02:00
JonKazama-Hellion 593eb30c9f chore(release): bump manifest to 1.8.6
Branch start for the LastTab-Decoupling fix cycle. csproj <Version> and repo.json AssemblyVersion + TestingAssemblyVersion go 1.8.5 -> 1.8.6. DownloadLinks and Changelog stay release-deferred on v1.5.6.
2026-06-13 14:23:10 +02:00
JonKazama-Hellion 11ef5951a4 Merge restoration block 3 (sidebar UI) into v1.8.x track 2026-06-10 17:00:51 +02:00
JonKazama-Hellion c28e3f72a1 feat(messages): restore scroll-to-bottom bar with snap decision 2026-06-10 16:55:26 +02:00
JonKazama-Hellion dc51e295ea feat(sidebar): restore section headers and compact separators 2026-06-10 16:22:49 +02:00
JonKazama-Hellion 540cb7ac52 feat(sidebar): restore per-tab greeted toggle glyph 2026-06-10 14:59:51 +02:00
JonKazama-Hellion 1f2c354471 feat(sidebar): restore per-tab notification sound picker with preview 2026-06-10 13:26:55 +02:00
JonKazama-Hellion ac7f74b227 feat(sidebar): restore tab rename via shared context menu 2026-06-10 11:42:44 +02:00
JonKazama-Hellion c7047407f5 feat(core): add static Plugin.Instance handle for UI helper access 2026-06-10 10:09:32 +02:00
JonKazama-Hellion e5a17ee798 chore(release): bump manifest to 1.8.5 for sidebar-ui restoration 2026-06-10 10:01:55 +02:00
JonKazama-Hellion 83de7cd989 Merge tell-routing restoration (1.8.4) into v1.8.x track 2026-06-04 17:20:59 +02:00
JonKazama-Hellion 51c8f79846 chore(release): bump manifest to 1.8.4 for tell-routing restoration
Download links stay on v1.5.6 (local-only block, no public release yet).
2026-06-04 17:11:32 +02:00
JonKazama-Hellion d40b120b91 fix(tell): restore outgoing tell routing from the input bar
Input-bar tells went out as a bare "/t" without the target, so the game
rejected them with "you must add the World name". Rebuild the full
"/tell name@world" from the 1.5.6 target chain in a pure BuildOutgoing:

- leg2/leg3 gated on current == Tell so a stale tell target on a Say tab
  can't send a say line silently as /tell (CORR-1)
- world-resolve gate: an unresolvable world falls back to the channel
  prefix, never "/tell name@ text" (COMP-1)
- ResetTempChannel after the send, tell-only

Also clear the runtime tell state on PromoteToPermanent so a promoted tab
can't route a typed line to the old partner, and surface the tell partner
("-> name@world") in the channel pill so a misfire stays visible. Adds
tell-routing and pill-transparency self tests.
2026-06-04 17:11:32 +02:00
JonKazama-Hellion 99901b64ed Merge pull request 'chore(deps): update minor and patch updates (nuget)' (#17) from renovate/minor-and-patch-updates-(nuget) into main
Build / Build (Release) (push) Successful in 30s
Security / scan (push) Successful in 21s
Reviewed-on: #17
2026-06-03 06:07:06 +00:00