Johnny
357118804e
feat(web): add Focus Mode UI entry in Insert Menu
...
Add discoverable UI entry point for Focus Mode via Insert Menu submenu:
UI Changes:
- Add "View" submenu to Insert Menu (+ button dropdown)
- Nested menu with Focus Mode option (ChatGPT-style pattern)
- Display keyboard shortcut hint (⌘⇧F) next to menu item
- Uses DropdownMenuSub components from Radix UI
User Access Methods:
1. Keyboard: Cmd/Ctrl+Shift+F (primary, power users)
2. Mouse: + menu → View → Focus Mode (discoverable)
3. Mobile: Touch-friendly menu access
Benefits:
- Improves discoverability for new users
- Doesn't clutter main editor UI
- Educates users about keyboard shortcut
- Extensible for future view options (typewriter, reading mode, etc.)
- Follows familiar UI patterns (ChatGPT, Notion)
Files Modified:
- web/src/components/MemoEditor/ActionButton/InsertMenu.tsx
* Add DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent
* Add View submenu with Focus Mode entry
* Add onToggleFocusMode prop
- web/src/components/MemoEditor/index.tsx
* Pass toggleFocusMode to InsertMenu component
- web/src/locales/en.json
* Add "editor.view" translation key
2025-11-17 08:55:10 +08:00
Johnny
c8162ff3cc
feat(web): add Focus Mode for distraction-free writing
...
Add keyboard-activated Focus Mode to provide an immersive writing experience:
Features:
- Toggle with Cmd/Ctrl+Shift+F (matches GitHub, Google Docs)
- Exit with Escape, toggle shortcut, button click, or backdrop click
- Expands editor to ~80-90% of viewport with centered layout
- Semi-transparent backdrop with blur effect
- Maintains all editor functionality (attachments, shortcuts, etc.)
- Smooth 300ms transitions
Responsive Design:
- Mobile (< 640px): 8px margins, 50vh min-height
- Tablet (640-768px): 16px margins
- Desktop (> 768px): 32px margins, 60vh min-height, 1024px max-width
Implementation:
- Centralized constants for easy maintenance (FOCUS_MODE_STYLES)
- Extracted keyboard shortcuts and heights to named constants
- JSDoc documentation for all new functions and interfaces
- TypeScript type safety with 'as const'
- Explicit positioning (top/left/right/bottom) to avoid width overflow
Files Modified:
- web/src/components/MemoEditor/index.tsx - Main Focus Mode logic
- web/src/components/MemoEditor/Editor/index.tsx - Height adjustments
- web/src/locales/en.json - Translation keys
Design follows industry standards (GitHub Focus Mode, Notion, Obsidian)
and maintains code quality with single source of truth pattern.
2025-11-16 23:15:36 +08:00
Steven
156908c77f
chore(web): migrate from ESLint+Prettier to Biome
...
- Install @biomejs/biome@2.3.5 as unified linter and formatter
- Remove ESLint, Prettier and all related plugins (221 packages removed)
- Migrate linting rules from ESLint to Biome configuration
- Migrate formatting rules from Prettier to Biome configuration
- Exclude auto-generated proto files from linting (src/types/proto/**)
- Exclude CSS files from Biome (Tailwind syntax not yet supported)
- Update package.json scripts:
- lint: tsc + biome check
- lint:fix: biome check --write
- format: biome format --write
- Auto-fix import organization across 60+ files
- Fix duplicate key in Russian locale (ru.json)
- Update CLAUDE.md documentation to reflect Biome usage
Benefits:
- 10-100x faster linting performance
- Simplified toolchain with single configuration file
- 221 fewer npm dependencies
- Unified linting, formatting, and import organization
2025-11-14 23:58:07 +08:00
Elliott
bb8fa90496
feat(i18n): add missing translations for zh-Hans ( closes #5209 ) ( #5229 )
2025-11-06 22:32:03 +08:00
Steven
4c1d1c70d1
refactor: rename workspace to instance throughout codebase
...
Remove work-related terminology by renaming "workspace" to "instance"
across the entire application. This change better reflects that Memos
is a self-hosted tool suitable for personal and non-work use cases.
Breaking Changes:
- API endpoints: /api/v1/workspace/* → /api/v1/instance/*
- gRPC service: WorkspaceService → InstanceService
- Proto types: WorkspaceSetting → InstanceSetting
- Frontend translation keys: workspace-section → instance-section
Backend Changes:
- Renamed proto definitions and regenerated code
- Updated all store layer methods and database drivers
- Renamed service implementations and API handlers
- Updated cache from workspaceSettingCache to instanceSettingCache
Frontend Changes:
- Renamed service client: workspaceServiceClient → instanceServiceClient
- Updated all React components and state management
- Refactored stores: workspace.ts → instance.ts
- Updated all 32 locale translation files
All tests pass and both backend and frontend build successfully.
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 23:35:35 +08:00
Steven
bc1550e926
refactor(api): migrate inbox functionality to user notifications
...
- Remove standalone InboxService and move functionality to UserService
- Rename inbox to user notifications for better API consistency
- Add ListUserNotifications, UpdateUserNotification, DeleteUserNotification methods
- Update frontend components to use new notification endpoints
- Update store layer to support new notification model
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-31 08:33:09 +08:00
Claude
7079790d4f
feat: add copy content functionality to MemoActionMenu
2025-10-23 20:05:31 +08:00
Huang Cheng Ting
d7e751997d
chore: update zh-Hant translation ( #5159 )
2025-10-09 21:30:55 +08:00
Nic Luckie
20233c7051
feat(web): add accessible ConfirmDialog and migrate confirmations; and Markdown-safe descriptions ( #5111 )
...
Signed-off-by: Nic Luckie <nicolasluckie@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-09 00:40:08 +08:00
Johnny
e93f3cbb8b
refactor: unify theme and apperance
2025-08-17 11:27:59 +08:00
Huang Cheng Ting
d86756f104
feat: add an option to auto expand subtags in tree mode ( #4994 )
2025-08-11 23:05:36 +08:00
Johnny
8576001c83
fix: nl.json
...
Signed-off-by: Johnny <yourselfhosted@gmail.com>
2025-08-07 14:43:35 +08:00
Stephan Paternotte
1043fc8fba
chore: update nl.json ( #4974 )
...
Signed-off-by: Stephan Paternotte <Stephan-P@users.noreply.github.com>
2025-08-07 14:40:53 +08:00
aarohee-he
0f2390a0b7
feat: add tooltips to editor buttons ( #4934 )
...
Co-authored-by: Anthony Cooper <antcoop096@gmail.com>
Co-authored-by: aarohee-he <aarohee-he@users.noreply.github.com>
Co-authored-by: Mishti Gala <mishtigala19@gmail.com>
2025-08-06 10:15:06 +08:00
Huang Cheng Ting
896a3dccf2
chore: update zh-Hant translation ( #4962 )
2025-08-04 19:38:58 +08:00
XIN_____
9c60165ba1
chore: update zh-Hans.json ( #4940 )
2025-08-03 19:10:49 +08:00
XIN_____
79c7fcc8b6
chore: update zh-Hans.json ( #4933 )
2025-07-31 19:50:29 +08:00
Maximilian Krauß
2c7eb23343
feat(inbox): handles errors while fetching and adds possibility to delete items ( #4908 )
2025-07-23 14:21:26 +00:00
Huang Cheng Ting
f675324994
chore: update zh-Hant translation ( #4895 )
2025-07-18 19:27:03 +08:00
Huang Cheng Ting
6119a4b965
chore: update zh-Hant translation ( #4889 )
2025-07-17 21:24:29 +08:00
Jovane Castro
a8db132110
chore(i18n): update hindi translation ( #4858 )
2025-07-16 21:46:18 +08:00
XIN_____
84eacebfbb
chore: update zh text i18n ( #4844 )
2025-07-16 21:46:09 +08:00
Jovane Castro
72b5186a56
chore(i18n): update croatian translation ( #4859 )
2025-07-16 21:45:58 +08:00
Jovane Castro
7683b26658
chore(i18n): update farsi translation ( #4855 )
2025-07-15 23:21:16 +08:00
Jovane Castro
4066af989c
chore(i18n): update spanish translation ( #4854 )
2025-07-15 23:20:52 +08:00
Jovane Castro
8ef13468c7
chore(i18n): update hungarian translation ( #4860 )
2025-07-15 23:20:15 +08:00
Jovane Castro
2d4b5a1044
chore(i18n): update german translation ( #4853 )
2025-07-15 19:25:33 +08:00
Jovane Castro
a21112427b
chore(i18n): update french translation ( #4856 )
2025-07-15 19:25:21 +08:00
Jovane Castro
5a53f7178c
chore(i18n): update italian translation ( #4861 )
2025-07-15 19:25:10 +08:00
Jovane Castro
74d35f7e33
chore(i18n): update japanese translation ( #4862 )
2025-07-15 19:24:59 +08:00
Jovane Castro
163038d5e0
chore(i18n): update georgian translation ( #4863 )
2025-07-15 19:24:49 +08:00
Jovane Castro
af60f81f96
chore(i18n): update korean translation ( #4864 )
2025-07-15 18:15:25 +08:00
Jovane Castro
c79b114972
chore(i18n): update marathi translation ( #4865 )
2025-07-15 18:14:41 +08:00
Jovane Castro
a95104a0d4
chore(i18n): update norwegian translation ( #4866 )
2025-07-15 18:14:30 +08:00
Jovane Castro
ff38347272
chore(i18n): update dutch translation ( #4867 )
2025-07-15 18:14:19 +08:00
Jovane Castro
4659b932d0
chore(i18n): update polish translation ( #4868 )
2025-07-15 18:14:09 +08:00
Jovane Castro
d9e13baa37
chore(i18n): update portuguese-Brazil translation ( #4869 )
2025-07-15 18:13:58 +08:00
Jovane Castro
4551a0c52d
chore(i18n): update portuguese translation ( #4870 )
2025-07-15 18:13:40 +08:00
Jovane Castro
bd1f675051
chore(i18n): update slovenian translation ( #4871 )
2025-07-15 18:13:19 +08:00
Jovane Castro
b4046f339e
chore(i18n): update swedish translation ( #4872 )
2025-07-15 18:12:56 +08:00
Jovane Castro
d9d63bf174
chore(i18n): update thai translation ( #4873 )
2025-07-14 23:26:17 +08:00
Jovane Castro
d2dcf26104
chore(i18n): update turkish translation ( #4874 )
2025-07-14 23:26:06 +08:00
Jovane Castro
78387bec83
chore(i18n): update ukrainian translation ( #4875 )
2025-07-14 23:14:06 +08:00
Dedy F. Setyawan
def61a8877
fix(i18n): Improve Indonesian translation ( #4849 )
2025-07-12 21:29:51 +08:00
unuunn
08883b58a7
updated Russian translation ( #4840 )
2025-07-10 07:38:56 +08:00
Dedy F. Setyawan
e803d7bc0f
feat(i18n): update Indonesian (id) translations ( #4838 )
2025-07-09 18:08:36 +08:00
XIN_____
0b1b471ee4
chore: update zh-Hant.json ( #4833 )
2025-07-08 23:03:35 +08:00
Steven
3ac4a03229
chore: update i18n
2025-07-08 20:33:44 +08:00
Steven
c1708df7a2
chore: use select/dropdown instead of popover
2025-07-08 20:25:56 +08:00
Jovane Castro
d32924ec48
chore: update i18n for Arabic locale ( #4825 )
2025-07-08 19:57:50 +08:00