@lab-anssi/ui-kit 1.12.2 → 1.12.4
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/README.md +1 -0
- package/dist/CentreAide.svelte +13 -6
- package/dist/generateurImagesPlaceholders.js +1 -1
- package/dist/lab/ResumePssi.svelte +43 -73
- package/dist/lab/icones/LienExterne.svelte +20 -0
- package/dist/lab/icones/LienExterne.svelte.d.ts +18 -0
- package/dist/lab/vitrines-produits/briques/Brique.svelte +6 -2
- package/dist/lab/vitrines-produits/briques/BriqueContenuADeuxColonnes.svelte +11 -10
- package/dist/lab/vitrines-produits/briques/BriqueHero.svelte +23 -2
- package/dist/lab/vitrines-produits/briques/BriqueTitreMultimedia.svelte +8 -6
- package/dist/lab/vitrines-produits/briques/CarrouselTuiles/CarrouselTuiles.svelte +12 -11
- package/dist/lab/vitrines-produits/briques/CarrouselTuiles/IconeFlecheDroite.svelte +7 -2
- package/dist/lab/vitrines-produits/briques/CarrouselTuiles/IconeFlecheGauche.svelte +7 -2
- package/dist/lab/vitrines-produits/briques/LecteurVideo.svelte +3 -13
- package/dist/lab/vitrines-produits/briques/PresentationANSSI.svelte +15 -6
- package/dist/lab/vitrines-produits/briques/RejoindreLaCommunaute.svelte +10 -9
- package/dist/lab/vitrines-produits/briques/Tuile.svelte +12 -2
- package/dist/lab/vitrines-produits/briques/marelle/Etape.svelte +17 -8
- package/dist/lab/vitrines-produits/briques/marelle/Marelle.svelte +21 -10
- package/dist/lab/vitrines-produits/briques/temoignages/IconeTemoignage.svelte +8 -2
- package/dist/lab/vitrines-produits/briques/temoignages/Temoignages.svelte +9 -13
- package/dist/pied-de-page/NavigationPiedDePage.svelte +1 -3
- package/dist/types.d.ts +2 -1
- package/dist/webcomponents/lab-anssi-ui-kit.iife.js +43 -47
- package/package.json +8 -2
package/README.md
CHANGED
|
@@ -20,6 +20,7 @@ Le storybook des composants est disponible [ici](https://betagouv.github.io/lab-
|
|
|
20
20
|
Il est construit avec [Histoire](https://histoire.dev/)
|
|
21
21
|
|
|
22
22
|
## Architecture de build
|
|
23
|
+
|
|
23
24
|
Cette librairie a pour objectif de produire des composants Svelte et leurs équivalents [Webcomponent](https://developer.mozilla.org/en-US/docs/Web/API/Web_components).
|
|
24
25
|
|
|
25
26
|
L'architecture pour produire du Svelte utilise [SvelteKit](https://svelte.dev/docs/kit/packaging), configuré via le wizard `npx sv create`.
|
package/dist/CentreAide.svelte
CHANGED
|
@@ -10,7 +10,9 @@ let liensMisEnForme = [];
|
|
|
10
10
|
$: {
|
|
11
11
|
liensMisEnForme = JSON.parse(liens);
|
|
12
12
|
if (!Array.isArray(liensMisEnForme) || liensMisEnForme.some((l) => !l.texte)) {
|
|
13
|
-
throw new Error(
|
|
13
|
+
throw new Error(
|
|
14
|
+
"Les liens doivent respecter le type : { texte: string; href?: string; preventDefault?: boolean; id?: string }[]"
|
|
15
|
+
);
|
|
14
16
|
}
|
|
15
17
|
}
|
|
16
18
|
let ouvert = false;
|
|
@@ -52,11 +54,16 @@ let ouvert = false;
|
|
|
52
54
|
</div>
|
|
53
55
|
{#if liensMisEnForme}
|
|
54
56
|
{#each liensMisEnForme as lien, id (id)}
|
|
55
|
-
<a
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
<a
|
|
58
|
+
class="lien lien-principal"
|
|
59
|
+
href={lien.href}
|
|
60
|
+
target="_blank"
|
|
61
|
+
id={lien.id}
|
|
62
|
+
on:click={(e) => {
|
|
63
|
+
if (lien.preventDefault) e.preventDefault();
|
|
64
|
+
emetEvenement("lienclique", { target: e.currentTarget });
|
|
65
|
+
}}>{lien.texte}</a
|
|
66
|
+
>
|
|
60
67
|
{/each}
|
|
61
68
|
{/if}
|
|
62
69
|
<div class="message marge-haute">
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export const genereImageDePlaceholder = (largeur, longeur, texteAffiche) => {
|
|
2
|
-
return `https://placehold.co/${largeur}x${longeur}${texteAffiche ? `?text=${encodeURIComponent(texteAffiche)}` :
|
|
2
|
+
return `https://placehold.co/${largeur}x${longeur}${texteAffiche ? `?text=${encodeURIComponent(texteAffiche)}` : ""}`;
|
|
3
3
|
};
|
|
@@ -5,111 +5,81 @@
|
|
|
5
5
|
|
|
6
6
|
<p>
|
|
7
7
|
{nomService} est hébergé chez
|
|
8
|
-
<a
|
|
9
|
-
href="https://www.clever-cloud.com/"
|
|
10
|
-
rel="noopener"
|
|
11
|
-
target="_blank"
|
|
12
|
-
>
|
|
13
|
-
Clever Cloud
|
|
14
|
-
</a>
|
|
8
|
+
<a href="https://www.clever-cloud.com/" rel="noopener" target="_blank"> Clever Cloud </a>
|
|
15
9
|
prenant appui sur
|
|
16
|
-
<a
|
|
17
|
-
href="https://www.cloud-temple.com/notre-approche-secnumcloud/"
|
|
18
|
-
rel="noopener"
|
|
19
|
-
target="_blank"
|
|
20
|
-
>
|
|
10
|
+
<a href="https://www.cloud-temple.com/notre-approche-secnumcloud/" rel="noopener" target="_blank">
|
|
21
11
|
Cloud Temple
|
|
22
12
|
</a>
|
|
23
13
|
qualifié SecNumCloud.
|
|
24
14
|
</p>
|
|
25
15
|
<p>
|
|
26
|
-
L'ANSSI soumet {nomService} à un rythme d'homologation soutenu dans le
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
ci-dessous.
|
|
30
|
-
</p>
|
|
31
|
-
<h2>
|
|
32
|
-
Gouvernance
|
|
33
|
-
</h2>
|
|
34
|
-
<p>
|
|
35
|
-
Nous auditons régulièrement nos fournisseurs en termes de configuration et
|
|
36
|
-
d'architecture et maintenons un contact étroit avec eux pour améliorer en
|
|
37
|
-
continu leur sécurité et donc celle de vos données.
|
|
16
|
+
L'ANSSI soumet {nomService} à un rythme d'homologation soutenu dans le cadre d'une démarche de renforcement
|
|
17
|
+
continu de la sécurité du service numérique, dont plusieurs éléments clés mais non exhaustifs sont
|
|
18
|
+
résumés ci-dessous.
|
|
38
19
|
</p>
|
|
20
|
+
<h2>Gouvernance</h2>
|
|
39
21
|
<p>
|
|
40
|
-
Nous
|
|
41
|
-
|
|
22
|
+
Nous auditons régulièrement nos fournisseurs en termes de configuration et d'architecture et
|
|
23
|
+
maintenons un contact étroit avec eux pour améliorer en continu leur sécurité et donc celle de vos
|
|
24
|
+
données.
|
|
42
25
|
</p>
|
|
43
26
|
<p>
|
|
44
|
-
Nous
|
|
45
|
-
|
|
27
|
+
Nous auditions également régulièrement nos services (audits de code et tests d'intrusion) par des
|
|
28
|
+
prestataires qualifiés (PASSI).
|
|
46
29
|
</p>
|
|
47
30
|
<p>
|
|
48
|
-
Nous
|
|
49
|
-
|
|
31
|
+
Nous réalisons et tenons à jour une analyse de risques de nos services en prenant appui sur la
|
|
32
|
+
méthode EBIOS Risk Manager.
|
|
50
33
|
</p>
|
|
51
34
|
<p>
|
|
52
|
-
Nous maintenons
|
|
53
|
-
|
|
35
|
+
Nous maintenons une classification de l'ensemble des données que nous conservons, selon leur
|
|
36
|
+
sensibilité, afin d'assurer une protection adaptée.
|
|
54
37
|
</p>
|
|
55
38
|
<p>
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
déploiement), au travers de formations en continu ou de la réalisation de
|
|
59
|
-
campagnes anti-phishing.
|
|
39
|
+
Nous maintenons un dossier d’architecture technique détaillé de nos services et de leurs
|
|
40
|
+
interconnexions.
|
|
60
41
|
</p>
|
|
61
|
-
<h2>
|
|
62
|
-
Protection
|
|
63
|
-
</h2>
|
|
64
42
|
<p>
|
|
65
|
-
|
|
66
|
-
|
|
43
|
+
Les membres de nos équipes sont sensibilisés aux bonnes pratiques de sécurité, quels que soient
|
|
44
|
+
les profils (technique, produit, design, déploiement), au travers de formations en continu ou de
|
|
45
|
+
la réalisation de campagnes anti-phishing.
|
|
67
46
|
</p>
|
|
47
|
+
<h2>Protection</h2>
|
|
48
|
+
<p>Vos données sont protégées par un chiffrement multi-couches, système et applicatif.</p>
|
|
68
49
|
<p>
|
|
69
|
-
Chaque membre de notre équipe est équipé de clés d'authentification
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
l'ensemble de nos services.
|
|
50
|
+
Chaque membre de notre équipe est équipé de clés d'authentification matérielle et
|
|
51
|
+
l’authentification multi-facteur est généralisée à tous les accès, permettant de mettre en œuvre
|
|
52
|
+
une authentification forte sur l'ensemble de nos services.
|
|
73
53
|
</p>
|
|
74
54
|
<p>
|
|
75
|
-
Nous limitons les accès au strict nécessaire et cloisonnons de façon
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
usages ; postes d'administration durcis et réservés à ce seul
|
|
55
|
+
Nous limitons les accès au strict nécessaire et cloisonnons de façon rigoureuse les activités
|
|
56
|
+
d'administration, en particulier au niveau technique : utilisation de comptes dédiés et
|
|
57
|
+
séparés selon leurs usages ; postes d'administration durcis et réservés à ce seul
|
|
79
58
|
usage ; clés d’authentification nominatives.
|
|
80
59
|
</p>
|
|
81
|
-
<p>Nous n’installons et n’utilisons que les applications strictement
|
|
82
|
-
|
|
83
|
-
</
|
|
84
|
-
<p>
|
|
85
|
-
Les droits des administrateurs techniques et métiers sont restreints au
|
|
86
|
-
strict nécessaire.
|
|
87
|
-
</p>
|
|
88
|
-
<h2>
|
|
89
|
-
Défense
|
|
90
|
-
</h2>
|
|
60
|
+
<p>Nous n’installons et n’utilisons que les applications strictement nécessaires.</p>
|
|
61
|
+
<p>Les droits des administrateurs techniques et métiers sont restreints au strict nécessaire.</p>
|
|
62
|
+
<h2>Défense</h2>
|
|
91
63
|
<p>
|
|
92
|
-
La sécurité de nos services est surveillée en continu : détection de
|
|
93
|
-
|
|
64
|
+
La sécurité de nos services est surveillée en continu : détection de défiguration, scans
|
|
65
|
+
automatisés, veille active sur les risques émergents.
|
|
94
66
|
</p>
|
|
95
67
|
<p>
|
|
96
|
-
L'ensemble des actions est historisé de façon nominative pour simplifier
|
|
97
|
-
|
|
68
|
+
L'ensemble des actions est historisé de façon nominative pour simplifier l'analyse en cas
|
|
69
|
+
d'incident.
|
|
98
70
|
</p>
|
|
99
71
|
<p>
|
|
100
|
-
Nous mettons en œuvre et testons régulièrement notre procédure de gestion des
|
|
101
|
-
|
|
72
|
+
Nous mettons en œuvre et testons régulièrement notre procédure de gestion des incidents de
|
|
73
|
+
sécurité.
|
|
102
74
|
</p>
|
|
103
|
-
<h2>
|
|
104
|
-
Résilience
|
|
105
|
-
</h2>
|
|
75
|
+
<h2>Résilience</h2>
|
|
106
76
|
<p>
|
|
107
|
-
Vos données sont sauvegardées de façon sécurisée et pérenne sur un
|
|
108
|
-
|
|
77
|
+
Vos données sont sauvegardées de façon sécurisée et pérenne sur un environnement totalement séparé
|
|
78
|
+
de la plate-forme de production.
|
|
109
79
|
</p>
|
|
110
80
|
<p>
|
|
111
|
-
En cas d'incident majeur, nous sommes capables de reconstruire totalement
|
|
112
|
-
|
|
81
|
+
En cas d'incident majeur, nous sommes capables de reconstruire totalement l'application en
|
|
82
|
+
production dans un délai très court.
|
|
113
83
|
</p>
|
|
114
84
|
|
|
115
85
|
<style>.visible-tablette {
|
|
@@ -149,4 +119,4 @@ a {
|
|
|
149
119
|
text-decoration: underline;
|
|
150
120
|
text-underline-offset: 4px;
|
|
151
121
|
text-decoration-thickness: 1px;
|
|
152
|
-
}</style>
|
|
122
|
+
}</style>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script>export let couleur = void 0;
|
|
2
|
+
</script>
|
|
3
|
+
|
|
4
|
+
<svg
|
|
5
|
+
width="16"
|
|
6
|
+
height="16"
|
|
7
|
+
viewBox="0 0 16 16"
|
|
8
|
+
fill="currentColor"
|
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
10
|
+
>
|
|
11
|
+
<g id="external-link">
|
|
12
|
+
<path
|
|
13
|
+
id="Icône"
|
|
14
|
+
fill-rule="evenodd"
|
|
15
|
+
clip-rule="evenodd"
|
|
16
|
+
d="M6.66667 4V5.33333H3.33333V12.6667H10.6667V9.33333H12V13.3333C12 13.7015 11.7015 14 11.3333 14H2.66667C2.29848 14 2 13.7015 2 13.3333V4.66667C2 4.29848 2.29848 4 2.66667 4H6.66667ZM14 2V8L11.4707 5.47133L7.47133 9.47133L6.52867 8.52867L10.528 4.52867L8 2H14Z"
|
|
17
|
+
fill={couleur}
|
|
18
|
+
/>
|
|
19
|
+
</g>
|
|
20
|
+
</svg>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
couleur?: string | undefined;
|
|
5
|
+
};
|
|
6
|
+
events: {
|
|
7
|
+
[evt: string]: CustomEvent<any>;
|
|
8
|
+
};
|
|
9
|
+
slots: {};
|
|
10
|
+
exports?: {} | undefined;
|
|
11
|
+
bindings?: string | undefined;
|
|
12
|
+
};
|
|
13
|
+
export type LienExterneProps = typeof __propDef.props;
|
|
14
|
+
export type LienExterneEvents = typeof __propDef.events;
|
|
15
|
+
export type LienExterneSlots = typeof __propDef.slots;
|
|
16
|
+
export default class LienExterne extends SvelteComponent<LienExterneProps, LienExterneEvents, LienExterneSlots> {
|
|
17
|
+
}
|
|
18
|
+
export {};
|
|
@@ -3,7 +3,11 @@ export let sansMargeHaute = false;
|
|
|
3
3
|
export let sansMargeLaterale = false;
|
|
4
4
|
</script>
|
|
5
5
|
|
|
6
|
-
<section
|
|
6
|
+
<section
|
|
7
|
+
class={variation}
|
|
8
|
+
class:sans-marge-haute={sansMargeHaute}
|
|
9
|
+
class:sans-marge-laterale={sansMargeLaterale}
|
|
10
|
+
>
|
|
7
11
|
<div class="contenu-brique">
|
|
8
12
|
<slot />
|
|
9
13
|
</div>
|
|
@@ -76,4 +80,4 @@ section.secondaire {
|
|
|
76
80
|
.contenu-brique {
|
|
77
81
|
max-width: 1200px;
|
|
78
82
|
margin: 0 auto;
|
|
79
|
-
}</style>
|
|
83
|
+
}</style>
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
<svelte:options
|
|
2
2
|
customElement={{
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
titre: { reflect: false, type:
|
|
6
|
-
paragraphe: { reflect: false, type:
|
|
7
|
-
|
|
8
|
-
ordre: { reflect: false, type:
|
|
9
|
-
illustration: { reflect: false, type:
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
tag: "lab-anssi-brique-contenu-a-deux-colonnes",
|
|
4
|
+
props: {
|
|
5
|
+
titre: { reflect: false, type: "String", attribute: "titre" },
|
|
6
|
+
paragraphe: { reflect: false, type: "String", attribute: "paragraphe" },
|
|
7
|
+
action: { reflect: false, type: "Object", attribute: "action" },
|
|
8
|
+
ordre: { reflect: false, type: "String", attribute: "ordre" },
|
|
9
|
+
illustration: { reflect: false, type: "Object", attribute: "illustration" },
|
|
10
|
+
},
|
|
11
|
+
}}
|
|
12
|
+
/>
|
|
12
13
|
|
|
13
14
|
<script>import Brique from "./Brique.svelte";
|
|
14
15
|
export let titre;
|
|
@@ -162,4 +163,4 @@ export let illustration;
|
|
|
162
163
|
.grille-contenu .illustration img {
|
|
163
164
|
max-height: 330px;
|
|
164
165
|
}
|
|
165
|
-
}</style>
|
|
166
|
+
}</style>
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
/>
|
|
15
15
|
|
|
16
16
|
<script>import Brique from "./Brique.svelte";
|
|
17
|
+
import LienExterne from "../../icones/LienExterne.svelte";
|
|
17
18
|
export let titre;
|
|
18
19
|
export let soustitre;
|
|
19
20
|
export let illustration;
|
|
@@ -38,11 +39,27 @@ export let partenaires = [];
|
|
|
38
39
|
<p>{soustitre}</p>
|
|
39
40
|
</div>
|
|
40
41
|
<div class="actions">
|
|
41
|
-
<a
|
|
42
|
+
<a
|
|
43
|
+
role="button"
|
|
44
|
+
class="action-gauche"
|
|
45
|
+
href={actiongauche.lien}
|
|
46
|
+
target={actiongauche.target ?? "_self"}
|
|
47
|
+
>
|
|
42
48
|
{actiongauche.titre}
|
|
49
|
+
{#if actiongauche.target === "_blank"}
|
|
50
|
+
<LienExterne />
|
|
51
|
+
{/if}
|
|
43
52
|
</a>
|
|
44
|
-
<a
|
|
53
|
+
<a
|
|
54
|
+
role="button"
|
|
55
|
+
class="action-droite"
|
|
56
|
+
href={actiondroite.lien}
|
|
57
|
+
target={actiondroite.target ?? "_self"}
|
|
58
|
+
>
|
|
45
59
|
{actiondroite.titre}
|
|
60
|
+
{#if actiondroite.target === "_blank"}
|
|
61
|
+
<LienExterne />
|
|
62
|
+
{/if}
|
|
46
63
|
</a>
|
|
47
64
|
</div>
|
|
48
65
|
</div>
|
|
@@ -153,6 +170,7 @@ export let partenaires = [];
|
|
|
153
170
|
grid-area: actions;
|
|
154
171
|
display: flex;
|
|
155
172
|
flex-direction: column;
|
|
173
|
+
flex-wrap: wrap;
|
|
156
174
|
gap: 16px;
|
|
157
175
|
}
|
|
158
176
|
@media (min-width: 576px) {
|
|
@@ -220,6 +238,9 @@ export let partenaires = [];
|
|
|
220
238
|
font-size: 1rem;
|
|
221
239
|
line-height: 24px;
|
|
222
240
|
border-radius: 4px;
|
|
241
|
+
display: flex;
|
|
242
|
+
align-items: center;
|
|
243
|
+
gap: 8px;
|
|
223
244
|
}
|
|
224
245
|
.hero a[role=button].action-gauche {
|
|
225
246
|
background-color: var(--brique-hero-bouton-gauche-background);
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
<svelte:options
|
|
2
2
|
customElement={{
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
titre: { reflect: false, type:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
tag: "lab-anssi-titre-multimedia",
|
|
4
|
+
props: {
|
|
5
|
+
titre: { reflect: false, type: "String", attribute: "titre" },
|
|
6
|
+
multimedia: { reflect: false, type: "Object", attribute: "multimedia" },
|
|
7
|
+
},
|
|
8
|
+
}}
|
|
9
|
+
/>
|
|
9
10
|
|
|
10
11
|
<script>import Brique from "./Brique.svelte";
|
|
11
12
|
import LecteurVideo from "./LecteurVideo.svelte";
|
|
@@ -67,6 +68,7 @@ export let multimedia;
|
|
|
67
68
|
font-size: 28px;
|
|
68
69
|
line-height: 36px;
|
|
69
70
|
margin: 0;
|
|
71
|
+
text-align: center;
|
|
70
72
|
}
|
|
71
73
|
@media (min-width: 932px) {
|
|
72
74
|
.bloc-multimedia h2 {
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
<svelte:options
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
}
|
|
1
|
+
<svelte:options
|
|
2
|
+
customElement={{
|
|
3
|
+
tag: "lab-anssi-carrousel-tuiles",
|
|
4
|
+
props: {
|
|
5
|
+
tuiles: { reflect: false, type: "Array", attribute: "tuiles" },
|
|
6
|
+
},
|
|
7
|
+
}}
|
|
8
|
+
/>
|
|
7
9
|
|
|
8
10
|
<script>import Brique from "../Brique.svelte";
|
|
9
11
|
import Tuile from "../Tuile.svelte";
|
|
@@ -115,13 +117,14 @@ const suivant = () => versDirection(1);
|
|
|
115
117
|
background: none;
|
|
116
118
|
border: none;
|
|
117
119
|
color: var(--brique-carrousel-bouton-action-texte-couleur);
|
|
118
|
-
font-size:
|
|
120
|
+
font-size: 1rem;
|
|
119
121
|
font-weight: 400;
|
|
120
|
-
line-height:
|
|
122
|
+
line-height: 1.5rem;
|
|
121
123
|
cursor: pointer;
|
|
122
124
|
display: flex;
|
|
123
125
|
align-items: center;
|
|
124
126
|
gap: 8px;
|
|
127
|
+
box-shadow: inset 0 -1px 0 var(--brique-carrousel-bouton-action-texte-couleur);
|
|
125
128
|
}
|
|
126
129
|
|
|
127
130
|
.conteneur-actions .precedent > .icone,
|
|
@@ -131,9 +134,7 @@ const suivant = () => versDirection(1);
|
|
|
131
134
|
}
|
|
132
135
|
|
|
133
136
|
.conteneur-actions button:hover {
|
|
134
|
-
|
|
135
|
-
text-underline-offset: 4px;
|
|
136
|
-
text-decoration-thickness: 2px;
|
|
137
|
+
box-shadow: inset 0 -2px 0 var(--brique-carrousel-bouton-action-texte-couleur);
|
|
137
138
|
}
|
|
138
139
|
|
|
139
140
|
@media (min-width: 932px) {
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path
|
|
2
|
+
<path
|
|
3
|
+
fill-rule="evenodd"
|
|
4
|
+
clip-rule="evenodd"
|
|
5
|
+
d="M5.21875 7.33336H13.3334V8.6667H5.21875L8.79475 12.2427L7.85208 13.1854L2.66675 8.00003L7.85208 2.8147L8.79475 3.75736L5.21875 7.33336Z"
|
|
6
|
+
fill="#042794"
|
|
7
|
+
/>
|
|
3
8
|
</svg>
|
|
4
9
|
|
|
5
10
|
<style>.visible-tablette {
|
|
@@ -38,4 +43,4 @@ svg {
|
|
|
38
43
|
|
|
39
44
|
svg path {
|
|
40
45
|
fill: var(--brique-carrousel-bouton-action-texte-couleur);
|
|
41
|
-
}</style>
|
|
46
|
+
}</style>
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path
|
|
2
|
+
<path
|
|
3
|
+
fill-rule="evenodd"
|
|
4
|
+
clip-rule="evenodd"
|
|
5
|
+
d="M5.21875 7.33336H13.3334V8.6667H5.21875L8.79475 12.2427L7.85208 13.1854L2.66675 8.00003L7.85208 2.8147L8.79475 3.75736L5.21875 7.33336Z"
|
|
6
|
+
fill="#042794"
|
|
7
|
+
/>
|
|
3
8
|
</svg>
|
|
4
9
|
|
|
5
10
|
<style>.visible-tablette {
|
|
@@ -34,4 +39,4 @@
|
|
|
34
39
|
|
|
35
40
|
svg path {
|
|
36
41
|
fill: var(--brique-carrousel-bouton-action-texte-couleur);
|
|
37
|
-
}</style>
|
|
42
|
+
}</style>
|
|
@@ -4,19 +4,9 @@ export let imageDeCouverture = "";
|
|
|
4
4
|
export let classe = "";
|
|
5
5
|
</script>
|
|
6
6
|
|
|
7
|
-
<video
|
|
8
|
-
controls
|
|
9
|
-
class={classe}
|
|
10
|
-
src={source}
|
|
11
|
-
poster={imageDeCouverture}
|
|
12
|
-
>
|
|
7
|
+
<video controls class={classe} src={source} poster={imageDeCouverture}>
|
|
13
8
|
<source src={source} type="video/mp4" />
|
|
14
|
-
<track
|
|
15
|
-
src={sourceSousTitres}
|
|
16
|
-
kind="captions"
|
|
17
|
-
srclang="fr"
|
|
18
|
-
label="Français"
|
|
19
|
-
/>
|
|
9
|
+
<track src={sourceSousTitres} kind="captions" srclang="fr" label="Français" />
|
|
20
10
|
Votre navigateur ne supporte pas la fonctionnalité de lecture de vidéos.
|
|
21
11
|
</video>
|
|
22
12
|
|
|
@@ -54,4 +44,4 @@ video {
|
|
|
54
44
|
width: 100%;
|
|
55
45
|
max-width: 792px;
|
|
56
46
|
max-height: 446px;
|
|
57
|
-
}</style>
|
|
47
|
+
}</style>
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
<svelte:options
|
|
2
2
|
customElement={{
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
tag: "lab-anssi-presentation-anssi",
|
|
4
|
+
}}
|
|
5
|
+
/>
|
|
5
6
|
|
|
6
7
|
<script>import Brique from "./Brique.svelte";
|
|
7
8
|
import { srcAsset } from "../../../assets/assets.js";
|
|
9
|
+
import LienExterne from "../../icones/LienExterne.svelte";
|
|
8
10
|
</script>
|
|
9
11
|
|
|
10
12
|
<Brique variation="transparent">
|
|
@@ -15,21 +17,25 @@ import { srcAsset } from "../../../assets/assets.js";
|
|
|
15
17
|
<div class="contenu">
|
|
16
18
|
<h2>Qu'est ce que l'ANSSI ?</h2>
|
|
17
19
|
<p>
|
|
18
|
-
Créée en 2009, l’Agence nationale de la sécurité des systèmes d’information (ANSSI) est
|
|
20
|
+
Créée en 2009, l’Agence nationale de la sécurité des systèmes d’information (ANSSI) est
|
|
21
|
+
l’autorité nationale en matière de cybersécurité et de cyberdéfense.
|
|
19
22
|
<br />
|
|
20
23
|
<br />
|
|
21
24
|
<b>
|
|
22
|
-
Son action pour la protection de la Nation face aux cyberattaques se traduit en quatre
|
|
25
|
+
Son action pour la protection de la Nation face aux cyberattaques se traduit en quatre
|
|
26
|
+
grandes missions : défendre, connaître, partager, accompagner.
|
|
23
27
|
</b>
|
|
24
28
|
</p>
|
|
25
29
|
</div>
|
|
26
30
|
<div class="encart-action">
|
|
27
|
-
<a class="action" role="button" href="https://cyber.gouv.fr/" target="_blank">
|
|
31
|
+
<a class="action" role="button" href="https://cyber.gouv.fr/" target="_blank">
|
|
32
|
+
En savoir plus
|
|
33
|
+
<LienExterne />
|
|
34
|
+
</a>
|
|
28
35
|
</div>
|
|
29
36
|
</div>
|
|
30
37
|
</Brique>
|
|
31
38
|
|
|
32
|
-
|
|
33
39
|
<style>.visible-tablette {
|
|
34
40
|
display: none !important;
|
|
35
41
|
}
|
|
@@ -133,6 +139,9 @@ import { srcAsset } from "../../../assets/assets.js";
|
|
|
133
139
|
text-decoration: none;
|
|
134
140
|
font-family: Marianne, sans-serif;
|
|
135
141
|
padding: 8px 16px;
|
|
142
|
+
display: flex;
|
|
143
|
+
align-items: center;
|
|
144
|
+
gap: 8px;
|
|
136
145
|
text-align: center;
|
|
137
146
|
font-weight: 500;
|
|
138
147
|
font-size: 1rem;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
<svelte:options
|
|
2
2
|
customElement={{
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
titre: { reflect: false, type:
|
|
6
|
-
raisons: { reflect: false, type:
|
|
7
|
-
|
|
8
|
-
illustration: { reflect: false, type:
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
tag: "lab-anssi-brique-rejoindre-la-communaute",
|
|
4
|
+
props: {
|
|
5
|
+
titre: { reflect: false, type: "String", attribute: "titre" },
|
|
6
|
+
raisons: { reflect: false, type: "Array", attribute: "raisons" },
|
|
7
|
+
action: { reflect: false, type: "Object", attribute: "action" },
|
|
8
|
+
illustration: { reflect: false, type: "Object", attribute: "illustration" },
|
|
9
|
+
},
|
|
10
|
+
}}
|
|
11
|
+
/>
|
|
11
12
|
|
|
12
13
|
<script>import Brique from "./Brique.svelte";
|
|
13
14
|
export let titre;
|
|
@@ -166,4 +167,4 @@ export let illustration;
|
|
|
166
167
|
width: 364px;
|
|
167
168
|
height: 282px;
|
|
168
169
|
}
|
|
169
|
-
}</style>
|
|
170
|
+
}</style>
|
|
@@ -77,13 +77,23 @@ export let position = null;
|
|
|
77
77
|
margin-right: 0;
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
+
.tuile .conteneur-image img {
|
|
81
|
+
max-width: 96px;
|
|
82
|
+
max-height: 96px;
|
|
83
|
+
}
|
|
80
84
|
|
|
81
85
|
p {
|
|
82
86
|
margin: 0;
|
|
83
|
-
font-size:
|
|
87
|
+
font-size: 18px;
|
|
88
|
+
line-height: 24px;
|
|
84
89
|
font-style: normal;
|
|
85
90
|
font-weight: 700;
|
|
86
|
-
|
|
91
|
+
}
|
|
92
|
+
@media (min-width: 768px) {
|
|
93
|
+
p {
|
|
94
|
+
font-size: 20px;
|
|
95
|
+
line-height: 28px;
|
|
96
|
+
}
|
|
87
97
|
}
|
|
88
98
|
|
|
89
99
|
span {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
<script>
|
|
1
|
+
<script>import LienExterne from "../../../icones/LienExterne.svelte";
|
|
2
|
+
export let index;
|
|
2
3
|
export let etapeMarelle;
|
|
3
4
|
</script>
|
|
4
5
|
|
|
@@ -15,9 +16,12 @@ export let etapeMarelle;
|
|
|
15
16
|
<h4>{etapeMarelle.titre}</h4>
|
|
16
17
|
<p>{etapeMarelle.description}</p>
|
|
17
18
|
{#if etapeMarelle.lien}
|
|
18
|
-
<a href={etapeMarelle.lien.href} target={etapeMarelle.lien.target}
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
<a href={etapeMarelle.lien.href} target={etapeMarelle.lien.target}>
|
|
20
|
+
{etapeMarelle.lien.texte}
|
|
21
|
+
{#if etapeMarelle.lien.target === "_blank"}
|
|
22
|
+
<LienExterne />
|
|
23
|
+
{/if}
|
|
24
|
+
</a>
|
|
21
25
|
{/if}
|
|
22
26
|
</div>
|
|
23
27
|
</div>
|
|
@@ -153,10 +157,15 @@ export let etapeMarelle;
|
|
|
153
157
|
}
|
|
154
158
|
|
|
155
159
|
.marelle-etape > div > a {
|
|
160
|
+
width: fit-content;
|
|
156
161
|
color: var(--brique-marelle-etapes-lien-couleur);
|
|
157
|
-
display:
|
|
162
|
+
display: flex;
|
|
163
|
+
align-items: center;
|
|
164
|
+
gap: 8px;
|
|
158
165
|
border: none;
|
|
159
|
-
text-decoration:
|
|
160
|
-
|
|
161
|
-
|
|
166
|
+
text-decoration: none;
|
|
167
|
+
box-shadow: inset 0 -1px 0 var(--brique-marelle-etapes-lien-couleur);
|
|
168
|
+
}
|
|
169
|
+
.marelle-etape > div > a:hover {
|
|
170
|
+
box-shadow: inset 0 -2px 0 var(--brique-marelle-etapes-lien-couleur);
|
|
162
171
|
}</style>
|