Linus Rath
8813533958
fix: respect per-email dark mode toggle when always-light setting is on
2026-05-01 21:42:02 +02:00
Linus Rath
d7c29b7bec
refactor: rework mobile mail viewer toolbar
2026-05-01 21:00:34 +02:00
Linus Rath
089963b1b3
refactor: redesign expanded details panel
2026-05-01 18:22:06 +02:00
Linus Rath
683fe75864
i18n: translate SPF/DKIM/DMARC tooltips
2026-05-01 17:25:52 +02:00
Linus Rath
7822a363dd
fix: render below-header overflow popup outside clipped row
2026-05-01 17:10:17 +02:00
Linus Rath
1e535e96a2
feat: image attachment thumbnails and preview chips
2026-05-01 17:03:45 +02:00
Linus Rath
32135ddb95
fix: collapse below-header attachments to single row with overflow pill
2026-05-01 16:29:38 +02:00
Linus Rath
4a91cd0c44
style: drop iframe border-radius
2026-04-29 20:26:40 +02:00
Linus Rath
6abf8a5dd8
fix: detect <style> tag for padding
2026-04-29 20:25:24 +02:00
Linus Rath
3667c842c6
fix: light-mode override to body content only
2026-04-29 20:17:59 +02:00
Linus Rath
b64721b43c
fix: pad bare HTML emails like plain-text mails
2026-04-29 20:09:00 +02:00
Linus Rath
6b5ca2cb89
fix: smooth out body load, prevent flicker
2026-04-29 20:03:58 +02:00
Linus Rath
0f6e4f995f
fix: prevent iframe flash on Load images or Trust sender
2026-04-29 18:29:48 +02:00
Linus Rath
df8d04e233
fix: restore broken viewer toolbar actions and improve mobile menu #220
2026-04-24 19:31:38 +02:00
Linus Rath
39a228b20e
feat: streamline mobile email viewer header layout
2026-04-22 20:50:12 +02:00
Linus Rath
9a44babcf1
feat: add collapsible details to calendar invitation banner and update sanitization config for iframe rendering
2026-04-21 21:21:42 +02:00
Linus Rath
bc3b923945
fix: apply mobile toolbar spacing fix to email viewer action bar
2026-04-19 17:59:58 +02:00
Linus Rath
1689315c3a
feat: add setting to hide inline images from attachment list
2026-04-18 01:07:34 +02:00
Linus Rath
f05f70a9e5
fix: prevent XSS via quote injection in plain-text email linkifier
2026-04-18 00:35:21 +02:00
Linus Rath
8bdadc7ba3
fix: standardize punctuation
2026-04-16 19:07:42 +02:00
Linus Rath
d31b30ba4a
Merge branch 'dev'
2026-04-16 18:51:01 +02:00
nesgarbo and Linus Rath
fa343e0768
fix: hide ICS attachments from email attachment list when invitation banner is shown
...
When an email contains a calendar invitation, the raw .ics MIME parts
(text/calendar, application/ics, application/icalendar) were showing
up in the attachment list alongside the calendar invitation banner,
which is confusing — the banner already provides the relevant UI.
Filter those MIME types out of the displayed attachment list whenever
the calendar invitation banner is active, reusing the existing
isCalendarMimeType utility from lib/calendar-invitation.ts.
2026-04-16 16:54:09 +02:00
Linus Rath
1b816d3185
fix: standardize tag naming and fix unknown keyword display #184 #185
2026-04-12 15:37:57 +02:00
Linus Rath
927a3b8b11
feat: store trusted senders in a dedicated JMAP address book #176
2026-04-12 01:10:28 +02:00
Linus Rath
4f54f768e8
Feat: enable keyword reordering #174 and multi-tag support per email #173
2026-04-10 17:31:13 +02:00
Linus Rath
bbf724d9e1
fix: correct logic for marking email as read in EmailViewer component
2026-04-02 22:50:04 +02:00
Linus Rath
9d97b74684
fix: adjust max width of calendar invitation banner for better layout
2026-04-02 14:56:04 +02:00
Linus Rath
c4673acb65
fix: replace unguarded crypto.randomUUID() with safe generateUUID() utility
2026-04-02 14:51:21 +02:00
Linus Rath
34dd5122b3
feat: logging to include categories for better log management
2026-03-31 16:31:27 +02:00
Linus Rath
066ab1bc32
debug: add diagnostic logging to 3DES S/MIME decrypt path
...
Log legacy key import success/failure, CMS algorithm OIDs (content
encryption + key transport), legacy key availability during decrypt
attempts, and detailed error messages from both RSA-OAEP and
RSAES-PKCS1-v1_5 decrypt paths.
2026-03-30 19:15:02 +02:00
Linus Rath
8937777bcd
fix: support 3DES S/MIME decryption by importing legacy RSAES-PKCS1-v1_5 keys #35
2026-03-30 16:00:27 +02:00
Linus Rath
8d7cd26fa9
feat: enhance compose functionality with button integration and translations
2026-03-28 22:53:10 +01:00
Linus Rath
c7c22bd210
fix: account isolation, auto-import signer certs, and no-key error handling #35
2026-03-28 17:32:06 +01:00
Linus Rath
e49f7c1a75
fix: improve dark mode handling for media elements and background images
2026-03-28 14:57:04 +01:00
Linus Rath
308adf0101
feat: add mail layout settings and update email list components
2026-03-28 01:40:41 +01:00
Linus Rath
574bd7ecef
fix: ensure draft editing function is called correctly in EmailViewer component #60
2026-03-28 00:52:28 +01:00
Linus Rath
ba6b25f3f1
fix: respect markAsReadDelay setting in EmailViewer #95
2026-03-27 02:09:00 +01:00
Linus Rath
7a191cf78b
fix: resolve all 69 ESLint warnings across 40 files
...
- Remove unused imports (Mail, CalendarIcon, Plus, Circle, cn, Link,
MessageCircle, User, Tag, FolderUp, useEffect, LogOut, GripVertical,
Check, X, HoverActionsMode, HoverActionsCorner, asn1js, Convert, etc.)
- Prefix unused variables/params with underscore to satisfy no-unused-vars
- Add missing React hook dependencies (exhaustive-deps)
- Wrap handleNavigateUp in useCallback and selectedGroupMembers in useMemo
- Remove unused eslint-disable directives in jmap/client.ts
- Replace as any with typed casts in filter-store and smime-store tests
- Remove dead code (macOk assignment, unused now variable)
2026-03-26 18:35:56 +01:00
Linus Rath
9b25b6d03e
fix: adjust contact and calendar page for mobile layout #103
2026-03-26 16:30:20 +01:00
Linus Rath
4af20b8dc0
refactor: update styling and color classes across components
...
- Changed error message styling in ICalImportModal to use new color classes.
- Updated task completion styling in TaskListView to use new success color classes.
- Modified selected styling in ContactListItem tests to reflect new background class.
- Adjusted duplicate warning styling in ContactImportDialog to use new warning color classes.
- Refactored background and border colors in CalendarInvitationBanner for various statuses.
- Updated email list item and viewer components to use new warning and success color classes.
- Refined styling for unread indicators in email components.
- Enhanced error fallback styling in error components to use new warning color classes.
- Updated filter rule modal button hover styles to use new destructive color classes.
- Added experimental feature descriptions in Plugins and Themes settings.
- Refined vacation settings validation warning styling to use new warning color classes.
- Updated toast component styles to use new color classes for different states.
- Introduced a new built-in theme 'Qui' with specific color variables.
- Adjusted email security status colors to use new warning color classes.
2026-03-25 23:11:30 +01:00
Linus Rath
54981950b0
feat(plugins): resizable collapsible detail sidebar, auto-init on refresh
...
- Add email-detail-sidebar slot type for right-side plugin panels
- Plugin sidebar inside EmailViewer with ResizeHandle (200-500px, drag/dbl-click reset)
- Collapse/expand toggle with PanelRightClose/PanelRightOpen icons
- Call initializePlugins() on mount so plugins survive page refresh
- Fix plugin loader: call exposePluginExternals() before loading
- Fix CSP: add blob: to script-src for plugin bundle loading
- Fix enablePlugin: wire slot registration bridge before loading
- Fix email-banner PluginSlot: pass email via extraProps
- Fix sidebar-widget PluginSlot: move inside scrollable area
- Emit emailHooks.onEmailOpen/onEmailClose from selectEmail()
2026-03-25 00:44:05 +01:00
Linus Rath
76b21147e4
feat: add plugin/theme harness and admin dashboard
...
Plugin & Theme System:
- Add plugin type definitions, permissions (30+), and validation constants
- Add IndexedDB storage layer for plugin code, theme CSS, and previews
- Add theme CSS sanitization, injection, and safety validation
- Add HookBus event system with 130+ hooks across 20 domains
- Add plugin ZIP extraction and manifest validation with JS security checks
- Add sandboxed PluginAPI factory with scoped storage, logging, and permission gating
- Add plugin loader with blob URL dynamic import and auto-disable circuit breaker
- Add 3 built-in themes (Nord, Catppuccin, Solarized)
- Add Zustand plugin store with install/uninstall/enable/disable lifecycle
- Add PluginSlot, PluginSlotRenderer, and PluginErrorBoundary components
- Add plugins and themes settings UI panels
- Integrate plugin slots into email viewer, composer, navigation rail, sidebar, and context menu
- Extend theme store with custom theme installation and activation
Admin Dashboard:
- Add admin authentication with scrypt password hashing and AES-256-GCM sessions
- Add rate-limited login (5 attempts/15min per IP)
- Add config manager with admin override > env var > default priority
- Add settings policy system with feature gates and per-setting restrictions
- Add audit logging with rotation
- Add admin API routes (login, logout, config, policy, audit, password change)
- Add admin UI pages (login, dashboard, config, policy, audit)
- Add policy store for client-side feature gate enforcement
- Wire admin password initialization into server instrumentation
Tests:
- Add 139 tests across 10 test files covering all plugin/theme modules
2026-03-25 00:44:03 +01:00
Linus Rath
8b1b3ad57b
fix: update iframe sandbox attributes to allow popups to escape sandbox
2026-03-21 20:45:18 +01:00
Linus Rath
2547c10060
feat: add demo data for emails, files, filters, identities, mailboxes, vacation responses, and JMAP client interface
...
- Created demo emails with various states (inbox, sent, drafts, trash, etc.) in `emails.ts`.
- Added demo file nodes representing directories and files in `files.ts`.
- Implemented demo Sieve capabilities and scripts in `filters.ts`.
- Defined demo identities for users in `identities.ts`.
- Established demo mailboxes with permissions and counts in `mailboxes.ts`.
- Created a demo vacation response in `vacation.ts`.
- Introduced a comprehensive JMAP client interface in `client-interface.ts` to standardize interactions with the JMAP API.
2026-03-21 01:38:42 +01:00
Linus Rath
c5b1731a63
feat: add attachment position setting in email settings
...
- Introduced a new setting for attachment position in email settings, allowing users to choose between displaying attachments beside the sender or below the header.
- Updated the settings store to include the new attachment position type and default value.
- Added translations for the new setting in multiple languages (de, en, es, fr, it, ja, nl, pt).
2026-03-19 21:14:18 +01:00
Linus Rath
34e495dde3
Fix email signature rendering
2026-03-19 17:20:39 +01:00
Linus Rath
77514bd054
fix: RFC 9553 compliance for contacts (birthday, addresses)
2026-03-19 13:33:53 +01:00
Linus Rath
bb72ac92ae
fix: implement draft editing functionality across email components and add localization keys
2026-03-18 18:39:46 +01:00
Linus Rath
2edbf379e2
fix: implement unwrapping of embedded message/rfc822 attachments and enhance HTML body validation
2026-03-18 17:32:25 +01:00
Linus Rath
a57492d7c0
fix: refactor overflow handling in EmailViewer component to use hidden priorities and layout effects
2026-03-18 16:56:24 +01:00