@lab-anssi/ui-kit 1.61.3 → 1.62.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.
Files changed (221) hide show
  1. package/README.md +102 -21
  2. package/dist/assets/assets.d.ts +1 -0
  3. package/dist/assets/assets.js +1 -0
  4. package/dist/assets/dsfr-icons.css +1 -0
  5. package/dist/composants/Alerte.svelte +83 -0
  6. package/dist/composants/Alerte.svelte.d.ts +32 -0
  7. package/dist/composants/AncresParcours.svelte +132 -0
  8. package/dist/composants/AncresParcours.svelte.d.ts +11 -0
  9. package/dist/composants/BandeauPage.svelte +218 -0
  10. package/dist/composants/BandeauPage.svelte.d.ts +58 -0
  11. package/dist/composants/BlocFonctionnalites.svelte +570 -0
  12. package/dist/composants/BlocFonctionnalites.svelte.d.ts +105 -0
  13. package/dist/composants/Bouton.svelte +156 -0
  14. package/dist/composants/Bouton.svelte.d.ts +36 -0
  15. package/dist/composants/CentreAide.svelte +223 -0
  16. package/dist/composants/CentreAide.svelte.d.ts +41 -0
  17. package/dist/composants/FiltresCatalogue.svelte +147 -0
  18. package/dist/composants/FiltresCatalogue.svelte.d.ts +15 -0
  19. package/dist/composants/Icone.svelte +42 -0
  20. package/dist/composants/Icone.svelte.d.ts +7 -0
  21. package/dist/composants/Lien.svelte +233 -0
  22. package/dist/composants/Lien.svelte.d.ts +39 -0
  23. package/dist/composants/MultiSelect.svelte +931 -0
  24. package/dist/composants/MultiSelect.svelte.d.ts +51 -0
  25. package/dist/composants/Reactions.svelte +360 -0
  26. package/dist/composants/Reactions.svelte.d.ts +23 -0
  27. package/dist/composants/ResumePssi.svelte +92 -0
  28. package/dist/composants/ResumePssi.svelte.d.ts +6 -0
  29. package/dist/composants/Tag.svelte +113 -0
  30. package/dist/composants/Tag.svelte.d.ts +35 -0
  31. package/dist/composants/blog/BandeauTitre.svelte +150 -0
  32. package/dist/composants/blog/BandeauTitre.svelte.d.ts +29 -0
  33. package/dist/composants/blog/CarteArticle.svelte +69 -0
  34. package/dist/composants/blog/CarteArticle.svelte.d.ts +8 -0
  35. package/dist/composants/blog/IconeChevronBas.svelte +22 -0
  36. package/dist/composants/blog/IconeChevronBas.svelte.d.ts +26 -0
  37. package/dist/composants/blog/IconeMenuLateral.svelte +15 -0
  38. package/dist/composants/blog/IconeMenuLateral.svelte.d.ts +26 -0
  39. package/dist/composants/blog/ListeArticles.svelte +62 -0
  40. package/dist/composants/blog/ListeArticles.svelte.d.ts +9 -0
  41. package/dist/composants/blog/ListeDeroulante.svelte +57 -0
  42. package/dist/composants/blog/ListeDeroulante.svelte.d.ts +10 -0
  43. package/dist/composants/blog/PageCrisp.svelte +244 -0
  44. package/dist/composants/blog/PageCrisp.svelte.d.ts +8 -0
  45. package/dist/composants/blog/SommaireBureau.svelte +64 -0
  46. package/dist/composants/blog/SommaireBureau.svelte.d.ts +9 -0
  47. package/dist/composants/blog/SommaireMobile.svelte +115 -0
  48. package/dist/composants/blog/SommaireMobile.svelte.d.ts +9 -0
  49. package/dist/composants/carrousel-tuiles/CarrouselTuiles.svelte +184 -0
  50. package/dist/composants/carrousel-tuiles/CarrouselTuiles.svelte.d.ts +34 -0
  51. package/dist/composants/carrousel-tuiles/IconeFlecheDroite.svelte +16 -0
  52. package/dist/composants/carrousel-tuiles/IconeFlecheDroite.svelte.d.ts +26 -0
  53. package/dist/composants/carrousel-tuiles/IconeFlecheGauche.svelte +12 -0
  54. package/dist/composants/carrousel-tuiles/IconeFlecheGauche.svelte.d.ts +26 -0
  55. package/dist/composants/carrousel-tuiles/Tuile.svelte +72 -0
  56. package/dist/composants/carrousel-tuiles/Tuile.svelte.d.ts +10 -0
  57. package/dist/composants/icones/Fleche.svelte +25 -0
  58. package/dist/composants/icones/Fleche.svelte.d.ts +6 -0
  59. package/dist/composants/icones/LienExterne.svelte +20 -0
  60. package/dist/composants/icones/LienExterne.svelte.d.ts +6 -0
  61. package/dist/composants/marelle/Etape.svelte +165 -0
  62. package/dist/composants/marelle/Etape.svelte.d.ts +32 -0
  63. package/dist/composants/marelle/Marelle.svelte +97 -0
  64. package/dist/composants/marelle/Marelle.svelte.d.ts +44 -0
  65. package/dist/composants/mes-services-cyber/bandeau/Bandeau.svelte +158 -0
  66. package/dist/composants/mes-services-cyber/bandeau/Bandeau.svelte.d.ts +3 -0
  67. package/dist/composants/mes-services-cyber/lien/LienDiagnosticCyber.svelte +125 -0
  68. package/dist/composants/mes-services-cyber/lien/LienDiagnosticCyber.svelte.d.ts +7 -0
  69. package/dist/composants/pied-de-page/NavigationPiedDePage.svelte +62 -0
  70. package/dist/composants/pied-de-page/NavigationPiedDePage.svelte.d.ts +6 -0
  71. package/dist/composants/suite-cyber/AccueilSuiteCyber.svelte +96 -0
  72. package/dist/composants/suite-cyber/AccueilSuiteCyber.svelte.d.ts +6 -0
  73. package/dist/composants/suite-cyber/LiensSuiteCyber.svelte +99 -0
  74. package/dist/composants/suite-cyber/LiensSuiteCyber.svelte.d.ts +14 -0
  75. package/dist/composants/suite-cyber/SuiteCyber.svelte +296 -0
  76. package/dist/composants/suite-cyber/SuiteCyber.svelte.d.ts +6 -0
  77. package/dist/composants/vitrines-produits/briques/Brique.svelte +50 -0
  78. package/dist/composants/vitrines-produits/briques/Brique.svelte.d.ts +9 -0
  79. package/dist/composants/vitrines-produits/briques/BriqueContenuADeuxColonnes.svelte +144 -0
  80. package/dist/composants/vitrines-produits/briques/BriqueContenuADeuxColonnes.svelte.d.ts +29 -0
  81. package/dist/composants/vitrines-produits/briques/BriqueHero.svelte +246 -0
  82. package/dist/composants/vitrines-produits/briques/BriqueHero.svelte.d.ts +31 -0
  83. package/dist/composants/vitrines-produits/briques/BriqueTitreMultimedia.svelte +50 -0
  84. package/dist/composants/vitrines-produits/briques/BriqueTitreMultimedia.svelte.d.ts +25 -0
  85. package/dist/composants/vitrines-produits/briques/LecteurVideo.svelte +14 -0
  86. package/dist/composants/vitrines-produits/briques/LecteurVideo.svelte.d.ts +9 -0
  87. package/dist/composants/vitrines-produits/briques/PresentationANSSI.svelte +148 -0
  88. package/dist/composants/vitrines-produits/briques/PresentationANSSI.svelte.d.ts +37 -0
  89. package/dist/composants/vitrines-produits/briques/RejoindreLaCommunaute.svelte +139 -0
  90. package/dist/composants/vitrines-produits/briques/RejoindreLaCommunaute.svelte.d.ts +36 -0
  91. package/dist/composants/vitrines-produits/briques/temoignages/IconeTemoignage.svelte +18 -0
  92. package/dist/composants/vitrines-produits/briques/temoignages/IconeTemoignage.svelte.d.ts +26 -0
  93. package/dist/composants/vitrines-produits/briques/temoignages/Temoignages.svelte +168 -0
  94. package/dist/composants/vitrines-produits/briques/temoignages/Temoignages.svelte.d.ts +13 -0
  95. package/dist/directives/actions.svelte.d.ts +32 -0
  96. package/dist/directives/actions.svelte.js +158 -0
  97. package/dist/dsfr/DsfrAccordion.svelte +889 -0
  98. package/dist/dsfr/DsfrAccordion.svelte.d.ts +40 -0
  99. package/dist/dsfr/DsfrAlert.svelte +2097 -0
  100. package/dist/dsfr/DsfrAlert.svelte.d.ts +36 -0
  101. package/dist/dsfr/DsfrBadge.svelte +532 -0
  102. package/dist/dsfr/DsfrBadge.svelte.d.ts +41 -0
  103. package/dist/dsfr/DsfrBadgesGroup.svelte +610 -0
  104. package/dist/dsfr/DsfrBadgesGroup.svelte.d.ts +25 -0
  105. package/dist/dsfr/DsfrBreadcrumb.svelte +657 -0
  106. package/dist/dsfr/DsfrBreadcrumb.svelte.d.ts +25 -0
  107. package/dist/dsfr/DsfrButton.svelte +1821 -0
  108. package/dist/dsfr/DsfrButton.svelte.d.ts +68 -0
  109. package/dist/dsfr/DsfrButtonsGroup.svelte +1896 -0
  110. package/dist/dsfr/DsfrButtonsGroup.svelte.d.ts +36 -0
  111. package/dist/dsfr/DsfrCallout.svelte +242 -0
  112. package/dist/dsfr/DsfrCallout.svelte.d.ts +46 -0
  113. package/dist/dsfr/DsfrCard.svelte +10223 -0
  114. package/dist/dsfr/DsfrCard.svelte.d.ts +102 -0
  115. package/dist/dsfr/DsfrCheckbox.svelte +1280 -0
  116. package/dist/dsfr/DsfrCheckbox.svelte.d.ts +69 -0
  117. package/dist/dsfr/DsfrCheckboxesGroup.svelte +1532 -0
  118. package/dist/dsfr/DsfrCheckboxesGroup.svelte.d.ts +73 -0
  119. package/dist/dsfr/DsfrConnect.svelte +511 -0
  120. package/dist/dsfr/DsfrConnect.svelte.d.ts +15 -0
  121. package/dist/dsfr/DsfrContainer.svelte +894 -0
  122. package/dist/dsfr/DsfrContainer.svelte.d.ts +31 -0
  123. package/dist/dsfr/DsfrContent.svelte +1140 -0
  124. package/dist/dsfr/DsfrContent.svelte.d.ts +60 -0
  125. package/dist/dsfr/DsfrDropdown.svelte +335 -0
  126. package/dist/dsfr/DsfrDropdown.svelte.d.ts +73 -0
  127. package/dist/dsfr/DsfrFooter.svelte +2370 -0
  128. package/dist/dsfr/DsfrFooter.svelte.d.ts +77 -0
  129. package/dist/dsfr/DsfrHeader.svelte +4162 -0
  130. package/dist/dsfr/DsfrHeader.svelte.d.ts +131 -0
  131. package/dist/dsfr/DsfrHighlight.svelte +294 -0
  132. package/dist/dsfr/DsfrHighlight.svelte.d.ts +33 -0
  133. package/dist/dsfr/DsfrInput.svelte +1270 -0
  134. package/dist/dsfr/DsfrInput.svelte.d.ts +86 -0
  135. package/dist/dsfr/DsfrLabel.svelte +438 -0
  136. package/dist/dsfr/DsfrLabel.svelte.d.ts +65 -0
  137. package/dist/dsfr/DsfrLink.svelte +1007 -0
  138. package/dist/dsfr/DsfrLink.svelte.d.ts +66 -0
  139. package/dist/dsfr/DsfrLogo.svelte +228 -0
  140. package/dist/dsfr/DsfrLogo.svelte.d.ts +11 -0
  141. package/dist/dsfr/DsfrMessagesGroup.svelte +260 -0
  142. package/dist/dsfr/DsfrMessagesGroup.svelte.d.ts +46 -0
  143. package/dist/dsfr/DsfrModal.svelte +2983 -0
  144. package/dist/dsfr/DsfrModal.svelte.d.ts +56 -0
  145. package/dist/dsfr/DsfrNavigation.svelte +7626 -0
  146. package/dist/dsfr/DsfrNotice.svelte +2948 -0
  147. package/dist/dsfr/DsfrNotice.svelte.d.ts +37 -0
  148. package/dist/dsfr/DsfrPagination.svelte +1036 -0
  149. package/dist/dsfr/DsfrPagination.svelte.d.ts +35 -0
  150. package/dist/dsfr/DsfrQuote.svelte +646 -0
  151. package/dist/dsfr/DsfrQuote.svelte.d.ts +29 -0
  152. package/dist/dsfr/DsfrRadio.svelte +1307 -0
  153. package/dist/dsfr/DsfrRadio.svelte.d.ts +37 -0
  154. package/dist/dsfr/DsfrRadiosGroup.svelte +1629 -0
  155. package/dist/dsfr/DsfrRadiosGroup.svelte.d.ts +76 -0
  156. package/dist/dsfr/DsfrRange.svelte +1329 -0
  157. package/dist/dsfr/DsfrRange.svelte.d.ts +77 -0
  158. package/dist/dsfr/DsfrSearch.svelte +2015 -0
  159. package/dist/dsfr/DsfrSearch.svelte.d.ts +51 -0
  160. package/dist/dsfr/DsfrSegmented.svelte +422 -0
  161. package/dist/dsfr/DsfrSegmented.svelte.d.ts +34 -0
  162. package/dist/dsfr/DsfrSelect.svelte +1068 -0
  163. package/dist/dsfr/DsfrSelect.svelte.d.ts +86 -0
  164. package/dist/dsfr/DsfrShare.svelte +2228 -0
  165. package/dist/dsfr/DsfrShare.svelte.d.ts +40 -0
  166. package/dist/dsfr/DsfrSideMenu.svelte +1211 -0
  167. package/dist/dsfr/DsfrSideMenu.svelte.d.ts +34 -0
  168. package/dist/dsfr/DsfrSkipLink.svelte +990 -0
  169. package/dist/dsfr/DsfrSkipLink.svelte.d.ts +13 -0
  170. package/dist/dsfr/DsfrStepper.svelte +340 -0
  171. package/dist/dsfr/DsfrStepper.svelte.d.ts +18 -0
  172. package/dist/dsfr/DsfrTable.svelte +829 -0
  173. package/dist/dsfr/DsfrTable.svelte.d.ts +202 -0
  174. package/dist/dsfr/DsfrTabnav.svelte +1149 -0
  175. package/dist/dsfr/DsfrTabnav.svelte.d.ts +36 -0
  176. package/dist/dsfr/DsfrTabs.svelte +925 -0
  177. package/dist/dsfr/DsfrTabs.svelte.d.ts +28 -0
  178. package/dist/dsfr/DsfrTag.svelte +1269 -0
  179. package/dist/dsfr/DsfrTag.svelte.d.ts +59 -0
  180. package/dist/dsfr/DsfrTagsGroup.svelte +1351 -0
  181. package/dist/dsfr/DsfrTagsGroup.svelte.d.ts +37 -0
  182. package/dist/dsfr/DsfrTextarea.svelte +1385 -0
  183. package/dist/dsfr/DsfrTextarea.svelte.d.ts +72 -0
  184. package/dist/dsfr/DsfrTile.svelte +7645 -0
  185. package/dist/dsfr/DsfrTile.svelte.d.ts +79 -0
  186. package/dist/dsfr/DsfrToggle.svelte +1453 -0
  187. package/dist/dsfr/DsfrToggle.svelte.d.ts +56 -0
  188. package/dist/dsfr/DsfrTooltip.svelte +396 -0
  189. package/dist/dsfr/DsfrTooltip.svelte.d.ts +36 -0
  190. package/dist/dsfr/DsfrTranscription.svelte +2962 -0
  191. package/dist/dsfr/DsfrTranscription.svelte.d.ts +39 -0
  192. package/dist/dsfr/DsfrTranslate.svelte +1384 -0
  193. package/dist/dsfr/DsfrTranslate.svelte.d.ts +19 -0
  194. package/dist/dsfr/DsfrUser.svelte +736 -0
  195. package/dist/dsfr/DsfrUser.svelte.d.ts +65 -0
  196. package/dist/index.d.ts +79 -0
  197. package/dist/index.js +79 -0
  198. package/dist/styles/apparence-bouton.scss +154 -0
  199. package/dist/styles/dsfr-icons.css +1 -0
  200. package/dist/styles/dsfr-icons.scss +4 -0
  201. package/dist/styles/dsfr-variables.scss +28 -0
  202. package/dist/styles/mixins-dsfr.scss +226 -0
  203. package/dist/styles/mixins.scss +51 -0
  204. package/dist/types/commun.d.ts +63 -0
  205. package/dist/types/commun.js +1 -0
  206. package/dist/types/global.d.ts +24 -0
  207. package/dist/types/global.js +9 -0
  208. package/dist/types/index.d.ts +2 -0
  209. package/dist/types/index.js +1 -0
  210. package/dist/ui-kit-components.json +142 -100
  211. package/dist/utilitaires/createFormValidation.svelte.d.ts +34 -0
  212. package/dist/utilitaires/createFormValidation.svelte.js +183 -0
  213. package/dist/utilitaires/icons-stylesheet.d.ts +370 -0
  214. package/dist/utilitaires/icons-stylesheet.js +33 -0
  215. package/dist/utilitaires/index.d.ts +14 -0
  216. package/dist/utilitaires/index.js +26 -0
  217. package/dist/web-types.json +149 -101
  218. package/dist/webcomponents/lab-anssi-ui-kit.iife.js +36 -9
  219. package/dist/webcomponents/lab-anssi-ui-kit.jsx.d.ts +42 -24
  220. package/package.json +49 -43
  221. package/dist/index.html +0 -0
