feat(cibg): WP-12 — CIBG Datablock for application data

Adopt the vendored CIBG Datablock (.data-block / .block-wrapper) as the way to
show application data:
- New app-data-block molecule (grey surface + white panel + projected rows,
  optional heading, stacked variant, aria-label) + stories.
- data-row switches to a `div[app-data-row]` attribute selector so the <dl>'s
  direct child is a native <div> (HTML5.1 dl > div > dt+dd). This makes the
  definition list axe-clean — a bare custom element between <dl> and its dt/dd
  trips axe's definition-list rule regardless of display:contents, a defect the
  dashboard shipped live. Re-enables a11y on the data-row / review-section /
  registration-summary stories (previously disabled pending this rework).
- review-section folds onto app-data-block (drops its hand-carried classes).
- registration-summary + dashboard "Persoonsgegevens (BRP)" drop app-card and
  render as datablocks; both wizards' review rows + the beroep row convert to
  the div selector.

GREEN: lint, check:tokens, 178 tests, build, build-storybook, 136 axe stories.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-02 21:25:57 +02:00
parent 947d5fa90a
commit 82fc3c493d
12 changed files with 798 additions and 654 deletions

File diff suppressed because one or more lines are too long

View File

@@ -88,21 +88,21 @@ import { IntakePolicyStore } from '@herregistratie/application/intake-policy.sto
<app-review-section i18n-heading="@@intake.sectie.buitenland" heading="Buitenland" <app-review-section i18n-heading="@@intake.sectie.buitenland" heading="Buitenland"
i18n-editAriaLabel="@@intake.buitenlandWijzigenAria" editAriaLabel="Wijzigen buitenland" i18n-editAriaLabel="@@intake.buitenlandWijzigenAria" editAriaLabel="Wijzigen buitenland"
(edit)="dispatch({ tag: 'GaNaarStap', cursor: 0 })"> (edit)="dispatch({ tag: 'GaNaarStap', cursor: 0 })">
<app-data-row i18n-key="@@intake.review.buitenNl" key="Buiten NL gewerkt" [value]="answers().buitenlandGewerkt ?? '—'" /> <div app-data-row i18n-key="@@intake.review.buitenNl" key="Buiten NL gewerkt" [value]="answers().buitenlandGewerkt ?? '—'"></div>
@if (answers().buitenlandGewerkt === 'ja') { @if (answers().buitenlandGewerkt === 'ja') {
<app-data-row i18n-key="@@intake.review.land" key="Land" [value]="answers().land ?? ''" /> <div app-data-row i18n-key="@@intake.review.land" key="Land" [value]="answers().land ?? ''"></div>
<app-data-row i18n-key="@@intake.review.buitenlandseUren" key="Buitenlandse uren" [value]="answers().buitenlandseUren ?? ''" /> <div app-data-row i18n-key="@@intake.review.buitenlandseUren" key="Buitenlandse uren" [value]="answers().buitenlandseUren ?? ''"></div>
} }
</app-review-section> </app-review-section>
<app-review-section class="app-section" i18n-heading="@@intake.sectie.werk" heading="Werk in Nederland" <app-review-section class="app-section" i18n-heading="@@intake.sectie.werk" heading="Werk in Nederland"
i18n-editAriaLabel="@@intake.werkWijzigenAria" editAriaLabel="Wijzigen werk in Nederland" i18n-editAriaLabel="@@intake.werkWijzigenAria" editAriaLabel="Wijzigen werk in Nederland"
(edit)="dispatch({ tag: 'GaNaarStap', cursor: 1 })"> (edit)="dispatch({ tag: 'GaNaarStap', cursor: 1 })">
<app-data-row i18n-key="@@intake.review.urenNl" key="Uren NL" [value]="answers().uren ?? ''" /> <div app-data-row i18n-key="@@intake.review.urenNl" key="Uren NL" [value]="answers().uren ?? ''"></div>
@if (scholingZichtbaar()) { @if (scholingZichtbaar()) {
<app-data-row i18n-key="@@intake.review.scholing" key="Aanvullende scholing" [value]="answers().scholingGevolgd ?? ''" /> <div app-data-row i18n-key="@@intake.review.scholing" key="Aanvullende scholing" [value]="answers().scholingGevolgd ?? ''"></div>
} }
@if (answers().scholingGevolgd === 'ja') { @if (answers().scholingGevolgd === 'ja') {
<app-data-row i18n-key="@@intake.review.punten" key="Nascholingspunten" [value]="answers().punten ?? ''" /> <div app-data-row i18n-key="@@intake.review.punten" key="Nascholingspunten" [value]="answers().punten ?? ''"></div>
} }
</app-review-section> </app-review-section>
} }

