Skip to content

Commit 6975e87

Browse files
πŸ“„ Update van documentatie
1 parent 6cece33 commit 6975e87

File tree

6 files changed

+160
-4
lines changed

6 files changed

+160
-4
lines changed

β€Ž_site/ontwerp-principes/index.htmlβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ <h3>2. Rijkshuisstijl als visuele basis</h3>
3636
<p>Het ontwerp volgt de Rijkshuisstijl: de visuele identiteit van de Rijksoverheid. Dit zorgt voor herkenbaarheid en vertrouwen.</p>
3737
<ul>
3838
<li><strong>Rijkslettertype</strong> β€” alle tekst wordt weergegeven in het lettertype RijksSansVF.</li>
39-
<li><strong>Kleurenpalet</strong> β€” alle kleuren komen uit het Rijkshuisstijl-palet en worden niet ad hoc gekozen. Het kleurcontrast voldoet aan de WCAG-richtlijnen.</li>
39+
<li><strong>Kleurenpalet</strong> β€” alle kleuren komen uit het Rijkshuisstijl-palet en worden niet ad hoc gekozen. Het kleurcontrast voldoet aan de WCAG-richtlijnen. Feedbackkleuren hebben een specifieke semantiek: <code>error</code> voor fouten, <code>success</code> voor bevestigingen, <code>attention</code> voor elementen die de aandacht van de gebruiker moeten trekken (zoals badges met ongelezen berichten).</li>
4040
<li><strong>Herkenbare patronen</strong> β€” de componenten sluiten aan bij wat gebruikers verwachten van een overheidswebsite: duidelijke navigatie, voorspelbare interactie en een professionele uitstraling.</li>
4141
</ul>
4242
<h3>3. Design tokens als gedeelde taal</h3>

