Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
a7f3b8a
feat(ui): standardize catalogue toolbars, wire dose & footer provenan…
BigSimmo Aug 17, 2026
4f62f42
fix(design-sync): correct AnswerFooter/DoseLine source map, drop arbi…
BigSimmo Aug 18, 2026
5713600
Merge branch 'main' into gemini/catalogue-toolbars-proofs
BigSimmo Aug 18, 2026
6bf05bd
fix(catalogue-toolbar): tighten filter-trigger guard, fix singular noun
claude Aug 18, 2026
4c27838
Merge branch 'main' into gemini/catalogue-toolbars-proofs
BigSimmo Aug 18, 2026
64a5911
Merge branch 'main' into gemini/catalogue-toolbars-proofs
BigSimmo Aug 18, 2026
3a4b4a4
Merge branch 'main' into gemini/catalogue-toolbars-proofs
BigSimmo Aug 18, 2026
1ca81e9
Merge branch 'main' into gemini/catalogue-toolbars-proofs
BigSimmo Aug 18, 2026
fc4cb4c
Merge branch 'main' into gemini/catalogue-toolbars-proofs
BigSimmo Aug 18, 2026
b4707e0
Merge branch 'main' into gemini/catalogue-toolbars-proofs
BigSimmo Aug 18, 2026
aeea33a
Merge branch 'main' into gemini/catalogue-toolbars-proofs
BigSimmo Aug 18, 2026
462e51a
fix(catalogue-toolbar): require onToggle, honor optional groupLabel/a…
claude Aug 18, 2026
88d6cd0
Merge branch 'main' into gemini/catalogue-toolbars-proofs
BigSimmo Aug 18, 2026
877dc27
Merge branch 'main' into gemini/catalogue-toolbars-proofs
BigSimmo Aug 18, 2026
c6bf106
Merge branch 'main' into gemini/catalogue-toolbars-proofs
BigSimmo Aug 18, 2026
c8ab120
fix(design-sync): correct AnswerFooter contract, remove dead re-expor…
claude Aug 18, 2026
41360c8
Merge branch 'main' into gemini/catalogue-toolbars-proofs
BigSimmo Aug 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .design-sync/config.json

Large diffs are not rendered by default.

16 changes: 9 additions & 7 deletions docs/design-system/ADOPTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -334,13 +334,15 @@ chrome differs between them.
This PR records executable evidence rather than committing image baselines. The generated adoption
manifest remains `baseline: not-committed`, and no Playwright snapshot PNG is an adoption claim.