View File

@@ -5,7 +5,7 @@ import { HeadingComponent } from '@shared/ui/heading/heading.component';
import { AlertComponent } from '@shared/ui/alert/alert.component'; import { AlertComponent } from '@shared/ui/alert/alert.component';
import { SkeletonComponent } from '@shared/ui/skeleton/skeleton.component'; import { SkeletonComponent } from '@shared/ui/skeleton/skeleton.component';
import { DataRowComponent } from '@shared/ui/data-row/data-row.component'; import { DataRowComponent } from '@shared/ui/data-row/data-row.component';
import { CardComponent } from '@shared/ui/card/card.component'; import { DataBlockComponent } from '@shared/ui/data-block/data-block.component';
import { TaskListComponent } from '@shared/ui/task-list/task-list.component'; import { TaskListComponent } from '@shared/ui/task-list/task-list.component';
import { ApplicationListComponent } from '@shared/ui/application-list/application-list.component'; import { ApplicationListComponent } from '@shared/ui/application-list/application-list.component';
import { ApplicationLinkComponent } from '@shared/ui/application-link/application-link.component'; import { ApplicationLinkComponent } from '@shared/ui/application-link/application-link.component';
@@ -26,7 +26,7 @@ import { tasksFromProfile } from '@registratie/domain/tasks';
selector: 'app-dashboard-page', selector: 'app-dashboard-page',
imports: [ imports: [
PageShellComponent, HeadingComponent, AlertComponent, SkeletonComponent, PageShellComponent, HeadingComponent, AlertComponent, SkeletonComponent,
DataRowComponent, CardComponent, TaskListComponent, ApplicationListComponent, ApplicationLinkComponent, DataRowComponent, DataBlockComponent, TaskListComponent, ApplicationListComponent, ApplicationLinkComponent,
ChoiceListComponent, ...ASYNC, ChoiceListComponent, ...ASYNC,
RegistrationSummaryComponent, RegistrationTableComponent, AanvraagBlockComponent, RegistrationSummaryComponent, RegistrationTableComponent, AanvraagBlockComponent,
], ],
@@ -70,13 +70,11 @@ import { tasksFromProfile } from '@registratie/domain/tasks';
<div class="app-section"> <div class="app-section">
<app-registration-summary [reg]="$any(p).registration" /> <app-registration-summary [reg]="$any(p).registration" />
</div> </div>
<app-card class="app-section" i18n-heading="@@dashboard.persoonsgegevens" heading="Persoonsgegevens (BRP)"> <app-data-block class="app-section" i18n-heading="@@dashboard.persoonsgegevens" heading="Persoonsgegevens (BRP)">
<dl class="row mb-0"> <div app-data-row i18n-key="@@dashboard.straat" key="Straat" [value]="$any(p).person.adres.straat"></div>
<app-data-row i18n-key="@@dashboard.straat" key="Straat" [value]="$any(p).person.adres.straat" /> <div app-data-row i18n-key="@@dashboard.postcode" key="Postcode" [value]="$any(p).person.adres.postcode"></div>
<app-data-row i18n-key="@@dashboard.postcode" key="Postcode" [value]="$any(p).person.adres.postcode" /> <div app-data-row i18n-key="@@dashboard.woonplaats" key="Woonplaats" [value]="$any(p).person.adres.woonplaats"></div>
<app-data-row i18n-key="@@dashboard.woonplaats" key="Woonplaats" [value]="$any(p).person.adres.woonplaats" /> </app-data-block>
</dl>
</app-card>
</section> </section>
</ng-template> </ng-template>
<ng-template appAsyncLoading> <ng-template appAsyncLoading>

