Define semantic page archetypes

This commit is contained in:
2026-08-19 14:26:25 +02:00
parent c042244da8
commit 41db78c201
18 changed files with 315 additions and 87 deletions
+8 -4
View File
@@ -3,15 +3,17 @@ function assert(condition: unknown, message = "assertion failed"): void {
}
import { renderToStaticMarkup } from "react-dom/server";
import PageActionBar from "../src/components/PageActionBar";
import PageLayout from "../src/components/PageLayout";
import { PlatformLanguageProvider } from "../src/i18n/LanguageContext";
const standaloneMarkup = renderToStaticMarkup(
<PlatformLanguageProvider>
<PageLayout
archetype="collection"
title="Shared page"
description="One page frame"
actions={<button type="button">Reload</button>}
actions={<PageActionBar variant="collection" refreshable reloadAction={<button type="button">Reload</button>} />}
error="Could not load"
success="Saved"
interfaceId="test.page"
@@ -30,13 +32,14 @@ assert(standaloneMarkup.includes("page-layout-actions"), "route actions use the
assert(standaloneMarkup.includes('data-interface-id="test.page"'), "page identity reaches the shared frame");
assert(standaloneMarkup.includes('data-help-context-id="test.page.help"'), "context help reaches the shared frame");
assert(standaloneMarkup.includes('data-help-module-id="test-module"'), "documentation ownership reaches the shared frame");
assert(standaloneMarkup.includes('data-page-archetype="collection"'), "page intent is independent from layout geometry");
assert(standaloneMarkup.includes("Could not load"), "page errors use the shared alert region");
assert(standaloneMarkup.includes("Saved"), "page success notices use the shared alert region");
assert(standaloneMarkup.includes("Page content"), "page content is preserved");
const embeddedMarkup = renderToStaticMarkup(
<PlatformLanguageProvider>
<PageLayout title="Embedded page" mode="embedded" documentationType="admin">
<PageLayout archetype="detail" title="Embedded page" mode="embedded" documentationType="admin">
Embedded content
</PageLayout>
</PlatformLanguageProvider>
@@ -50,6 +53,7 @@ assert(embeddedMarkup.includes('data-help-documentation-type="admin"'), "embedde
const workspaceMarkup = renderToStaticMarkup(
<PlatformLanguageProvider>
<PageLayout
archetype="workspace"
title="Workspace page"
description={<p className="version-line">Version 3</p>}
mode="workspace"
@@ -68,7 +72,7 @@ assert(workspaceMarkup.includes("page-layout-notices"), "additional page notices
const headerLoadingMarkup = renderToStaticMarkup(
<PlatformLanguageProvider>
<PageLayout title="Refreshing" mode="workspace" headerLoading>
<PageLayout archetype="detail" title="Refreshing" mode="workspace" headerLoading>
Stable content
</PageLayout>
</PlatformLanguageProvider>
@@ -79,7 +83,7 @@ assert(!headerLoadingMarkup.includes('aria-busy="true"'), "partial refresh does
const delegatedHeaderMarkup = renderToStaticMarkup(
<PlatformLanguageProvider>
<PageLayout title="Administration" mode="workspace" showHeader={false}>
<PageLayout archetype="workspace" title="Administration" mode="workspace" showHeader={false}>
<section><h1>Contributed administration panel</h1></section>
</PageLayout>
</PlatformLanguageProvider>