@amsterdam/design-system-css 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +1 -1
  2. package/dist/accordion/accordion.css +1 -69
  3. package/dist/accordion/accordion.css.map +1 -1
  4. package/dist/blockquote/blockquote.css +1 -0
  5. package/dist/blockquote/blockquote.css.map +1 -0
  6. package/dist/breadcrumb/breadcrumb.css +1 -0
  7. package/dist/breadcrumb/breadcrumb.css.map +1 -0
  8. package/dist/button/button.css +1 -706
  9. package/dist/button/button.css.map +1 -1
  10. package/dist/checkbox/checkbox.css +1 -0
  11. package/dist/checkbox/checkbox.css.map +1 -0
  12. package/dist/footer/footer.css +1 -0
  13. package/dist/footer/footer.css.map +1 -0
  14. package/dist/form-label/form-label.css +1 -26
  15. package/dist/form-label/form-label.css.map +1 -1
  16. package/dist/grid/grid-cell.css +1 -0
  17. package/dist/grid/grid-cell.css.map +1 -0
  18. package/dist/grid/page-grid.css +1 -0
  19. package/dist/grid/page-grid.css.map +1 -0
  20. package/dist/heading/heading.css +1 -64
  21. package/dist/heading/heading.css.map +1 -1
  22. package/dist/icon/icon.css +1 -122
  23. package/dist/icon/icon.css.map +1 -1
  24. package/dist/index.css +1 -0
  25. package/dist/index.css.map +1 -0
  26. package/dist/link/link.css +1 -97
  27. package/dist/link/link.css.map +1 -1
  28. package/dist/ordered-list/ordered-list.css +1 -0
  29. package/dist/ordered-list/ordered-list.css.map +1 -0
  30. package/dist/page-heading/page-heading.css +1 -0
  31. package/dist/page-heading/page-heading.css.map +1 -0
  32. package/dist/page-menu/page-menu.css +1 -0
  33. package/dist/page-menu/page-menu.css.map +1 -0
  34. package/dist/paragraph/paragraph.css +1 -49
  35. package/dist/paragraph/paragraph.css.map +1 -1
  36. package/dist/testula/testula.css +9 -0
  37. package/dist/testula/testula.css.map +1 -0
  38. package/dist/top-task-link/top-task-link.css +1 -0
  39. package/dist/top-task-link/top-task-link.css.map +1 -0
  40. package/dist/unordered-list/unordered-list.css +1 -47
  41. package/dist/unordered-list/unordered-list.css.map +1 -1
  42. package/dist/visually-hidden/visually-hidden.css +1 -0
  43. package/dist/visually-hidden/visually-hidden.css.map +1 -0
  44. package/package.json +7 -6
  45. package/src/accordion/README.md +25 -2
  46. package/src/accordion/accordion.scss +2 -2
  47. package/src/blockquote/README.md +14 -0
  48. package/src/blockquote/blockquote.scss +41 -0
  49. package/src/breadcrumb/README.md +15 -0
  50. package/src/breadcrumb/breadcrumb.scss +68 -0
  51. package/src/button/button.scss +36 -4
  52. package/src/checkbox/README.md +1 -0
  53. package/src/checkbox/checkbox.scss +225 -0
  54. package/src/footer/README.md +11 -0
  55. package/src/footer/footer-css.md +11 -0
  56. package/src/footer/footer.scss +29 -0
  57. package/src/form-label/form-label.scss +2 -2
  58. package/src/grid/README.md +11 -0
  59. package/src/grid/grid-cell.scss +18 -0
  60. package/src/grid/page-grid.scss +19 -0
  61. package/src/heading/heading.scss +18 -15
  62. package/src/icon/icon.scss +10 -10
  63. package/src/index.scss +19 -0
  64. package/src/link/README.md +28 -12
  65. package/src/link/link.scss +61 -36
  66. package/src/ordered-list/README.md +7 -0
  67. package/src/ordered-list/ordered-list.scss +53 -0
  68. package/src/page-heading/README.md +16 -0
  69. package/src/page-heading/page-heading.scss +31 -0
  70. package/src/page-menu/README.md +15 -0
  71. package/src/page-menu/page-menu.scss +77 -0
  72. package/src/paragraph/paragraph.scss +12 -8
  73. package/src/top-task-link/README.md +13 -0
  74. package/src/top-task-link/top-task-link.scss +55 -0
  75. package/src/unordered-list/README.md +5 -13
  76. package/src/unordered-list/unordered-list.scss +26 -17
  77. package/src/visually-hidden/README.md +5 -0
  78. package/src/visually-hidden/visually-hidden.scss +17 -0
  79. package/dist/list/list.css +0 -12
  80. package/dist/list/list.css.map +0 -1
  81. package/src/list/list.scss +0 -16