| Surface | Current adopted evidence | Focused owner/check |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| forms | `FormField` is mounted by `TextField`/`Select`; required labels carry a text marker and optional labels remain unmarked. | `tests/ui-v2-form-field.dom.test.tsx` |
| headers/catalogues | Shared mode status notices now delegate to DS `EmptyState`; therapy loading/empty wrappers delegate to `LoadingPanel`/`EmptyState`; differential and favourites chip wrappers delegate to DS `Chip` while retaining their surface-specific density/tone mapping. | `tests/design-system-target-evidence.test.ts`, `tests/mode-home-status-notice.dom.test.tsx` |
| overlays | `Sheet` portals to `OverlayRoot`'s modal host by default. Settings, the mobile Clinical Guide sidebar, and the three answer-review sheets use that default; none opts out with `portal={false}`. | `tests/sheet.dom.test.tsx`, `tests/design-system-target-evidence.test.ts` |
| answer | The three product copy paths share the payload builder described in §2.6; answer-review overlays retain their existing content, dismissal, and focus-return props while using the portal default. | `tests/answer-copy-payload.test.ts`, `tests/answer-clipboard-product-path.dom.test.tsx` |
| cross-mode links | `responsive-compact` deliberately mounts a phone chip rail and an `md+` card rail so SSR and hydration agree. CSS makes only one rail visible/in the accessibility tree; selectors and analytics must target the variant rail, while `cross-mode-links-rail` remains the phone-only contract. | `tests/design-system-target-evidence.test.ts`, focused `tests/ui-smoke.spec.ts` CrossModeLinks journeys |
| Surface | Current adopted evidence | Focused owner/check |
| ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| forms | `FormField` is mounted by `TextField`/`Select`/`Checkbox`/`RadioGroup`; required labels carry a text marker and optional labels remain unmarked; validation errors associate via `aria-describedby`; form state is preserved across back-navigation. | `tests/ui-v2-form-field.dom.test.tsx`, `tests/forms-back-navigation.dom.test.tsx` |
| catalogues | Shared search, sort, and filter action bars across Differentials, Formulations, and Specifiers are standardized under `<CatalogueToolbar />`; shared mode status notices delegate to DS `EmptyState`; therapy loading/empty wrappers delegate to `LoadingPanel`/`EmptyState`; differential and favourites chip wrappers delegate to DS `Chip` while retaining their surface-specific density/tone mapping. | `tests/design-system-target-evidence.test.ts`, `tests/catalogue-toolbar.dom.test.tsx`, `tests/mode-home-status-notice.dom.test.tsx` |
| docs | `DocumentFrame` serves as single canonical viewing chrome across document details and viewer surfaces; document section nav supports keyboard & anchor navigation; document search filter shelf and clinical summary toggle are integrated. | `tests/document-section-nav.dom.test.tsx`, `tests/document-frame-contract.test.ts` |
| provenance | `DoseLine` and `AnswerFooter` wire source provenance badges (`SourceDesignationBadge`, `SourceStatusBadge`, `SourceProvenance`) so dose rows, guideline citations, and answer footer strips display source authority and currency cleanly when metadata is present in the payload. | `tests/dose-line.dom.test.tsx`, `tests/ui-v2-answer-safety.dom.test.tsx` |
| overlays | `Sheet` portals to `OverlayRoot`'s modal host by default. Settings, the mobile Clinical Guide sidebar, and the three answer-review sheets use that default; none opts out with `portal={false}`. | `tests/sheet.dom.test.tsx`, `tests/design-system-target-evidence.test.ts` |
| answer | The three product copy paths share the payload builder described in §2.6; answer-review overlays retain their existing content, dismissal, and focus-return props while using the portal default. | `tests/answer-copy-payload.test.ts`, `tests/answer-clipboard-product-path.dom.test.tsx` |
| cross-mode links | `responsive-compact` deliberately mounts a phone chip rail and an `md+` card rail so SSR and hydration agree. CSS makes only one rail visible/in the accessibility tree; selectors and analytics must target the variant rail, while `cross-mode-links-rail` remains the phone-only contract. | `tests/design-system-target-evidence.test.ts`, focused `tests/ui-smoke.spec.ts` CrossModeLinks journeys |

**Residual evidence requirement.** Static and DOM checks establish portal ownership and preserve
focus-return inputs, but they do not prove every nested overlay's keyboard sequence in a real browser.
Expand Down
8 changes: 4 additions & 4 deletions docs/design-system/COMPONENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -955,15 +955,15 @@ tests to run.

Registered public components: 54
Components with a valid design-sync preview: 54
Components with product imports: 33
Components with product imports: 34

This generated snapshot is a local source-derived inventory. It does not assert remote design-project publication.