View File

@@ -122,8 +122,8 @@ const NL_TAALVAARDIGHEID_VRAAG = 'nl-taalvaardigheid';
[ngModel]="draft().beroep ?? ''" (ngModelChange)="dispatch({ tag: 'DeclareerBeroep', beroep: $event })" /> [ngModel]="draft().beroep ?? ''" (ngModelChange)="dispatch({ tag: 'DeclareerBeroep', beroep: $event })" />
</app-form-field> </app-form-field>
} @else if (draft().beroep) { } @else if (draft().beroep) {
<dl class="row mb-0 app-section"> <dl class="mb-0 app-section">
<app-data-row i18n-key="@@regWizard.beroepAfgeleid" key="Beroep (afgeleid uit diploma)" [value]="draft().beroep ?? ''" /> <div app-data-row i18n-key="@@regWizard.beroepAfgeleid" key="Beroep (afgeleid uit diploma)" [value]="draft().beroep ?? ''"></div>
</dl> </dl>
} }
@@ -162,20 +162,20 @@ const NL_TAALVAARDIGHEID_VRAAG = 'nl-taalvaardigheid';
<app-review-section i18n-heading="@@regWizard.sectie.adres" heading="Adres en correspondentie" <app-review-section i18n-heading="@@regWizard.sectie.adres" heading="Adres en correspondentie"
i18n-editAriaLabel="@@regWizard.adresWijzigenAria" editAriaLabel="Wijzigen adresgegevens" i18n-editAriaLabel="@@regWizard.adresWijzigenAria" editAriaLabel="Wijzigen adresgegevens"
(edit)="dispatch({ tag: 'GaNaarStap', cursor: 0 })"> (edit)="dispatch({ tag: 'GaNaarStap', cursor: 0 })">
<app-data-row i18n-key="@@regWizard.summary.adres" key="Adres" [value]="adresSamenvatting()" /> <div app-data-row i18n-key="@@regWizard.summary.adres" key="Adres" [value]="adresSamenvatting()"></div>
<app-data-row i18n-key="@@regWizard.summary.herkomstAdres" key="Herkomst adres" [value]="adresHerkomstLabel()" /> <div app-data-row i18n-key="@@regWizard.summary.herkomstAdres" key="Herkomst adres" [value]="adresHerkomstLabel()"></div>
<app-data-row i18n-key="@@regWizard.summary.correspondentie" key="Correspondentie" [value]="correspondentieLabel()" /> <div app-data-row i18n-key="@@regWizard.summary.correspondentie" key="Correspondentie" [value]="correspondentieLabel()"></div>
@if (draft().correspondentie === 'email') { @if (draft().correspondentie === 'email') {
<app-data-row i18n-key="@@regWizard.summary.email" key="E-mailadres" [value]="draft().email ?? ''" /> <div app-data-row i18n-key="@@regWizard.summary.email" key="E-mailadres" [value]="draft().email ?? ''"></div>
} }
</app-review-section> </app-review-section>
<app-review-section class="app-section" i18n-heading="@@regWizard.sectie.beroep" heading="Beroep en diploma" <app-review-section class="app-section" i18n-heading="@@regWizard.sectie.beroep" heading="Beroep en diploma"
i18n-editAriaLabel="@@regWizard.diplomaWijzigenAria" editAriaLabel="Wijzigen beroep en diploma" i18n-editAriaLabel="@@regWizard.diplomaWijzigenAria" editAriaLabel="Wijzigen beroep en diploma"
(edit)="dispatch({ tag: 'GaNaarStap', cursor: 1 })"> (edit)="dispatch({ tag: 'GaNaarStap', cursor: 1 })">
<app-data-row i18n-key="@@regWizard.summary.beroep" key="Beroep" [value]="draft().beroep ?? ''" /> <div app-data-row i18n-key="@@regWizard.summary.beroep" key="Beroep" [value]="draft().beroep ?? ''"></div>
<app-data-row i18n-key="@@regWizard.summary.herkomstDiploma" key="Herkomst diploma" [value]="diplomaHerkomstLabel()" /> <div app-data-row i18n-key="@@regWizard.summary.herkomstDiploma" key="Herkomst diploma" [value]="diplomaHerkomstLabel()"></div>
@for (item of samenvattingVragen(); track item.vraag) { @for (item of samenvattingVragen(); track item.vraag) {
<app-data-row [key]="item.vraag" [value]="item.antwoord" /> <div app-data-row [key]="item.vraag" [value]="item.antwoord"></div>
} }
</app-review-section> </app-review-section>
} }

