- src/i18n: add zh-cn locale, explicit language override setting
(LanguageSetting), and moment-locale -> zh-cn/zh-tw resolution.
- src/settings.ts: persistent banner at the top of the settings tab
showing the current version's notable changelog highlights, so users
who dismiss or miss the WhatsNewModal can still find them. Dismissal
is tracked separately (bannerDismissedVersion) from the modal's
once-per-upgrade lastSeenVersion gate.
- src/changelog.ts: curate the 1.3.0 release notes (multi-language UI,
faster status refresh, symlink-pull fix, ignore-sync setting,
connection status display, resizable conflict modal, folder picker,
clearer connection errors, this what's-new tip).
Part of #39.
Some Obsidian themes define --background-modifier-success/error
identically to --text-success/error, so the badge's colored chip
background exactly matched its own text color, making the label
invisible (confirmed via computed style: both resolved to the same
rgb() value). Use the same neutral --background-secondary as the
checking state for connected/disconnected too, relying only on the
state-colored text and dot for contrast.
Move connection testing/state from the settings tab into a shared
plugin-level store (GitLabFilesPush.connectionStatus,
onConnectionStatusChange, testConnection) so a new status bar item
can reflect the same in-flight test instead of racing a second one.
The settings tab badge now subscribes to the shared state and
unsubscribes on hide(). Status bar shows service name + state,
tooltip carries the error detail, and clicking retests the connection.
Adds a "what's new" modal shown once after the plugin updates to a new
version, so users don't miss what changed:
- New src/changelog.ts: a hand-curated CHANGELOG array (distinct from
the auto-generated CHANGELOG.md, which lists every commit) where
entries can be marked `notable` so they're called out separately
from minor fixes, per the issue's clarification comment.
- New src/utils/version.ts: compareVersions() does numeric per-segment
comparison (so "1.10.0" sorts after "1.9.0", unlike a plain string
compare).
- getUnseenReleases() filters+sorts the changelog to what's newer than
a given "last seen" version, extracted as a pure/testable function
rather than inlined in main.ts (which isn't unit-tested in this repo).
- New settings field lastSeenVersion, persisted the same way as other
settings. On a fresh install (empty lastSeenVersion) it's just
recorded silently — no modal, since there's nothing to compare
against. On an actual version bump, WhatsNewModal shows the unseen
releases' highlights, with a "View full changelog" link out to
CHANGELOG.md and a "Got it" dismiss; the version is recorded either
way so the tip only ever shows once per upgrade.
- The whole check is wrapped in try/catch so a malformed version
string can never break plugin startup.
Closes#39
- Conflict modal (#42): resize to min(1100px,92vw) x min(85vh,800px) flex
layout, remove the 280px content height cap, and add a Diff/Local/Remote
tab switcher on narrow screens (defaults to Diff).
- Settings connection status (#41): show a persistent Connected/Not
connected/Checking badge in the settings tab, auto-tested on open and
after an 800ms debounce on token/branch/URL/owner/repo edits, updated
in place (no full re-render, so typing focus is preserved).
- Local ignore patterns (#40): new "Ignore patterns" setting (.gitignore-
style, multi-line) applied in GitignoreManager.isIgnored() in addition
to the repo's own .gitignore, covering push/pull/refresh uniformly.
Closes#42, #41, #40.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YYCTyZw7gUmJ7oh1VTmAqh
The view mixed hand-picked Unicode glyphs (✓ ⚠ ↑ ↓ ⟳ ↻ ✕ ≡ ⎇ 📁),
duplicated across files, which rendered at inconsistent sizes/weights
across platforms and could drift (e.g. the Refresh button used ↻ while
the "checking" status used ⟳).
Centralize every icon in src/ui/components/icons.ts as Lucide icon ids and
render them with Obsidian's setIcon, so status, action-bar, tab, and
info-strip icons all share one consistent icon set. Tabs now derive their
icon from statusMeta so they can no longer diverge from the file list.
Add CSS to size the SVGs uniformly.
Add setIcon to the obsidian test mock and update statusMeta expectations.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DwioG4CNKUBuKiZdowLFWe