@@ -0,0 +1,1036 @@
1
+ <svelte:options
2
+ customElement={{
3
+ tag: "dsfr-pagination",
4
+ props: {
5
+ pages: { attribute: "pages", type: "Array" },
6
+ hasFirstAndLast: { attribute: "has-first-and-last", type: "Boolean" },
7
+ first: { attribute: "first", type: "Object" },
8
+ last: { attribute: "last", type: "Object" },
9
+ firstAndLastDisplayedLg: { attribute: "first-and-last-displayed-lg", type: "Boolean" },
10
+ hasPrevAndNext: { attribute: "has-prev-and-next", type: "Boolean" },
11
+ prev: { attribute: "prev", type: "Object" },
12
+ next: { attribute: "next", type: "Object" },
13
+ prevAndNextDisplayedLg: { attribute: "prev-and-next-displayed-lg", type: "Boolean" },
14
+ prevAndNextHasLgLabel: { attribute: "prev-and-next-has-lg-label", type: "Boolean" },
15
+ currentPageIndex: { attribute: "current-page-index", type: "Number" },
16
+ },
17
+ }}
18
+ />
19
+
20
+ <script lang="ts">import { setThemeable } from "../utilitaires";
21
+ setThemeable($host());
22
+ let { pages = [], hasFirstAndLast = false, first, last, firstAndLastDisplayedLg = false, hasPrevAndNext = false, prev, next, prevAndNextDisplayedLg = false, prevAndNextHasLgLabel = false, currentPageIndex, onpagechange } = $props();
23
+ const HIDDEN_CLASS = "fr-hidden fr-unhidden-lg";
24
+ const disabledFirst = $derived(currentPageIndex === 1);
25
+ const disabledLast = $derived(currentPageIndex === pages.length);
26
+ /**
27
+ * Retourne la classe CSS à appliquer pour masquer ou styliser un lien de pagination selon sa position et ses propriétés d'affichage.
28
+ *
29
+ * @param {PagePosition} position - La position du lien dans la pagination ("first", "last", "prev", "next", etc.).
30
+ * @param {Object} link - L'objet représentant le lien de pagination, contenant notamment la propriété `displayedLg`.
31
+ * @returns {string|undefined} La classe CSS à appliquer pour masquer ou styliser le lien, ou `undefined` si aucune classe n'est nécessaire.
32
+ */
33
+ function getHiddenClass(position, link) {
34
+ const isFirstOrLast = position === "first" || position === "last";
35
+ const isPrevOrNext = position === "prev" || position === "next";
36
+ if (!isFirstOrLast && !isPrevOrNext && link.displayedLg) {
37
+ return HIDDEN_CLASS;
38
+ } else if (isFirstOrLast && firstAndLastDisplayedLg) {
39
+ return HIDDEN_CLASS;
40
+ } else if (isPrevOrNext && prevAndNextDisplayedLg) {
41
+ return HIDDEN_CLASS;
42
+ } else if (isPrevOrNext && prevAndNextHasLgLabel) {
43
+ return "fr-pagination__link--lg-label";
44
+ }
45
+ return undefined;
46
+ }
47
+ /**
48
+ * Détermine la valeur de l'attribut `aria-current` pour une page de pagination.
49
+ *
50
+ * @param {number} index - L'index de la page à vérifier.
51
+ * @returns {AriaCurrent | undefined} Retourne "page" si l'index correspond à la page courante, sinon `undefined`.
52
+ */
53
+ function setAriaCurrent(index) {
54
+ if (index === null) return undefined;
55
+ return index + 1 === currentPageIndex ? "page" : undefined;
56
+ }
57
+ /**
58
+ * Génère ou annule le lien de pagination en fonction de la position et de l'état de désactivation.
59
+ *
60
+ * @param {string} href - L'URL à utiliser pour le lien de pagination.
61
+ * @param {PagePosition} position - La position de la page ("first", "prev", "next", "last").
62
+ * @returns {string | undefined} L'URL du lien si la position n'est pas désactivée, sinon `undefined`.
63
+ */
64
+ function setHref(href, position) {
65
+ if (position && ["first", "prev"].includes(position) && disabledFirst || position && ["last", "next"].includes(position) && disabledLast) {
66
+ return undefined;
67
+ }
68
+ return href;
69
+ }
70
+ /**
71
+ * Détermine si un lien de pagination doit être désactivé selon sa position.
72
+ *
73
+ * @param {PagePosition} position - La position du lien de pagination ('first', 'prev', 'next', 'last').
74
+ * @returns {boolean | string | undefined} Retourne `true` si le lien doit être désactivé, sinon `undefined`.
75
+ */
76
+ function setAriaDisabled(position) {
77
+ if (position && ["first", "prev"].includes(position) && disabledFirst || position && ["last", "next"].includes(position) && disabledLast) {
78
+ return "true";
79
+ }
80
+ return undefined;
81
+ }
82
+ /**
83
+ * Gère le clic sur un lien de pagination et appelle le callback de changement de page.
84
+ *
85
+ * @param {MouseEvent} e - L'événement clic.
86
+ * @param {number | null | undefined} index - L'index de la page cliquée, ou null/undefined pour les boutons spéciaux (first, prev, next, last).
87
+ * @param {PagePosition} [position] - La position du lien cliqué ('first', 'prev', 'next', 'last', ou undefined pour un numéro de page).
88
+ */
89
+ function handlePageClick(e, index, position) {
90
+ if (!onpagechange) return;
91
+ e.preventDefault();
92
+ if ((position === "first" || position === "prev") && disabledFirst) return;
93
+ if ((position === "last" || position === "next") && disabledLast) return;
94
+ let targetPage;
95
+ if (position === "prev") targetPage = (currentPageIndex ?? 2) - 1;
96
+ else if (position === "next") targetPage = (currentPageIndex ?? 0) + 1;
97
+ else if (position === "first") targetPage = 1;
98
+ else if (position === "last") targetPage = pages.length;
99
+ else targetPage = (index ?? 0) + 1;
100
+ onpagechange(targetPage);
101
+ }
102
+ </script>
103
+
104
+ {#snippet pageItem(link: PageLink, index?: number | null, position?: PagePosition)}
105
+ <li>
106
+ <a
107
+ class={[
108
+ "fr-pagination__link",
109
+ getHiddenClass(position, link),
110
+ { [`fr-pagination__link--${position}`]: position },
111
+ ]}
112
+ href={setHref(link.href ?? "", position)}
113
+ title={link.title}
114
+ aria-current={setAriaCurrent(index ?? 0)}
115
+ aria-disabled={setAriaDisabled(position) as boolean | undefined}
116
+ onclick={(e) => handlePageClick(e, index, position)}
117
+ >
118
+ {link.label}
119
+ </a>
120
+ </li>
121
+ {/snippet}
122
+
123
+ <nav
124
+ role="navigation"
125
+ class="fr-pagination"
126
+ aria-label="Pagination"
127
+ data-fr-analytics-page-total="132"
128
+ >
129
+ <ul class="fr-pagination__list">
130
+ {#if hasFirstAndLast && first}
131
+ {@render pageItem(first, null, "first")}
132
+ {/if}
133
+
134
+ {#if hasPrevAndNext && prev}
135
+ {@render pageItem(prev, null, "prev")}
136
+ {/if}
137
+
138
+ {#each pages as page, index (index)}
139
+ {@render pageItem(page, index)}
140
+ {/each}
141
+
142
+ {#if hasPrevAndNext && next}
143
+ {@render pageItem(next, null, "next")}
144
+ {/if}
145
+
146
+ {#if hasFirstAndLast && last}
147
+ {@render pageItem(last, null, "last")}
148
+ {/if}
149
+ </ul>
150
+ </nav>
151
+
152
+ <style>/*!
153
+ * DSFR v1.14.4 | SPDX-License-Identifier: MIT | License-Filename: LICENSE.md | restricted use (see terms and conditions)
154
+ *//* ¯¯¯¯¯¯¯¯¯ *\
155
+ PAGINATION
156
+ \* ˍˍˍˍˍˍˍˍˍ */
157
+ .fr-pagination__link {
158
+ --text-spacing: 0;
159
+ --title-spacing: 0;
160
+ display: inline-flex;
161
+ flex-direction: row;
162
+ align-items: center;
163
+ width: -moz-fit-content;
164
+ width: fit-content;
165
+ --hover-tint: var(--hover);
166
+ font-size: 0.875rem;
167
+ line-height: 1.5rem;
168
+ min-height: 2rem;
169
+ padding: 0.25rem 0.75rem;
170
+ min-width: 2rem;
171
+ margin-left: 0.5rem;
172
+ margin-right: 0.5rem;
173
+ margin-bottom: 1rem;
174
+
175
+ --underline-img: none;
176
+ position: relative;
177
+ }
178
+
179
+ .fr-pagination__link::before,
180
+ .fr-pagination__link::after {
181
+ display: block;
182
+ }
183
+
184
+ .fr-pagination {
185
+ --underline-img: none;
186
+ --ul-type: none;
187
+ --ol-type: none;
188
+ --ul-start: 0;
189
+ --ol-start: 0;
190
+ --xl-block: 0;
191
+ --li-bottom: 0;
192
+ --ol-content: none;
193
+ color: var(--text-action-high-grey);
194
+ }
195
+
196
+ .fr-pagination__list {
197
+ display: flex;
198
+ flex-direction: row;
199
+ align-items: center;
200
+ justify-content: flex-start;
201
+ flex-wrap: wrap;
202
+ }
203
+
204
+ .fr-pagination__list > *:first-child,
205
+ .fr-pagination__list > *:first-child * {
206
+ margin-left: 0;
207
+ }
208
+
209
+ .fr-pagination__list > *:last-child,
210
+ .fr-pagination__list > *:last-child * {
211
+ margin-right: 0;
212
+ }
213
+
214
+ .fr-pagination__link:not([href])[aria-current]:not([aria-current=false]) {
215
+ cursor: default;
216
+ pointer-events: none;
217
+ }
218
+
219
+ .fr-pagination__link--first {
220
+ font-size: 0.875rem;
221
+ line-height: 1.5rem;
222
+ min-height: 2rem;
223
+ padding: 0.25rem 0.75rem;
224
+ overflow: hidden;
225
+ white-space: nowrap;
226
+ max-width: 2rem;
227
+ max-height: 2rem;
228
+ padding-left: 0.5rem;
229
+ padding-right: 0.5rem;
230
+ }
231
+
232
+ .fr-pagination__link--first::before {
233
+ --icon-size: 1rem;
234
+ margin-left: 0;
235
+ margin-right: 0.5rem;
236
+ flex: 0 0 auto;
237
+ display: inline-block;
238
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
239
+ background-color: currentColor;
240
+ width: var(--icon-size);
241
+ height: var(--icon-size);
242
+ -webkit-mask-size: 100% 100%;
243
+ mask-size: 100% 100%;
244
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/fr--arrow-left-s-first-line.svg");
245
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/fr--arrow-left-s-first-line.svg");
246
+ content: "";
247
+ }
248
+
249
+ .fr-pagination__link--first.fr-pagination__link--label {
250
+ font-size: 0.875rem;
251
+ line-height: 1.5rem;
252
+ min-height: 2rem;
253
+ padding: 0.25rem 0.75rem;
254
+ overflow: initial;
255
+ max-width: 100%;
256
+ max-height: none;
257
+ }
258
+
259
+ .fr-pagination__link--first.fr-pagination__link--label::before {
260
+ --icon-size: 1rem;
261
+ margin-left: -0.125rem;
262
+ margin-right: 0.5rem;
263
+ flex: 0 0 auto;
264
+ display: inline-block;
265
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
266
+ background-color: currentColor;
267
+ width: var(--icon-size);
268
+ height: var(--icon-size);
269
+ -webkit-mask-size: 100% 100%;
270
+ mask-size: 100% 100%;
271
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/fr--arrow-left-s-first-line.svg");
272
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/fr--arrow-left-s-first-line.svg");
273
+ content: "";
274
+ }
275
+
276
+ .fr-pagination__link--prev {
277
+ font-size: 0.875rem;
278
+ line-height: 1.5rem;
279
+ min-height: 2rem;
280
+ padding: 0.25rem 0.75rem;
281
+ overflow: hidden;
282
+ white-space: nowrap;
283
+ max-width: 2rem;
284
+ max-height: 2rem;
285
+ padding-left: 0.5rem;
286
+ padding-right: 0.5rem;
287
+ }
288
+
289
+ .fr-pagination__link--prev::before {
290
+ --icon-size: 1rem;
291
+ margin-left: 0;
292
+ margin-right: 0.5rem;
293
+ flex: 0 0 auto;
294
+ display: inline-block;
295
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
296
+ background-color: currentColor;
297
+ width: var(--icon-size);
298
+ height: var(--icon-size);
299
+ -webkit-mask-size: 100% 100%;
300
+ mask-size: 100% 100%;
301
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/arrow-left-s-line.svg");
302
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/arrow-left-s-line.svg");
303
+ content: "";
304
+ }
305
+
306
+ .fr-pagination__link--prev.fr-pagination__link--label {
307
+ font-size: 0.875rem;
308
+ line-height: 1.5rem;
309
+ min-height: 2rem;
310
+ padding: 0.25rem 0.75rem;
311
+ overflow: initial;
312
+ max-width: 100%;
313
+ max-height: none;
314
+ }
315
+
316
+ .fr-pagination__link--prev.fr-pagination__link--label::before {
317
+ --icon-size: 1rem;
318
+ margin-left: -0.125rem;
319
+ margin-right: 0.5rem;
320
+ flex: 0 0 auto;
321
+ display: inline-block;
322
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
323
+ background-color: currentColor;
324
+ width: var(--icon-size);
325
+ height: var(--icon-size);
326
+ -webkit-mask-size: 100% 100%;
327
+ mask-size: 100% 100%;
328
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/arrow-left-s-line.svg");
329
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/arrow-left-s-line.svg");
330
+ content: "";
331
+ }
332
+
333
+ .fr-pagination__link--next {
334
+ font-size: 0.875rem;
335
+ line-height: 1.5rem;
336
+ min-height: 2rem;
337
+ padding: 0.25rem 0.75rem;
338
+ overflow: hidden;
339
+ white-space: nowrap;
340
+ max-width: 2rem;
341
+ max-height: 2rem;
342
+ padding-left: 0.5rem;
343
+ padding-right: 0.5rem;
344
+ }
345
+
346
+ .fr-pagination__link--next::before {
347
+ --icon-size: 1rem;
348
+ margin-left: 0;
349
+ margin-right: 0.5rem;
350
+ flex: 0 0 auto;
351
+ display: inline-block;
352
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
353
+ background-color: currentColor;
354
+ width: var(--icon-size);
355
+ height: var(--icon-size);
356
+ -webkit-mask-size: 100% 100%;
357
+ mask-size: 100% 100%;
358
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/arrow-right-s-line.svg");
359
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/arrow-right-s-line.svg");
360
+ content: "";
361
+ }
362
+
363
+ .fr-pagination__link--next.fr-pagination__link--label {
364
+ font-size: 0.875rem;
365
+ line-height: 1.5rem;
366
+ min-height: 2rem;
367
+ padding: 0.25rem 0.75rem;
368
+ overflow: initial;
369
+ max-width: 100%;
370
+ max-height: none;
371
+ }
372
+
373
+ .fr-pagination__link--next.fr-pagination__link--label::after {
374
+
375
+ --icon-size: 1rem;
376
+ margin-right: -0.125rem;
377
+ margin-left: 0.5rem;
378
+ flex: 0 0 auto;
379
+ display: inline-block;
380
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
381
+ background-color: currentColor;
382
+ width: var(--icon-size);
383
+ height: var(--icon-size);
384
+ -webkit-mask-size: 100% 100%;
385
+ mask-size: 100% 100%;
386
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/arrow-right-s-line.svg");
387
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/arrow-right-s-line.svg");
388
+ content: "";
389
+ }
390
+
391
+ .fr-pagination__link--next.fr-pagination__link--label::before {
392
+ content: none;
393
+ }
394
+
395
+ .fr-pagination__link--last {
396
+ font-size: 0.875rem;
397
+ line-height: 1.5rem;
398
+ min-height: 2rem;
399
+ padding: 0.25rem 0.75rem;
400
+ overflow: hidden;
401
+ white-space: nowrap;
402
+ max-width: 2rem;
403
+ max-height: 2rem;
404
+ padding-left: 0.5rem;
405
+ padding-right: 0.5rem;
406
+ }
407
+
408
+ .fr-pagination__link--last::before {
409
+ --icon-size: 1rem;
410
+ margin-left: 0;
411
+ margin-right: 0.5rem;
412
+ flex: 0 0 auto;
413
+ display: inline-block;
414
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
415
+ background-color: currentColor;
416
+ width: var(--icon-size);
417
+ height: var(--icon-size);
418
+ -webkit-mask-size: 100% 100%;
419
+ mask-size: 100% 100%;
420
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/fr--arrow-right-s-last-line.svg");
421
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/fr--arrow-right-s-last-line.svg");
422
+ content: "";
423
+ }
424
+
425
+ .fr-pagination__link--last.fr-pagination__link--label {
426
+ font-size: 0.875rem;
427
+ line-height: 1.5rem;
428
+ min-height: 2rem;
429
+ padding: 0.25rem 0.75rem;
430
+ overflow: initial;
431
+ max-width: 100%;
432
+ max-height: none;
433
+ }
434
+
435
+ .fr-pagination__link--last.fr-pagination__link--label::after {
436
+
437
+ --icon-size: 1rem;
438
+ margin-right: -0.125rem;
439
+ margin-left: 0.5rem;
440
+ flex: 0 0 auto;
441
+ display: inline-block;
442
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
443
+ background-color: currentColor;
444
+ width: var(--icon-size);
445
+ height: var(--icon-size);
446
+ -webkit-mask-size: 100% 100%;
447
+ mask-size: 100% 100%;
448
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/fr--arrow-right-s-last-line.svg");
449
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/fr--arrow-right-s-last-line.svg");
450
+ content: "";
451
+ }
452
+
453
+ .fr-pagination__link--last.fr-pagination__link--label::before {
454
+ content: none;
455
+ }
456
+
457
+ .fr-pagination__link[aria-current]:not([aria-current=false]) {
458
+ background-color: var(--background-active-blue-france);
459
+
460
+ --idle: transparent;
461
+ --hover: var(--background-active-blue-france-hover);
462
+ --active: var(--background-active-blue-france-active);
463
+ color: var(--text-inverted-blue-france);
464
+ }
465
+
466
+ .fr-pagination__link:not([aria-current]):disabled,
467
+ a.fr-pagination__link:not([aria-current]):not([href]),
468
+ a.fr-pagination__link[aria-current=false]:not([href]),
469
+ .fr-pagination__link[aria-current=false]:disabled {
470
+ color: var(--text-disabled-grey);
471
+ }
472
+ @media (min-width: 36em) {
473
+ /*! media sm */
474
+ }
475
+ @media (min-width: 48em) {
476
+ /*! media md */
477
+ }
478
+ @media (min-width: 62em) {
479
+ /*! media lg */
480
+ .fr-pagination__link--first.fr-pagination__link--lg-label {
481
+ font-size: 0.875rem;
482
+ line-height: 1.5rem;
483
+ min-height: 2rem;
484
+ padding: 0.25rem 0.75rem;
485
+ overflow: initial;
486
+ max-width: 100%;
487
+ max-height: none;
488
+ }
489
+
490
+ .fr-pagination__link--first.fr-pagination__link--lg-label::before {
491
+ --icon-size: 1rem;
492
+ margin-left: -0.125rem;
493
+ margin-right: 0.5rem;
494
+ flex: 0 0 auto;
495
+ display: inline-block;
496
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
497
+ background-color: currentColor;
498
+ width: var(--icon-size);
499
+ height: var(--icon-size);
500
+ -webkit-mask-size: 100% 100%;
501
+ mask-size: 100% 100%;
502
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/fr--arrow-left-s-first-line.svg");
503
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/fr--arrow-left-s-first-line.svg");
504
+ content: "";
505
+ }
506
+
507
+ .fr-pagination__link--prev.fr-pagination__link--lg-label {
508
+ font-size: 0.875rem;
509
+ line-height: 1.5rem;
510
+ min-height: 2rem;
511
+ padding: 0.25rem 0.75rem;
512
+ overflow: initial;
513
+ max-width: 100%;
514
+ max-height: none;
515
+ }
516
+
517
+ .fr-pagination__link--prev.fr-pagination__link--lg-label::before {
518
+ --icon-size: 1rem;
519
+ margin-left: -0.125rem;
520
+ margin-right: 0.5rem;
521
+ flex: 0 0 auto;
522
+ display: inline-block;
523
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
524
+ background-color: currentColor;
525
+ width: var(--icon-size);
526
+ height: var(--icon-size);
527
+ -webkit-mask-size: 100% 100%;
528
+ mask-size: 100% 100%;
529
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/arrow-left-s-line.svg");
530
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/arrow-left-s-line.svg");
531
+ content: "";
532
+ }
533
+
534
+ .fr-pagination__link--next.fr-pagination__link--lg-label {
535
+ font-size: 0.875rem;
536
+ line-height: 1.5rem;
537
+ min-height: 2rem;
538
+ padding: 0.25rem 0.75rem;
539
+ overflow: initial;
540
+ max-width: 100%;
541
+ max-height: none;
542
+ }
543
+
544
+ .fr-pagination__link--next.fr-pagination__link--lg-label::after {
545
+
546
+ --icon-size: 1rem;
547
+ margin-right: -0.125rem;
548
+ margin-left: 0.5rem;
549
+ flex: 0 0 auto;
550
+ display: inline-block;
551
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
552
+ background-color: currentColor;
553
+ width: var(--icon-size);
554
+ height: var(--icon-size);
555
+ -webkit-mask-size: 100% 100%;
556
+ mask-size: 100% 100%;
557
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/arrow-right-s-line.svg");
558
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/arrow-right-s-line.svg");
559
+ content: "";
560
+ }
561
+
562
+ .fr-pagination__link--next.fr-pagination__link--lg-label::before {
563
+ content: none;
564
+ }
565
+
566
+ .fr-pagination__link--last.fr-pagination__link--lg-label {
567
+ font-size: 0.875rem;
568
+ line-height: 1.5rem;
569
+ min-height: 2rem;
570
+ padding: 0.25rem 0.75rem;
571
+ overflow: initial;
572
+ max-width: 100%;
573
+ max-height: none;
574
+ }
575
+
576
+ .fr-pagination__link--last.fr-pagination__link--lg-label::after {
577
+
578
+ --icon-size: 1rem;
579
+ margin-right: -0.125rem;
580
+ margin-left: 0.5rem;
581
+ flex: 0 0 auto;
582
+ display: inline-block;
583
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
584
+ background-color: currentColor;
585
+ width: var(--icon-size);
586
+ height: var(--icon-size);
587
+ -webkit-mask-size: 100% 100%;
588
+ mask-size: 100% 100%;
589
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/fr--arrow-right-s-last-line.svg");
590
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/arrows/fr--arrow-right-s-last-line.svg");
591
+ content: "";
592
+ }
593
+
594
+ .fr-pagination__link--last.fr-pagination__link--lg-label::before {
595
+ content: none;
596
+ }
597
+ }
598
+ @media (min-width: 78em) {
599
+ /*! media xl */
600
+ }
601
+ @media (-ms-high-contrast: active), (forced-colors: active) {
602
+ .fr-pagination__link:not([href]):disabled:not([aria-current]),
603
+ a.fr-pagination__link:not([href]):not([aria-current]) {
604
+ color: graytext;
605
+ }
606
+
607
+ .fr-pagination__link--first::before {
608
+ forced-color-adjust: none;
609
+ }
610
+
611
+ .fr-pagination__link--first.fr-pagination__link--label::before {
612
+ forced-color-adjust: none;
613
+ }
614
+
615
+ .fr-pagination__link--prev::before {
616
+ forced-color-adjust: none;
617
+ }
618
+
619
+ .fr-pagination__link--prev.fr-pagination__link--label::before {
620
+ forced-color-adjust: none;
621
+ }
622
+
623
+ .fr-pagination__link--next::before {
624
+ forced-color-adjust: none;
625
+ }
626
+
627
+ .fr-pagination__link--next.fr-pagination__link--label::after {
628
+ forced-color-adjust: none;
629
+ }
630
+
631
+ .fr-pagination__link--last::before {
632
+ forced-color-adjust: none;
633
+ }
634
+
635
+ .fr-pagination__link--last.fr-pagination__link--label::after {
636
+ forced-color-adjust: none;
637
+ }
638
+ }
639
+ @media (min-width: 62em) and (-ms-high-contrast: active), (min-width: 62em) and (forced-colors: active) {
640
+ .fr-pagination__link--first.fr-pagination__link--lg-label::before {
641
+ forced-color-adjust: none;
642
+ }
643
+
644
+ .fr-pagination__link--prev.fr-pagination__link--lg-label::before {
645
+ forced-color-adjust: none;
646
+ }
647
+
648
+ .fr-pagination__link--next.fr-pagination__link--lg-label::after {
649
+ forced-color-adjust: none;
650
+ }
651
+
652
+ .fr-pagination__link--last.fr-pagination__link--lg-label::after {
653
+ forced-color-adjust: none;
654
+ }
655
+ }
656
+ @media (forced-colors: active), (prefers-contrast: more) {
657
+ .fr-pagination__link[aria-current]:not([aria-current=false]) {
658
+ justify-content: center;
659
+ padding: calc(0.25rem - 1px) calc(0.75rem - 1px);
660
+ border: 1px solid var(--border-active-blue-france);
661
+ }
662
+ }
663
+ a {
664
+ text-decoration: var(--text-decoration);
665
+ color: inherit;
666
+ }
667
+ @media (-ms-high-contrast: active), (forced-colors: active) {
668
+ a:not([href]) {
669
+ color: graytext;
670
+ }
671
+ }
672
+
673
+ :root {
674
+ --underline-max-width: 100%;
675
+ --underline-hover-width: 0;
676
+ --underline-idle-width: var(--underline-max-width);
677
+ --underline-x: calc(var(--underline-max-width) * 0);
678
+ --underline-thickness: 0.0625em;
679
+ --underline-img: linear-gradient(0deg, currentColor, currentColor);
680
+ --external-link-content: '';
681
+ --text-decoration: none;
682
+ }
683
+
684
+ [href] {
685
+ background-image: var(--underline-img), var(--underline-img);
686
+ background-position: var(--underline-x) 100%, var(--underline-x) calc(100% - var(--underline-thickness));
687
+ background-repeat: no-repeat, no-repeat;
688
+ transition: background-size 0s;
689
+ background-size: var(--underline-hover-width) calc(var(--underline-thickness) * 2), var(--underline-idle-width) var(--underline-thickness);
690
+ }
691
+ @media (-ms-high-contrast: active), (forced-colors: active) {
692
+ [href], [href]:visited {
693
+ color: linktext;
694
+ }
695
+ }
696
+
697
+ [target=_blank]::after {
698
+ flex: 0 0 auto;
699
+ display: inline-block;
700
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
701
+ background-color: currentColor;
702
+ width: var(--icon-size);
703
+ height: var(--icon-size);
704
+ -webkit-mask-size: 100% 100%;
705
+ mask-size: 100% 100%;
706
+ }
707
+ [target=_blank]::after {
708
+ --icon-size: 1rem;
709
+ }
710
+ [target=_blank]::after {
711
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/system/external-link-line.svg");
712
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/system/external-link-line.svg");
713
+ }
714
+ @media (-ms-high-contrast: active), (forced-colors: active) {
715
+ [target=_blank]::after {
716
+ forced-color-adjust: none;
717
+ background-color: linktext;
718
+ }
719
+ }
720
+ [target=_blank]::after {
721
+ content: var(--external-link-content);
722
+ margin-left: 0.25rem;
723
+ }
724
+ [target=_blank][class^=fr-icon-]::after, [target=_blank][class*=" fr-icon-"]::after, [target=_blank][class^=fr-fi-]::after, [target=_blank][class*=" fr-fi-"]::after {
725
+ flex: 0 0 auto;
726
+ display: inline-block;
727
+ vertical-align: calc((0.75em - var(--icon-size)) * 0.5);
728
+ background-color: currentColor;
729
+ width: var(--icon-size);
730
+ height: var(--icon-size);
731
+ -webkit-mask-size: 100% 100%;
732
+ mask-size: 100% 100%;
733
+ }
734
+ [target=_blank][class^=fr-icon-]::after, [target=_blank][class*=" fr-icon-"]::after, [target=_blank][class^=fr-fi-]::after, [target=_blank][class*=" fr-fi-"]::after {
735
+ --icon-size: 1rem;
736
+ }
737
+ [target=_blank][class^=fr-icon-]::after, [target=_blank][class*=" fr-icon-"]::after, [target=_blank][class^=fr-fi-]::after, [target=_blank][class*=" fr-fi-"]::after {
738
+ -webkit-mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/system/external-link-line.svg");
739
+ mask-image: url("https://lab-anssi-ui-kit-prod-s3-assets.cellar-c2.services.clever-cloud.com/icones/dsfr/system/external-link-line.svg");
740
+ }
741
+ @media (-ms-high-contrast: active), (forced-colors: active) {
742
+ [target=_blank][class^=fr-icon-]::after, [target=_blank][class*=" fr-icon-"]::after, [target=_blank][class^=fr-fi-]::after, [target=_blank][class*=" fr-fi-"]::after {
743
+ forced-color-adjust: none;
744
+ background-color: linktext;
745
+ }
746
+ }
747
+ [target=_blank][class^=fr-icon-]::after, [target=_blank][class*=" fr-icon-"]::after, [target=_blank][class^=fr-fi-]::after, [target=_blank][class*=" fr-fi-"]::after {
748
+ content: var(--external-link-content);
749
+ margin-left: 0.25rem;
750
+ }
751
+
752
+ form[target=_blank]::after {
753
+ content: none;
754
+ }
755
+
756
+ .fr-raw-link {
757
+ --text-decoration: none;
758
+ }
759
+ .fr-raw-link[href],
760
+ .fr-raw-link [href] {
761
+ --underline-img: none;
762
+ --external-link-content: none;
763
+ }
764
+
765
+ .fr-reset-link {
766
+ --text-decoration: underline;
767
+ }
768
+ .fr-reset-link[href],
769
+ .fr-reset-link [href] {
770
+ --underline-img: none;
771
+ text-underline-offset: 2px;
772
+ }
773
+
774
+ input[type=range]:focus::-webkit-slider-thumb {
775
+ outline-offset: 2px;
776
+ outline-width: 2px;
777
+ outline-color: #0a76f6;
778
+ }
779
+
780
+ input[type=range]:focus::-moz-range-thumb {
781
+ outline-offset: 2px;
782
+ outline-width: 2px;
783
+ outline-color: #0a76f6;
784
+ }
785
+
786
+ input[type=range]:focus::-ms-thumb {
787
+ outline-offset: 2px;
788
+ outline-width: 2px;
789
+ outline-color: #0a76f6;
790
+ }
791
+
792
+ a:focus, button:focus, input:focus, input[type=checkbox]:focus + label::before, input[type=radio]:focus + label::before, input[type=button]:focus, input[type=image]:focus, input[type=reset]:focus, input[type=submit]:focus, select:focus, textarea:focus, [tabindex]:focus, video:focus[controls], audio:focus[controls], [contenteditable]:not([contenteditable=false]):focus, details:focus, details > summary:first-of-type:focus {
793
+ outline-offset: 2px;
794
+ outline-width: 2px;
795
+ outline-color: #0a76f6;
796
+ }
797
+
798
+ input[type=range]:focus::-webkit-slider-thumb {
799
+ outline-style: solid;
800
+ }
801
+
802
+ input[type=range]:focus::-moz-range-thumb {
803
+ outline-style: solid;
804
+ }
805
+
806
+ input[type=range]:focus::-ms-thumb {
807
+ outline-style: solid;
808
+ }
809
+
810
+ a:focus, button:focus, input:focus, input[type=checkbox]:focus + label::before, input[type=radio]:focus + label::before, input[type=button]:focus, input[type=image]:focus, input[type=reset]:focus, input[type=submit]:focus, select:focus, textarea:focus, [tabindex]:focus, video:focus[controls], audio:focus[controls], [contenteditable]:not([contenteditable=false]):focus, details:focus, details > summary:first-of-type:focus {
811
+ outline-style: solid;
812
+ }
813
+
814
+ input[type=range]:focus:not(:focus-visible)::-webkit-slider-thumb {
815
+ outline-style: none;
816
+ }
817
+
818
+ input[type=range]:focus:not(:focus-visible)::-moz-range-thumb {
819
+ outline-style: none;
820
+ }
821
+
822
+ input[type=range]:focus:not(:focus-visible)::-ms-thumb {
823
+ outline-style: none;
824
+ }
825
+
826
+ a:focus:not(:focus-visible), button:focus:not(:focus-visible), input:focus:not(:focus-visible), input[type=checkbox]:focus:not(:focus-visible) + label::before, input[type=radio]:focus:not(:focus-visible) + label::before, input[type=button]:focus:not(:focus-visible), input[type=image]:focus:not(:focus-visible), input[type=reset]:focus:not(:focus-visible), input[type=submit]:focus:not(:focus-visible), select:focus:not(:focus-visible), textarea:focus:not(:focus-visible), [tabindex]:focus:not(:focus-visible), video:focus:not(:focus-visible)[controls], audio:focus:not(:focus-visible)[controls], [contenteditable]:not([contenteditable=false]):focus:not(:focus-visible), details:focus:not(:focus-visible), details > summary:first-of-type:focus:not(:focus-visible) {
827
+ outline-style: none;
828
+ }
829
+
830
+ input[type=range]:focus-visible::-webkit-slider-thumb {
831
+ outline-style: solid;
832
+ }
833
+
834
+ input[type=range]:focus-visible::-moz-range-thumb {
835
+ outline-style: solid;
836
+ }
837
+
838
+ input[type=range]:focus-visible::-ms-thumb {
839
+ outline-style: solid;
840
+ }
841
+
842
+ a:focus-visible, button:focus-visible, input:focus-visible, input[type=checkbox]:focus-visible + label::before, input[type=radio]:focus-visible + label::before, input[type=button]:focus-visible, input[type=image]:focus-visible, input[type=reset]:focus-visible, input[type=submit]:focus-visible, select:focus-visible, textarea:focus-visible, [tabindex]:focus-visible, video:focus-visible[controls], audio:focus-visible[controls], [contenteditable]:not([contenteditable=false]):focus-visible, details:focus-visible, details > summary:first-of-type:focus-visible {
843
+ outline-style: solid;
844
+ }
845
+
846
+ @media (hover: hover) and (pointer: fine) {
847
+ :root {
848
+ --brighten: -1;
849
+ }
850
+ a[href]:hover, button:not(:disabled):hover, input[type=button]:not(:disabled):hover, input[type=image]:not(:disabled):hover, input[type=reset]:not(:disabled):hover, input[type=submit]:not(:disabled):hover {
851
+ background-color: var(--hover-tint);
852
+ }
853
+ a[href]:active, button:not(:disabled):active, input[type=button]:not(:disabled):active, input[type=image]:not(:disabled):active, input[type=reset]:not(:disabled):active, input[type=submit]:not(:disabled):active {
854
+ background-color: var(--active-tint);
855
+ }
856
+ a[href]:hover, a[href]:active {
857
+ --underline-hover-width: var(--underline-max-width);
858
+ }
859
+ }
860
+ button, input[type=button], input[type=image], input[type=reset], input[type=submit] {
861
+ --hover-tint: var(--hover);
862
+ --active-tint: var(--active);
863
+ }
864
+
865
+ a {
866
+ --hover-tint: var(--idle);
867
+ --active-tint: var(--active);
868
+ }
869
+
870
+ a, button, input[type=checkbox], input[type=checkbox] + label, input[type=radio], input[type=radio] + label, input[type=file], input[type=range], input[type=button], input[type=image], input[type=reset], input[type=submit], select, video[controls], audio[controls], details, details > summary:first-of-type {
871
+ cursor: pointer;
872
+ }
873
+
874
+ input[type=range]:disabled::-webkit-slider-thumb, input[type=range]:disabled::-webkit-slider-thumb:active {
875
+ cursor: not-allowed;
876
+ }
877
+
878
+ input[type=range]:disabled::-moz-range-thumb, input[type=range]:disabled::-moz-range-thumb:active {
879
+ cursor: not-allowed;
880
+ }
881
+
882
+ input[type=range]:disabled::-ms-thumb, input[type=range]:disabled::-ms-thumb:active {
883
+ cursor: not-allowed;
884
+ }
885
+
886
+ a:not([href]), button:disabled, input:disabled, input[type=checkbox]:disabled, input[type=checkbox]:disabled + label, input[type=radio]:disabled, input[type=radio]:disabled + label, input[type=file]:disabled, input[type=range]:disabled, input[type=button]:disabled, input[type=image]:disabled, input[type=reset]:disabled, input[type=submit]:disabled, select:disabled, textarea:disabled, video:not([href])[controls], audio:not([href])[controls] {
887
+ cursor: not-allowed;
888
+ }
889
+
890
+ input[type=range]::-webkit-slider-thumb {
891
+ cursor: grab;
892
+ }
893
+
894
+ input[type=range]::-moz-range-thumb {
895
+ cursor: grab;
896
+ }
897
+
898
+ input[type=range]::-ms-thumb {
899
+ cursor: grab;
900
+ }
901
+
902
+ input[type=range]::-webkit-slider-thumb:active {
903
+ cursor: grabbing;
904
+ }
905
+
906
+ input[type=range]::-moz-range-thumb:active {
907
+ cursor: grabbing;
908
+ }
909
+
910
+ input[type=range]::-ms-thumb:active {
911
+ cursor: grabbing;
912
+ }
913
+
914
+ :root {
915
+ --ul-type: disc;
916
+ --ol-type: decimal;
917
+ --ul-start: 1rem;
918
+ --ol-start: 1.5rem;
919
+ --xl-block: 0.5rem;
920
+ --li-bottom: 0.25rem;
921
+ --xl-base: 1em;
922
+ --ol-content: counters(li-counter, ".") ".\00a0\00a0";
923
+ }
924
+
925
+ ul,
926
+ ol,
927
+ dl {
928
+ margin: 0;
929
+ padding: 0;
930
+ margin-block-start: var(--xl-block);
931
+ margin-block-end: var(--xl-block);
932
+ --xl-size: var(--xl-base);
933
+ }
934
+
935
+ ul {
936
+ list-style-type: var(--ul-type);
937
+ padding-inline-start: var(--ul-start);
938
+ }
939
+ ul > li::marker {
940
+ font-size: calc(var(--xl-size) * 0.9);
941
+ }
942
+ @media (-ms-high-contrast: active), (forced-colors: active) {
943
+ ul > li::marker {
944
+ color: graytext;
945
+ }
946
+ }
947
+
948
+ ol {
949
+ list-style-type: var(--ol-type);
950
+ padding-inline-start: var(--ol-start);
951
+ counter-reset: li-counter;
952
+ }
953
+ ol > li {
954
+ counter-increment: li-counter;
955
+ }
956
+ ol > li::marker {
957
+ content: var(--ol-content);
958
+ font-size: var(--xl-size);
959
+ font-weight: bold;
960
+ }
961
+
962
+ dl,
963
+ dd {
964
+ margin: 0;
965
+ padding-inline-start: var(--ul-start);
966
+ }
967
+
968
+ li,
969
+ dd,
970
+ dt {
971
+ --xl-base: calc(var(--xl-size) * 0.9);
972
+ padding-bottom: var(--li-bottom);
973
+ }
974
+
975
+ .fr-raw-list {
976
+ --ul-type: none;
977
+ --ol-type: none;
978
+ --ul-start: 0;
979
+ --ol-start: 0;
980
+ --xl-block: 0;
981
+ --li-bottom: 0;
982
+ --ol-content: none;
983
+ }
984
+
985
+ .fr-list {
986
+ --ul-type: disc;
987
+ --ol-type: decimal;
988
+ --ul-start: 1rem;
989
+ --ol-start: 1.5rem;
990
+ --xl-block: 0.5rem;
991
+ --li-bottom: 0.25rem;
992
+ --xl-base: 1em;
993
+ --ol-content: counters(li-counter, ".") ".\00a0\00a0";
994
+ }
995
+
996
+ *,
997
+ *::before,
998
+ *::after {
999
+ box-sizing: inherit;
1000
+ }
1001
+
1002
+ :root {
1003
+ box-sizing: border-box;
1004
+ }
1005
+
1006
+ input,
1007
+ select,
1008
+ textarea,
1009
+ label,
1010
+ button,
1011
+ a {
1012
+ -webkit-tap-highlight-color: transparent;
1013
+ }
1014
+
1015
+ :host(dsfr-pagination) {
1016
+ display: block;
1017
+ text-rendering: optimizeLegibility;
1018
+ -webkit-font-smoothing: antialiased;
1019
+ -moz-osx-font-smoothing: grayscale;
1020
+ -webkit-text-size-adjust: 100%;
1021
+ font-size: 1rem;
1022
+ line-height: 1.5rem;
1023
+ background-color: var(--background-default-grey);
1024
+ --idle: transparent;
1025
+ --hover: var(--background-default-grey-hover);
1026
+ --active: var(--background-default-grey-active);
1027
+ color: var(--text-default-grey);
1028
+ background-color: transparent;
1029
+ }
1030
+
1031
+ .fr-pagination {
1032
+ box-sizing: border-box;
1033
+ }
1034
+ .fr-pagination__link {
1035
+ border-radius: var(--lab-border-radius, 0);
1036
+ }</style>