@@ -1,49 +1 @@
1
- /**
2
- * @license EUPL-1.2+
3
- * Copyright (c) 2023 Gemeente Amsterdam
4
- */
5
- /**
6
- * @license EUPL-1.2+
7
- * Copyright (c) 2023 Gemeente Amsterdam
8
- */
9
- /*
10
- The breakpoint is 854px / 16 = 53.375rems
11
- https://developer.mozilla.org/en-US/docs/Web/CSS/@media#accessibility_concerns
12
- */
13
- .amsterdam-paragraph {
14
- color: var(--amsterdam-paragraph-color);
15
- font-family: var(--amsterdam-paragraph-font-family);
16
- font-size: var(--amsterdam-paragraph-font-size-narrow);
17
- font-weight: var(--amsterdam-paragraph-font-weight);
18
- line-height: var(--amsterdam-paragraph-line-height);
19
- box-sizing: border-box;
20
- margin-block: 0;
21
- -webkit-text-size-adjust: 100%;
22
- }
23
- @media screen and (width > 53.375rem) {
24
- .amsterdam-paragraph {
25
- font-size: var(--amsterdam-paragraph-font-size-wide);
26
- }
27
- }
28
-
29
- .amsterdam-paragraph-small {
30
- font-size: var(--amsterdam-paragraph-small-font-size-narrow);
31
- line-height: var(--amsterdam-paragraph-small-line-height);
32
- }
33
- @media screen and (width > 53.375rem) {
34
- .amsterdam-paragraph-small {
35
- font-size: var(--amsterdam-paragraph-small-font-size-wide);
36
- }
37
- }
38
-
39
- .amsterdam-paragraph-large {
40
- font-size: var(--amsterdam-paragraph-large-font-size-narrow);
41
- line-height: var(--amsterdam-paragraph-large-line-height);
42
- }
43
- @media screen and (width > 53.375rem) {
44
- .amsterdam-paragraph-large {
45
- font-size: var(--amsterdam-paragraph-large-font-size-wide);
46
- }
47
- }
48
-
49
- /*# sourceMappingURL=paragraph.css.map */
1
+ .amsterdam-paragraph{color:var(--amsterdam-paragraph-color);font-family:var(--amsterdam-paragraph-font-family);font-size:var(--amsterdam-paragraph-narrow-font-size);font-weight:var(--amsterdam-paragraph-font-weight);line-height:var(--amsterdam-paragraph-line-height);box-sizing:border-box;margin-block:0;-webkit-text-size-adjust:100%}@media screen and (width > 53.375rem){.amsterdam-paragraph{font-size:var(--amsterdam-paragraph-wide-font-size)}}.amsterdam-paragraph--small{font-size:var(--amsterdam-paragraph-small-narrow-font-size);line-height:var(--amsterdam-paragraph-small-line-height)}@media screen and (width > 53.375rem){.amsterdam-paragraph--small{font-size:var(--amsterdam-paragraph-small-wide-font-size)}}.amsterdam-paragraph--large{font-size:var(--amsterdam-paragraph-large-narrow-font-size);line-height:var(--amsterdam-paragraph-large-line-height)}@media screen and (width > 53.375rem){.amsterdam-paragraph--large{font-size:var(--amsterdam-paragraph-large-wide-font-size)}}.amsterdam-paragraph--inverse-color{color:var(--amsterdam-paragraph-inverse-color)}/*# sourceMappingURL=paragraph.css.map */
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../../src/paragraph/paragraph.scss","../../utils/breakpoint.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;ADQA;EACE;EACA;EACA;EACA;EACA;EAVA;EACA;EACA;;AAUA;EAPF;IAQI;;;;AAMJ;EACE;EACA;;AAEA;EAJF;IAKI;;;;AAIJ;EACE;EACA;;AAEA;EAJF;IAKI","file":"paragraph.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../../src/paragraph/paragraph.scss"],"names":[],"mappings":"AAaA,qBACE,uCACA,mDACA,sDACA,mDACA,mDAVA,sBACA,eACA,8BAUA,sCAPF,qBAQI,qDAMJ,4BACE,4DACA,yDAEA,sCAJF,4BAKI,2DAIJ,4BACE,4DACA,yDAEA,sCAJF,4BAKI,2DAIJ,oCACE","file":"paragraph.css"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @license EUPL-1.2+
3
+ * Copyright (c) 2023 Gemeente Amsterdam
4
+ */
5
+ .amsterdam-testula {
6
+ /* Add styles here */
7
+ }
8
+
9
+ /*# sourceMappingURL=testula.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../../src/testula/testula.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAKA;AACE","file":"testula.css"}
@@ -0,0 +1 @@
1
+ .amsterdam-top-task-link{break-inside:avoid;display:flex;flex-direction:column;gap:.5rem;outline-offset:var(--amsterdam-top-task-link-outline-offset);text-decoration:none}.amsterdam-top-task-link__label{color:var(--amsterdam-top-task-link-label-color);font-family:var(--amsterdam-top-task-link-label-font-family);font-size:var(--amsterdam-top-task-link-label-narrow-font-size);font-weight:var(--amsterdam-top-task-link-label-font-weight);line-height:var(--amsterdam-top-task-link-label-line-height);box-sizing:border-box;-webkit-text-size-adjust:100%}@media screen and (width > 53.375rem){.amsterdam-top-task-link__label{font-size:var(--amsterdam-top-task-link-label-wide-font-size)}}.amsterdam-top-task-link:hover .amsterdam-top-task-link__label{color:var(--amsterdam-top-task-link-label-hover-color);text-decoration:underline;text-decoration-thickness:3px;text-underline-offset:.5rem}.amsterdam-top-task-link__description{color:var(--amsterdam-top-task-link-description-color);font-family:var(--amsterdam-top-task-link-description-font-family);font-size:var(--amsterdam-top-task-link-description-narrow-font-size);font-weight:var(--amsterdam-top-task-link-description-font-weight);line-height:var(--amsterdam-top-task-link-description-line-height);box-sizing:border-box;-webkit-text-size-adjust:100%}@media screen and (width > 53.375rem){.amsterdam-top-task-link__description{font-size:var(--amsterdam-top-task-link-description-wide-font-size)}}/*# sourceMappingURL=top-task-link.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../../src/top-task-link/top-task-link.scss"],"names":[],"mappings":"AAOA,yBACE,mBACA,aACA,sBACA,UACA,6DACA,qBAQF,gCACE,iDACA,6DACA,gEACA,6DACA,6DATA,sBACA,8BAUA,sCAPF,gCAQI,+DAMJ,+DACE,uDACA,0BACA,8BACA,4BAGF,sCACE,uDACA,mEACA,sEACA,mEACA,mEA9BA,sBACA,8BA+BA,sCAPF,sCAQI","file":"top-task-link.css"}
@@ -1,47 +1 @@
1
- /**
2
- * @license EUPL-1.2+
3
- * Copyright (c) 2023 Gemeente Amsterdam
4
- */
5
- /**
6
- * @license EUPL-1.2+
7
- * Copyright (c) 2023 Gemeente Amsterdam
8
- */
9
- /*
10
- The breakpoint is 854px / 16 = 53.375rems
11
- https://developer.mozilla.org/en-US/docs/Web/CSS/@media#accessibility_concerns
12
- */
13
- .amsterdam-unordered-list {
14
- color: var(--amsterdam-unordered-list-color);
15
- display: flex;
16
- flex-direction: column;
17
- font-family: var(--amsterdam-unordered-list-font-family);
18
- font-size: var(--amsterdam-unordered-list-font-size-narrow);
19
- font-weight: var(--amsterdam-unordered-list-font-weight);
20
- gap: var(--amsterdam-unordered-list-gap);
21
- line-height: var(--amsterdam-unordered-list-line-height);
22
- list-style: var(--amsterdam-unordered-list-list-style);
23
- box-sizing: border-box;
24
- margin-block: 0;
25
- -webkit-text-size-adjust: 100%;
26
- }
27
- @media screen and (width > 53.375rem) {
28
- .amsterdam-unordered-list {
29
- font-size: var(--amsterdam-unordered-list-font-size-wide);
30
- }
31
- }
32
-
33
- .amsterdam-unordered-list__item {
34
- padding-inline: var(--amsterdam-unordered-list-item-padding-inline);
35
- }
36
-
37
- .amsterdam-unordered-list .amsterdam-unordered-list {
38
- list-style-type: var(--amsterdam-unordered-list-unordered-list-list-style-type);
39
- padding-block: var(--amsterdam-unordered-list-unordered-list-padding-block);
40
- padding-inline: var(--amsterdam-unordered-list-unordered-list-padding-inline);
41
- }
42
-
43
- .amsterdam-unordered-list .amsterdam-unordered-list .amsterdam-unordered-list__item {
44
- padding-inline: var(--amsterdam-unordered-list-unordered-list-item-padding-inline);
45
- }
46
-
47
- /*# sourceMappingURL=unordered-list.css.map */
1
+ .amsterdam-unordered-list{box-sizing:border-box;list-style:none;margin-block:0;padding-inline-start:0;-webkit-text-size-adjust:100%;display:grid;gap:var(--amsterdam-unordered-list-gap)}.amsterdam-unordered-list:not(.amsterdam-unordered-list--no-markers){color:var(--amsterdam-unordered-list-color);font-family:var(--amsterdam-unordered-list-font-family);font-size:var(--amsterdam-unordered-list-narrow-font-size);font-weight:var(--amsterdam-unordered-list-font-weight);line-height:var(--amsterdam-unordered-list-line-height);list-style-type:var(--amsterdam-unordered-list-list-style-type)}@media screen and (width > 53.375rem){.amsterdam-unordered-list:not(.amsterdam-unordered-list--no-markers){font-size:var(--amsterdam-unordered-list-wide-font-size)}}.amsterdam-unordered-list:not(.amsterdam-unordered-list--no-markers) .amsterdam-unordered-list__item{margin-inline-start:var(--amsterdam-unordered-list-item-margin-inline-start);padding-inline-start:var(--amsterdam-unordered-list-item-padding-inline-start)}:is(.amsterdam-ordered-list,.amsterdam-unordered-list) .amsterdam-unordered-list{list-style-type:var(--amsterdam-unordered-list-unordered-list-list-style-type)}:is(.amsterdam-ordered-list,.amsterdam-unordered-list) .amsterdam-unordered-list .amsterdam-unordered-list__item{margin-inline-start:var(--amsterdam-unordered-list-unordered-list-item-margin-inline-start);padding-inline-start:var(--amsterdam-unordered-list-unordered-list-item-padding-inline-start)}/*# sourceMappingURL=unordered-list.css.map */
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../../src/unordered-list/unordered-list.scss","../../utils/breakpoint.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;ACAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;ADQA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAdA;EACA;EACA;;AAcA;EAXF;IAYI;;;;AAMJ;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE","file":"unordered-list.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../../src/unordered-list/unordered-list.scss"],"names":[],"mappings":"AAiBA,0BARE,sBACA,gBACA,eACA,uBACA,8BAOA,aACA,wCAIF,qEACE,4CACA,wDACA,2DACA,wDACA,wDACA,gEAEA,sCARF,qEASI,0DAIF,qGACE,6EACA,+EAKJ,iFACE,+EAEA,iHACE,4FACA","file":"unordered-list.css"}
@@ -0,0 +1 @@
1
+ .amsterdam-visually-hidden{clip:rect(1px, 1px, 1px, 1px);clip-path:inset(50%);height:1px;margin-block:-1px;margin-inline:-1px;overflow:hidden;padding-block:0;padding-inline:0;position:absolute;width:1px}/*# sourceMappingURL=visually-hidden.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["../../src/visually-hidden/visually-hidden.scss"],"names":[],"mappings":"AAKA,2BACE,8BACA,qBACA,WACA,kBACA,mBACA,gBACA,gBACA,iBACA,kBACA","file":"visually-hidden.css"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.4",
2
+ "version": "0.1.5",
3
3
  "author": "Community for NL Design System",
4
4
  "description": "CSS files for components for the City of Amsterdam based on the NL Design System architecture",
5
5
  "license": "EUPL-1.2",
@@ -14,15 +14,16 @@
14
14
  "directory": "packages/css"
15
15
  },
16
16
  "scripts": {
17
- "build": "sass src/:dist/",
17
+ "build": "sass src/:dist/ --style=compressed",
18
+ "build:watch": "sass src/:dist/ --watch",
18
19
  "clean": "rimraf dist/"
19
20
  },
20
21
  "devDependencies": {
21
- "@amsterdam/design-system-tokens": "0.1.3",
22
- "sass": "1.63.6"
22
+ "@amsterdam/design-system-tokens": "0.1.4",
23
+ "sass": "1.64.0"
23
24
  },
24
25
  "dependencies": {
25
- "@utrecht/components": "1.0.0-alpha.492"
26
+ "@utrecht/components": "1.0.0-alpha.493"
26
27
  },
27
- "gitHead": "43a949072edf58e9f8d198a2eca9b5457f01ccc8"
28
+ "gitHead": "50bfbf67c103288ed6ba6713a6537252f0c25246"
28
29
  }
@@ -1,8 +1,17 @@
1
1
  # Accordion
2
2
 
3
- Het accordion component is een klikbare (verticaal gestapelde) lijst van koppen om bijbehorende inhoud te verbergen of te vertonen. Met een accordion toon je inhoud op een progressieve manier aan gebruikers.
3
+ Het accordion component is een klikbare (verticaal gestapelde) lijst van koppen om bijbehorende inhoud te verbergen of te tonen. Met een accordion toon je inhoud op een progressieve manier aan gebruikers.
4
4
 
5
- Een accordion bestaat uit meerdere accordionsecties. Gebruik minimaal 3 en maximaal 10 secties onder elkaar. Je kunt door een accordion navigeren met je toetsenbord:
5
+ ## Richtlijnen
6
+
7
+ - Gebruik een accordion op een volle pagina met zowel essentiële als niet-essentiële inhoud. Door niet-essentiële inhoud te verbergen, komen gebruikers sneller bij de essentiële inhoud.
8
+ - Gebruik een accordion niet om te veel essentiële inhoud op 1 pagina te voorkomen. Herschrijf de pagina compacter, verdeel de inhoud over meerdere pagina's of gebruik het (nog te maken) inhoudsopgave-component in plaats van een accordion voor dat doel. Verberg essentiële informatie niet in een accordion.
9
+ - Een accordion bestaat uit meerdere accordionsecties. Gebruik minimaal 3 en maximaal 10 secties onder elkaar.
10
+ - Het is belangrijk dat accordionsecties duidelijke koppen hebben, omdat de gebruiker de verborgen inhoud niet kan "scannen" om relevante informatie te vinden.
11
+ - De inhoud verbergen heeft als nadeel dat "zoeken in pagina" geen resultaten oplevert voor de inhoud die verborgen is. Als je weet op welke zoekterm de gebruiker heeft gezocht om op de pagina met accordion te komen, dan kun je de secties die de zoekterm bevatten automatisch uitklappen.
12
+ - De inhoud van de accordeon kan opmaak bevatten (bijvoorbeeld headings, lijsten, links en knoppen).
13
+
14
+ Je kunt door een accordion navigeren met je toetsenbord:
6
15
 
7
16
  | key | element |
8
17
  | -------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
@@ -14,6 +23,20 @@ Een accordion bestaat uit meerdere accordionsecties. Gebruik minimaal 3 en maxim
14
23
  | Home | Als een accordionsectie focus heeft: ga naar de eerste sectie |
15
24
  | End | Als een accordionsectie focus heeft: ga naar de laatste sectie |
16
25
 
26
+ ## Relevante WCAG eisen
27
+
28
+ De WCAG eisen voor het Button component en het Heading component gelden ook voor de accordion header.
29
+
30
+ Let extra op voor deze onderdelen:
31
+
32
+ - [WCAG eis 1.3.1](https://www.w3.org/TR/WCAG21/#info-and-relationships): de _heading level_ van de accordionsecties is afhankelijk van waar in de pagina de accordion is geplaatst, dit kan per pagina verschillen.
33
+ - [WCAG eis 1.3.6](https://www.w3.org/TR/WCAG21/#identify-purpose): gebruik `aria-controls` voor de button, en gebruik een `region` landmark voor de _expandable region_ (gebruik daarvoor het HTML-element `<section>`)
34
+ - [WCAG eis 1.4.3](https://www.w3.org/TR/WCAG21/#contrast-minimum): contrast tussen tekst en achtergrond en tussen icoon en achtergrond is voldoende in alle varianten, alle interactieve statussen en alle mogelijke combinaties.
35
+ - [WCAG eis 3.2.1](https://www.w3.org/TR/WCAG21/#on-focus): maak de accordion niet automatisch _expanded_ als de button focus krijgt.
36
+ - [WCAG eis 2.1.3](https://www.w3.org/TR/WCAG21/#keyboard-no-exception): ondersteun ook de optionele toetsen: `Down Arrow`, `Up Arrow`, `Home` en `End`. `Space` moet de button activeren, niet de pagina scrollen (gebruik `keypressEvt.preventDefault()`).
37
+ - [WCAG eis 2.4.6](https://www.w3.org/TR/WCAG21/#headings-and-labels): de tekst die zowel wordt gebruikt als heading en als label voor de button moet duidelijk zijn, omdat de inhoud niet altijd zichtbaar is.
38
+ - [WCAG eis 2.4.10](https://www.w3.org/TR/WCAG21/#section-headings): accordions die onderdeel vormen van de lopende tekst moeten section headings gebruiken.
39
+
17
40
  ## Referenties
18
41
 
19
42
  - [W3C - Accordion Pattern](https://www.w3.org/WAI/ARIA/apg/patterns/accordion/)
@@ -18,7 +18,7 @@
18
18
  cursor: pointer;
19
19
  display: flex;
20
20
  font-family: var(--amsterdam-accordion-button-font-family);
21
- font-size: var(--amsterdam-accordion-button-font-size-narrow);
21
+ font-size: var(--amsterdam-accordion-button-narrow-font-size);
22
22
  font-weight: var(--amsterdam-accordion-button-font-weight);
23
23
  justify-content: space-between;
24
24
  line-height: var(--amsterdam-accordion-button-line-height);
@@ -27,7 +27,7 @@
27
27
  width: 100%;
28
28
 
29
29
  @media screen and (width > $amsterdam-breakpoint) {
30
- font-size: var(--amsterdam-accordion-button-font-size-wide);
30
+ font-size: var(--amsterdam-accordion-button-wide-font-size);
31
31
  }
32
32
 
33
33
  &:focus {
@@ -0,0 +1,14 @@
1
+ # Blockquote
2
+
3
+ De blockquote (in het Nederlands: citaat) is wordt gebruikt om uitspraken te accentueren. Een citaat is anders vormgegeven dan de broodtekst, zodat deze opvalt.
4
+
5
+ Let op: dit component voegt automatisch aanhalingstekens aan de tekst toe, dat hoef je niet zelf te doen.
6
+
7
+ ## Richtlijnen
8
+
9
+ - Bij een citaat haal je letterlijk een schriftelijke of mondelinge tekst van iemand aan.
10
+ - Een citaat heeft een breedte van een halve of hele tekstkolom.
11
+
12
+ ## Relevante WCAG eisen
13
+
14
+ - [WCAG 3.1.2](https://www.w3.org/WAI/WCAG21/Understanding/language-of-parts.html): wanneer het citaat in een andere taal is geschreven dan de pagina, dan moet het `lang` attribuut gebruikt worden om de taal duidelijk te maken.
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @license EUPL-1.2+
3
+ * Copyright (c) 2023 Gemeente Amsterdam
4
+ */
5
+
6
+ @import "../../utils/breakpoint";
7
+
8
+ @mixin reset {
9
+ box-sizing: border-box;
10
+ break-after: avoid;
11
+ break-inside: avoid;
12
+ margin-block: 0;
13
+ margin-inline: 0;
14
+ }
15
+
16
+ .amsterdam-blockquote {
17
+ color: var(--amsterdam-blockquote-color);
18
+ font-family: var(--amsterdam-blockquote-font-family);
19
+ font-size: var(--amsterdam-blockquote-narrow-font-size);
20
+ font-weight: var(--amsterdam-blockquote-font-weight);
21
+ line-height: var(--amsterdam-blockquote-line-height);
22
+ quotes: "“" "”";
23
+
24
+ &::before {
25
+ content: open-quote;
26
+ }
27
+
28
+ &::after {
29
+ content: close-quote;
30
+ }
31
+
32
+ @media screen and (width > $amsterdam-breakpoint) {
33
+ font-size: var(--amsterdam-blockquote-wide-font-size);
34
+ }
35
+
36
+ @include reset;
37
+ }
38
+
39
+ .amsterdam-blockquote--inverse-color {
40
+ color: var(--amsterdam-blockquote-inverse-color);
41
+ }
@@ -0,0 +1,15 @@
1
+ # Breadcrumb
2
+
3
+ De breadcrumb (in het Nederlands: kruimelpad) is een secundair navigatiepatroon dat een gebruiker helpt de structuur tussen niveaus in de website tot de huidige pagina te begrijpen. Gebruikers kunnen het gebruiken om door de structuur te navigeren.
4
+
5
+ ## Richtlijnen
6
+
7
+ ### Zo gebruiken
8
+
9
+ Gebruik het kruimelpad alleen als het functioneel iets toevoegt voor de gebruiker en als de structuur ‘statisch’ is.
10
+
11
+ ### Dit vermijden
12
+
13
+ Het kruimelpad wordt niet ingezet op een formulierpagina. Het leidt af van de taak van de gebruiker of kan per ongeluk als Progress Indicator gezien worden.
14
+
15
+ Het is een secundair navigatiepatroon. Het mag nooit de hoofdnavigatie vervangen.
@@ -0,0 +1,68 @@
1
+ /**
2
+ * @license EUPL-1.2+
3
+ * Copyright (c) 2023 Gemeente Amsterdam
4
+ */
5
+
6
+ @import "../../utils/breakpoint";
7
+
8
+ @mixin reset {
9
+ box-sizing: border-box;
10
+ margin-block: 0;
11
+ padding-inline: 0;
12
+ }
13
+
14
+ .amsterdam-breadcrumb {
15
+ font-family: var(--amsterdam-breadcrumb-font-family, inherit);
16
+ font-size: var(--amsterdam-breadcrumb-narrow-font-size);
17
+ line-height: var(--amsterdam-breadcrumb-line-height);
18
+
19
+ @media screen and (width > $amsterdam-breakpoint) {
20
+ font-size: var(--amsterdam-breadcrumb-wide-font-size);
21
+ }
22
+ }
23
+
24
+ .amsterdam-breadcrumb__list {
25
+ break-after: avoid;
26
+ break-inside: avoid;
27
+ display: flex;
28
+ flex-wrap: wrap;
29
+ gap: 0.5rem;
30
+ list-style: none;
31
+
32
+ @include reset;
33
+ }
34
+
35
+ .amsterdam-breadcrumb-item {
36
+ align-items: center;
37
+ display: flex;
38
+ }
39
+
40
+ .amsterdam-breadcrumb-item:not(:last-child)::after {
41
+ background-color: var(--amsterdam-breadcrumb-color);
42
+ clip-path: path("M 4.725,16 3.275,14.545 9.815,8 3.275,1.455 4.725,0 l 8,8 z");
43
+ content: "";
44
+ display: inline-block;
45
+ height: 16px;
46
+ margin-inline-start: 1rem;
47
+ width: 16px;
48
+ }
49
+
50
+ .amsterdam-breadcrumb-item__link {
51
+ color: var(--amsterdam-breadcrumb-color);
52
+ cursor: pointer;
53
+ outline-offset: var(--amsterdam-breadcrumb-item-link-outline-offset);
54
+ text-decoration: none;
55
+
56
+ &::first-letter {
57
+ text-transform: capitalize;
58
+ }
59
+
60
+ &:focus,
61
+ &:hover,
62
+ &:active {
63
+ color: var(--amsterdam-breadcrumb-item-link-hover-color);
64
+ text-decoration: underline;
65
+ text-decoration-thickness: 2px;
66
+ text-underline-offset: 3px;
67
+ }
68
+ }
@@ -7,13 +7,45 @@
7
7
  @import "../../utils/breakpoint";