β€Ž_site/style/style.cssβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1123,7 +1123,7 @@ summary {
11231123
padding-inline-start: var(--toepassing-space-padding-sm);
11241124
}
11251125
.status-unread h3 {
1126-
font-weight: var(--toepassing-text-font-weight-bold);
1126+
font-weight: var(--toepassing-text-font-weight-semi-bold);
11271127
}
11281128
> * + * {
11291129
margin-block-start: var(--toepassing-space-layout-xs);

β€Žontwerp-principes.mdβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ Toegankelijkheid is geen toevoeging achteraf maar een ontwerpuitgangspunt. Elk c
5252
Het ontwerp volgt de Rijkshuisstijl: de visuele identiteit van de Rijksoverheid. Dit zorgt voor herkenbaarheid en vertrouwen.
5353

5454
- **Rijkslettertype** β€” alle tekst wordt weergegeven in het lettertype RijksSansVF.
55-
- **Kleurenpalet** β€” alle kleuren komen uit het Rijkshuisstijl-palet en worden niet ad hoc gekozen. Het kleurcontrast voldoet aan de WCAG-richtlijnen.
55+
- **Kleurenpalet** β€” alle kleuren komen uit het Rijkshuisstijl-palet en worden niet ad hoc gekozen. Het kleurcontrast voldoet aan de WCAG-richtlijnen. Feedbackkleuren hebben een specifieke semantiek: `error` voor fouten, `success` voor bevestigingen, `attention` voor elementen die de aandacht van de gebruiker moeten trekken (zoals badges met ongelezen berichten).
5656
- **Herkenbare patronen** β€” de componenten sluiten aan bij wat gebruikers verwachten van een overheidswebsite: duidelijke navigatie, voorspelbare interactie en een professionele uitstraling.
5757

5858
### 3. Design tokens als gedeelde taal

β€Žstories/Berichtenbox.mdxβ€Ž

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import { Meta } from "@storybook/addon-docs/blocks";
2+
3+
<Meta title="Ontwerppatronen/Berichtenbox" />
4+
5+
# Berichtenbox
6+
7+
De Berichtenbox is de centrale plek waar ondernemers berichten ontvangen van overheidsinstanties en gemeentes. Het ontwerp simuleert het ophalen van berichten via het Federatief Berichtenstelsel (FBS): een stelsel waarin berichten bij de bron blijven en on-demand worden opgehaald.
8+
9+
## Ontwerpdoel
10+
11+
Het doel is om te onderzoeken hoe een berichtenbox eruitziet en werkt wanneer berichten niet centraal worden opgeslagen, maar worden opgehaald uit honderden bronnen (magazijnen). Dit heeft consequenties voor de gebruikerservaring: berichten moeten worden opgehaald, wat tijd kost en zichtbaar moet zijn voor de gebruiker.
12+
13+
## Ophaalanimatie
14+
15+
Bij het eerste bezoek wordt een voortgangsanimatie getoond die het ophalen van berichten uit meerdere bronnen simuleert. De animatie:
16+
17+
- Toont het aantal doorzochte bronnen en gevonden berichten
18+
- Gebruikt een zware-staart-verdeling zodat de meeste bronnen snel antwoorden maar enkele bronnen laat binnendruppelen
19+
- Duurt vier seconden
20+
- Verbergt de counter, het zoekveld en de berichtentabel totdat het laden is voltooid
21+
22+
De toolbar (counter en zoekveld) is gewrapt in een `[data-berichtenbox-toolbar]` element dat als geheel verborgen en getoond wordt.
23+
24+
## Inbox, archief en prullenbak
25+
26+
Berichten kunnen worden gearchiveerd, verwijderd of verplaatst naar mappen. De navigatie tussen inbox, archief en prullenbak verloopt via tabs. Elke view wordt volledig door JavaScript opgebouwd op basis van de state in localStorage.
27+
28+
De inbox-badge toont het aantal **ongelezen** berichten, niet het totaal.
29+
30+
## Mappen
31+
32+
Berichten kunnen worden verplaatst naar mappen via een verplaats-paneel. Er zijn twee voorgevulde mappen ("Belastingen 2025" en "Subsidies") en de gebruiker kan eigen mappen aanmaken. Bij het bekijken van een map:
33+
34+
- Wordt de juiste tab gemarkeerd met `aria-current` en `aria-selected`
35+
- Wordt de koptekst niet aangepast (blijft "Berichtenbox")
36+
- Wordt de counter-tekst vervangen door informatie over de map
37+
38+
## Demo-berichten (polling)
39+
40+
Op de inbox-pagina worden periodiek nieuwe berichten gegenereerd om real-time berichtverkeer te simuleren:
41+
42+
- **Interval**: standaard 60 seconden, configureerbaar via `?poll=5` in de URL (minimum 5 seconden)
43+
- **Limiet**: maximaal 5 demo-berichten
44+
- **Paginering**: bij elk nieuw bericht wordt het onderste bericht van de pagina verwijderd om de paginagrootte (25) te bewaren
45+
- **Detailpagina**: demo-berichten linken naar `/moza/berichtenbox/bericht-demo/` waar de inhoud uit localStorage wordt gelezen
46+
47+
## Detailpagina
48+
49+
Er zijn twee soorten detailpagina's:
50+
51+
1. **Statische pagina's** (`bericht.njk`) β€” gegenereerd door Eleventy voor elk bericht in de dataset. Permalink: `/moza/berichtenbox/bericht/msg-0001/`
52+
2. **Generieke demo-pagina** (`bericht-demo.html`) β€” leest het bericht-ID uit de URL-parameter en rendert de inhoud uit de JavaScript-state. Wordt gebruikt voor dynamisch via polling toegevoegde berichten.
53+
54+
Beide pagina's bieden dezelfde acties: archiveren, verplaatsen naar map, markeer als ongelezen en verwijderen.
55+
56+
## Filtering
57+
58+
Het zoekveld filtert berichten op afzender en onderwerp. De filtering werkt client-side op de zichtbare tabelrijen via tekstvergelijking.
59+
60+
## Bijlagen
61+
62+
Op detailpagina's wordt het laden van bijlagen gesimuleerd met een vertraging van 1,5 seconde, waarna willekeurige PDF-bestandsnamen worden getoond. In de berichtenlijst wordt een bijlage-icoon getoond voor berichten met bijlagen.
63+
64+
## Technische opbouw
65+
66+
| Bestand | Rol |
67+
|---|---|
68+
| `_data/berichtenboxData.js` | Genereert de dataset: magazijnen, berichten, mappen |
69+
| `_includes/berichtenbox-data.njk` | Include met `window.berichtenboxData` voor alle berichtenbox-pagina's |
70+
| `_includes/berichtenbox-row.njk` | Tabelrij-template voor statisch gerenderde berichten |
71+
| `_includes/berichtenbox-tabs.njk` | Tab-navigatie (inbox, archief, prullenbak, mappen) |
72+
| `assets/javascript/berichtenbox.js` | Client-side logica: state, polling, filtering, acties |
73+
| `moza/berichtenbox.html` | Inbox-pagina (gepagineerd, 25 per pagina) |
74+
| `moza/berichtenbox/bericht.njk` | Detailpagina (1 per statisch bericht via Eleventy-paginering) |
75+
| `moza/berichtenbox/bericht-demo.html` | Generieke detailpagina voor demo-berichten |
76+
| `moza/berichtenbox/berichtenbox-archief.html` | Archief-pagina |
77+
| `moza/berichtenbox/berichtenbox-prullenbak.html` | Prullenbak-pagina |
78+
79+
## State en localStorage
80+
81+
Alle berichtenbox-state wordt opgeslagen onder de localStorage-sleutel `berichtenbox` als JSON-object. De state bevat: gelezen berichten, gearchiveerde en verwijderde berichten, map-toewijzingen, eigen mappen, demo-berichten en het actuele aantal ongelezen berichten (zodat de side-nav badge ook op andere pagina's correct is).
82+
83+
Resetten kan via de resetlink op de pagina of handmatig via `localStorage.removeItem("berichtenbox")`.

β€Žstories/OverDitPrototype.mdxβ€Ž

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,79 @@ De **Relevant** en **Niet relevant** opties zijn geΓ―mplementeerd als een radio
103103

104104
De pagina **Bewaard** leest alle `favorite:` en `hidden:` sleutels uit localStorage en rendert deze als volledige, klikbare cards β€” inclusief titel, URL en beschrijving. Acties op deze pagina (verwijderen, toch relevant markeren) werken ook via localStorage en corrigeren het profiel.
105105

106+
## Berichtenbox
107+
108+
De Berichtenbox simuleert het ophalen van berichten uit meerdere bronnen (overheidsinstanties en gemeentes) via het Federatief Berichtenstelsel. Er is geen backend β€” alle data wordt gegenereerd tijdens de Eleventy-build en opgeslagen in `window.berichtenboxData`.
109+
110+
### Berichten ophalen
111+
112+
Bij het eerste bezoek aan de Berichtenbox wordt een voortgangsanimatie getoond die simuleert dat berichten worden opgehaald uit meerdere bronnen. De animatie duurt vier seconden en toont het aantal bronnen en gevonden berichten.
113+
114+
### Polling (demo-berichten)
115+
116+
Op de inbox-pagina worden periodiek nieuwe berichten gegenereerd om het "ophalen" van berichten te simuleren. Deze demo-berichten:
117+
118+
- Krijgen een `msg-live-*` ID en worden opgeslagen in localStorage
119+
- Zijn beperkt tot maximaal vijf stuks
120+
- Verschijnen bovenaan de inbox, waarna het onderste bericht naar de volgende pagina verschuift
121+
- Linken naar een generieke detailpagina (`bericht-demo.html`) die het bericht uit de state rendert
122+
123+
De polling-interval is standaard 60 seconden. Voor testen kan `?poll=5` aan de URL worden toegevoegd (minimum 5 seconden).
124+
125+
### Opgeslagen staten
126+
127+
Alle berichtenbox-state wordt bewaard onder de localStorage-sleutel `berichtenbox`:
128+
129+
<table>
130+
<thead>
131+
<tr>
132+
<th>Actie</th>
133+
<th>State-eigenschap</th>
134+
<th>Beschrijving</th>
135+
</tr>
136+
</thead>
137+
<tbody>
138+
<tr>
139+
<td><strong>Bericht gelezen</strong></td>
140+
<td><code>gelezen</code></td>
141+
<td>Object met bericht-ID's als sleutels</td>
142+
</tr>
143+
<tr>
144+
<td><strong>Archiveren</strong></td>
145+
<td><code>gearchiveerd</code></td>
146+
<td>Bericht verplaatst naar archief-tab</td>
147+
</tr>
148+
<tr>
149+
<td><strong>Verwijderen</strong></td>
150+
<td><code>verwijderd</code></td>
151+
<td>Bericht verplaatst naar prullenbak-tab</td>
152+
</tr>
153+
<tr>
154+
<td><strong>Verplaatsen naar map</strong></td>
155+
<td><code>mapOverride</code></td>
156+
<td>Bericht toegewezen aan een map</td>
157+
</tr>
158+
<tr>
159+
<td><strong>Eigen map aanmaken</strong></td>
160+
<td><code>eigenMappen</code></td>
161+
<td>Door de gebruiker aangemaakte mappen</td>
162+
</tr>
163+
<tr>
164+
<td><strong>Demo-berichten</strong></td>
165+
<td><code>nieuweBerichten</code></td>
166+
<td>Via polling binnengekomen berichten (max. 5)</td>
167+
</tr>
168+
</tbody>
169+
</table>
170+
171+
### Berichtenbox resetten
172+
173+
Op de Berichtenbox-pagina staat een resetlink (`data-berichtenbox-reset`) die alle berichtenbox-state wist en de pagina herlaadt. Handmatig kan het ook via de browserconsole:
174+
175+
```js
176+
localStorage.removeItem("berichtenbox");
177+
```
178+
106179
## Feature flags
107180

108181
Het prototype bevat een ingebouwd feature-flag systeem waarmee pagina's en functionaliteit in- of uitgeschakeld kunnen worden β€” zonder aparte versies te hoeven bouwen.

β€Žstyle/style.cssβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1123,7 +1123,7 @@ summary {
11231123
padding-inline-start: var(--toepassing-space-padding-sm);
11241124
}
11251125
.status-unread h3 {
1126-
font-weight: var(--toepassing-text-font-weight-bold);
1126+
font-weight: var(--toepassing-text-font-weight-semi-bold);
11271127
}
11281128
> * + * {
11291129
margin-block-start: var(--toepassing-space-layout-xs);

0 commit comments

Comments
Β (0)