Commit Graph

3201 Commits

Author SHA1 Message Date
dab246 da67ba07ca TF-4141 Fix separator still not reactive to selection mode changes. 2026-01-11 22:55:49 +07:00
dab246 a30c84dd62 TF-4141 Remove dead code and fix separator reactivity 2026-01-11 22:55:49 +07:00
dab246 fcb7fcf3ba TF-4141 Add unit test for mailbox_filter_builder 2026-01-11 22:55:49 +07:00
dab246 df5ed118b3 TF-4141 should not show inkwell effect when user drag email into virtual folder 2026-01-11 22:55:49 +07:00
dab246 3e86f53862 TF-4141 Add some space between the need action and preview 2026-01-11 22:55:49 +07:00
dab246 2d1ecd4cc0 TF-4141 Fix nitpick comments from coderabbit 2026-01-11 22:55:49 +07:00
dab246 1661210e04 TF-4141 Add the AI needs-action option into the user settings. 2026-01-11 22:55:49 +07:00
dab246 cb0471ecb7 TF-4141 Fix cannot move when drag an email in Action required folder into other folder 2026-01-11 22:55:49 +07:00
Dat H. Pham ed9ca0a855 TF-4141 Update typo needs-action 2026-01-11 22:55:49 +07:00
dab246 09f0ba854a TF-4141 Remove counter of action required folder 2026-01-11 22:55:49 +07:00
dab246 8e2932658b TF-4141 Disable drag & drop email to Action required folder 2026-01-11 22:55:49 +07:00
dab246 e8a76542cf TF-4141 Auto refresh count emails in Action required folder when email changed 2026-01-11 22:55:49 +07:00
dab246 43cbd0d818 TF-4141 Perform load all unread action required emails when open Action required folder 2026-01-11 22:55:49 +07:00
dab246 0e49c18f9d TF-4141 Add Action required folder to left menu 2026-01-11 22:55:49 +07:00
dab246 61b8c95123 TF-4141 Show AI action tag in list emails 2026-01-11 22:55:49 +07:00
dab246 bbbb04a70e TF-4141 Add AI capability 2026-01-11 22:55:49 +07:00
dab246 a23d15a9ca TF-4136 refactor(logging): replace logError with logWarning for non-critical cases 2026-01-06 13:53:22 +07:00
Dang Dat a31898185e [Memory leak] Handle dispose in MobileEditorWidget 2025-12-29 10:11:56 +07:00
Dang Dat a286dd5dd8 [Memory leak] Remove listener and dispose 2025-12-29 10:11:56 +07:00
dab246 20b93cd8db hotfix(ai-scribe): Fix text selection handler correctly gated by AI Scribe availability. 2025-12-29 05:13:18 +07:00
dab246 f45f55751f hotfix(ai-scribe): Only implement OnTextSelectionChanged when isAIScribeAvailable is true 2025-12-29 05:13:18 +07:00
dab246 2b06dc65e3 hotfix(ai-scribe): Hide AI scribe option in user setting on mobile 2025-12-29 05:13:18 +07:00
dab246 29b54a76ee hotfix(ai-scribe): fix Safari keyboard input issue in AI Scribe search bar dialog 2025-12-23 17:27:26 +07:00
dab246 6e09d853fd feat(ai-scribe): Fix the English locale file `(intl_en.arb)` is missing all three AI Scribe keys
feat(ai-scribe): Fix async function declared without proper return type annotation.

feat(ai-scribe): Fix Async operations not properly awaited.

feat(ai-scribe): Fix inconsistent capitalization between button labels.

feat(ai-scribe): Fix GenerateAITextFailure check will never match.

feat(ai-scribe): Fix consider validating text input for predefined actions.

feat(ai-scribe): Using a subshell for directory isolation.

feat(ai-scribe): Fix verify the mock usage or document intent.

feat(ai-scribe): Using a more conventional import for Offset.

feat(ai-scribe): Adding error handling for consistency

feat(ai-scribe): Remove `fromJson` and `toJson` of AIResponse

feat(ai-scribe): Using constants for role values.

feat(ai-scribe): Using a more specific import.

feat(ai-scribe): Using Timer for cleaner lifecycle management

feat(ai-scribe): Adding error handling to fromMap() for consistency.

feat(ai-scribe): Disposing the ValueNotifier

feat(ai-scribe): Redundant null check after assignment

feat(ai-scribe): Fix calling `registerSelectionChangeListener` multiple times may be inefficient.

feat(ai-scribe): Safer type handling for JavaScript callback args

