@edugouvfr/ngx-dsfr

中文文档
1.20.1发布于 2026/10/23EUPL-1.2TypeScriptESM + CJS近 30 天下载 1万

NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).

原始使用文档
文档目录18 节
  1. Dépendances
  2. Versions angular
  3. Installation
  4. Composants additionnels
  5. Utilisation
  6. Documentation
  7. Code source
  8. Fonctionnement
  9. Configuration globale
  10. Internationalisation
  11. Gestion des icônes
  12. Gestion des liens
  13. Propriétés et slots
  14. Licence et droit d'utilisation
  15. Demander une évolution ou signaler une anomalie
  16. Contact
  17. Feuille de route
  18. Contribuer

@edugouvfr/ngx-dsfr - Readme

NgxDsfr est un portage Angular des éléments d'interface du 🇫🇷 Système de Design de l'État Français (DSFR).

Cette bibliothèque est développée, maintenue et gérée par une équipe de développement du Ministère de l'Éducation Nationale basée à Grenoble et pilotée par les sous-directions "socle numérique" (SOCLE1) et "services numériques" (SN2) de la Direction du Numérique pour l'Éducation (DNE).

Dépendances

Notre package s'appuie actuellement sur la version 1.15 du DSFR.

Versions angular

Nous développons avec Angular 20 mais notre bibliothèque est compatible Angular 20 à 22.

Installation

🔥 À partir de la version 1.15 de @gouvfr/dsfr, une obligation réglementaire du DSFR oblige à valider explicitement ses CGU pour chaque projet.

À partir de la version 1.20 de ngx-dsfr intégrant cette version DSFR, la librairie ne fournit plus DSFR comme dépendance transitive. @gouvfr/dsfr devient une peerDependency et doit être installé explicitement, afin de pouvoir valider les CGU de celle-ci. Voir la documentation DSFR pour plus d'informations.

  • Initialiser DSFR dans votre projet avec la version compatible et accepter ses modalités d'utilisation

    npm create @gouvfr/dsfr -- --dsfr-version=1.15.3
    
  • Installer la dépendance vers le module NPM dans votre projet Angular

    npm install @edugouvfr/ngx-dsfr
    
  • Référencer les feuilles de style et le script DSFR dans votre fichier angular.json ou project.json :

    "styles": [
      "./node_modules/@gouvfr/dsfr/dist/dsfr/dsfr.main.min.css",
      "./node_modules/@gouvfr/dsfr/dist/utility/utility.main.min.css",
      "projects/app-demo/src/styles.scss"
    ],
    "scripts": [
      "./node_modules/@gouvfr/dsfr/dist/dsfr/dsfr.module.js"
    ]
    
  • Ajouter les meta tags du dsfr dans le fichier index.html.

Exemple: Prise en main

Composants additionnels

Nous proposons des composants d'extension aux éléments officiels du DSFR : multiselect, autocomplete, etc. Ce package ngx-dsfr-ext a pour but de couvrir les besoins fonctionnels qui ne sont pas encore couverts par le DSFR. Elle a été construite en cohérence avec les composants DSFR existants, dans le respect des fondamentaux techniques et des principes de design du DSFR.

Utilisation

  • Dans votre composant, importer le composant que vous souhaitez utiliser :

    @Component({
      selector: 'app-component',
      imports: [DsfrModalComponent, DsfrButtonComponent],
    })
    export class MonComposant implements OnInit {}
    
  • Puis utiliser le composant dans votre template html :

    <dsfr-button>...</dsfr-button>
    

Documentation

Se référer au Storybook de la version que vous utilisez : https://foad.phm.education.gouv.fr/edugouvfr/ngx-dsfr/

Icônes de la documentation :

  • 👆 Remarque
  • 📌 Note
  • 🔥 Point d'attention
  • 👓 Accessibilité

Code source

Le code source de cette bibliothèque de composants est publié sur mim-libre :

https://gitlab.mim-libre.fr/men/transverse/dsmen/ngx-dsfr-components.git

Fonctionnement

Configuration globale

Il est possible de définir certains paramètres de configuration de manière globale en utilisant la méthode statique forRoot du module DsfrConfigModule.

Par exemple, pour indiquer de manière globale le chemin sur lequel est exposé le répertoire des pictogrammes illustratifs DSFR, procédez comme suit :

@NgModule({
imports: [
    DsfrConfigModule.forRoot({
      artworkDirPath: 'custom/path/to/artwork',
    }),
]
})

Et pour les exporter au niveau du build dans angular.json :

"assets": [
  {
    "input": "node_modules/@gouvfr/dsfr/dist/artwork",
    "glob": "**/*",
    "output": "custom/path/to/artwork"
  }
],

Internationalisation

Les libellés des composants sont nativement disponibles en français (par défaut) et en anglais. Le changement de langue des composants est géré à travers l'usage du composant dsfr-translate et du pipe dsfrI18n.

Il est possible de surcharger une traduction ou d'ajouter des nouvelles langues, Cf. documentation dédiée

Gestion des icônes

Une propriété icon est une classe du DSFR, exemple fr-icon-home-4-fill. Les icônes du DSFR sont incluses dans le projet et donc disponibles automatiquement. La liste des icônes du DSFR est disponible sur leur documentation DSFR Icônes

