@lab-anssi/ui-kit 1.12.1 → 1.12.3

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 (25) hide show
  1. package/README.md +1 -0
  2. package/dist/CentreAide.svelte +13 -6
  3. package/dist/generateurImagesPlaceholders.js +1 -1
  4. package/dist/lab/ResumePssi.svelte +43 -73
  5. package/dist/lab/icones/LienExterne.svelte +20 -0
  6. package/dist/lab/icones/LienExterne.svelte.d.ts +18 -0
  7. package/dist/lab/vitrines-produits/briques/Brique.svelte +6 -2
  8. package/dist/lab/vitrines-produits/briques/BriqueContenuADeuxColonnes.svelte +11 -10
  9. package/dist/lab/vitrines-produits/briques/BriqueHero.svelte +53 -22
  10. package/dist/lab/vitrines-produits/briques/BriqueTitreMultimedia.svelte +8 -6
  11. package/dist/lab/vitrines-produits/briques/CarrouselTuiles/CarrouselTuiles.svelte +9 -9
  12. package/dist/lab/vitrines-produits/briques/CarrouselTuiles/IconeFlecheDroite.svelte +7 -2
  13. package/dist/lab/vitrines-produits/briques/CarrouselTuiles/IconeFlecheGauche.svelte +7 -2
  14. package/dist/lab/vitrines-produits/briques/LecteurVideo.svelte +3 -13
  15. package/dist/lab/vitrines-produits/briques/PresentationANSSI.svelte +15 -6
  16. package/dist/lab/vitrines-produits/briques/RejoindreLaCommunaute.svelte +10 -9
  17. package/dist/lab/vitrines-produits/briques/Tuile.svelte +12 -2
  18. package/dist/lab/vitrines-produits/briques/marelle/Etape.svelte +23 -14
  19. package/dist/lab/vitrines-produits/briques/marelle/Marelle.svelte +21 -10
  20. package/dist/lab/vitrines-produits/briques/temoignages/IconeTemoignage.svelte +8 -2
  21. package/dist/lab/vitrines-produits/briques/temoignages/Temoignages.svelte +6 -11
  22. package/dist/pied-de-page/NavigationPiedDePage.svelte +1 -3
  23. package/dist/types.d.ts +2 -1
  24. package/dist/webcomponents/lab-anssi-ui-kit.iife.js +42 -46
  25. 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`.
@@ -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("Les liens doivent respecter le type : { texte: string; href?: string; preventDefault?: boolean; id?: string }[]");
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 class="lien lien-principal" href={lien.href} target="_blank" id={lien.id} on:click={(e) =>{
56
- if(lien.preventDefault)
57
- e.preventDefault();
58
- emetEvenement('lienclique', { target: e.currentTarget });
59
- }}>{lien.texte}</a>
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
- cadre d'une démarche de renforcement continu de la sécurité du service
28
- numérique, dont plusieurs éléments clés mais non exhaustifs sont résumés
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 auditions également régulièrement nos services (audits de code et tests
41
- d'intrusion) par des prestataires qualifiés (PASSI).
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 réalisons et tenons à jour une analyse de risques de nos services en
45
- prenant appui sur la méthode EBIOS Risk Manager.
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 maintenons une classification de l'ensemble des données que nous
49
- conservons, selon leur sensibilité, afin d'assurer une protection adaptée.
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 un dossier d’architecture technique détaillé de nos services
53
- et de leurs interconnexions.
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
- Les membres de nos équipes sont sensibilisés aux bonnes pratiques de
57
- sécurité, quels que soient les profils (technique, produit, design,
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
- Vos données sont protégées par un chiffrement multi-couches, système et
66
- applicatif.
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
- matérielle et l’authentification multi-facteur est généralisée à tous les
71
- accès, permettant de mettre en œuvre une authentification forte sur
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
- rigoureuse les activités d'administration, en particulier au niveau
77
- technique&nbsp;: utilisation de comptes dédiés et séparés selon leurs
78
- usages&nbsp;; 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&nbsp;: utilisation de comptes dédiés et
57
+ séparés selon leurs usages&nbsp;; postes d'administration durcis et réservés à ce seul
79
58
  usage&nbsp;; clés d’authentification nominatives.
80
59
  </p>
81
- <p>Nous n’installons et n’utilisons que les applications strictement
82
- nécessaires.
83
- </p>
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
- défiguration, scans automatisés, veille active sur les risques émergents.
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
- l'analyse en cas d'incident.
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
- incidents de sécurité.
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
- environnement totalement séparé de la plate-forme de production.
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
- l'application en production dans un délai très court.
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&#195;&#180;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 class={variation} class:sans-marge-haute={sansMargeHaute} class:sans-marge-laterale={sansMargeLaterale}>
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
- 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
- }} />
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>
@@ -1,18 +1,20 @@
1
1
  <svelte:options
2
2
  customElement={{
3
- tag: 'lab-anssi-brique-hero',
4
- props: {
5
- titre: { reflect: false, type: 'String', attribute: 'titre' },
6
- soustitre: { reflect: false, type: 'String', attribute: 'soustitre' },
7
- illustration: { reflect: false, type: 'Object', attribute: 'illustration' },
8
- badge: { reflect: false, type: 'Boolean', attribute: 'badge' },
9
- actiongauche: { reflect: false, type: 'Object', attribute: 'actiongauche' },
10
- actiondroite: { reflect: false, type: 'Object', attribute: 'actiondroite' },
11
- partenaires: { reflect: false, type: 'Array', attribute: 'partenaires' },
12
- }
13
- }} />
3
+ tag: "lab-anssi-brique-hero",
4
+ props: {
5
+ titre: { reflect: false, type: "String", attribute: "titre" },
6
+ soustitre: { reflect: false, type: "String", attribute: "soustitre" },
7
+ illustration: { reflect: false, type: "Object", attribute: "illustration" },
8
+ badge: { reflect: false, type: "Boolean", attribute: "badge" },
9
+ actiongauche: { reflect: false, type: "Object", attribute: "actiongauche" },
10
+ actiondroite: { reflect: false, type: "Object", attribute: "actiondroite" },
11
+ partenaires: { reflect: false, type: "Array", attribute: "partenaires" },
12
+ },
13
+ }}
14
+ />
14
15
 
15
16
  <script>import Brique from "./Brique.svelte";
17
+ import LienExterne from "../../icones/LienExterne.svelte";
16
18
  export let titre;
17
19
  export let soustitre;
18
20
  export let illustration;
@@ -24,12 +26,12 @@ export let partenaires = [];
24
26
 
25
27
  <Brique>
26
28
  <div class="hero">
27
- <div class="contenu">
29
+ <div class="contenu" class:sans-partenaires={!partenaires || partenaires.length === 0}>
28
30
  {#if badge}
29
31
  <div class="section-badge">
30
- <div class="badge">
31
- <span>Service à impact national</span>
32
- </div>
32
+ <div class="badge">
33
+ <span>Service à impact national</span>
34
+ </div>
33
35
  </div>
34
36
  {/if}
35
37
  <div class="textes">
@@ -37,11 +39,27 @@ export let partenaires = [];
37
39
  <p>{soustitre}</p>
38
40
  </div>
39
41
  <div class="actions">
40
- <a role="button" class="action-gauche" href={actiongauche.lien} target="_blank">
42
+ <a
43
+ role="button"
44
+ class="action-gauche"
45
+ href={actiongauche.lien}
46
+ target={actiongauche.target ?? "_self"}
47
+ >
41
48
  {actiongauche.titre}
49
+ {#if actiongauche.target === "_blank"}
50
+ <LienExterne />
51
+ {/if}
42
52
  </a>
43
- <a role="button" class="action-droite" href={actiondroite.lien} target="_blank">
53
+ <a
54
+ role="button"
55
+ class="action-droite"
56
+ href={actiondroite.lien}
57
+ target={actiondroite.target ?? "_self"}
58
+ >
44
59
  {actiondroite.titre}
60
+ {#if actiondroite.target === "_blank"}
61
+ <LienExterne />
62
+ {/if}
45
63
  </a>
46
64
  </div>
47
65
  </div>
@@ -61,7 +79,6 @@ export let partenaires = [];
61
79
  </div>
62
80
  </Brique>
63
81
 
64
-
65
82
  <style>.visible-tablette {
66
83
  display: none !important;
67
84
  }
@@ -105,11 +122,15 @@ export let partenaires = [];
105
122
  column-gap: 24px;
106
123
  row-gap: 0px;
107
124
  }
125
+ .hero:has(.sans-partenaires) {
126
+ grid-template-areas: "contenu image" "contenu image";
127
+ }
108
128
  }
109
129
  .hero .contenu {
110
130
  grid-area: contenu;
111
131
  display: flex;
112
132
  flex-direction: column;
133
+ justify-content: center;
113
134
  }
114
135
  .hero .contenu .textes {
115
136
  display: flex;
@@ -149,6 +170,7 @@ export let partenaires = [];
149
170
  grid-area: actions;
150
171
  display: flex;
151
172
  flex-direction: column;
173
+ flex-wrap: wrap;
152
174
  gap: 16px;
153
175
  }
154
176
  @media (min-width: 576px) {
@@ -163,10 +185,16 @@ export let partenaires = [];
163
185
  }
164
186
  .hero .image {
165
187
  grid-area: image;
188
+ display: flex;
189
+ justify-content: center;
166
190
  }
167
191
  .hero .image img {
168
192
  width: 100%;
169
- max-height: 250px;
193
+ }
194
+ @media (min-width: 768px) {
195
+ .hero .image img {
196
+ max-width: 588px;
197
+ }
170
198
  }
171
199
  @media (min-width: 932px) {
172
200
  .hero .image img {
@@ -210,22 +238,25 @@ export let partenaires = [];
210
238
  font-size: 1rem;
211
239
  line-height: 24px;
212
240
  border-radius: 4px;
241
+ display: flex;
242
+ align-items: center;
243
+ gap: 8px;
213
244
  }
214
245
  .hero a[role=button].action-gauche {
215
246
  background-color: var(--brique-hero-bouton-gauche-background);
216
247
  color: var(--brique-hero-bouton-gauche-texte);
217
- border: none;
248
+ border: 1px solid transparent;
218
249
  cursor: pointer;
219
250
  }
220
251
  .hero a[role=button].action-gauche:active {
221
252
  background-color: var(--brique-hero-bouton-gauche-background-active);
222
253
  box-shadow: none;
223
- border: none;
254
+ border: 1px solid transparent;
224
255
  }
225
256
  .hero a[role=button].action-gauche:hover {
226
257
  background-color: var(--brique-hero-bouton-gauche-background-hover);
227
258
  box-shadow: none;
228
- border: none;
259
+ border: 1px solid transparent;
229
260
  }
230
261
  .hero a[role=button].action-droite {
231
262
  background-color: var(--brique-hero-bouton-droite-background);
@@ -1,11 +1,12 @@
1
1
  <svelte:options
2
2
  customElement={{
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
- }} />
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 customElement={{
2
- tag: 'lab-anssi-carrousel-tuiles',
3
- props: {
4
- tuiles: { reflect: false, type: 'Array', attribute: 'tuiles' }
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";
@@ -131,9 +133,7 @@ const suivant = () => versDirection(1);
131
133
  }
132
134
 
133
135
  .conteneur-actions button:hover {
134
- text-decoration: underline;
135
- text-underline-offset: 4px;
136
- text-decoration-thickness: 2px;
136
+ box-shadow: inset 0 -2px 0 var(--brique-carrousel-bouton-action-texte-couleur);
137
137
  }
138
138
 
139
139
  @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 fill-rule="evenodd" clip-rule="evenodd" 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" fill="#042794"/>
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 fill-rule="evenodd" clip-rule="evenodd" 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" fill="#042794"/>
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
- tag: 'lab-anssi-presentation-anssi',
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 l’autorité nationale en matière de cybersécurité et de cyberdéfense.
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 grandes missions : défendre, connaître, partager, accompagner.
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">En savoir plus</a>
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;