feat(ai-scribe): Fix async callbacks not awaited in switch statement.

feat(ai-scribe): Fix binding lifecycle mismatch for GetAIScribeConfigInteractor

feat(ai-scribe): Fix ai prompts

feat(ai-scribe): Fix unawaited async call to `_setupSelectionListener`

feat(ai-scribe): Fix switch cases use top-origin coordinates while `PositionedDirectional(bottom:)`` expects bottom-origin coordinates.

feat(ai-scribe): Adding error handling for selection listener setup.
2025-12-19 19:03:39 +07:00
dab246 6e56a50713 feat(ai-scribe): Load AI scribe config in dashboard 2025-12-19 19:03:39 +07:00
HuyNguyen 428d95c999 Enable AI Scribe modal based on configuration and availability 2025-12-19 19:03:39 +07:00
Dat H. Pham 25ea472688 Display AI toggle in Composer 2025-12-19 19:03:39 +07:00
Dat H. Pham 3c20c005f6 Display AI Scribe togge in Preference 2025-12-19 19:03:39 +07:00
Dat H. Pham 9a46f6c663 Interactor getAIScribeConfig 2025-12-19 19:03:39 +07:00
Dat H. Pham a915ec9881 AIConfig model 2025-12-19 19:03:39 +07:00
dab246 a686b5d334 feat(ai-scribe): Adding error handling for async operations 2025-12-19 19:03:39 +07:00
Théo Poizat c78f6b8a76 Improve text replace in Scribe
- Delete selection content before inserting
- Insert correct HTML
2025-12-19 19:03:39 +07:00
Théo Poizat 1a79445711 Add a method to delete selection content 2025-12-19 19:03:39 +07:00
dab246 57bfb4f88f feat(ai-scribe): Fix when using multiple composer, get multiple overlay icons 2025-12-19 19:03:39 +07:00
dab246 54ca4595ad feat(ai-scribe): Fix some comments of coderabbit 2025-12-19 19:03:39 +07:00
dab246 27393d4cc8 feat(ai-scribe): Add method to collapse selection and insert/replace callback 2025-12-19 19:03:39 +07:00
Théo Poizat 8ed8100e7e Add JS method to collapse selection in both composer
Collapsing a selection means removing it and keep the cursor at the
end. It will be needed by the scribe for "Insert" action where we
want to insert a text at the cursor even if the user selected text.
2025-12-19 19:03:39 +07:00
dab246 860393fc90 feat(ai-scribe): Improve data & domain layer for ai scribe 2025-12-19 19:03:39 +07:00
dab246 1a1b8f489f feat(ai-scribe): Improve UI for AI Scribe suggestion modal 2025-12-19 19:03:39 +07:00
dab246 582b1ebe97 feat(ai-scribe): reorganize abstractions and update dialog modal UI 2025-12-19 19:03:39 +07:00
dab246 7ddccf2e1c feat(ai-scribe): Fix cannot parsing AI capability from Session 2025-12-19 19:03:39 +07:00
Théo Poizat 755e24895d Disable AI Scribe if on mobile 2025-12-19 19:03:39 +07:00
Théo Poizat 0075fd64b6 feat: Remove .env file for AI Scribe
It was used at the beginning for configuration purpose but now we
have the JMAP capability, no need anymore.
2025-12-19 19:03:39 +07:00
Théo Poizat 2c364ea08a Use endpoint from AI capability instead of direct call to LLM 2025-12-19 19:03:39 +07:00
Théo Poizat 2325df616f Create an isAIScribeAvailable method
Check JMAP capability AND if AI is enabled in env.file and use this method everywhere  where we checked env.file
2025-12-19 19:03:39 +07:00
Théo Poizat 8c16bd1fad Add AI capability 2025-12-19 19:03:39 +07:00
Théo Poizat 77a56ae9b7 Export AI Scribe code from controller to a mixin
Avoid adding too much code in the controller
2025-12-19 19:03:39 +07:00
Théo Poizat 4d0880b8be fixup! Extract method to convert html content to text content
Move the method in utils
2025-12-19 19:03:39 +07:00
Théo Poizat d369fcbf5f Simplify observed values about text selection in composer
hasTextSelection had no interest.

The other two values have been put inside an object to observe only one object.
2025-12-19 19:03:39 +07:00
Théo Poizat 2228596c1c Mutualize event listener in web editor widget
Instead of listening multiple times for message from editor JS side,
let's add only one listener and route inside the callback.
2025-12-19 19:03:39 +07:00