@gouvfr/dsfr 1.14.1 → 1.14.2-rc.1
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.
- package/package.json +1 -1
- package/publiccode.yml +3 -3
- package/src/dsfr/component/badge/_part/doc/design/index.md +1 -1
- package/src/dsfr/component/badge/template/stories/badge.stories.js +1 -1
- package/src/dsfr/component/button/_part/doc/code/index.md +7 -3
- package/src/dsfr/component/checkbox/_part/doc/code/index.md +0 -1
- package/src/dsfr/component/display/deprecated/example/index.ejs +1 -1
- package/src/dsfr/component/display/example/index.ejs +1 -1
- package/src/dsfr/component/footer/_part/doc/code/index.md +3 -3
- package/src/dsfr/component/footer/example/sample/footer.ejs +1 -1
- package/src/dsfr/component/footer/template/stories/footer-arg-types.js +1 -1
- package/src/dsfr/component/modal/_part/doc/code/index.md +8 -4
- package/src/dsfr/component/modal/template/stories/modal-arg-types.js +6 -2
- package/src/dsfr/component/pagination/_part/doc/index.md +1 -1
- package/src/dsfr/component/range/example/sample/range-double-step.ejs +2 -0
- package/src/dsfr/component/range/example/sample/range-double.ejs +2 -0
- package/src/dsfr/component/range/template/ejs/range.ejs +3 -3
- package/src/dsfr/component/range/template/stories/range-arg-types.js +35 -3
- package/src/dsfr/component/tag/_part/doc/design/index.md +1 -1
- package/src/dsfr/core/_part/doc/base/index.md +6 -5
- package/src/dsfr/core/_part/doc/grid/index.md +3 -3
- package/src/dsfr/core/_part/doc/icon/index.md +20 -8
- package/src/dsfr/core/_part/doc/pictogram/index.md +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gouvfr/dsfr",
|
|
3
|
-
"version": "1.14.1",
|
|
3
|
+
"version": "1.14.2-rc.1",
|
|
4
4
|
"description": "Système de Design de l'Etat - DSFR",
|
|
5
5
|
"repository": "git@github.com:GouvernementFR/dsfr.git",
|
|
6
6
|
"author": "Service d'Information du Gouvernement <maxime.beaugrand@pm.gouv.fr>",
|
package/publiccode.yml
CHANGED
|
@@ -4,8 +4,8 @@ url: https://github.com/GouvernementFR/dsfr
|
|
|
4
4
|
landingURL: https://www.systeme-de-design.gouv.fr/
|
|
5
5
|
creationDate: 2021-04-08
|
|
6
6
|
latestRelease:
|
|
7
|
-
date: 2025-
|
|
8
|
-
version: "1.14.
|
|
7
|
+
date: 2025-09-11
|
|
8
|
+
version: "1.14.2"
|
|
9
9
|
logo: |-
|
|
10
10
|
https://www.systeme-de-design.gouv.fr/uploads/banner_img_aaa47076b8.png
|
|
11
11
|
usedBy:
|
|
@@ -60,7 +60,7 @@ metadataFiles:
|
|
|
60
60
|
changelog: CHANGELOG.md
|
|
61
61
|
codeOfConduct: null
|
|
62
62
|
governance: null
|
|
63
|
-
lastUpdated: 2025-
|
|
63
|
+
lastUpdated: 2025-09-11
|
|
64
64
|
screenshots: |-
|
|
65
65
|
https://www.systeme-de-design.gouv.fr/uploads/composants_groupe_de_boutons_6db9a05d35.png
|
|
66
66
|
genericName: dsfr
|
|
@@ -109,7 +109,7 @@ Ne pas changer l’icône et la couleur d’un badge système.
|
|
|
109
109
|
La couleur des badges standard peut être personnalisée, parmi les couleurs illustratives autorisées uniquement.
|
|
110
110
|
|
|
111
111
|
:::fr-table[Tableau personnalisation design]{valign=top multiline=true caption=false}
|
|
112
|
-
| Éléments | Indice thème
|
|
112
|
+
| Éléments | Indice thème clair | Indice thème sombre |
|
|
113
113
|
|:-----|:-----|:-----|
|
|
114
114
|
| **Fond** | Indice **950**<br>_exemple : `$pink-tuile-950`_ | Indice **100**<br>_exemple : `$pink-tuile-100`_ |
|
|
115
115
|
| **Texte** | Indice **sun**<br>_exemple : `$pink-tuile-sun-425`_ | Indice **moon**<br>_exemple : `$pink-tuile-moon-750`_ |
|
|
@@ -102,7 +102,7 @@ export const EllipsisStory = {
|
|
|
102
102
|
render: () => renders([
|
|
103
103
|
{
|
|
104
104
|
ellipsis: true,
|
|
105
|
-
label: '
|
|
105
|
+
label: 'Libellé très long qui sera tronqué lorem ipsum dolor sit amet consectetur adipiscing elit ut aliquam purus sit amet luctus'
|
|
106
106
|
}
|
|
107
107
|
])
|
|
108
108
|
};
|
|
@@ -48,20 +48,24 @@ Le composant **Bouton** est un élément interactif permettant de déclencher de
|
|
|
48
48
|
|
|
49
49
|
#### Groupes de boutons
|
|
50
50
|
|
|
51
|
-
Les boutons peuvent être regroupés pour former des ensembles d'actions. Le groupe est formé par la succession de boutons
|
|
51
|
+
Les boutons peuvent être regroupés pour former des ensembles d'actions. Le groupe est formé par la succession de boutons structurés sous forme de liste par l'élément HTML `<ul>` et la classe `fr-btns-group`.
|
|
52
52
|
Un groupe est dit **hiérarchisé** s'il dispose d'un bouton primaire et de boutons secondaires. Sauf cas exceptionnel, n'utiliser qu'un seul bouton primaire dans un groupe. Un groupe **non hiérarchisé** est lui constitué uniquement de boutons secondaires, tertiaires, et/ou tertiaires sans contours.
|
|
53
53
|
|
|
54
54
|
**Exemple de groupe de boutons**
|
|
55
55
|
|
|
56
56
|
```HTML
|
|
57
|
-
<
|
|
57
|
+
<ul class="fr-btns-group">
|
|
58
|
+
<li>
|
|
58
59
|
<button class="fr-btn" type="button">
|
|
59
60
|
Bouton 1
|
|
60
61
|
</button>
|
|
62
|
+
</li>
|
|
63
|
+
<li>
|
|
61
64
|
<button class="fr-btn fr-btn--secondary" type="button">
|
|
62
65
|
Bouton 2
|
|
63
66
|
</button>
|
|
64
|
-
</
|
|
67
|
+
</li>
|
|
68
|
+
</ul>
|
|
65
69
|
```
|
|
66
70
|
|
|
67
71
|
---
|
|
@@ -97,7 +97,6 @@ Pour **regrouper plusieurs checkboxes liées**, utilisez un élément `<fieldset
|
|
|
97
97
|
<label class="fr-label" for="checkboxes-3">
|
|
98
98
|
Libellé case à cocher
|
|
99
99
|
</label>
|
|
100
|
-
</div>
|
|
101
100
|
</div>
|
|
102
101
|
</div>
|
|
103
102
|
<div class="fr-messages-group" id="checkboxes-messages" aria-live="polite">
|
|
@@ -34,7 +34,7 @@ let dataFooter = {
|
|
|
34
34
|
desc: lorem(),
|
|
35
35
|
links: [
|
|
36
36
|
{label: 'info.gouv.fr', href: 'https://info.gouv.fr', blank: true, attributes: { title: getBlankTitle('info.gouv.fr') }},
|
|
37
|
-
{label: 'service-public.fr', href: 'https://service-public.fr', blank: true, attributes: { title: getBlankTitle('service-public.fr') }},
|
|
37
|
+
{label: 'service-public.gouv.fr', href: 'https://service-public.gouv.fr', blank: true, attributes: { title: getBlankTitle('service-public.gouv.fr') }},
|
|
38
38
|
{label: 'legifrance.gouv.fr', href: 'https://legifrance.gouv.fr', blank: true, attributes: { title: getBlankTitle('legifrance.gouv.fr') }},
|
|
39
39
|
{label: 'data.gouv.fr', href: 'https://data.gouv.fr', blank: true, attributes: { title: getBlankTitle('data.gouv.fr') }}
|
|
40
40
|
]
|
|
@@ -52,7 +52,7 @@ Le composant **Pied de page** est constitué d'un élément `<footer>` de classe
|
|
|
52
52
|
- Un bloc de contenu, un élément `<div>` de classe `fr-footer__content` contenant :
|
|
53
53
|
- Une description du site, optionnelle, un élément `<p>` de classe `fr-footer__content-desc`. La description doit être concise et informative, ne pas dépasser 3 lignes.
|
|
54
54
|
- Une liste de liens, **obligatoire et non modifiable**, `<ul>` de classe `fr-footer__content-list`, avec des `<li>` de classe `fr-footer__content-item`, et des liens `<a>` de classe `fr-footer__content-link`.
|
|
55
|
-
- Les liens doivent être ordonnés dans cet ordre : info.gouv.fr, service-public.fr, legifrance.gouv.fr, data.gouv.fr
|
|
55
|
+
- Les liens doivent être ordonnés dans cet ordre : info.gouv.fr, service-public.gouv.fr, legifrance.gouv.fr, data.gouv.fr
|
|
56
56
|
- Les liens doivent pointer vers les sites respectifs en s'ouvrant dans une nouvelle fenêtre.
|
|
57
57
|
- Le bloc logos partenaires, optionnel, une `<div>`de classe `fr-footer__partners`. Ce bloc contient :
|
|
58
58
|
- Un titre `<h2>`, ou autre niveau d'entête, de classe `fr-footer__partners-title`.
|
|
@@ -88,7 +88,7 @@ Le composant **Pied de page** est constitué d'un élément `<footer>` de classe
|
|
|
88
88
|
<a title="info.gouv.fr - nouvelle fenêtre" href="https://info.gouv.fr" target="_blank" rel="noopener external" class="fr-footer__content-link">info.gouv.fr</a>
|
|
89
89
|
</li>
|
|
90
90
|
<li class="fr-footer__content-item">
|
|
91
|
-
<a title="service-public.fr - nouvelle fenêtre" href="https://service-public.fr" target="_blank" rel="noopener external" class="fr-footer__content-link">service-public.fr</a>
|
|
91
|
+
<a title="service-public.gouv.fr - nouvelle fenêtre" href="https://service-public.gouv.fr" target="_blank" rel="noopener external" class="fr-footer__content-link">service-public.gouv.fr</a>
|
|
92
92
|
</li>
|
|
93
93
|
<li class="fr-footer__content-item">
|
|
94
94
|
<a title="legifrance.gouv.fr - nouvelle fenêtre" href="https://legifrance.gouv.fr" target="_blank" rel="noopener external" class="fr-footer__content-link">legifrance.gouv.fr</a>
|
|
@@ -309,7 +309,7 @@ Cet exemple inclut un bloc de navigation, un bloc-marque avec logo opérateur, e
|
|
|
309
309
|
<a title="info.gouv.fr - nouvelle fenêtre" href="https://info.gouv.fr" target="_blank" rel="noopener external" class="fr-footer__content-link">info.gouv.fr</a>
|
|
310
310
|
</li>
|
|
311
311
|
<li class="fr-footer__content-item">
|
|
312
|
-
<a title="service-public.fr - nouvelle fenêtre" href="https://service-public.fr" target="_blank" rel="noopener external" class="fr-footer__content-link">service-public.fr</a>
|
|
312
|
+
<a title="service-public.gouv.fr - nouvelle fenêtre" href="https://service-public.gouv.fr" target="_blank" rel="noopener external" class="fr-footer__content-link">service-public.gouv.fr</a>
|
|
313
313
|
</li>
|
|
314
314
|
<li class="fr-footer__content-item">
|
|
315
315
|
<a title="legifrance.gouv.fr - nouvelle fenêtre" href="https://legifrance.gouv.fr" target="_blank" rel="noopener external" class="fr-footer__content-link">legifrance.gouv.fr</a>
|
|
@@ -24,7 +24,7 @@ if (footer.content === true) data.content = {
|
|
|
24
24
|
desc: lorem('', 240),
|
|
25
25
|
links: [
|
|
26
26
|
{label: 'info.gouv.fr', href: 'https://info.gouv.fr', blank: true, attributes: { title: getBlankTitle('info.gouv.fr') }},
|
|
27
|
-
{label: 'service-public.fr', href: 'https://service-public.fr', blank: true, attributes: { title: getBlankTitle('service-public.fr') }},
|
|
27
|
+
{label: 'service-public.gouv.fr', href: 'https://service-public.gouv.fr', blank: true, attributes: { title: getBlankTitle('service-public.gouv.fr') }},
|
|
28
28
|
{label: 'legifrance.gouv.fr', href: 'https://legifrance.gouv.fr', blank: true, attributes: { title: getBlankTitle('legifrance.gouv.fr') }},
|
|
29
29
|
{label: 'data.gouv.fr', href: 'https://data.gouv.fr', blank: true, attributes: { title: getBlankTitle('data.gouv.fr') }}
|
|
30
30
|
]
|
|
@@ -240,7 +240,7 @@ const footerArgs = {
|
|
|
240
240
|
contentDescription: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in dui mauris. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam in dui mauris.',
|
|
241
241
|
contentLinks: [
|
|
242
242
|
{ label: 'info.gouv.fr', href: 'https://info.gouv.fr', blank: true, attributes: { title: 'info.gouv.fr - nouvelle fenêtre' } },
|
|
243
|
-
{ label: 'service-public.fr', href: 'https://service-public.fr', blank: true, attributes: { title: 'service-public.fr - nouvelle fenêtre' } },
|
|
243
|
+
{ label: 'service-public.gouv.fr', href: 'https://service-public.gouv.fr', blank: true, attributes: { title: 'service-public.gouv.fr - nouvelle fenêtre' } },
|
|
244
244
|
{ label: 'legifrance.gouv.fr', href: 'https://legifrance.gouv.fr', blank: true, attributes: { title: 'legifrance.gouv.fr - nouvelle fenêtre' } },
|
|
245
245
|
{ label: 'data.gouv.fr', href: 'https://data.gouv.fr', blank: true, attributes: { title: 'data.gouv.fr - nouvelle fenêtre' } }
|
|
246
246
|
],
|
|
@@ -170,10 +170,14 @@ La modale avec une **zone d’action** permet de guider l’utilisateur vers des
|
|
|
170
170
|
</div>
|
|
171
171
|
<!-- Zone d'action de la modale -->
|
|
172
172
|
<div class="fr-modal__footer">
|
|
173
|
-
<
|
|
174
|
-
<
|
|
175
|
-
|
|
176
|
-
|
|
173
|
+
<ul class="fr-btns-group fr-btns-group--right fr-btns-group--inline-reverse fr-btns-group--inline-lg fr-btns-group--icon-left">
|
|
174
|
+
<li>
|
|
175
|
+
<button type="button" class="fr-btn fr-icon-checkbox-circle-line fr-btn--icon-left">Libellé bouton</button>
|
|
176
|
+
</li>
|
|
177
|
+
<li>
|
|
178
|
+
<button type="button" class="fr-btn fr-icon-checkbox-circle-line fr-btn--icon-left fr-btn--secondary">Libellé bouton</button>
|
|
179
|
+
<li>
|
|
180
|
+
</ul>
|
|
177
181
|
</div>
|
|
178
182
|
</div>
|
|
179
183
|
</div>
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
const footer = `<
|
|
1
|
+
const footer = `<ul class="fr-btns-group fr-btns-group--right fr-btns-group--inline-reverse fr-btns-group--inline-lg fr-btns-group--icon-left">
|
|
2
|
+
<li>
|
|
2
3
|
<button class="fr-btn fr-icon-checkbox-circle-line fr-btn--icon-left">Libellé bouton</button>
|
|
4
|
+
</li>
|
|
5
|
+
<li>
|
|
3
6
|
<button class="fr-btn fr-icon-checkbox-circle-line fr-btn--icon-left fr-btn--secondary">Libellé bouton</button>
|
|
4
|
-
</
|
|
7
|
+
</li>
|
|
8
|
+
</ul>`;
|
|
5
9
|
|
|
6
10
|
const body = `<p>Lorem ipsum dolor sit amet, consectetur adipiscing, incididunt, ut labore et dolore magna aliqua. Vitae sapien pellentesque habitant morbi tristique senectus et. Diam maecenas sed enim ut. Accumsan lacus vel facilisis volutpat est. Ut aliquam purus sit amet luctus. Lorem ipsum dolor sit amet consectetur adipiscing elit ut.</p>
|
|
7
11
|
<p>Lorem ipsum dolor sit amet, consectetur adipiscing, incididunt, ut labore et dolore magna aliqua. Vitae sapien pellentesque habitant morbi tristique senectus et. Diam maecenas sed enim ut. Accumsan lacus vel facilisis volutpat est. Ut aliquam purus sit amet luctus. Lorem ipsum dolor sit amet consectetur adipiscing elit ut.</p>
|
|
@@ -6,6 +6,8 @@ let data = {
|
|
|
6
6
|
...range,
|
|
7
7
|
isStep: true,
|
|
8
8
|
isDouble: true,
|
|
9
|
+
minValueLabel: getText('label.min-value', 'range'),
|
|
10
|
+
maxValueLabel: getText('label.max-value', 'range'),
|
|
9
11
|
step: isNaN(range.step) ? ((range.max - range.min) / 10) | 0 : range.step,
|
|
10
12
|
value: isNaN(range.value) ? (range.max - range.min) * 0.25 + range.min : range.value,
|
|
11
13
|
value2: isNaN(range.value2) ? (range.max - range.min) * 0.75 + range.min : range.value2
|
|
@@ -5,6 +5,8 @@ range.max = range.max ?? 100;
|
|
|
5
5
|
let data = {
|
|
6
6
|
...range,
|
|
7
7
|
isDouble: true,
|
|
8
|
+
minValueLabel: getText('label.min-value', 'range'),
|
|
9
|
+
maxValueLabel: getText('label.max-value', 'range'),
|
|
8
10
|
value: isNaN(range.value) ? (range.max - range.min) * 0.25 + range.min : range.value,
|
|
9
11
|
value2: isNaN(range.value2) ? (range.max - range.min) * 0.75 + range.min : range.value2
|
|
10
12
|
};
|
|
@@ -76,8 +76,8 @@ inputAttributes.name = range.name;
|
|
|
76
76
|
inputAttributes.type = 'range';
|
|
77
77
|
inputAttributes['aria-labelledby'] = label.attributes.id;
|
|
78
78
|
if (range.isDouble) {
|
|
79
|
-
inputAttributes['aria-label'] =
|
|
80
|
-
inputAttributes['aria-labelledby'] = `${range.id} ${label.attributes.id}
|
|
79
|
+
inputAttributes['aria-label'] = range.minValueLabel;
|
|
80
|
+
inputAttributes['aria-labelledby'] = `${range.id} ${label.attributes.id}`;
|
|
81
81
|
}
|
|
82
82
|
if (range.min) inputAttributes.min = range.min;
|
|
83
83
|
if (range.max) inputAttributes.max = range.max;
|
|
@@ -89,7 +89,7 @@ const input2Attributes = {
|
|
|
89
89
|
value: range.value2,
|
|
90
90
|
id: `${range.id}-2`,
|
|
91
91
|
name: `${range.name}-2`,
|
|
92
|
-
'aria-label':
|
|
92
|
+
'aria-label': range.maxValueLabel,
|
|
93
93
|
'aria-labelledby': `${range.id}-2 ${label.attributes.id}`
|
|
94
94
|
}
|
|
95
95
|
|
|
@@ -82,7 +82,8 @@ const rangeArgTypes = {
|
|
|
82
82
|
control: 'number',
|
|
83
83
|
description: 'valeur initiale du curseur',
|
|
84
84
|
type: {
|
|
85
|
-
value: 'integer'
|
|
85
|
+
value: 'integer',
|
|
86
|
+
required: true
|
|
86
87
|
}
|
|
87
88
|
},
|
|
88
89
|
step: {
|
|
@@ -127,9 +128,36 @@ const rangeArgTypes = {
|
|
|
127
128
|
eq: true
|
|
128
129
|
},
|
|
129
130
|
control: 'number',
|
|
130
|
-
description: '
|
|
131
|
+
description: 'Deuxième valeur initiale pour le curseur double',
|
|
131
132
|
type: {
|
|
132
|
-
value: 'integer'
|
|
133
|
+
value: 'integer',
|
|
134
|
+
required: true
|
|
135
|
+
},
|
|
136
|
+
table: { category: 'variant' }
|
|
137
|
+
},
|
|
138
|
+
minValueLabel: {
|
|
139
|
+
if: {
|
|
140
|
+
arg: 'isDouble',
|
|
141
|
+
eq: true
|
|
142
|
+
},
|
|
143
|
+
control: 'text',
|
|
144
|
+
description: 'Label pour le 1er curseur en mode double (attribut aria-label)',
|
|
145
|
+
type: {
|
|
146
|
+
value: 'string',
|
|
147
|
+
required: true
|
|
148
|
+
},
|
|
149
|
+
table: { category: 'variant' }
|
|
150
|
+
},
|
|
151
|
+
maxValueLabel: {
|
|
152
|
+
if: {
|
|
153
|
+
arg: 'isDouble',
|
|
154
|
+
eq: true
|
|
155
|
+
},
|
|
156
|
+
control: 'text',
|
|
157
|
+
description: 'Label pour le Deuxième curseur en mode double (attribut aria-label)',
|
|
158
|
+
type: {
|
|
159
|
+
value: 'string',
|
|
160
|
+
required: true
|
|
133
161
|
},
|
|
134
162
|
table: { category: 'variant' }
|
|
135
163
|
},
|
|
@@ -169,6 +197,8 @@ const rangeArgs = {
|
|
|
169
197
|
disabled: false,
|
|
170
198
|
size: 'md',
|
|
171
199
|
isDouble: false,
|
|
200
|
+
minValueLabel: 'Valeur minimale',
|
|
201
|
+
maxValueLabel: 'Valeur maximale',
|
|
172
202
|
value2: 70,
|
|
173
203
|
isStep: false,
|
|
174
204
|
indicators: true,
|
|
@@ -190,6 +220,8 @@ const rangeProps = (args) => {
|
|
|
190
220
|
prefix: args.prefix || rangeArgs.prefix,
|
|
191
221
|
suffix: args.suffix || rangeArgs.suffix,
|
|
192
222
|
isDouble: args.isDouble || false,
|
|
223
|
+
minValueLabel: args.isDouble ? args.minValueLabel || rangeArgs.minValueLabel : undefined,
|
|
224
|
+
maxValueLabel: args.isDouble ? args.maxValueLabel || rangeArgs.maxValueLabel : undefined,
|
|
193
225
|
isStep: args.isStep || false,
|
|
194
226
|
indicators: args.indicators || false,
|
|
195
227
|
disabled: args.disabled || rangeArgs.disabled,
|
|
@@ -112,7 +112,7 @@ Seule la couleur des tags cliquables peut être personnalisée, parmi les couleu
|
|
|
112
112
|
|
|
113
113
|
:::fr-table[Tableau personnalisation design]{valign=top multiline=true caption=false}
|
|
114
114
|
|
|
115
|
-
| Éléments | Indice thème clair | Indice thème
|
|
115
|
+
| Éléments | Indice thème clair | Indice thème sombre |
|
|
116
116
|
|:-----|:-----|:-----|
|
|
117
117
|
| **Fond** | Indice **925**<br> exemple : `$pink-tuile-925` | Indice **125**<br> exemple : `$pink-tuile-125` |
|
|
118
118
|
| **Texte et icône**| Indice **sun**<br> exemple : `$pink-tuile-sun-425` | Indice **moon**<br> exemple : `$pink-tuile-moon-750` |
|
|
@@ -30,11 +30,12 @@ L’image de marque de l’État et la représentation que s’en fait le citoye
|
|
|
30
30
|
|
|
31
31
|
### En application
|
|
32
32
|
|
|
33
|
-
1.
|
|
34
|
-
2.
|
|
35
|
-
3. Vous
|
|
36
|
-
4.
|
|
37
|
-
5. Si vous
|
|
33
|
+
1. L’application du DSFR doit toujours être complète. Le détournement de composants, l’ajout de sur-couches graphiques quelconques ou la simple recherche de ressemblance avec le Système de Design ne sont pas autorisés.
|
|
34
|
+
2. Que vous utilisiez ou non les composants de la librairie, le respect des [fondamentaux](../index.md) du DSFR est obligatoire : ils sont le seul moyen d’assurer la cohérence des interfaces de l’État ;
|
|
35
|
+
3. Vous avez l’obligation d’utiliser les [composants](../../../../component/_part/doc/index.md) du DSFR s’ils existent dans la librairie, en respectant scrupuleusement leurs règles d’utilisation ;
|
|
36
|
+
4. Vous pouvez créer vos propres composants seulement s’ils n’existent pas dans la librairie
|
|
37
|
+
5. Si vous pensez qu’un composant n’existe pas, pensez à interroger la communauté. Il y a de fortes chances qu’il ait déjà été créé par une autre équipe.
|
|
38
|
+
6. Si vous créez un composant et si vous pensez qu’il pourrait être utile à d’autres équipes, pensez à nous le partager pour qu’il soit réintégré à la librairie.
|
|
38
39
|
|
|
39
40
|
## Le détail des fondamentaux
|
|
40
41
|
|
|
@@ -15,11 +15,11 @@ order: 6
|
|
|
15
15
|
:::fr-table[Caractéristiques de la grille]{valign=top multiline=true}
|
|
16
16
|
| Mise en page | Valeurs en px | Résolution maquette en px | Token | Largeur max. du contenu | Tailles des gouttières (optionnelles) |
|
|
17
17
|
| --- | --- | --- | --- | --- | --- |
|
|
18
|
-
| XS | de 0 à 575 | 320 | | / |
|
|
19
|
-
| SM | de 576 à 767 | 576 | `$bp-sm` | / |
|
|
18
|
+
| XS | de 0 à 575 | 320 | | / | 16px |
|
|
19
|
+
| SM | de 576 à 767 | 576 | `$bp-sm` | / | 16px |
|
|
20
20
|
| MD | de 768 à 991 | 768 | `$bp-md` | / | 16px |
|
|
21
21
|
| LG | de 992 à 1247 | 992 | `$bp-lg` | / | 24px |
|
|
22
|
-
| XL | ≥ 1248 | 1440 | `$bp-xl` | 1200 |
|
|
22
|
+
| XL | ≥ 1248 | 1440 | `$bp-xl` | 1200 | 24px |
|
|
23
23
|
:::
|
|
24
24
|
|
|
25
25
|
## Points de rupture
|
|
@@ -46,7 +46,7 @@ L’ancienne nomenclature des classes en `fr-fi` (remplacée par `fr-icon`) est
|
|
|
46
46
|
|
|
47
47
|
**Ajout d'icônes personnalisées**
|
|
48
48
|
|
|
49
|
-
Pour ajouter une icône qui ne serait pas présente dans le DSFR, il est possible de créer un fichier SVG ou de
|
|
49
|
+
Pour ajouter une icône qui ne serait pas présente dans le DSFR, il est possible de créer un fichier SVG ou de le télécharger depuis la librairie Remixicon. Il faudra ensuite créer un fichier CSS pour associé une classe à cette icône, en suivant la nomenclature `fr-icon-[nom-de-l'icône]`. Par exemple, pour une icône nommée `custom-icon`, le fichier CSS contiendra :
|
|
50
50
|
|
|
51
51
|
```CSS
|
|
52
52
|
.fr-icon-custom-icon::before,
|
|
@@ -56,7 +56,19 @@ Pour ajouter une icône qui ne serait pas présente dans le DSFR, il est possibl
|
|
|
56
56
|
}
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
[Facultatif] Pour fonctionner sur Internet Explorer 11, il faudra également ajouter, de préférence dans un autre fichier CSS, la règle suivante :
|
|
60
|
+
|
|
61
|
+
```CSS
|
|
62
|
+
@media screen and (min-width: 0\0) and (min-resolution: 72dpi) {
|
|
63
|
+
.fr-icon-custom-icon::before,
|
|
64
|
+
.fr-icon-custom-icon::after {
|
|
65
|
+
background-image: url("../icons/custom-icon.svg");
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
>[!NOTE]
|
|
71
|
+
>Ne pas modifier directement les fichiers CSS du DSFR, mais plutôt créer un fichier CSS personnalisé pour vos icônes. De cette manière, vous pourrez monter de version du DSFR sans perdre vos modifications.
|
|
60
72
|
|
|
61
73
|
## Sélection d’icônes
|
|
62
74
|
|
|
@@ -67,7 +79,7 @@ Les icônes classées dans dsfr sont soit des icônes créées spécialement, so
|
|
|
67
79
|
|
|
68
80
|
### Arrows
|
|
69
81
|
|
|
70
|
-
#### Icônes créées par l'équipe DSFR
|
|
82
|
+
#### Arrows - Icônes créées par l'équipe DSFR
|
|
71
83
|
|
|
72
84
|
<div class="dsfr-doc-preview">
|
|
73
85
|
<span class="fr-icon-arrow-left-s-first-line" aria-hidden="true"></span>
|
|
@@ -88,7 +100,7 @@ Les icônes classées dans dsfr sont soit des icônes créées spécialement, so
|
|
|
88
100
|
|
|
89
101
|
:::
|
|
90
102
|
|
|
91
|
-
#### Icônes proposées par RemixIcon
|
|
103
|
+
#### Arrows - Icônes proposées par RemixIcon
|
|
92
104
|
|
|
93
105
|
<div class="dsfr-doc-preview">
|
|
94
106
|
<span class="fr-icon-arrow-left-s-fill" aria-hidden="true"></span>
|
|
@@ -1747,7 +1759,7 @@ Les icônes classées dans dsfr sont soit des icônes créées spécialement, so
|
|
|
1747
1759
|
|
|
1748
1760
|
### Editor
|
|
1749
1761
|
|
|
1750
|
-
#### Icônes créées par l'équipe DSFR
|
|
1762
|
+
#### Editor - Icônes créées par l'équipe DSFR
|
|
1751
1763
|
|
|
1752
1764
|
<div class="dsfr-doc-preview">
|
|
1753
1765
|
<span class="fr-icon-bold" aria-hidden="true"></span>
|
|
@@ -1770,7 +1782,7 @@ Les icônes classées dans dsfr sont soit des icônes créées spécialement, so
|
|
|
1770
1782
|
|
|
1771
1783
|
:::
|
|
1772
1784
|
|
|
1773
|
-
#### Icônes proposées par RemixIcon
|
|
1785
|
+
#### Editor - Icônes proposées par RemixIcon
|
|
1774
1786
|
|
|
1775
1787
|
<div class="dsfr-doc-preview">
|
|
1776
1788
|
<span class="fr-icon-code-view" aria-hidden="true"></span>
|
|
@@ -2518,7 +2530,7 @@ Les icônes classées dans dsfr sont soit des icônes créées spécialement, so
|
|
|
2518
2530
|
|
|
2519
2531
|
### System
|
|
2520
2532
|
|
|
2521
|
-
#### Icônes créées par l'équipe DSFR
|
|
2533
|
+
#### System - Icônes créées par l'équipe DSFR
|
|
2522
2534
|
|
|
2523
2535
|
<div class="dsfr-doc-preview">
|
|
2524
2536
|
<span class="fr-icon-error-fill" aria-hidden="true"></span>
|
|
@@ -2552,7 +2564,7 @@ Les icônes classées dans dsfr sont soit des icônes créées spécialement, so
|
|
|
2552
2564
|
|
|
2553
2565
|
:::
|
|
2554
2566
|
|
|
2555
|
-
#### Icônes proposées par RemixIcon
|
|
2567
|
+
#### System - Icônes proposées par RemixIcon
|
|
2556
2568
|
|
|
2557
2569
|
<div class="dsfr-doc-preview">
|
|
2558
2570
|
<span aria-hidden="true" class="fr-icon-add-line"></span>
|
|
@@ -138,7 +138,7 @@ La librairie de SVG se trouve dans **dist/artwork/pictograms**.
|
|
|
138
138
|
|
|
139
139
|
##### Utilisation des pictogrammes
|
|
140
140
|
|
|
141
|
-
Pour intégrer ces pictogrammes, il convient d’utiliser une balise `<svg>` et d’importer à l’intérieur les 3 parties du svg. Chaque partie doit être insérée, à la manière des <span>spritesheet</span>, via une balise `<use>` et l’attribut href :
|
|
141
|
+
Pour intégrer ces pictogrammes, il convient d’utiliser une balise `<svg>` et d’importer à l’intérieur les 3 parties du svg. Chaque partie doit être insérée, à la manière des <span lang="en">spritesheet</span>, via une balise `<use>` et l’attribut href :
|
|
142
142
|
|
|
143
143
|
```HTML
|
|
144
144
|
<svg class="fr-artwork" aria-hidden="true" viewBox="0 0 80 80" width="80px" height="80px">
|