View File

@@ -4,38 +4,37 @@ import { Registration } from '@registratie/domain/registration';
import { statusColor, statusLabel } from '@registratie/domain/registration.policy'; import { statusColor, statusLabel } from '@registratie/domain/registration.policy';
import { DataRowComponent } from '@shared/ui/data-row/data-row.component'; import { DataRowComponent } from '@shared/ui/data-row/data-row.component';
import { StatusBadgeComponent } from '@shared/ui/status-badge/status-badge.component'; import { StatusBadgeComponent } from '@shared/ui/status-badge/status-badge.component';
import { CardComponent } from '@shared/ui/card/card.component'; import { DataBlockComponent } from '@shared/ui/data-block/data-block.component';
/** Organism: registration summary card. Composes data-row molecules + status-badge atom. */ /** Organism: registration summary in a CIBG Datablock. Composes data-row rows +
status-badge atom (no card wrapper — the datablock carries its own surface). */
@Component({ @Component({
selector: 'app-registration-summary', selector: 'app-registration-summary',
imports: [DatePipe, DataRowComponent, StatusBadgeComponent, CardComponent], imports: [DatePipe, DataRowComponent, StatusBadgeComponent, DataBlockComponent],
template: ` template: `
<app-card> <app-data-block i18n-ariaLabel="@@summary.ariaLabel" ariaLabel="Registratiegegevens">
<dl class="row mb-0"> <div app-data-row i18n-key="@@summary.bigNummer" key="BIG-nummer" [value]="reg().bigNummer"></div>
<app-data-row i18n-key="@@summary.bigNummer" key="BIG-nummer" [value]="reg().bigNummer" /> <div app-data-row i18n-key="@@summary.naam" key="Naam" [value]="reg().naam"></div>
<app-data-row i18n-key="@@summary.naam" key="Naam" [value]="reg().naam" /> <div app-data-row i18n-key="@@summary.beroep" key="Beroep" [value]="reg().beroep"></div>
<app-data-row i18n-key="@@summary.beroep" key="Beroep" [value]="reg().beroep" /> <div app-data-row i18n-key="@@summary.status" key="Status">
<app-data-row i18n-key="@@summary.status" key="Status"> <app-status-badge [label]="label()" [color]="color()" />
<app-status-badge [label]="label()" [color]="color()" /> </div>
</app-data-row> <div app-data-row i18n-key="@@summary.registratiedatum" key="Registratiedatum" [value]="reg().registratiedatum | date:'longDate'"></div>
<app-data-row i18n-key="@@summary.registratiedatum" key="Registratiedatum" [value]="reg().registratiedatum | date:'longDate'" /> <!-- Each status variant renders only the row its own data supports. -->
<!-- Each status variant renders only the row its own data supports. --> @switch (reg().status.tag) {
@switch (reg().status.tag) { @case ('Geregistreerd') {
@case ('Geregistreerd') { <div app-data-row i18n-key="@@summary.uiterste" key="Uiterste herregistratie" [value]="$any(reg().status).herregistratieDatum | date:'longDate'"></div>
<app-data-row i18n-key="@@summary.uiterste" key="Uiterste herregistratie" [value]="$any(reg().status).herregistratieDatum | date:'longDate'" />
}
@case ('Geschorst') {
<app-data-row i18n-key="@@summary.geschorstTot" key="Geschorst tot" [value]="$any(reg().status).geschorstTot | date:'longDate'" />
<app-data-row i18n-key="@@summary.reden" key="Reden" [value]="$any(reg().status).reden" />
}
@case ('Doorgehaald') {
<app-data-row i18n-key="@@summary.doorgehaaldOp" key="Doorgehaald op" [value]="$any(reg().status).doorgehaaldOp | date:'longDate'" />
<app-data-row i18n-key="@@summary.reden" key="Reden" [value]="$any(reg().status).reden" />
}
} }
</dl> @case ('Geschorst') {
</app-card> <div app-data-row i18n-key="@@summary.geschorstTot" key="Geschorst tot" [value]="$any(reg().status).geschorstTot | date:'longDate'"></div>
<div app-data-row i18n-key="@@summary.reden" key="Reden" [value]="$any(reg().status).reden"></div>
}
@case ('Doorgehaald') {
<div app-data-row i18n-key="@@summary.doorgehaaldOp" key="Doorgehaald op" [value]="$any(reg().status).doorgehaaldOp | date:'longDate'"></div>
<div app-data-row i18n-key="@@summary.reden" key="Reden" [value]="$any(reg().status).reden"></div>
}
}
</app-data-block>
`, `,
}) })
export class RegistrationSummaryComponent { export class RegistrationSummaryComponent {

View File

@@ -13,16 +13,11 @@ const base = {
const meta: Meta<RegistrationSummaryComponent> = { const meta: Meta<RegistrationSummaryComponent> = {
title: 'Organisms/Registration Summary', title: 'Organisms/Registration Summary',
component: RegistrationSummaryComponent, component: RegistrationSummaryComponent,
parameters: {
// Structural: app-data-row's host sits between the <dl> and its <dt>/<dd> —
// fixed by the WP-12 Datablock rework. See docs/backlog/WP-12-datablock.md.
a11y: { disable: true },
},
}; };
export default meta; export default meta;
type Story = StoryObj<RegistrationSummaryComponent>; type Story = StoryObj<RegistrationSummaryComponent>;
// Each story feeds a different union variant; the card renders only the rows // Each story feeds a different union variant; the datablock renders only the rows
// that variant's data supports (note Doorgehaald has no herregistratie date). // that variant's data supports (note Doorgehaald has no herregistratie date).
export const Geregistreerd: Story = { export const Geregistreerd: Story = {
args: { reg: { ...base, status: { tag: 'Geregistreerd', herregistratieDatum: '2027-09-01' } } }, args: { reg: { ...base, status: { tag: 'Geregistreerd', herregistratieDatum: '2027-09-01' } } },

View File

@@ -0,0 +1,33 @@
import { Component, input } from '@angular/core';
import { HeadingComponent } from '@shared/ui/heading/heading.component';
/** Molecule: CIBG Huisstijl **Datablock** (designsystem.cibg.nl/componenten/datablock)
— THE way to show user/application data. A grey `.data-block` surface holds a white
`.block-wrapper` panel with a `<dl>` of projected `<app-data-row>`s. Use `stacked`
(`.data-block--stacked`) when labels/values are long and should stack. Replaces the
`app-card + dl` idiom for data views (the datablock carries its own surface, so it is
NOT wrapped in an `app-card` — see WP-12). When there is no visible `heading`, pass an
`ariaLabel` so the definition list is announced. */
@Component({
selector: 'app-data-block',
imports: [HeadingComponent],
template: `
@if (heading()) { <app-heading [level]="level()">{{ heading() }}</app-heading> }
<div class="data-block" [class.data-block--stacked]="stacked()">
<div class="block-wrapper">
<dl class="mb-0" [attr.aria-label]="ariaLabel() || null">
<ng-content />
</dl>
</div>
</div>
`,
})
export class DataBlockComponent {
heading = input('');
/** Heading level when `heading` is set (default h3, matching `app-card`). */
level = input<1 | 2 | 3 | 4 | 5>(3);
/** Stacks label above value (`.data-block--stacked`) for long content. */
stacked = input(false);
/** Accessible name for the `<dl>` when there is no visible heading. */
ariaLabel = input('');
}

View File

@@ -0,0 +1,26 @@
import type { Meta, StoryObj } from '@storybook/angular';
import { moduleMetadata } from '@storybook/angular';
import { DataBlockComponent } from './data-block.component';
import { DataRowComponent } from '@shared/ui/data-row/data-row.component';
const meta: Meta<DataBlockComponent> = {
title: 'Molecules/Data Block',
component: DataBlockComponent,
decorators: [moduleMetadata({ imports: [DataRowComponent] })],
render: (args) => ({
props: args,
template: `
<app-data-block [heading]="heading" [stacked]="stacked" [ariaLabel]="ariaLabel">
<div app-data-row key="BIG-nummer" value="19012345601"></div>
<div app-data-row key="Naam" value="J. de Vries"></div>
<div app-data-row key="Beroep" value="Verpleegkundige"></div>
<div app-data-row key="Registratiedatum" value="1 maart 2018"></div>
</app-data-block>`,
}),
};
export default meta;
type Story = StoryObj<DataBlockComponent>;
export const Default: Story = { args: { heading: 'Persoonsgegevens (BRP)' } };
export const ZonderKop: Story = { args: { ariaLabel: 'Registratiegegevens' } };
export const Stacked: Story = { args: { heading: 'Toelichting', stacked: true } };

View File

@@ -1,12 +1,17 @@
import { Component, input } from '@angular/core'; import { Component, input } from '@angular/core';
/** Molecule: one key/value row in a CIBG Huisstijl "controlestap" data summary /** Molecule: one key/value row inside a CIBG Huisstijl **Datablock** (see
(`dt.col-md-4` / `dd.col-md-8`). `display:contents` so the dt/dd become direct `data-block.component.ts`) — the row primitive of the datablock/`controlestap`
flex children of the parent `<dl class="row">` — the Bootstrap grid classes data summary. Used on a `<div>` so the `<dl>`'s direct child is a native element
need that to lay out correctly. Wrap several in a `<dl class="row mb-0">`. */ (the HTML5.1 `dl > div > dt + dd` grouping), which keeps the definition list
axe-clean — a bare custom element between `<dl>` and its `<dt>/<dd>` trips axe's
definition-list rule regardless of `display:contents`. The host is the Bootstrap
`.row`; `dt.col-md-4`/`dd.col-md-8` give the label/value widths. Wrap several in a
`<dl class="mb-0">` (a `<app-data-block>`). Project custom content (e.g. a badge)
into the `<dd>` via `<ng-content>`. */
@Component({ @Component({
selector: 'app-data-row', selector: 'div[app-data-row]',
styles: [`:host{display:contents}`], host: { class: 'row' },
template: ` template: `
<dt class="col-md-4">{{ key() }}</dt> <dt class="col-md-4">{{ key() }}</dt>
<dd class="col-md-8"><ng-content>{{ value() }}</ng-content></dd> <dd class="col-md-8"><ng-content>{{ value() }}</ng-content></dd>

View File

@@ -6,16 +6,11 @@ const meta: Meta<DataRowComponent> = {
component: DataRowComponent, component: DataRowComponent,
render: (args) => ({ render: (args) => ({
props: args, props: args,
// Rows are dt.col-md-4/dd.col-md-8 flex children of a Bootstrap .row dl (CIBG controlestap). // A row is a `.row` <div> grouping dt.col-md-4/dd.col-md-8 inside the datablock <dl>
template: `<dl class="row mb-0"><app-data-row [key]="key" [value]="value" /></dl>`, // (HTML5.1 dl > div > dt+dd — a native div child keeps the definition list axe-clean).
template: `<dl class="mb-0"><div app-data-row [key]="key" [value]="value"></div></dl>`,
}), }),
args: { key: 'BIG-nummer', value: '19012345601' }, args: { key: 'BIG-nummer', value: '19012345601' },
parameters: {
// Structural: app-data-row's host sits between the <dl> and its <dt>/<dd> —
// axe's definition-list rule needs them adjacent regardless of `display:contents`.
// WP-12 (CIBG Datablock) reworks this markup; see docs/backlog/WP-12-datablock.md.
a11y: { disable: true },
},
}; };
export default meta; export default meta;
type Story = StoryObj<DataRowComponent>; type Story = StoryObj<DataRowComponent>;

View File

@@ -1,11 +1,13 @@
import { Component, input, output } from '@angular/core'; import { Component, input, output } from '@angular/core';
import { DataBlockComponent } from '@shared/ui/data-block/data-block.component';
/** Molecule: one section of a CIBG Huisstijl "controlestap" (wizard review step) — /** Molecule: one section of a CIBG Huisstijl "controlestap" (wizard review step) —
a heading with a "Wijzigen" link, and the section's `<app-data-row>`s in a a heading with a "Wijzigen" link, and the section's `<app-data-row>`s in a CIBG
`.data-block > .block-wrapper > dl.row`. Domain-free; the caller supplies the Datablock (composes `<app-data-block>`). Domain-free; the caller supplies the
heading and decides what "Wijzigen" does (typically jump back to a step). */ heading and decides what "Wijzigen" does (typically jump back to a step). */
@Component({ @Component({
selector: 'app-review-section', selector: 'app-review-section',
imports: [DataBlockComponent],
template: ` template: `
<div class="d-flex"> <div class="d-flex">
<h2>{{ heading() }}</h2> <h2>{{ heading() }}</h2>
@@ -15,13 +17,7 @@ import { Component, input, output } from '@angular/core';
</div> </div>
} }
</div> </div>
<div class="data-block"> <app-data-block><ng-content /></app-data-block>
<div class="block-wrapper">
<dl class="row mb-0">
<ng-content />
</dl>
</div>
</div>
`, `,
}) })
export class ReviewSectionComponent { export class ReviewSectionComponent {

View File

@@ -11,16 +11,11 @@ const meta: Meta<ReviewSectionComponent> = {
props: args, props: args,
template: ` template: `
<app-review-section [heading]="heading" [editLabel]="editLabel" [editAriaLabel]="editAriaLabel" [showEdit]="showEdit"> <app-review-section [heading]="heading" [editLabel]="editLabel" [editAriaLabel]="editAriaLabel" [showEdit]="showEdit">
<app-data-row key="Straat en huisnummer" value="Dorpsstraat 1" /> <div app-data-row key="Straat en huisnummer" value="Dorpsstraat 1"></div>
<app-data-row key="Postcode" value="1234 AB" /> <div app-data-row key="Postcode" value="1234 AB"></div>
<app-data-row key="Woonplaats" value="Utrecht" /> <div app-data-row key="Woonplaats" value="Utrecht"></div>
</app-review-section>`, </app-review-section>`,
}), }),
parameters: {
// Structural: app-data-row's host sits between the <dl> and its <dt>/<dd> —
// fixed by the WP-12 Datablock rework. See docs/backlog/WP-12-datablock.md.
a11y: { disable: true },
},
}; };
export default meta; export default meta;
type Story = StoryObj<ReviewSectionComponent>; type Story = StoryObj<ReviewSectionComponent>;