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
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
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
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
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
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
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
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
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
Théo Poizat
75f5817e1c
fixup! Implement text selection mixin in mobile and web editor
...
Add try/catch to JSON parse
2025-12-19 19:03:39 +07:00
Théo Poizat
2f3bbe3bbb
Do not display AI scribe if AI is not enabled in env.file
2025-12-19 19:03:39 +07:00
Théo Poizat
bb23792fe3
Use bindings to better separate scribe presentation and data layer
2025-12-19 19:03:39 +07:00
Théo Poizat
6dc58e2eb6
Extract method to convert html content to text content
...
Editor exposes html content (so with html tags) and we do not want to send them to AI backend
2025-12-19 19:03:39 +07:00
Théo Poizat
7d7ccaf874
Open AI Scribe from text selection
2025-12-19 19:03:39 +07:00
Théo Poizat
96c95866c6
Open AI Scribe from bottom bar button
2025-12-19 19:03:39 +07:00
Théo Poizat
23065aa76d
Forward text selection callback from editor view to editor
2025-12-19 19:03:39 +07:00
Théo Poizat
57124f70a8
Implement text selection mixin in mobile and web editor
2025-12-19 19:03:39 +07:00
Théo Poizat
8b17fcdc54
fixup! Add text selection mixin
2025-12-19 19:03:39 +07:00
Théo Poizat
4013973110
Add text selection mixin
...
This mixin leverages HTML callbacks that can be set by WebView editor
to send text selection event to the composer so the composer will
receive text selection event necessary to display buttons related to
text selection.
2025-12-19 19:03:39 +07:00
dab246
860154acc1
TF-4176 Change minimize behavior in mail composer
2025-12-10 09:41:11 +07:00
dab246
6f6284c21f
fix: missing To field when only other fields are filled
2025-11-20 14:21:09 +07:00
dab246
d6e959c4d9
TF-4145 Create paywall url from workplaceFqdn
2025-11-17 14:24:30 +07:00
dab246
fa0ba5d689
TF-4142 Close link overlay when click email content view
2025-11-17 11:43:18 +07:00
dab246
249520b711
TF-4142 Implement hyperlink insertion
2025-11-17 11:43:18 +07:00
dab246
db22415a3e
TF-4064 Fix drag but con not drop on mobile
2025-11-14 22:58:51 +07:00
dab246
433616a9c2
TF-4064 Support drag & drop email addresses in composer on mobile
2025-11-14 22:58:51 +07:00
dab246
6a78d57619
TF-4082 Save text formatting menu state to user's preferences when send email or close composer
2025-11-14 22:34:50 +07:00
dab246
2e54493a69
TF-4082 Setup text formatting menu state from user's preferences in composer
2025-11-14 22:34:50 +07:00
dab246
972b20ec16
TF-4050 Preview and download uploaded file in composer on web
2025-11-11 17:48:33 +07:00
dab246
35fa43ed6b
TF-4011 Support Tab shortcut key to switch focus between tag & input field
2025-11-04 14:58:51 +07:00
dab246
11d47b5b00
TF-3911 Fix shortcutType was not in use in handleComposerShortcutAction method
2025-11-03 05:18:48 +07:00
dab246
fd7e349929
TF-3911 Support keyboard shortcut actions ESC to close multiple composer on web
...
Signed-off-by: dab246 <tdvu@linagora.com >
2025-11-03 05:18:48 +07:00
dab246
6c86682111
TF-3911 Support keyboard shortcut actions ESC to close composer on web
2025-11-03 05:18:48 +07:00