8
8
 
9
9
  .amsterdam-button {
10
- font-size: var(--amsterdam-button-font-size-narrow);
10
+ font-size: var(--amsterdam-button-narrow-font-size);
11
11
 
12
12
  @media screen and (width > $amsterdam-breakpoint) {
13
- font-size: var(--amsterdam-button-font-size-wide);
13
+ font-size: var(--amsterdam-button-wide-font-size);
14
14
  }
15
15
  }
16
16
 
17
- .amsterdam-button--secondary:hover {
18
- box-shadow: var(--amsterdam-button-secondary-hover-box-shadow);
17
+ .amsterdam-button--secondary {
18
+ box-shadow: var(--amsterdam-button-secondary-box-shadow);
19
+
20
+ &:disabled,
21
+ [aria-disabled="true"] {
22
+ box-shadow: var(--amsterdam-button-secondary-disabled-box-shadow);
23
+ }
24
+
25
+ &:hover:not(:disabled, [aria-disabled="true"]) {
26
+ box-shadow: var(--amsterdam-button-secondary-hover-box-shadow);
27
+ }
28
+ }
29
+
30
+ // Specificity hack to be able to style secondary button focus state
31
+ // This isn't currently possible with the Utrecht component
32
+ // We should really pull this component in our own repo...
33
+ .amsterdam-button--secondary.amsterdam-button--secondary {
34
+ &:focus {
35
+ color: var(--amsterdam-button-secondary-focus-color);
36
+ }
37
+ }
38
+
39
+ .amsterdam-button--secondary:focus:not(:disabled, [aria-disabled="true"]) {
40
+ box-shadow: var(--amsterdam-button-secondary-focus-box-shadow);
41
+ }
42
+
43
+ .amsterdam-button--tertiary {
44
+ &:hover:not(:disabled, [aria-disabled="true"]) {
45
+ box-shadow: var(--amsterdam-button-tertiary-hover-box-shadow);
46
+ }
47
+ }
48
+
49
+ .amsterdam-button--tertiary:focus:not(:disabled, [aria-disabled="true"]) {
50
+ box-shadow: var(--amsterdam-button-tertiary-focus-box-shadow);
19
51
  }
@@ -0,0 +1 @@
1
+ # Checkbox
@@ -0,0 +1,225 @@
1
+ /**
2
+ * @license EUPL-1.2+
3
+ * Copyright (c) 2023 Gemeente Amsterdam
4
+ */
5
+
6
+ @import "../../utils/breakpoint";
7
+
8
+ .amsterdam-checkbox__input {
9
+ appearance: none;
10
+ margin-block: 0;
11
+ margin-inline: 0;
12
+ opacity: 0%; /* to hide native input field in older iOS */
13
+
14
+ &:focus-visible + label {
15
+ outline: auto;
16
+ outline-offset: var(--amsterdam-checkbox-outline-offset);
17
+ }
18
+ }
19
+
20
+ .amsterdam-checkbox__checkmark {
21
+ align-items: center;
22
+ display: flex;
23
+ flex-shrink: 0;
24
+ height: calc(var(--amsterdam-checkbox-checkmark-narrow-size) * var(--amsterdam-checkbox-checkmark-multiplier));
25
+ width: 1.5rem;
26
+
27
+ &::after {
28
+ border-color: var(--amsterdam-checkbox-checkmark-border-color);
29
+ border-style: solid;
30
+ border-width: 2px;
31
+ box-sizing: border-box;
32
+ content: "";
33
+ height: 1.5rem;
34
+ width: 100%;
35
+ }
36
+
37
+ @media screen and (width > $amsterdam-breakpoint) {
38
+ height: calc(var(--amsterdam-checkbox-checkmark-wide-size) * var(--amsterdam-checkbox-checkmark-multiplier));
39
+ }
40
+ }
41
+
42
+ .amsterdam-checkbox__label {
43
+ color: var(--amsterdam-checkbox-color);
44
+ cursor: pointer;
45
+ display: inline-flex;
46
+ font-family: var(--amsterdam-checkbox-font-family);
47
+ font-size: var(--amsterdam-checkbox-narrow-font-size);
48
+ font-weight: 400;
49
+ gap: 0.5rem;
50
+ line-height: var(--amsterdam-checkbox-line-height);
51
+
52
+ &:hover {
53
+ color: var(--amsterdam-checkbox-hover-color);
54
+ text-decoration: underline;
55
+ text-decoration-thickness: 2px;
56
+ text-underline-offset: 3px;
57
+
58
+ .amsterdam-checkbox__checkmark::after {
59
+ border-color: var(--amsterdam-checkbox-checkmark-hover-border-color);
60
+ border-width: 3px;
61
+ }
62
+ }
63
+
64
+ @media screen and (width > $amsterdam-breakpoint) {
65
+ font-size: var(--amsterdam-checkbox-wide-font-size);
66
+ }
67
+ }
68
+
69
+ // Default checked
70
+ .amsterdam-checkbox__input:checked {
71
+ + .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
72
+ background-color: var(--amsterdam-checkbox-checkmark-checked-background-color);
73
+ background-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2032%2032%22%20fill%3D%22%23ffffff%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20d%3D%22M12.216%2027.016%200%2014.168l2.91-2.77%209.346%209.837L29.129%204%2032%206.8z%22%2F%3E%3C%2Fsvg%3E");
74
+ background-position: center;
75
+ background-repeat: no-repeat;
76
+ background-size: 1rem;
77
+ border: none;
78
+ }
79
+ }
80
+
81
+ // Default indeterminate
82
+ .amsterdam-checkbox__input:indeterminate {
83
+ + .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
84
+ background-color: var(--amsterdam-checkbox-checkmark-indeterminate-background-color);
85
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0id2hpdGUiPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTAgMTMuNzE0aDMydjRIMHoiLz48L3N2Zz4=");
86
+ background-position: center;
87
+ background-repeat: no-repeat;
88
+ background-size: 1rem;
89
+ border: none;
90
+ }
91
+ }
92
+
93
+ // Invalid unchecked
94
+ .amsterdam-checkbox__input:invalid,
95
+ .amsterdam-checkbox__input[aria-invalid="true"] {
96
+ + .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
97
+ border-color: var(--amsterdam-checkbox-checkmark-invalid-border-color);
98
+ }
99
+ }
100
+
101
+ // Disabled unchecked
102
+ .amsterdam-checkbox__input:disabled {
103
+ + .amsterdam-checkbox__label {
104
+ color: var(--amsterdam-checkbox-disabled-color);
105
+ cursor: not-allowed;
106
+
107
+ .amsterdam-checkbox__checkmark::after {
108
+ border-color: var(--amsterdam-checkbox-checkmark-disabled-border-color);
109
+ border-width: 2px;
110
+ }
111
+ }
112
+ }
113
+
114
+ // Invalid checked
115
+ .amsterdam-checkbox__input:invalid:checked,
116
+ .amsterdam-checkbox__input[aria-invalid="true"]:checked {
117
+ + .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
118
+ background-color: var(--amsterdam-checkbox-checkmark-invalid-checked-background-color);
119
+ }
120
+ }
121
+
122
+ // Invalid indeterminate
123
+ .amsterdam-checkbox__input:invalid:indeterminate,
124
+ .amsterdam-checkbox__input[aria-invalid="true"]:indeterminate {
125
+ + .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
126
+ background-color: var(--amsterdam-checkbox-checkmark-invalid-indeterminate-background-color);
127
+ }
128
+ }
129
+
130
+ // Disabled label
131
+ .amsterdam-checkbox__input:disabled + .amsterdam-checkbox__label:hover {
132
+ text-decoration: none;
133
+ }
134
+
135
+ // Disabled checked
136
+ .amsterdam-checkbox__input:disabled:checked {
137
+ + .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
138
+ background-color: var(--amsterdam-checkbox-checkmark-disabled-checked-background-color);
139
+ }
140
+ }
141
+
142
+ // Disabled indeterminate
143
+ .amsterdam-checkbox__input:disabled:indeterminate {
144
+ + .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
145
+ background-color: var(--amsterdam-checkbox-checkmark-disabled-indeterminate-background-color);
146
+ }
147
+ }
148
+
149
+ // Disabled invalid unchecked
150
+ .amsterdam-checkbox__input:invalid:disabled,
151
+ .amsterdam-checkbox__input[aria-invalid="true"]:disabled {
152
+ + .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
153
+ // TODO: currently disabled invalid gets the same styling as disabled. This should get its own styling.
154
+ border-color: var(--amsterdam-checkbox-checkmark-disabled-border-color);
155
+ }
156
+ }
157
+
158
+ // HOVER STATES
159
+
160
+ // Invalid unchecked hover
161
+ :is(.amsterdam-checkbox__input:invalid, .amsterdam-checkbox__input[aria-invalid="true"])
162
+ + .amsterdam-checkbox__label:hover
163
+ .amsterdam-checkbox__checkmark::after {
164
+ // TODO: this should be the (currently non-existent) dark red hover color
165
+ border-color: var(--amsterdam-checkbox-checkmark-invalid-hover-border-color);
166
+ }
167
+
168
+ // Default checked hover
169
+ .amsterdam-checkbox__input:checked + .amsterdam-checkbox__label:hover .amsterdam-checkbox__checkmark::after {
170
+ background-color: var(--amsterdam-checkbox-checkmark-checked-hover-background-color);
171
+ }
172
+
173
+ // Default indeterminate hover
174
+ .amsterdam-checkbox__input:indeterminate + .amsterdam-checkbox__label:hover .amsterdam-checkbox__checkmark::after {
175
+ background-color: var(--amsterdam-checkbox-checkmark-indeterminate-hover-background-color);
176
+ }
177
+
178
+ // Invalid checked hover
179
+ :is(.amsterdam-checkbox__input:invalid:checked, .amsterdam-checkbox__input[aria-invalid="true"]:checked)
180
+ + .amsterdam-checkbox__label:hover
181
+ .amsterdam-checkbox__checkmark::after {
182
+ // TODO: this should be the (currently non-existent) dark red hover color
183
+ background-color: var(--amsterdam-checkbox-checkmark-invalid-checked-hover-background-color);
184
+ }
185
+
186
+ // Invalid indeterminate hover
187
+ :is(.amsterdam-checkbox__input:invalid:indeterminate, .amsterdam-checkbox__input[aria-invalid="true"]:indeterminate)
188
+ + .amsterdam-checkbox__label:hover
189
+ .amsterdam-checkbox__checkmark::after {
190
+ // TODO: this should be the (currently non-existent) dark red hover color
191
+ background-color: var(--amsterdam-checkbox-checkmark-invalid-indeterminate-hover-background-color);
192
+ }
193
+
194
+ // Disabled checked hover
195
+ .amsterdam-checkbox__input:disabled:checked + .amsterdam-checkbox__label:hover .amsterdam-checkbox__checkmark::after {
196
+ background-color: var(--amsterdam-checkbox-checkmark-disabled-checked-hover-background-color);
197
+ }
198
+
199
+ // Disabled indeterminate hover
200
+ .amsterdam-checkbox__input:disabled:indeterminate
201
+ + .amsterdam-checkbox__label:hover
202
+ .amsterdam-checkbox__checkmark::after {
203
+ background-color: var(--amsterdam-checkbox-checkmark-disabled-indeterminate-hover-background-color);
204
+ }
205
+
206
+ // Disabled invalid unchecked hover
207
+ :is(.amsterdam-checkbox__input:invalid:disabled, .amsterdam-checkbox__input[aria-invalid="true"]:disabled)
208
+ + .amsterdam-checkbox__label:hover
209
+ .amsterdam-checkbox__checkmark::after {
210
+ // TODO: currently disabled invalid gets the same styling as disabled. This should get its own styling.
211
+ border-color: var(--amsterdam-checkbox-checkmark-disabled-border-color);
212
+ }
213
+
214
+ // DISABLED INVALID STATES
215
+
216
+ // Disabled invalid checked & indeterminate
217
+ .amsterdam-checkbox__input:invalid:disabled:checked,
218
+ .amsterdam-checkbox__input:invalid:disabled:indeterminate,
219
+ .amsterdam-checkbox__input[aria-invalid="true"]:disabled:checked,
220
+ .amsterdam-checkbox__input[aria-invalid="true"]:disabled:indeterminate {
221
+ + .amsterdam-checkbox__label .amsterdam-checkbox__checkmark::after {
222
+ // TODO: currently disabled invalid gets the same styling as disabled. This should get its own styling.
223
+ background-color: var(--amsterdam-checkbox-checkmark-disabled-checked-background-color);
224
+ }
225
+ }
@@ -0,0 +1,11 @@
1
+ # Footer
2
+
3
+ De footer (in het Nederlands: voettekst) sluit iedere webpagina af. De inhoud is service-informatie. Een gedeelte is voorgeschreven en een deel wordt ingevuld vanuit de doelstelling van de website.
4
+
5
+ ## Richtlijnen
6
+
7
+ - De voettekst is verplicht, er staat er 1 op elke pagina.
8
+ - De eerste kolom richt zich op contactinformatie. De informatie is zo specifiek mogelijk gebonden aan de betreffende website of pagina (bijvoorbeeld een chatmogelijkheid indien aanwezig).
9
+ - De tweede kolom bevat links naar relevante (online) sites of bronnen.
10
+ - De derde kolom verwijst naar nieuwsbrieven, socials enz.
11
+ - Het laatste deel van de voettekst is bedoeld voor koppelingen naar privacy, cookieverklaring, uitleg over de website e.d. Het is niet bedoeld voor koppelingen naar bijvoorbeeld contactinformatie.