diff --git a/docs/INTERFACE_PATTERN_MIGRATION.md b/docs/INTERFACE_PATTERN_MIGRATION.md index 895bd0a..879512a 100644 --- a/docs/INTERFACE_PATTERN_MIGRATION.md +++ b/docs/INTERFACE_PATTERN_MIGRATION.md @@ -29,8 +29,10 @@ submissions, receipts, and handoff execution. The module uses shared controls, dialogs, blockers, field help, statuses, loading, empty/error states, disabled reasons, confirmations, and unsaved-draft -guards. The catalogue action row now uses the shared responsive -`ActionToolbar`; equal-column definition/editor groups use `FormGrid` and its -named narrow-layout collapse policy. These layout contracts do not change +guards. The catalogue now composes `WorkspaceFrame`, `ActionToolbar`, +`FilterBar`, and `StatePanel`; equal-column definition/editor groups use +`FormGrid`, while field, page, localization, and preview headings use the +shared section-header toolbar surface. Core therefore owns viewport, search, +state, heading, and narrow-layout geometry. These contracts do not change filter scope, permissions, revision semantics, or publication consequences. English and German catalogues cover the owned route and editor vocabulary. diff --git a/src/govoplan_forms/backend/manifest.py b/src/govoplan_forms/backend/manifest.py index 1890f92..0a0df8d 100644 --- a/src/govoplan_forms/backend/manifest.py +++ b/src/govoplan_forms/backend/manifest.py @@ -194,8 +194,9 @@ manifest = ModuleManifest( summary="Create immutable, versioned schemas consumed by Forms Runtime and institutional services.", body=( "Each revision fixes field types, options, constraints, draft, attachment, signature, policy, and handoff requirements. " - "Publishing is explicit; existing submissions continue to retain their exact revision. The catalogue action row and " - "definition field groups reflow at narrow widths without changing filter scope, permissions, or lifecycle effects." + "Publishing is explicit; existing submissions continue to retain their exact revision. The catalogue, filter, empty states, " + "section headings, and definition field groups use the shared responsive layout language and reflow at narrow widths without " + "changing filter scope, permissions, or lifecycle effects." ), layer="configured", documentation_types=("admin", "user"), diff --git a/webui/src/features/forms/FormDefinitionDialog.tsx b/webui/src/features/forms/FormDefinitionDialog.tsx index 1106e8b..03415df 100644 --- a/webui/src/features/forms/FormDefinitionDialog.tsx +++ b/webui/src/features/forms/FormDefinitionDialog.tsx @@ -1,6 +1,7 @@ import { ArrowDown, ArrowUp, Eye, Languages, Plus, Trash2 } from "lucide-react"; import { useEffect, useMemo, useState } from "react"; import { FormGrid, + ActionToolbar, Button, ConfirmDialog, Dialog, @@ -262,12 +263,12 @@ export default function FormDefinitionDialog({ -
+

Fields

-
+
{draft.fields.map((field, index) =>
@@ -417,12 +418,12 @@ function PageEditor({ draft, disabled, onChange }: { draft: FormDefinition; disa } return (
-
+

Pages and sections

{pages.length === 0 ? : } -
+ {pages.length === 0 &&

Fields render in their declared order on one page.

} {pages.map((page, pageIndex) =>
@@ -470,10 +471,10 @@ function LocalizationEditor({ draft, disabled, onChange }: { draft: FormDefiniti } return (
-
+

-
+ {localizations.length === 0 &&

The canonical labels are used for every locale.

} {localizations.map((localization, index) =>
@@ -505,7 +506,7 @@ function DefinitionPreview({ definition, previous }: { definition: FormDefinitio const changed = previous ? definitionChanges(previous, definition) : ["New definition"]; return (
-

+

{definition.title || "Untitled Form"} diff --git a/webui/src/features/forms/FormsPage.tsx b/webui/src/features/forms/FormsPage.tsx index 848e7f1..1f8aad3 100644 --- a/webui/src/features/forms/FormsPage.tsx +++ b/webui/src/features/forms/FormsPage.tsx @@ -8,12 +8,15 @@ import { ActionToolbar, DismissibleAlert, IconButton, FormField, + FilterBar, LoadingIndicator, PageScrollViewport, + StatePanel, StatusBadge, hasScope, useUnsavedChanges, useUnsavedDraftGuard, + WorkspaceFrame, type PlatformRouteContext } from "@govoplan/core-webui"; import { @@ -144,13 +147,13 @@ export default function FormsPage({ settings, auth }: PlatformRouteContext) { return (
-
- -
+ + +