diff --git a/package-lock.json b/package-lock.json index 36ea56d..175fda7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@govoplan/mail-webui", - "version": "0.1.24", + "version": "0.1.25", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@govoplan/mail-webui", - "version": "0.1.24", + "version": "0.1.25", "peerDependencies": { "@govoplan/core-webui": "^0.1.18", "lucide-react": "^1.23.0", diff --git a/package.json b/package.json index b7aa1ba..4281776 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/mail-webui", - "version": "0.1.24", + "version": "0.1.25", "private": true, "type": "module", "main": "webui/src/index.ts", diff --git a/pyproject.toml b/pyproject.toml index f16a054..55d1326 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "govoplan-mail" -version = "0.1.24" +version = "0.1.25" description = "GovOPlaN mail module with backend and WebUI integration." readme = "README.md" requires-python = ">=3.12" diff --git a/src/govoplan_mail/backend/manifest.py b/src/govoplan_mail/backend/manifest.py index cd2e7fd..e1cc56f 100644 --- a/src/govoplan_mail/backend/manifest.py +++ b/src/govoplan_mail/backend/manifest.py @@ -32,7 +32,9 @@ from govoplan_core.core.modules import ( ModuleManifest, NavItem, PermissionDefinition, + ProductAvailabilityExplanation, ProductAreaContribution, + ProductSurfaceContribution, QuickAccessTool, RoleTemplate, ) @@ -445,7 +447,7 @@ POP3_PROVIDER = ExternalProviderDeclaration( manifest = ModuleManifest( id="mail", name="Mail", - version="0.1.24", + version="0.1.25", required_capabilities=(CAPABILITY_AUTH_PRINCIPAL_RESOLVER, CAPABILITY_AUTH_PERMISSION_EVALUATOR), optional_dependencies=("campaigns", "addresses", "calendar", "postbox", "search"), provides_interfaces=( @@ -562,6 +564,39 @@ manifest = ModuleManifest( order=40, ), ), + product_surfaces=( + ProductSurfaceContribution( + id="communication.messages", + module_id="mail", + label="i18n:govoplan-core.product_surface.messages", + description="i18n:govoplan-core.product_surface.messages_description", + icon="mail", + entry_path="/messages", + route_path="/mail", + surface_ids=("mail.nav.mail", "mail.route.mail"), + presentations=("task", "reader"), + search_source_ids=("mail.mailbox_messages",), + help_context_ids=("mail.quick_access.messages",), + documentation_topic_ids=("mail.quick-access-and-product-area",), + required_any=("mail:mailbox:read",), + aliases=("/inbox",), + order=10, + unavailable=ProductAvailabilityExplanation( + reason="authorization", + title="i18n:govoplan-core.product_surface.messages_unavailable", + description="i18n:govoplan-core.product_surface.messages_unavailable_description", + resolution="i18n:govoplan-core.product_surface.messages_unavailable_resolution", + responsible_role="i18n:govoplan-core.access_administrator", + ), + degraded=ProductAvailabilityExplanation( + reason="provider_degraded", + title="i18n:govoplan-core.product_surface.messages_degraded", + description="i18n:govoplan-core.product_surface.messages_degraded_description", + resolution="i18n:govoplan-core.product_surface.messages_degraded_resolution", + responsible_role="i18n:govoplan-core.integration_operator", + ), + ), + ), quick_access_tools=( QuickAccessTool( id="mail.messages", @@ -893,6 +928,9 @@ manifest = ModuleManifest( body=( "Mail contributes its full mailbox to Communication. When Quick Access is enabled, its compact provider surface " "appears inside the shared Messages drawer alongside independent Postbox and future chat contributions. " + "Mail also contributes to the stable Messages product entry: `/messages` and its migration alias `/inbox` open " + "Mail only when its mailbox route is currently authorized and visible in the effective View; otherwise another " + "available Messages owner is selected or the shell explains how access can be restored. " "Recent entries open the exact authorized profile, folder, and message; Drafts resolves the configured or " "provider-detected Drafts folder, and the full Mail page keeps the versioned Quick Access return context. " "When an active Case requests a selection, choosing a recent message returns only its tenant-bound profile, " @@ -914,6 +952,9 @@ manifest = ModuleManifest( "body": ( "Mail ordnet das vollständige Postfach Kommunikation zu. Ist der Schnellzugriff aktiviert, erscheint die kompakte " "Mail-Oberfläche gemeinsam mit unabhängigen Beiträgen aus Postbox und künftig Chat unter Nachrichten. " + "Mail trägt außerdem zum stabilen Produkteinstieg Nachrichten bei: `/messages` und der Migrationsalias `/inbox` " + "öffnen Mail nur, wenn die Postfachroute aktuell berechtigt und in der wirksamen View sichtbar ist. Andernfalls " + "wählt die Shell einen anderen verfügbaren Nachrichten-Eigentümer oder erklärt die Wiederherstellung des Zugriffs. " "Aktuelle Einträge öffnen das genaue berechtigte Profil, den Ordner und die Nachricht; Entwürfe verwendet " "den konfigurierten oder vom Anbieter erkannten Entwurfsordner. Die vollständige Mail-Seite erhält den " "versionierten Rücksprungkontext. Verfassen öffnet bewusst die konfigurierte Mail-Anwendung des Benutzers, " diff --git a/webui/package-lock.json b/webui/package-lock.json index 5e244a0..0ceff79 100644 --- a/webui/package-lock.json +++ b/webui/package-lock.json @@ -1,12 +1,12 @@ { "name": "@govoplan/mail-webui", - "version": "0.1.24", + "version": "0.1.25", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@govoplan/mail-webui", - "version": "0.1.24", + "version": "0.1.25", "devDependencies": { "typescript": "^5.7.2" }, diff --git a/webui/package.json b/webui/package.json index 40d4f37..6ec2a30 100644 --- a/webui/package.json +++ b/webui/package.json @@ -1,6 +1,6 @@ { "name": "@govoplan/mail-webui", - "version": "0.1.24", + "version": "0.1.25", "private": true, "type": "module", "main": "src/index.ts", diff --git a/webui/src/module.ts b/webui/src/module.ts index d236689..f5b87a8 100644 --- a/webui/src/module.ts +++ b/webui/src/module.ts @@ -1,5 +1,5 @@ import { createElement, lazy } from "react"; -import type { MailDevMailboxUiCapability, MailProfilesUiCapability, PlatformWebModule, QuickAccessToolsUiCapability } from "@govoplan/core-webui"; +import { messagesProductSurfaceTranslations, type MailDevMailboxUiCapability, type MailProfilesUiCapability, type PlatformWebModule, type QuickAccessToolsUiCapability } from "@govoplan/core-webui"; import { MailProfilePolicyEditor, MailProfileScopeManager } from "./features/mail/MailProfileManagement"; import { validateMailPolicy } from "./features/mail/mailPolicyValidation"; import { mailCredentialReferenceSelectors } from "./features/mail/mailReferenceProviders"; @@ -14,8 +14,8 @@ const mailboxRead = ["mail:mailbox:read"]; const bounceRead = ["mail:bounce:read", "mail:bounce:manage"]; const legacyImportAccess = ["mail:pop3:import", "mail:pop3:manage"]; const translations = { - en: generatedTranslations.en, - de: generatedTranslations.de + en: { ...generatedTranslations.en, ...messagesProductSurfaceTranslations.en }, + de: { ...generatedTranslations.de, ...messagesProductSurfaceTranslations.de } }; const mailQuickAccessTools: QuickAccessToolsUiCapability = { tools: [