Repository navigation
Merge Horizon 2.5.0-beta.0 - #47
Merged
Merged
Conversation
- Updated tabs component to support vertical tabs, and distinct tab item types (temporary hack code\) - Redesigned SettingsView to use vertical tab layout, and split up various groups of settings
… component + some language string fixes
… issues re: undefined placeholder values
…eat/global-settings
…eat/global-settings
… instead of 40 million fields
…. Also update all exisitng instances of tabs to use the new API
… that check character directories
…s menu) Closes #905
…and character settings being available before logging in
…obal settings import too)
Currently translated at 100.0% (1214 of 1214 strings) Translation: Horizon/UI Translate-URL: https://translate.horizn.moe/projects/horizon/User-Interface/it/
This is technically the same issue as #246 lmao
Currently translated at 100.0% (1214 of 1214 strings) Translation: Horizon/UI Translate-URL: https://translate.horizn.moe/projects/horizon/User-Interface/fr/
Currently translated at 98.4% (1195 of 1214 strings) Translation: Horizon/UI Translate-URL: https://translate.horizn.moe/projects/horizon/User-Interface/hu/
…tting. Also resolves issues with contrast for score-related fields \(which were especially troublesome for people who want accessibility option\)
…otification sound setting
Currently translated at 100.0% (1214 of 1214 strings) Translation: Horizon/UI Translate-URL: https://translate.horizn.moe/projects/horizon/User-Interface/hu/
…tches instead of individual buttons
- Consistent padding/ margins for individual settings - Restyled array tags for better legibility - Array tags now show global values as dummy tags when looking at per-character settings
A bunch of settings menu restyles and refactors
feat: Separate PM/Channel log saving toggles
Currently translated at 100.0% (1223 of 1223 strings) Translation: Horizon/UI Translate-URL: https://translate.horizn.moe/projects/horizon/User-Interface/es/
Brings the shared code up from the 2.4.0 base to Horizon's 2.4.5 release: a shared API ticket that is reused across connects and only refetched when stale or rejected (F-List invalidates older tickets the moment it issues a new one), reconnects that keep retrying after a network failure instead of giving up, the character list refreshed at login without a new ticket, a warning before sending text with spaces ahead of a slash command, a reworked user list (virtualised, chat gender filtering) and status picker, hidden users' ads filtered out of channels, the narrow-screen bbcode editor layout (formatting buttons behind an Aa toggle, full-width toolbar, character counter hidden), the eicon picker footer and its height fix, kink matcher fixes, openURLExternally limited to known schemes, Electron 43.8.4 and Node 24.22.1, and the Spanish, French, Hungarian, Italian and new Japanese translations. Mobile reconciliation done as part of the merge: - Gave mobile its own ticket provider (mobile/api-ticket.ts). Upstream dropped the password form of Connection.setCredentials, which mobile/Index.vue still used, so every login would have failed once the connection tried to call the password as a function. The desktop provider goes through Electron IPC and Node's crypto, neither of which exists in the WebView, so mobile mirrors its policy with an in-page cache: the login ticket is reused for connecting, a rejected or 25 minute old ticket is refetched, and concurrent refreshes share one request. The electron typecheck does not cover mobile/, so nothing flagged this. - Rebuilt the eicon picker's search bar on upstream's new layout (footer moved below the results) while keeping Solstice's trimmed category buttons, the keyboard autocorrect suppression, and the rest of the mobile changes. - Took Horizon's full Japanese catalog over Solstice's one-line stub and rebranded its three app-name strings (about.thankYou, action.about, action.hide) to Solstice. Also rebranded two older misses: Italian settings.logDir.confirm and German tips.9. - Took the French translation of sync.summary.damaged_one over Solstice's placeholder; kept the Solstice title for Spanish settings.export.title. - Kept the Solstice update-check log line in electron/main.ts alongside upstream's new boolean return. - Kept upstream's new check.yml, which typechecks pull requests into development; Solstice's own CI was not running pnpm typecheck. - Kept Solstice's CI, identity and manifests: the Solstice package names and versions, CONTRIBUTING.md (with upstream's Node version pin added), and a pnpm-lock regenerated against the merged manifests (takes Electron 43.8.4). Verified locally: mobile bundle builds and does not pull in the desktop ticket module, electron typecheck clean, the new ticket provider typechecks and passes a scripted check of reuse, rejection, staleness, credential changes, request sharing and error propagation, 82 log sync tests pass, locale check and prettier clean.
Brings the shared code up to Horizon's 2.5.0-beta.0 pre-release: the app settings window folded into the chat settings menu as one sidebar-driven dialog, global chat settings shared by every character (stored under a reserved '_' folder) with per-character overrides on top and a one-time migration prompt on first connect, app-level colourblind modes with a palette per type, a high-contrast mode, a separate toggle for logging channel messages, toggles restyled as switches, the platform services interface (chat/platform.ts) that keeps the settings menu off Electron, the custom Horizon icon font, new app icons, native scrollbars on macOS, and the Spanish, French, Hungarian and Italian translation updates. Mobile reconciliation done as part of the merge: - Replaced mobile/AppSettingsDialog.vue, which mounted the now deleted electron/Settings.vue in an overlay, with the shared settings menu hosted in mobile/Index.vue. ChatView's settings button reaches it over the EventBus, re-registered on every connect because Chat.vue clears the bus on disconnect, as electron/Index.vue does. - Added mobile/platform.ts, the mobile PlatformServices. Saving writes into the live general settings object (the one mobile/Index.vue, the update banner and the character pins share) and persists it, and on iOS passes a sound theme change to the native side straight away. The log folder, file pickers, other windows and the Electron spell checker do not exist in the WebView, so the rest are no-ops. - mobile/chat.ts awaits the now async core init before mounting, and still mounts if it fails, logging to the crash log, so an unreadable '_/settings' cannot leave a blank screen. - Taught the settings store about the '_' folder: writes take an explicit character, and the folder is created first because Android's NativeFile.write does not create parent folders (iOS does), so every global settings save would otherwise have thrown on Android. Both native hosts list every folder as a character, so '_' is filtered out of the character lists in JS. Device Sync is unchanged: the desktop sync server also walks '_' and finds no logs there, so the two stay in step. - The settings menu on a phone: the section sidebar becomes a native picker grouped by section, and the options mobile cannot honour are hidden, carried over from the old dialog (desktop auto-updater, theme sync, log folder, window options, hardware acceleration, external browser) plus the new ones (auto-login, taskbar badge, window flashing, log level, custom CSS). The mobile update section (release check with the opt-in for betas, Solstice and Horizon versions) moved over with them. The tab list moved into a settingsTabs computed so the sidebar and the picker share it. - Colourblind mode moved from a character setting applied by ChatView to an app setting applied as classes on the page root, which only electron/Index.vue set, so mobile/Index.vue now applies the same root classes (colourblind type, high contrast, reduced motion, vanilla colours, BBCode glow). Without it colourblind mode would have silently stopped working; the other four were already no-ops on mobile and now take effect. - mobile/Index.vue honours a character's own theme while that character is connected, as desktop does; the settings menu now lists themes on mobile, so the option would otherwise do nothing. - The general settings are completed with the desktop defaults at startup instead of when the old dialog opened, because the menu edits a copy of the whole set. - The fs shim lists the bundled chat themes from window.__availableThemes, so the settings menu and the login screen offer the same set. - Rebranded settings.reducedMotion.description in en-US alongside upstream's new high-contrast string. Kept Solstice's identity and versions in both package manifests. Upstream's settings template calls externalUrlHandler and handleTab, which SettingsView does not define; both are in sections hidden on mobile. Verified locally: electron and mobile typechecks clean, 82 log sync tests pass, locale check clean (its one warning is upstream's key order), prettier clean, mobile bundle builds. On the Android emulator: boots without errors, the menu opens with the picker and the mobile section set, saving persists app settings to !settings and global chat settings to _/settings, colourblind classes reach the page root, the theme follows, both survive a restart, '_' is kept out of the character lists, and Manage Data labels it as global settings. Not exercised: anything needing an F-List login (the migration prompt, character overrides, the in-chat settings button, per-character themes) and iOS.
The settings menu's per-tab header (the global/character tabs and the notice) shrank below its content to make room for the full-height scroll area under it, because the global `* { min-height: 0 }` in scss/_core.scss removes the flex minimum. The scroll area then started on top of the notice. Pin the header with flex-shrink-0 so the scroll area takes what is left.
The drawers sit inside the page padding (and the iOS safe-area padding) while their backdrop covers the whole screen, so an open drawer had a darkened gutter on its outer, top and bottom edges. Barely visible on dark themes, obvious on light ones like peached. The open drawer now stretches over that padding and pads it back, so its contents stay put.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Merges Horizon 2.4.5 and 2.5.0-beta.0.