Contacts: full detail pane, search, selection UX, empty illustration; Calendar invite deep-link
Contacts plugin: - Detail pane now renders ALL populated fields (job/company subtitle, every email, phones, addresses, websites, nickname, birthday, notes) — not just the email. - Company fallback for the display name: personal name → company → email, applied at read time so existing contacts whose name_display holds only the email now show the company without a re-save; name_display no longer stores emails going forward. - Search box in the list top bar (like Calendar): debounced, matches name/email/company, keeps focus + caret across re-renders. - Mail-style selection: hovering a row's avatar reveals a square checkbox; once anything is checked every row shows one (select mode), the bar "select all" matches and aligns with the row checkboxes, and the detail pane shows "N contact(s) selected". - Delete contact now confirms via a modal. - Empty reading pane shows contacts-illustration.svg (served from the plugin's ui/ dir), mirroring Mail's email-illustration empty state. Calendar: - Invite from a contact opens /p/calendar?guest=<email>, which pops a new-event form with that guest already added, then strips the param. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U72FZiF1W1pb8XxyWBTREA
This commit is contained in:
@@ -17,4 +17,4 @@ contacts = "webmail_plugin_contacts:plugin"
|
||||
packages = ["webmail_plugin_contacts"]
|
||||
|
||||
[tool.setuptools.package-data]
|
||||
webmail_plugin_contacts = ["ui/*.js", "migrations/versions/*.py"]
|
||||
webmail_plugin_contacts = ["ui/*.js", "ui/*.svg", "migrations/versions/*.py"]
|
||||
|
||||
Reference in New Issue
Block a user