function assert(condition: unknown, message = "assertion failed"): void { if (!condition) throw new Error(message); } import { renderToStaticMarkup } from "react-dom/server"; import ActionToolbar, { ToolbarGroup, ToolbarSpacer } from "../src/components/ActionToolbar"; import ContentGrid, { FormGrid, FormLayout, GridItem } from "../src/components/ContentGrid"; import ContentSection from "../src/components/ContentSection"; import Dialog from "../src/components/Dialog"; import { DialogForm, DialogSection } from "../src/components/DialogAnatomy"; import DescriptionList, { DescriptionItem } from "../src/components/DescriptionList"; import DefinitionNodeIcon from "../src/components/DefinitionNodeIcon"; import DefinitionPalette, { DefinitionPaletteGroup, DefinitionPaletteItem } from "../src/components/DefinitionPalette"; import FilterBar from "../src/components/FilterBar"; import FloatingStatus from "../src/components/FloatingStatus"; import FormSection from "../src/components/FormSection"; import { PlatformLanguageProvider } from "../src/i18n/LanguageContext"; import MetricGrid from "../src/components/MetricGrid"; import PageActionBar from "../src/components/PageActionBar"; import SelectionList, { SelectionListItem, SelectionListItemContent } from "../src/components/SelectionList"; import StatePanel from "../src/components/StatePanel"; import WorkspaceLayout from "../src/components/WorkspaceLayout"; import WorkspaceFrame from "../src/components/WorkspaceFrame"; // @ts-expect-error Refreshable pages must provide a Reload action. const refreshableWithoutReload = ; // @ts-expect-error Editor pages must declare dirty state and persistence actions. const editorWithoutPersistence = ; void refreshableWithoutReload; void editorWithoutPersistence; const toolbarMarkup = renderToStaticMarkup( Filters Actions ); assert(toolbarMarkup.includes("action-toolbar-wrap-responsive"), "toolbars use the responsive central wrapping policy by default"); assert(toolbarMarkup.includes('role="toolbar"'), "named toolbars expose toolbar semantics"); assert(toolbarMarkup.includes('aria-label="Object actions"'), "named toolbars expose their accessible name"); assert(toolbarMarkup.includes('data-help-scope="toolbar"'), "toolbar help scope is centralized"); assert(toolbarMarkup.includes("action-toolbar-group-grow"), "toolbar groups can own flexible space"); assert(toolbarMarkup.includes("action-toolbar-justify-between"), "toolbar distribution is centrally controlled"); assert(toolbarMarkup.includes("action-toolbar-spacer"), "the standard action spacer is available"); const editorActionBarMarkup = renderToStaticMarkup( Reload} contextActions={} helpAction={} destructiveActions={} discardAction={{ label: "Discard" }} saveAction={{ label: "Save" }} /> ); assert(editorActionBarMarkup.includes('data-page-action-archetype="editor"'), "page action bars expose their semantic archetype"); assert(editorActionBarMarkup.includes('aria-label="Editor actions"'), "page action bars are named toolbars"); assert(editorActionBarMarkup.includes('data-page-refreshable="true"'), "refreshable pages expose their refresh contract"); assert(editorActionBarMarkup.includes('data-page-dirty="true"'), "editors expose their dirty state"); assert(editorActionBarMarkup.includes('data-page-dirty-state="dirty"'), "dirty editors announce unsaved changes"); assert(editorActionBarMarkup.indexOf('data-page-action-slot="reload"') < editorActionBarMarkup.indexOf('data-page-action-slot="context"'), "reload precedes contextual actions"); assert(editorActionBarMarkup.indexOf('data-page-action-slot="help"') < editorActionBarMarkup.indexOf('data-page-action-slot="discard"'), "help precedes editor persistence actions"); assert(editorActionBarMarkup.indexOf('data-page-action-slot="destructive"') < editorActionBarMarkup.indexOf('data-page-action-slot="discard"'), "destructive editor actions are separated from persistence actions"); assert(editorActionBarMarkup.includes('data-page-action-separation="destructive"'), "destructive actions expose their visual boundary"); assert(editorActionBarMarkup.indexOf('data-page-action-slot="discard"') < editorActionBarMarkup.indexOf('data-page-action-slot="save"'), "save remains the far-right editor action"); const cleanEditorActionBarMarkup = renderToStaticMarkup( ); assert(cleanEditorActionBarMarkup.includes('data-page-dirty-state="clean"'), "clean editors announce their persisted state"); assert((cleanEditorActionBarMarkup.match(/disabled=""/g) ?? []).length === 2, "clean editors keep Save and Discard visible but disabled"); assert((cleanEditorActionBarMarkup.match(/disabled-action-tooltip/g) ?? []).length === 2, "clean editor actions expose explanations for unavailable persistence"); const collectionActionBarMarkup = renderToStaticMarkup( Reload} createAction={} /> ); assert(collectionActionBarMarkup.indexOf('data-page-action-slot="reload"') < collectionActionBarMarkup.indexOf('data-page-action-slot="create"'), "collection creation remains the far-right action"); const gridMarkup = renderToStaticMarkup( A B C ); assert(gridMarkup.includes("content-grid-columns-3"), "content grids expose explicit column geometry"); assert(gridMarkup.includes("content-grid-collapse-wide"), "content grids expose explicit collapse ownership"); assert(gridMarkup.includes("content-grid-item-full"), "grid items can span the complete layout"); const sectionMarkup = renderToStaticMarkup(Section); assert(sectionMarkup.includes("content-section-spacing-block"), "content sections own standard block rhythm"); assert(sectionMarkup.includes("content-section-surface-subtle"), "content sections expose central surface variants"); assert(sectionMarkup.includes("content-section-layout-stack"), "content sections can own compact stacked evidence anatomy"); const metricMarkup = renderToStaticMarkup(
Open
Closed
); assert(metricMarkup.includes("metric-group-columns-auto"), "metric groups own responsive column geometry"); assert(metricMarkup.includes("metric-group-spacing-inset"), "metric groups own their surrounding rhythm"); assert(metricMarkup.includes("metric-group-collapse-standard"), "metric groups expose explicit collapse ownership"); const descriptionMarkup = renderToStaticMarkup( Ready ); assert(descriptionMarkup.startsWith('
Status
Ready
"), "description items preserve term and description anatomy"); const inlineDescriptionMarkup = renderToStaticMarkup( Ada ); assert(inlineDescriptionMarkup.includes("description-list-columns-1"), "inline description lists default to one list column"); assert(inlineDescriptionMarkup.includes("description-list-term-compact"), "inline description lists centralize term sizing"); const workspaceMarkup = renderToStaticMarkup( } > Create} /> ); assert(workspaceMarkup.includes("workspace-layout-surface-contained"), "bounded list-detail workspaces share their surface anatomy"); assert(workspaceMarkup.includes("selection-list-navigation"), "resource navigation lists share selection geometry"); assert(workspaceMarkup.includes("selection-list-item-content"), "selection-list copy owns title and description typography"); assert(workspaceMarkup.includes("state-panel-size-fill"), "whole-surface states share sizing and action anatomy"); const frameMarkup = renderToStaticMarkup( Body ); assert(frameMarkup.includes("workspace-frame-surface-panel"), "full-height module frames share overflow and surface anatomy"); assert(frameMarkup.startsWith(" DB} label="Database" /> Working... ); assert(definitionMarkup.includes("definition-palette-items"), "definition editors share bounded palette anatomy"); assert(definitionMarkup.includes("definition-node-icon"), "definition nodes share icon geometry"); assert(definitionMarkup.includes("floating-status"), "floating activity state uses the central overlay"); const filterMarkup = renderToStaticMarkup( ); assert(filterMarkup.startsWith('
Reset}> ); assert(formMarkup.includes("form-section-header"), "form sections centralize heading and action placement"); assert(formMarkup.includes("form-grid-layout"), "forms compose the central content grid"); assert(formMarkup.includes("content-grid-columns-2"), "form columns remain explicit"); const formElementMarkup = renderToStaticMarkup(); assert(formElementMarkup.startsWith(' Draft} size="wide" variant="administration" footer={<>} > Fields ); assert(dialogMarkup.includes("dialog-panel-size-wide"), "dialog size is owned by the central anatomy"); assert(dialogMarkup.includes("dialog-panel-administration"), "dialog variants are explicit"); assert(dialogMarkup.includes("dialog-description"), "dialog introductions use the central region"); assert(dialogMarkup.includes("dialog-notices"), "dialog notices use the central region"); assert(dialogMarkup.includes("dialog-actions dialog-actions-end"), "every dialog footer composes the central action layout"); assert(dialogMarkup.includes("dialog-form-layout"), "dialog forms use the central vertical flow"); assert(dialogMarkup.includes("dialog-section-inset"), "dialog sections use central grouping variants");