feat: vault-aligned server v1 + UX polish
All checks were successful
CI / Windows build (push) Successful in 7m47s

Redesign the optional FastAPI companion around vault files (manifest /
PUT/GET/DELETE + OCR jobs) instead of legacy strokes_json notes. Wire a
client Server settings panel for health/login. Polish shell UX: l10n for
settings/home/board, sticky-board empty state, and a narrow-screen
diagnostics FAB.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-05 19:04:48 +08:00
parent d346cc2670
commit 198da00ecd
20 changed files with 1325 additions and 90 deletions

View File

@@ -985,6 +985,174 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Enter a server URL to enable sync.'**
String get syncNotConfigured;
/// No description provided for @settingsDefaults.
///
/// In en, this message translates to:
/// **'Defaults'**
String get settingsDefaults;
/// No description provided for @settingsAppearance.
///
/// In en, this message translates to:
/// **'Appearance'**
String get settingsAppearance;
/// No description provided for @settingsAbout.
///
/// In en, this message translates to:
/// **'About'**
String get settingsAbout;
/// No description provided for @settingsDefaultTool.
///
/// In en, this message translates to:
/// **'Default tool'**
String get settingsDefaultTool;
/// No description provided for @settingsDefaultColor.
///
/// In en, this message translates to:
/// **'Default color'**
String get settingsDefaultColor;
/// No description provided for @settingsDefaultWidth.
///
/// In en, this message translates to:
/// **'Default stroke width'**
String get settingsDefaultWidth;
/// No description provided for @settingsPressureCurve.
///
/// In en, this message translates to:
/// **'Pressure curve'**
String get settingsPressureCurve;
/// No description provided for @settingsClearConfirmBody.
///
/// In en, this message translates to:
/// **'This resets pen defaults and appearance. Notes and documents are not affected.'**
String get settingsClearConfirmBody;
/// No description provided for @serverSection.
///
/// In en, this message translates to:
/// **'BadNote Server'**
String get serverSection;
/// No description provided for @serverUrl.
///
/// In en, this message translates to:
/// **'Server URL'**
String get serverUrl;
/// No description provided for @serverUrlHint.
///
/// In en, this message translates to:
/// **'http://192.168.1.10:8080'**
String get serverUrlHint;
/// No description provided for @serverUsername.
///
/// In en, this message translates to:
/// **'Username'**
String get serverUsername;
/// No description provided for @serverPassword.
///
/// In en, this message translates to:
/// **'Password'**
String get serverPassword;
/// No description provided for @serverSave.
///
/// In en, this message translates to:
/// **'Save & sign in'**
String get serverSave;
/// No description provided for @serverTest.
///
/// In en, this message translates to:
/// **'Test connection'**
String get serverTest;
/// No description provided for @serverTestOk.
///
/// In en, this message translates to:
/// **'Connected · API {version}'**
String serverTestOk(String version);
/// No description provided for @serverTestFail.
///
/// In en, this message translates to:
/// **'Connection failed: {error}'**
String serverTestFail(String error);
/// No description provided for @serverLoggedIn.
///
/// In en, this message translates to:
/// **'Signed in'**
String get serverLoggedIn;
/// No description provided for @serverHint.
///
/// In en, this message translates to:
/// **'Optional. Self-hosted vault assist + deferred OCR; notes stay fully offline.'**
String get serverHint;
/// No description provided for @boardEmptyTitle.
///
/// In en, this message translates to:
/// **'No sticky notes yet'**
String get boardEmptyTitle;
/// No description provided for @boardEmptyBody.
///
/// In en, this message translates to:
/// **'Tap + to add a card. Write [[other-card-id]] in the body to create a backlink.'**
String get boardEmptyBody;
/// No description provided for @relativeJustNow.
///
/// In en, this message translates to:
/// **'Just now'**
String get relativeJustNow;
/// No description provided for @relativeMinutesAgo.
///
/// In en, this message translates to:
/// **'{n}m ago'**
String relativeMinutesAgo(int n);
/// No description provided for @relativeHoursAgo.
///
/// In en, this message translates to:
/// **'{n}h ago'**
String relativeHoursAgo(int n);
/// No description provided for @relativeYesterday.
///
/// In en, this message translates to:
/// **'Yesterday'**
String get relativeYesterday;
/// No description provided for @diagExported.
///
/// In en, this message translates to:
/// **'Diagnostic pack exported ({bytes} bytes)\nPath copied'**
String diagExported(int bytes);
/// No description provided for @diagExportFail.
///
/// In en, this message translates to:
/// **'Export failed: {error}'**
String diagExportFail(String error);
/// No description provided for @processingOcr.
///
/// In en, this message translates to:
/// **'Processing OCR…'**
String get processingOcr;
}
class _AppLocalizationsDelegate