En cas de nécessité d'ajouter d'autres icônes, il est conseillé de se limiter aux icônes de la librairie Remix Icons

Il n'existe pas pour l'instant de manière d'ajouter toute la librairie d'icônes en une fois, pour conserver le style DSFR appliqué aux icpones il est nécessaire de les ajouter une à une dans votre projet de la façon suivante :

  • ajouter le fichier .svg correspondant à l'icône (fonction Copy SVG sur RemixIcon)
  • création de la classe CSS correspondante, en commençant le nom de classe par fr-icon-*. ex:
.fr-icon-play::before,
.fr-icon-play::after {
  -webkit-mask-image: url('../shared/icons/carousel/play.svg');
  mask-image: url('../shared/icons/carousel/play.svg');
}

🔥 Les classes d'icônes ne commençant pas par fr-icon-* telles que fr-btn--account sont des raccourcis d'affichage (comprenant une classe spécifique, une position etc.). Si vous les utilisez vous ne pourrez donc pas forcément surcharger les autres propriétés comme la position.

Gestion des liens

Certains composants permettent de naviguer vers d'autres pages web ou d'autres parties de votre site/application web. Pour obtenir un hyperlien "classique" (navigation externe) avec une URL (absolue ou relative) utilisez la propriété link du composant.

Si vous souhaitez plutôt exécuter une navigation Angular (via le Router) voici comment procéder :

  • Renseigner la propriété routePath au niveau du composant (ou routerLink au niveau du modèle)
  • Cela va intégrer une directive routerLink au niveau du lien de navigation interne au composant
  • routerLinkExtras vous permet d'ajouter les paramètres optionnels tels les queryParams
  • Ou de laisser la gestion de façon externe au composant en utilisant l'attribut route.

Navigation gérée programmatiquement via router#navigate

  • Renseigner la propriété route en input du composant
  • Mettez-vous à l'écoute de l'output routeSelect
  • L'événement (routeSelect) est émis avec la valeur de route et l'événement natif n'est pas propagé
  • Vous pouvez alors exécuter router#navigate

Cf. documentation du composant Lien

Propriétés et slots

Dans de nombreux composants, il vous est possible de fournir certains contenus de deux façons :

  • soit via une propriété (input) :

Ex.: <dsfr-link link="#bottom" label="Bas de page"></dsfr-link>

  • soit via un point d'injection (ng-content) prévu à cet effet :

Ex.: <dsfr-link link="#bottom">Bas de page</dsfr-link>

🔥 Si les deux (slot + input) sont renseignés c'est l'input qui sera utilisé en priorité.

🔥 L'input ne supporte pas le format HTML, si vous avez besoin de formater votre contenu en utilisant des balises HTML vous devez obligatoirement passer par le slot

Exemples de composants supportant cette possibilité :

  • forms : checkbox, input, select, toggle, radio(legend)
  • accordion (content, heading)
  • table (caption)
  • tile (description)

Licence et droit d'utilisation

Le contenu de ce projet est placé sous licence EUPL 1.2.

Pour rappel, l'usage du DSFR est réservé aux sites Internet de l'État, se référer aux cf. CGU du DSFR.

Demander une évolution ou signaler une anomalie

Équipes internes Éduc. Nat.

Autres ministères ou délégations de service public

Contact

Feuille de route

  • 2026 :

    • refonte de la logique des fieldsets
    • amélioration chore du fonctionnement de la table
    • étude de l'ajout de composants spécifiques application métier (ex. drawer)
  • 2027 : implémentation de la V2 du DSFR

Contribuer

Voir le guide de contribution.



版本与发布记录

@edugouvfr/ngx-dsfr 共发布 96 个版本,首次发布于 2023/04/24;过去 12 个月发布了 17 个版本。

版本发布日期距今
1.20.1latest2026/10/2321 天前
1.20.02026/09/171 个月前
1.19.42026/09/072 个月前
1.19.32026/07/293 个月前
1.19.22026/07/094 个月前
1.19.12026/06/115 个月前

关于 @edugouvfr/ngx-dsfr 的常见问题

@edugouvfr/ngx-dsfr 是什么?

NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).

如何安装 @edugouvfr/ngx-dsfr?

在项目目录运行 npm install @edugouvfr/ngx-dsfr,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:rxjs(^6 || ^7)、uuid(>=13.0.0)、args-parser(>=1.3.0)、@gouvfr/dsfr(~1.15.0)、@angular/core(>=20.3)、@angular/forms(>=20.3)、@angular/common(>=20.3)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@edugouvfr/ngx-dsfr 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@edugouvfr/ngx-dsfr 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@edugouvfr/ngx-dsfr 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js ^20.19.0 || ^22.12.0 || ^24.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@edugouvfr/ngx-dsfr 可以商用吗?

@edugouvfr/ngx-dsfr 使用 EUPL-1.2 许可。声明的许可为 EUPL-1.2,请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

@edugouvfr/ngx-dsfr 的下载量有多少?

根据 npm 官方下载统计,@edugouvfr/ngx-dsfr 在 2026/10/13 – 2026/11/11 这 30 天内被下载 10,465 次,日均约 349 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@edugouvfr/ngx-dsfr 还在维护吗?

最新版本 1.20.1 发布于 2026/10/23(21 天前);至今共发布 96 个版本,其中过去 12 个月发布了 17 个;首次发布于 2023/04/24。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。