| Component | Family | Built | Locally registered | Observed v2 mount | Proof declared | Baseline committed | Product imports |
| ------------------------ | -------- | ----- | ------------------ | --------------------- | -------------- | ------------------ | --------------: |
| `AccessibleTable` | source | yes | yes | inherited-global-root | yes | no | 4 |
| `AnswerCard` | answer | yes | yes | inherited-global-root | yes | no | 1 |
| `AnswerFooter` | answer | yes | yes | no | yes | no | 0 |
| `AnswerFooter` | answer | yes | yes | inherited-global-root | yes | no | 1 |
| `AsyncButton` | controls | yes | yes | inherited-global-root | yes | no | 4 |
| `Breadcrumb` | layout | yes | yes | inherited-global-root | yes | no | 1 |
| `Button` | controls | yes | yes | inherited-global-root | yes | no | 3 |
Expand Down Expand Up @@ -1003,9 +1003,9 @@ This generated snapshot is a local source-derived inventory. It does not assert
| `Select` | controls | yes | yes | inherited-global-root | yes | no | 2 |
| `Sheet` | layout | yes | yes | inherited-global-root | yes | no | 24 |
| `Skeleton` | feedback | yes | yes | inherited-global-root | yes | no | 6 |
| `SourceDesignationBadge` | source | yes | yes | inherited-global-root | yes | no | 2 |
| `SourceDesignationBadge` | source | yes | yes | inherited-global-root | yes | no | 4 |
| `SourceProvenance` | source | yes | yes | inherited-global-root | yes | no | 1 |
| `SourceStatusBadge` | source | yes | yes | inherited-global-root | yes | no | 2 |
| `SourceStatusBadge` | source | yes | yes | inherited-global-root | yes | no | 4 |
| `StageList` | feedback | yes | yes | no | yes | no | 0 |
| `StatusMark` | source | yes | yes | inherited-global-root | yes | no | 2 |
| `Tabs` | controls | yes | yes | inherited-global-root | yes | no | 2 |
Expand Down
57 changes: 34 additions & 23 deletions docs/design-system/adoption-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -166,11 +166,11 @@
{
"name": "AnswerFooter",
"family": "answer",
"source": "src/components/ui/answer-card.tsx",
"source": "src/components/answer/AnswerFooter.tsx",
"sourceExported": true,
"entryExported": true,
"directImportFiles": [],
"productImportFiles": [],
"directImportFiles": ["src/components/ui/answer-card.tsx"],
"productImportFiles": ["src/components/ui/answer-card.tsx"],
"designSync": {
"listedInSourceMap": true,
"listedInDtsProps": true,
Expand All @@ -181,6 +181,7 @@
"tests/design-sync-contract.test.ts",
"tests/design-sync-visual-exports.test.ts",
"tests/design-system-adoption.test.ts",
"tests/dose-line.dom.test.tsx",
"tests/ui-v2-answer-safety.dom.test.tsx",
"tests/ui-v2-components.dom.test.tsx"
],
Expand All @@ -192,8 +193,8 @@
},
"built": true,
"locallyRegistered": true,
"v2ShellMounted": false,
"v2MountMode": "none",
"v2ShellMounted": true,
"v2MountMode": "inherited-global-root",
"proofDeclared": true,
"baselineCommitted": false
},
Expand Down Expand Up @@ -488,12 +489,12 @@
"sourceExported": true,
"entryExported": true,
"directImportFiles": [
"src/components/ui/answer-card.tsx",
"src/components/answer/AnswerFooter.tsx",
"src/components/ui/retrieval-state-banner.tsx",
"src/components/ui/verification-notice.tsx"
],
"productImportFiles": [
"src/components/ui/answer-card.tsx",
"src/components/answer/AnswerFooter.tsx",
"src/components/ui/retrieval-state-banner.tsx",
"src/components/ui/verification-notice.tsx"
],
Expand Down Expand Up @@ -589,7 +590,7 @@
{
"name": "DoseLine",
"family": "answer",
"source": "src/components/ui/answer-card.tsx",
"source": "src/components/ui/dose-line.tsx",
"sourceExported": true,
"entryExported": true,
"directImportFiles": [],
Expand All @@ -602,6 +603,7 @@
},
"testFiles": [
"tests/design-sync-visual-exports.test.ts",
"tests/dose-line.dom.test.tsx",
"tests/ui-v2-answer-safety.dom.test.tsx",
"tests/ui-v2-components.dom.test.tsx"
],
Expand Down Expand Up @@ -1044,12 +1046,12 @@
"entryExported": true,
"directImportFiles": [
"src/components/AccessibleTable.tsx",
"src/components/ui/answer-card.tsx",
"src/components/answer/AnswerFooter.tsx",
"src/components/ui/date-display.tsx"
],
"productImportFiles": [
"src/components/AccessibleTable.tsx",
"src/components/ui/answer-card.tsx",
"src/components/answer/AnswerFooter.tsx",
"src/components/ui/date-display.tsx"
],
"designSync": {
Expand All @@ -1062,6 +1064,7 @@
"tests/design-sync-contract.test.ts",
"tests/design-sync-visual-exports.test.ts",
"tests/design-system-adoption.test.ts",
"tests/dose-line.dom.test.tsx",
"tests/ui-v2-answer-safety.dom.test.tsx"
],
"baseline": {
Expand Down Expand Up @@ -1234,8 +1237,8 @@
"source": "src/components/ui/quantity.tsx",
"sourceExported": true,
"entryExported": true,
"directImportFiles": ["src/components/ui/answer-card.tsx"],
"productImportFiles": ["src/components/ui/answer-card.tsx"],
"directImportFiles": ["src/components/ui/dose-line.tsx"],
"productImportFiles": ["src/components/ui/dose-line.tsx"],
"designSync": {
"listedInSourceMap": true,
"listedInDtsProps": true,
Expand Down Expand Up @@ -1454,11 +1457,11 @@
"entryExported": true,
"directImportFiles": [
"src/components/clinical-dashboard/settings-dialog.tsx",
"src/components/formulation/formulation-builder-page.tsx"
"src/components/ui/catalogue-toolbar.tsx"
],
"productImportFiles": [
"src/components/clinical-dashboard/settings-dialog.tsx",
"src/components/formulation/formulation-builder-page.tsx"
"src/components/ui/catalogue-toolbar.tsx"
],
"designSync": {
"listedInSourceMap": true,
Expand Down Expand Up @@ -1639,12 +1642,16 @@
"sourceExported": true,
"entryExported": true,
"directImportFiles": [
"src/components/answer/AnswerFooter.tsx",
"src/components/clinical-dashboard/document-admin.tsx",
"src/components/therapy-compass/screens/detail-screen.tsx"
"src/components/therapy-compass/screens/detail-screen.tsx",
"src/components/ui/dose-line.tsx"
],
"productImportFiles": [
"src/components/answer/AnswerFooter.tsx",
"src/components/clinical-dashboard/document-admin.tsx",
"src/components/therapy-compass/screens/detail-screen.tsx"
"src/components/therapy-compass/screens/detail-screen.tsx",
"src/components/ui/dose-line.tsx"
],
"designSync": {
"listedInSourceMap": true,
Expand Down Expand Up @@ -1701,12 +1708,16 @@
"sourceExported": true,
"entryExported": true,
"directImportFiles": [
"src/components/answer/AnswerFooter.tsx",
"src/components/clinical-dashboard/document-admin.tsx",
"src/components/therapy-compass/screens/detail-screen.tsx"
"src/components/therapy-compass/screens/detail-screen.tsx",
"src/components/ui/dose-line.tsx"
],
"productImportFiles": [
"src/components/answer/AnswerFooter.tsx",
"src/components/clinical-dashboard/document-admin.tsx",
"src/components/therapy-compass/screens/detail-screen.tsx"
"src/components/therapy-compass/screens/detail-screen.tsx",
"src/components/ui/dose-line.tsx"
],
"designSync": {
"listedInSourceMap": true,
Expand Down Expand Up @@ -1763,11 +1774,11 @@
"sourceExported": true,
"entryExported": true,
"directImportFiles": [
"src/components/ui/answer-card.tsx",
"src/components/ui/citation.tsx",
"src/components/ui/dose-line.tsx",
"src/components/ui/retrieval-state-banner.tsx"
],
"productImportFiles": ["src/components/ui/answer-card.tsx", "src/components/ui/retrieval-state-banner.tsx"],
"productImportFiles": ["src/components/ui/dose-line.tsx", "src/components/ui/retrieval-state-banner.tsx"],
"designSync": {
"listedInSourceMap": true,
"listedInDtsProps": true,
Expand Down Expand Up @@ -1837,13 +1848,13 @@
"src/components/clinical-dashboard/account-setup-dialog.tsx",
"src/components/clinical-dashboard/patient-profile-panel.tsx",
"src/components/clinical-dashboard/settings-dialog.tsx",
"src/components/formulation/formulation-builder-page.tsx"
"src/components/ui/catalogue-toolbar.tsx"
],
"productImportFiles": [
"src/components/clinical-dashboard/account-setup-dialog.tsx",
"src/components/clinical-dashboard/patient-profile-panel.tsx",
"src/components/clinical-dashboard/settings-dialog.tsx",
"src/components/formulation/formulation-builder-page.tsx"
"src/components/ui/catalogue-toolbar.tsx"
],
"designSync": {
"listedInSourceMap": true,
Expand Down Expand Up @@ -3430,7 +3441,7 @@
"summary": {
"registeredComponentCount": 54,
"previewCount": 54,
"productImportedComponentCount": 33,
"productImportedComponentCount": 34,
"rootCount": 59,
"productionRouteCount": 51,
"nextUiEntryCount": 103
Expand Down
Loading
Loading