{"version":3,"file":"edugouvfr-ngx-dsfr.mjs","sources":["../../../projects/ngx-dsfr-components/src/lib/shared/models/button.model.ts","../../../projects/ngx-dsfr-components/src/lib/shared/models/heading-level.model.ts","../../../projects/ngx-dsfr-components/src/lib/shared/models/link-target.model.ts","../../../projects/ngx-dsfr-components/src/lib/shared/models/position.model.ts","../../../projects/ngx-dsfr-components/src/lib/shared/models/severity.model.ts","../../../projects/ngx-dsfr-components/src/lib/shared/models/size.model.ts","../../../projects/ngx-dsfr-components/src/lib/shared/models/text-size.model.ts","../../../projects/ngx-dsfr-components/src/lib/shared/utils/date-utils.ts","../../../projects/ngx-dsfr-components/src/lib/shared/utils/dom-utils.ts","../../../projects/ngx-dsfr-components/src/lib/components/download/dsfr-mime.type.ts","../../../projects/ngx-dsfr-components/src/lib/shared/utils/file-utils.ts","../../../projects/ngx-dsfr-components/src/lib/shared/utils/json-utils.ts","../../../projects/ngx-dsfr-components/src/lib/shared/utils/ssr-utils.ts","../../../projects/ngx-dsfr-components/src/lib/shared/utils/local-storage.ts","../../../projects/ngx-dsfr-components/src/lib/shared/utils/storage-enum.ts","../../../projects/ngx-dsfr-components/src/lib/shared/utils/string-utils.ts","../../../projects/ngx-dsfr-components/src/lib/shared/utils/to-array-utils.ts","../../../projects/ngx-dsfr-components/src/lib/shared/utils/uuid-utils.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/default-value-accessor.component.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/default-control.component.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/base-panel/base-panel.model.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/base-panel/base-panel.component.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/checkbox-light/checkbox-light.component.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/checkbox-light/checkbox-light.component.html","../../../projects/ngx-dsfr-components/src/lib/shared/components/heading/heading.component.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/heading/heading.component.html","../../../projects/ngx-dsfr-components/src/lib/shared/components/heading/heading.module.ts","../../../projects/ngx-dsfr-components/src/lib/shared/directives/message-severity.directive.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/input-group/input-group.component.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/input-group/input-group.component.html","../../../projects/ngx-dsfr-components/src/lib/shared/components/link-download/link-download.component.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/link-download/link-download.component.html","../../../projects/ngx-dsfr-components/src/lib/shared/components/pictogram/pictogram.component.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/pictogram/pictogram.component.html","../../../projects/ngx-dsfr-components/src/lib/shared/components/pictogram/pictogram.module.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/svg-icon/svg-icon.component.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/svg-icon/svg-icon.module.ts","../../../projects/ngx-dsfr-components/src/lib/shared/config/config-token.ts","../../../projects/ngx-dsfr-components/src/lib/shared/config/config.module.ts","../../../projects/ngx-dsfr-components/src/lib/shared/directives/disable-router-link.directive.ts","../../../projects/ngx-dsfr-components/src/lib/shared/i18n/i18n-labels-bundle-en.ts","../../../projects/ngx-dsfr-components/src/lib/shared/i18n/i18n-labels-bundle-fr.ts","../../../projects/ngx-dsfr-components/src/lib/shared/i18n/i18n-utils.ts","../../../projects/ngx-dsfr-components/src/lib/shared/services/config.service.ts","../../../projects/ngx-dsfr-components/src/lib/shared/services/logger.service.ts","../../../projects/ngx-dsfr-components/src/lib/shared/services/lang.service.ts","../../../projects/ngx-dsfr-components/src/lib/shared/services/language.enum.ts","../../../projects/ngx-dsfr-components/src/lib/shared/i18n/i18n.service.ts","../../../projects/ngx-dsfr-components/src/lib/shared/i18n/i18n.pipe.ts","../../../projects/ngx-dsfr-components/src/lib/components/accordion/accordion.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/accordion/accordion.component.html","../../../projects/ngx-dsfr-components/src/lib/components/accordion/accordion.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/accordions-group/accordions-group.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/accordions-group/accordions-group.component.html","../../../projects/ngx-dsfr-components/src/lib/components/accordions-group/accordions-group.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/alert/alert.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/alert/alert.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/alert/alert.component.html","../../../projects/ngx-dsfr-components/src/lib/components/alert/alert.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/button/button.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/button/button.component.html","../../../projects/ngx-dsfr-components/src/lib/components/button/button.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/link/link.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/link/link.component.html","../../../projects/ngx-dsfr-components/src/lib/components/link/link.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/backtotop/backtotop.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/backtotop/backtotop.component.html","../../../projects/ngx-dsfr-components/src/lib/components/backtotop/backtotop.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/badge/badge.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/badge/badge.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/badge/badge.component.html","../../../projects/ngx-dsfr-components/src/lib/components/badge/badge.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/badges-group/badges-group.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/badges-group/badges-group.component.html","../../../projects/ngx-dsfr-components/src/lib/components/badges-group/badges-group.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/link/item-link.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/breadcrumb/breadcrumb.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/breadcrumb/breadcrumb.component.html","../../../projects/ngx-dsfr-components/src/lib/components/breadcrumb/breadcrumb.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/buttons-group/buttons-group.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/buttons-group/buttons-group.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/buttons-group/buttons-group.component.html","../../../projects/ngx-dsfr-components/src/lib/components/buttons-group/buttons-group.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/callout/callout.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/callout/callout.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/callout/callout.component.html","../../../projects/ngx-dsfr-components/src/lib/components/callout/callout.module.ts","../../../projects/ngx-dsfr-components/src/lib/shared/utils/ratio-utils.ts","../../../projects/ngx-dsfr-components/src/lib/components/tag/tag.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/tag/tag.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/tag/tag.component.html","../../../projects/ngx-dsfr-components/src/lib/components/tag/tag.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/tags-group/tags-group.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/tags-group/tags-group.component.html","../../../projects/ngx-dsfr-components/src/lib/components/tags-group/tags-group.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/card/card.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/card/card.component.html","../../../projects/ngx-dsfr-components/src/lib/components/card/card.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/card/card.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/consent-banner/consent-manager/consent-service/consent-service.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/consent-banner/consent-manager/consent-service/consent-service.component.html","../../../projects/ngx-dsfr-components/src/lib/components/consent-banner/consent-manager/consent-manager.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/consent-banner/consent-manager/consent-manager.component.html","../../../projects/ngx-dsfr-components/src/lib/components/consent-banner/consent-banner.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/consent-banner/consent-banner.component.html","../../../projects/ngx-dsfr-components/src/lib/components/consent-banner/consent-banner.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/transcription/transcription.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/transcription/transcription.component.html","../../../projects/ngx-dsfr-components/src/lib/components/content/content.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/content/content.component.html","../../../projects/ngx-dsfr-components/src/lib/components/content/content.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/content/content.model.ts","../../../projects/ngx-dsfr-components/src/lib/forms/fieldset/form-fieldset-element.directive.ts","../../../projects/ngx-dsfr-components/src/lib/shared/components/input-group/hint.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/fieldset/base-fieldset.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/fieldset/form-fieldset.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/fieldset/form-fieldset.component.html","../../../projects/ngx-dsfr-components/src/lib/forms/fieldset/form-fieldset.module.ts","../../../projects/ngx-dsfr-components/src/lib/forms/default-radio.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-radio-rich/form-radio-rich.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-radio-rich/form-radio-rich.component.html","../../../projects/ngx-dsfr-components/src/lib/forms/form-radio-rich/form-radio-rich.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/display/display.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/display/display.component.html","../../../projects/ngx-dsfr-components/src/lib/components/display/display.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/download/download.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/download/download.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/download/download.component.html","../../../projects/ngx-dsfr-components/src/lib/components/download/download.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/downloads-group/downloads-group.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/downloads-group/downloads-group.component.html","../../../projects/ngx-dsfr-components/src/lib/components/downloads-group/downloads-group.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/footer/footer.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/footer/footer.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/footer/footer.component.html","../../../projects/ngx-dsfr-components/src/lib/components/footer/footer.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/franceconnect/franceconnect.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/franceconnect/franceconnect.component.html","../../../projects/ngx-dsfr-components/src/lib/components/header/component/mega-menu.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/header/component/mega-menu.component.html","../../../projects/ngx-dsfr-components/src/lib/components/header/component/tool-link.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/search-bar/search-bar.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/search-bar/search-bar.component.html","../../../projects/ngx-dsfr-components/src/lib/components/search-bar/search-bar.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/translate/translate.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/translate/translate.component.html","../../../projects/ngx-dsfr-components/src/lib/components/translate/translate.module.ts","../../../projects/ngx-dsfr-components/src/lib/shared/directives/wrap-li.directive.ts","../../../projects/ngx-dsfr-components/src/lib/components/header/component/tools-links.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/header/component/tools-links.component.html","../../../projects/ngx-dsfr-components/src/lib/components/header/header.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/header/header.component.html","../../../projects/ngx-dsfr-components/src/lib/components/header/header.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/highlight/highlight.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/highlight/highlight.component.html","../../../projects/ngx-dsfr-components/src/lib/components/highlight/highlight.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/links-group/links-group.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/links-group/links-group.component.html","../../../projects/ngx-dsfr-components/src/lib/components/links-group/links-group.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/logo/logo.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/logo/logo.component.html","../../../projects/ngx-dsfr-components/src/lib/components/logo/logo.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/modal/modal.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/modal/modal.component.html","../../../projects/ngx-dsfr-components/src/lib/components/modal/modal.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/notice/notice.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/notice/notice.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/notice/notice.component.html","../../../projects/ngx-dsfr-components/src/lib/components/notice/notice.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/pagination/page-link.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/pagination/page-link.component.html","../../../projects/ngx-dsfr-components/src/lib/forms/form-select/form-select.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-select/form-select.component.html","../../../projects/ngx-dsfr-components/src/lib/forms/form-select/form-select.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/pagination/pagination-calc.ts","../../../projects/ngx-dsfr-components/src/lib/components/pagination/pagination.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/pagination/pagination.component.html","../../../projects/ngx-dsfr-components/src/lib/components/pagination/previous-page/previous-page.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/pagination/previous-page/previous-page.component.html","../../../projects/ngx-dsfr-components/src/lib/components/pagination/pagination.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/quote/quote.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/quote/quote.component.html","../../../projects/ngx-dsfr-components/src/lib/components/quote/quote.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/segmented-control/segmented-control.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/segmented-control/segmented-control.component.html","../../../projects/ngx-dsfr-components/src/lib/components/segmented-control/segmented-control.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/share/share.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/share/share-link/share-link.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/share/share-link/share-link.component.html","../../../projects/ngx-dsfr-components/src/lib/components/share/share.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/share/share.component.html","../../../projects/ngx-dsfr-components/src/lib/components/share/share.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/sidemenu/sidemenu.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/sidemenu/sidemenu.component.html","../../../projects/ngx-dsfr-components/src/lib/components/sidemenu/sidemenu.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/skiplinks/skiplinks.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/skiplinks/skiplinks.component.html","../../../projects/ngx-dsfr-components/src/lib/components/skiplinks/skiplinks.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/stepper/stepper.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/stepper/stepper.component.html","../../../projects/ngx-dsfr-components/src/lib/components/stepper/stepper.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/summary/summary.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/summary/summary.component.html","../../../projects/ngx-dsfr-components/src/lib/components/summary/summary.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/component/table-footer.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/component/table-footer.component.html","../../../projects/ngx-dsfr-components/src/lib/components/table/utils/table.utils.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/service/datatable.service.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/component/paginated-table.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/component/table-header.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/component/table-header.component.html","../../../projects/ngx-dsfr-components/src/lib/components/table/directive/cell.directive.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/table.context.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/directive/column.directive.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/directive/header-select.directive.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/directive/row-group.directive.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/component/expand-button.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/directive/row-header-group.directive.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/directive/row-select.directive.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/component/sort-button.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/directive/sort-column.directive.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/utils/navigation-table.utils.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/directive/treegrid-navigation.directive.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/table.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/table.component.html","../../../projects/ngx-dsfr-components/src/lib/components/table/table.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/table/datatable.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/usermenu/component/tool-link-menu.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/usermenu/component/tool-link-menu.component.html","../../../projects/ngx-dsfr-components/src/lib/components/usermenu/usermenu.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/usermenu/usermenu.component.html","../../../projects/ngx-dsfr-components/src/lib/components/table-legacy/table-legacy.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/table-legacy/table-legacy.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/table-legacy/table-legacy.component.html","../../../projects/ngx-dsfr-components/src/lib/components/table-legacy/table.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/tabnav/tabnav.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/tabnav/tabnav.component.html","../../../projects/ngx-dsfr-components/src/lib/components/tabs/tabs.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/tabs/tab.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/tabs/tab.component.html","../../../projects/ngx-dsfr-components/src/lib/components/tabs/tabs.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/tabs/tabs.component.html","../../../projects/ngx-dsfr-components/src/lib/components/tabs/tabs.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/tile/tile.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/tile/tile.component.html","../../../projects/ngx-dsfr-components/src/lib/components/tile/tile.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/tooltip/tooltip.directive.ts","../../../projects/ngx-dsfr-components/src/lib/components/tooltip/tooltip-button.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/tooltip/tooltip-button.component.html","../../../projects/ngx-dsfr-components/src/lib/forms/form-input/form-input.model.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-input/base-input.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-input/base-input-combo.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-input/form-input.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-input/form-input.component.html","../../../projects/ngx-dsfr-components/src/lib/forms/form-input/form-input.module.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-email/email-utils.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-email/form-email.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-email/form-email.module.ts","../../../projects/ngx-dsfr-components/src/lib/components/follow/follow.model.ts","../../../projects/ngx-dsfr-components/src/lib/components/follow/follow-link/follow-link.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/follow/follow-link/follow-link.component.html","../../../projects/ngx-dsfr-components/src/lib/components/follow/follow.component.ts","../../../projects/ngx-dsfr-components/src/lib/components/follow/follow.component.html","../../../projects/ngx-dsfr-components/src/lib/components/follow/follow.module.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-checkbox/form-checkbox.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-checkbox/form-checkbox.component.html","../../../projects/ngx-dsfr-components/src/lib/forms/form-checkbox/form-checkbox.module.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-radio/form-radio.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-radio/form-radio.component.html","../../../projects/ngx-dsfr-components/src/lib/forms/form-radio/form-radio.module.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-range/form-range.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-range/form-range.component.html","../../../projects/ngx-dsfr-components/src/lib/forms/form-tel/phone-number-utils.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-tel/form-tel.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-toggle/form-toggle.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-toggle/form-toggle.component.html","../../../projects/ngx-dsfr-components/src/lib/forms/form-toggle/form-toggle.module.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-toggles-group/form-toggles-group.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-toggles-group/form-toggles-group.component.html","../../../projects/ngx-dsfr-components/src/lib/forms/form-toggles-group/form-toggles-group.module.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-upload/upload.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-upload/upload.component.html","../../../projects/ngx-dsfr-components/src/lib/forms/form-upload/upload.module.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-password/form-password.component.ts","../../../projects/ngx-dsfr-components/src/lib/forms/form-password/form-password.component.html","../../../projects/ngx-dsfr-components/src/lib/forms/form-password/form-password.module.ts","../../../projects/ngx-dsfr-components/src/lib/pages/login/login.component.ts","../../../projects/ngx-dsfr-components/src/lib/pages/login/login.component.html","../../../projects/ngx-dsfr-components/src/lib/pages/response/response.component.ts","../../../projects/ngx-dsfr-components/src/lib/pages/response/response.component.html","../../../projects/ngx-dsfr-components/src/lib/pages/response/response.module.ts","../../../projects/ngx-dsfr-components/src/lib/patterns/address/address.component.ts","../../../projects/ngx-dsfr-components/src/lib/patterns/address/address.component.html","../../../projects/ngx-dsfr-components/src/lib/patterns/address/address.module.ts","../../../projects/ngx-dsfr-components/src/lib/patterns/date/date.model.ts","../../../projects/ngx-dsfr-components/src/lib/patterns/date/date.component.ts","../../../projects/ngx-dsfr-components/src/lib/patterns/date/date.component.html","../../../projects/ngx-dsfr-components/src/lib/patterns/date/date.module.ts","../../../projects/ngx-dsfr-components/src/lib/patterns/name/name.component.ts","../../../projects/ngx-dsfr-components/src/lib/patterns/name/name.component.html","../../../projects/ngx-dsfr-components/src/lib/patterns/name/name.module.ts","../../../projects/ngx-dsfr-components/src/public-api.ts","../../../projects/ngx-dsfr-components/src/edugouvfr-ngx-dsfr.ts"],"sourcesContent":["import { DsfrPosition } from './position.model';\nimport { DsfrSize } from './size.model';\n\n/**\n * Décrit le modèle d'un bouton.\n */\nexport interface DsfrButton {\n  /** Libellé du bouton. */\n  label?: string;\n\n  /** Type du button, 'button' par défaut. */\n  type?: DsfrButtonType;\n\n  /** Message du tooltip (attribut title) du bouton. */\n  tooltipMessage?: string;\n\n  /** Style du bouton, 'primary' par défaut. */\n  variant?: DsfrButtonVariant;\n\n  /** Taille du bouton, 'MD' par défaut  */\n  size?: DsfrSize;\n\n  /** Nom de l'icône. */\n  icon?: string;\n\n  /** Position de l'icône définie, 'left' par défaut. */\n  iconPosition?: DsfrPosition;\n\n  /** Permet de désactiver le bouton d'action, 'false' par défaut. */\n  disabled?: boolean;\n\n  /** Permet de passer le libellé du bouton en majuscules, 'false' par défaut. */\n  uppercase?: boolean;\n\n  /** Permet d'activer un visuel dénotant un \"chargement\" (busy), 'false' par défaut. */\n  loader?: boolean;\n\n  /** Permet d'inverser le contraste du marqueur de focus, 'false' par défaut. */\n  invertedOutlineContrast?: boolean;\n\n  /**Permet d'identifier le button. */\n  id?: string;\n\n  /** [accessibilité] Spécifie le libellé qui sera retranscrit par les narrateurs d'écran. */\n  ariaLabel?: string;\n\n  /** [accessibilité] attribut aria-controls utilisé pour la manipulation d'une modale par exemple. */\n  ariaControls?: string;\n\n  /** [accessibilité] attribut aria-pressed indiquant l'état du bouton (cas d'un toggle) */\n  ariaPressed?: string;\n}\n\n/**\n * Définit les types de bouton supportés par le composant `dsfr-button`.\n */\nexport enum DsfrButtonTypeConst {\n  /**\n   * A utiliser pour un bouton de soumission de formulaire.\n   */\n  SUBMIT = 'submit',\n\n  /**\n   * A utiliser pour un bouton de réinitialisation de formulaire.\n   */\n  RESET = 'reset',\n\n  /**\n   * A utiliser pour un bouton d'action sur la page courante.\n   */\n  BUTTON = 'button',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrButtonTypeConst}.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button\n */\nexport type DsfrButtonType = `${DsfrButtonTypeConst}`;\n\n/**\n * Définit les variantes supportées par le composant `dsfr-button`.\n */\nexport enum DsfrButtonVariantConst {\n  /**\n   * A utiliser pour un bouton primaire.\n   */\n  PRIMARY = 'primary',\n  /**\n   * A utiliser pour un bouton secondaire.\n   */\n  SECONDARY = 'secondary',\n  /**\n   * A utiliser pour un bouton tertiaire.\n   */\n  TERTIARY = 'tertiary',\n  /**\n   * A utiliser pour un bouton tertiaire sans bordure.\n   */\n  TERTIARY_NO_OUTLINE = 'tertiary-no-outline',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrButtonVariantConst}.\n */\nexport type DsfrButtonVariant = `${DsfrButtonVariantConst}`;\n","/**\n * Définit les niveaux de titre supportés par le DSFR du H2 à H6.\n */\nexport enum DsfrHeadingLevelConst {\n  /**\n   * @deprecated (since 1.8) use `undefined` instead\n   */\n  NONE = 'none',\n  /**\n   * Niveau de titre H1.\n   */\n  H1 = 'H1',\n  /**\n   * Niveau de titre H2.\n   */\n  H2 = 'H2',\n  /**\n   * Niveau de titre H3.\n   */\n  H3 = 'H3',\n  /**\n   * Niveau de titre H4.\n   */\n  H4 = 'H4',\n  /**\n   * Niveau de titre H5.\n   */\n  H5 = 'H5',\n  /**\n   * Niveau de titre H6.\n   */\n  H6 = 'H6',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrHeadingLevelConst}.\n */\nexport type DsfrHeadingLevel = `${DsfrHeadingLevelConst}`;\n","/**\n * Définit les valeurs possibles pour l'attribut `target` d'un lien html.\n */\nexport enum DsfrLinkTargetConst {\n  BLANK = '_blank',\n  SELF = '_self',\n  PARENT = '_parent',\n  TOP = '_top',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrLinkTargetConst}.\n */\nexport type DsfrLinkTarget = `${DsfrLinkTargetConst}`;\n\n/** @deprecated (since 1.4) use {@link DsfrLinkTargetConst} instead */\nexport enum DsfrTargetLinkConst {\n  BLANK = '_blank',\n  SELF = '_self',\n  PARENT = '_parent',\n  TOP = '_top',\n}\n\n/** @deprecated (since 1.4) use {@link DsfrLinkTarget} instead */\nexport type DsfrTargetLink = DsfrLinkTarget;\n","/**\n * Définit les différentes positions supportées par le DSFR.\n */\nexport enum DsfrPositionConst {\n  /**\n   * Positionne à gauche.\n   */\n  LEFT = 'left',\n  /**\n   * Positione à droite.\n   */\n  RIGHT = 'right',\n}\n\n/**\n * Type union pour les valeurs de {@link DsfrPositionConst}.\n */\nexport type DsfrPosition = `${DsfrPositionConst}`;\n","/**\n * Définit les différents niveaux de sévérité supportés par le DSFR.\n */\nexport enum DsfrSeverityConst {\n  /**\n   * Spécifie un niveau \"information\".\n   */\n  INFO = 'info',\n\n  /**\n   * Spécifie un niveau \"erreur\".\n   */\n  ERROR = 'error',\n\n  /**\n   * Spécifie un niveau \"information\" et/ou un état \"valide\".\n   */\n  VALID = 'valid',\n\n  /**\n   * Spécifie un niveau \"avertissement\".\n   */\n  WARNING = 'warning',\n\n  /**\n   * Spécifie un niveau \"succès\".\n   *\n   * @deprecated (since 1.13.0) Utiliser {@link VALID} à la place.\n   */\n  SUCCESS = 'success',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrSeverityConst}.\n */\nexport type DsfrSeverity = `${DsfrSeverityConst}`;\n","/**\n * Définit les différentes tailles supportées par le DSFR.\n */\nexport enum DsfrSizeConst {\n  /**\n   * Spécifie une taille \"réduite\".\n   */\n  SM = 'SM',\n  /**\n   * Spécifie une taille \"moyenne\".\n   */\n  MD = 'MD',\n  /**\n   * Spécifie une taille \"large\".\n   */\n  LG = 'LG',\n}\n\n/**\n * Type union pour les valeurs de {@link DsfrSizeConst}.\n */\nexport type DsfrSize = `${DsfrSizeConst}`;\n","/**\n * Définit les tailles de texte supportées par le DSFR.\n */\nexport enum DsfrTextSizeConst {\n  /**\n   * Texte très petit.\n   */\n  XS = 'XS',\n  /**\n   * Texte petit.\n   */\n  SM = 'SM',\n  /**\n   * Texte moyen.\n   */\n  MD = 'MD',\n  /**\n   * Texte large.\n   */\n  LG = 'LG',\n  /**\n   * Texte très grand.\n   */\n  XL = 'XL',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrTextSizeConst}.\n *\n * @see https://www.systeme-de-design.gouv.fr/version-courante/fr/fondamentaux/typographie > Corps de texte - Body\n */\nexport type DsfrTextSize = `${DsfrTextSizeConst}`;\n","/**\n * @since 0.7\n */\nexport class DateUtils {\n  private constructor() {}\n\n  /**\n   * Transforme un string représentant une date au format `'dd/mm/yyyy'` en objet `Date`.\n   * Le siècle peut-être sur 2 digits, dans ce cas, cela correspond à `'19yy'`.\n   * @returns Date ou undefined\n   */\n  static parseDateFr(dateStr: string): Date | undefined {\n    const regexp = /^(?<day>3[01]|0?[1-9]|[12][0-9])\\/(?<month>1[0-2]|0?[1-9])\\/(?<year>[0-9]{4})$/;\n    return DateUtils.parseDate(dateStr, regexp);\n  }\n\n  /**\n   * Transforme un string représentant une date au format ISO 8601 en objet `Date`.\n   * @returns Date ou undefined\n   */\n  static parseDateIso(dateStr: string, withHours = false): Date | undefined {\n    // https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s07.html\n    const regexp =\n      /^(?<year>-?(?:[1-9][0-9]*)?[0-9]{4})-(?<month>1[0-2]|0[1-9])-(?<day>3[01]|0[1-9]|[12][0-9])(T(?<hour>2[0-4]|[01][0-9]):(?<minute>[0-5][0-9]):(?<second>[0-5][0-9])(?<ms>\\.[0-9]+)?(?<timezone>Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?)?$/;\n\n    return DateUtils.parseDate(dateStr, regexp, withHours);\n  }\n\n  /**\n   * Retourne une Date UTC, sans heure, minute seconde, à partir d'une date\n   * @param date\n   */\n  static date2Utc(date: Date, withHours = false): Date {\n    if (withHours) {\n      return this.createDate(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours());\n    } else {\n      return this.createDate(date.getFullYear(), date.getMonth(), date.getDate());\n    }\n  }\n\n  /**\n   * Retourne une Date UTC, sans heure, minute seconde, selon plusieurs formats en entrée\n   * @param value\n   */\n  static dateUtcOf(value: Date | string | number | undefined | null): Date | undefined {\n    let date: Date | undefined = undefined;\n\n    if (typeof value === 'string') date = DateUtils.parseDateIso(value);\n    else if (typeof value === 'number') date = DateUtils.numberToDateUtc(value);\n    else if (value) date = DateUtils.date2Utc(value);\n\n    return date;\n  }\n\n  /**\n   * Retourne une Date UTC, sans minute et seconde, selon plusieurs formats en entrée\n   * @param value\n   */\n  static dateUtcOfWithHours(value: Date | string | number | undefined | null): Date | undefined {\n    let date: Date | undefined = undefined;\n\n    if (typeof value === 'string') date = DateUtils.parseDateIso(value, true);\n    else if (typeof value === 'number') date = DateUtils.numberToDateUtc(value, true);\n    else if (value) date = DateUtils.date2Utc(value, true);\n\n    return date;\n  }\n\n  static isTwoDigitsYear(year: number): boolean {\n    return year >= 0 && year < 100;\n  }\n\n  /**\n   * Permet de créer une date avec un année contenant seulement un ou deux digits (i.e: année 27)\n   *\n   * @param year Année, possiblement négative.\n   * @param month Mois\n   * @param day Jour\n   * @param hour Heure\n   * @param needsOffsetting Défini si la date créée à besoin d'être basculée à minuit, heure locale\n   * @returns La date correspondant aux paramètres d'entrée\n   */\n  static createDate(year: number, month: number, day: number, hour: number = 0, needsOffsetting = true): Date {\n    const date = needsOffsetting ? new Date(Date.UTC(year, month, day, hour)) : new Date(year, month, day, hour);\n\n    if (this.isTwoDigitsYear(year)) {\n      date.setFullYear(year);\n    }\n\n    return date;\n  }\n\n  private static parseDate(dateStr: string, regexp: RegExp, withHours = false): Date | undefined {\n    if (!dateStr) return undefined;\n\n    const execArr = regexp.exec(dateStr);\n    const groups = execArr?.groups;\n    const valid = !!groups && !!groups['year'] && !!groups['month'] && !!groups['day'];\n\n    if (!valid) {\n      return undefined;\n    } else if (withHours) {\n      const offset = groups['timezone'] === 'Z' ? 0 : Number(groups['timezone'].split(':')[0]);\n\n      return this.createDate(\n        Number(groups['year']),\n        Number(groups['month']) - 1,\n        Number(groups['day']),\n        Number(groups['hour']) + offset,\n      );\n    } else {\n      return this.createDate(Number(groups['year']), Number(groups['month']) - 1, Number(groups['day']));\n    }\n  }\n\n  private static numberToDateUtc(n: number, withHours = false): Date {\n    const d = new Date(n);\n\n    if (withHours) {\n      return this.createDate(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours());\n    } else {\n      return this.createDate(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate());\n    }\n  }\n}\n","import { ElementRef } from '@angular/core';\n\nexport class DomUtils {\n  private constructor() {}\n\n  static surroundElementsWithLi(container: ElementRef<any>, elements: readonly ElementRef<any>[]): void {\n    DomUtils.removeEmptyLi(container);\n\n    for (const elem of elements) {\n      if (elem.nativeElement?.parentElement?.tagName !== 'LI') {\n        DomUtils.insertNodeInLi(elem.nativeElement);\n      }\n    }\n  }\n\n  static surroundNativeElementsWithLi(container: ElementRef<any>, elements: readonly Element[]): void {\n    DomUtils.removeEmptyLi(container);\n\n    for (const elem of elements) {\n      if (elem?.parentElement?.tagName !== 'LI' && elem?.tagName !== 'LI') {\n        DomUtils.insertNodeInLi(elem);\n      }\n    }\n  }\n\n  private static removeEmptyLi({ nativeElement }: ElementRef<HTMLElement>): void {\n    const nonProgrammaticLiElements = nativeElement.querySelectorAll('li[data-ngx-dsfr-li]');\n\n    nonProgrammaticLiElements.forEach((li) => {\n      if (li.childElementCount === 0) {\n        li.remove();\n      }\n    });\n  }\n\n  private static insertNodeInLi(child: Element): void {\n    if (!document) return; // mode SSR\n\n    const li = document.createElement('li');\n    li.setAttribute('data-ngx-dsfr-li', 'true');\n    child.replaceWith(li); // Ne remplace pas l'élément en lui même mais modifie la Node parent de l'élément: https://developer.mozilla.org/fr/docs/Web/API/Element/replaceWith\n    li.appendChild(child);\n  }\n}\n","/**\n * Les types MIME de fichiers supportés par le composant.\n *\n * @see https://developer.mozilla.org/fr/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\n */\nexport enum DsfrMimeTypeConst {\n  // TEXT\n  TEXT_CSS = 'text/css',\n  TEXT_CSV = 'text/csv',\n  TEXT_HTML = 'text/html',\n  TEXT_CALENDAR = 'text/calendar',\n  TEXT_PLAIN = 'text/plain',\n  TEXT_XML = 'text/xml',\n\n  // FONT\n  FONT_OTF = 'font/otf',\n  FONT_TTF = 'font/ttf',\n  FONT_WOFF = 'font/woff',\n  FONT_WOFF2 = 'font/woff2',\n\n  // IMAGE\n  IMAGE_BMP = 'image/bmp',\n  IMAGE_GIF = 'image/gif',\n  IMAGE_ICON = 'image/x-icon',\n  IMAGE_JPEG = 'image/jpeg',\n  IMAGE_PNG = 'image/png',\n  IMAGE_SVG = 'image/svg+xml',\n  IMAGE_TIFF = 'image/tiff',\n  IMAGE_WEBP = 'image/webp',\n\n  // AUDIO\n  AUDIO_3GPP = 'audio/3gpp',\n  AUDIO_3GPP2 = 'audio/3gpp2',\n  AUDIO_ACC = 'audio/aac',\n  AUDIO_OGG = 'audio/ogg',\n  AUDIO_MIDI = 'audio/midi',\n  AUDIO_WAV = 'audio/x-wav',\n  AUDIO_WEBM = 'audio/webm',\n\n  // VIDEO\n  VIDEO_3GPP = 'video/3gpp',\n  VIDEO_3GPP2 = 'video/3gpp2',\n  VIDEO_MPEG = 'video/mpeg',\n  VIDEO_OGG = 'video/ogg',\n  VIDEO_WEBM = 'video/webm',\n\n  // APPLICATION\n  APPLICATION_ABIWORD = 'application/x-abiword',\n  APPLICATION_CSH = 'application/x-csh',\n  APPLICATION_EPUB = 'application/epub+zip',\n  APPLICATION_FLASH = 'application/x-shockwave-flash',\n  APPLICATION_FORM_URLENCODED = 'application/x-www-form-urlencoded',\n  APPLICATION_JAVASCRIPT = 'application/javascript',\n  APPLICATION_JSON = 'application/json',\n  APPLICATION_OCTET_STREAM = 'application/octet-stream',\n  APPLICATION_OGG = 'application/ogg',\n  APPLICATION_PDF = 'application/pdf',\n  APPLICATION_RTF = 'application/rtf',\n  APPLICATION_TYPESCRIPT = 'application/typescript',\n  APPLICATION_XML = 'application/xml',\n  APPLICATION_XML_ATOM = 'application/atom+xml',\n  APPLICATION_XML_SVG = 'application/svg+xml',\n  APPLICATION_XML_XHTML = 'application/xhtml+xml',\n  APPLICATION_XML_XUL = 'application/vnd.mozilla.xul+xml',\n\n  // ARCHIVE\n  ARCHIVE_7Z_COMPRESSED = 'application/x-7z-compressed',\n  ARCHIVE_BZIP = 'application/x-bzip',\n  ARCHIVE_BZIP2 = 'application/x-bzip2',\n  ARCHIVE_JAVA = 'application/java-archive',\n  ARCHIVE_GZIP = 'application/gzip',\n  ARCHIVE_RAR_COMPRESSED = 'application/x-rar-compressed',\n  ARCHIVE_TAR = 'application/x-tar',\n  ARCHIVE_RAR = 'application/vnd.rar',\n  ARCHIVE_ZIP = 'application/zip',\n  ARCHIVE_ZIP_COMPRESSED = 'application/x-zip-compressed',\n\n  // MICROSOFT\n  MS_FONT_OBJECT = 'application/vnd.ms-fontobject',\n  MS_EXCEL = 'application/vnd.ms-excel',\n  MS_EXCEL_XML = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n  MS_POWERPOINT = 'application/vnd.ms-powerpoint',\n  MS_POWERPOINT_XML = 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n  MS_VIDEO = 'video/x-msvideo',\n  MS_VISIO = 'application/vnd.visio',\n  MS_WORD = 'application/msword',\n  MS_WORD_XML = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n\n  // Autres\n  MULTIPART_FORM_DATA = 'multipart/form-data',\n  SCRIPT_SHELL = 'application/x-sh',\n  OPEN_PRESENTATION = 'application/vnd.oasis.opendocument.presentation',\n  OPEN_SPREADSHEET = 'application/vnd.oasis.opendocument.spreadsheet',\n  OPEN_TEXT = 'application/vnd.oasis.opendocument.text',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrMimeTypeConst}.\n */\n//TODO: (RPA) Ce type n'est pas utilisé pour typer `DsfrDownloadComponent#mimeType` ni `BasePanelComponent#downloadMimeType`\nexport type DsfrMimeType = `${DsfrMimeTypeConst}`;\n\n/**\n * Fonction utilitaire\n *\n * @ignore\n */\nexport function convertMimeType2FileFormat(mineType: string | undefined): FileFormat | undefined {\n  const element = mimeType2FileFormat.find((e) => e[0] === mineType);\n  return element ? element[1] : undefined;\n}\n\n/**\n * @ignore\n */\nenum FileFormat {\n  XLS = 'XLS',\n  XLSX = 'XLSX',\n  PPT = 'PPT',\n  PPTX = 'PPTX',\n  DOC = 'DOC',\n  DOCX = 'DOCX',\n  ODS = 'ODS',\n  ODP = 'ODP',\n  ODT = 'ODT',\n  XML = 'XML',\n  JPG = 'JPG',\n  PNG = 'PNG',\n  PDF = 'PDF',\n  CSV = 'CSV',\n  HTML = 'HTML',\n  SVG = 'SVG',\n  TXT = 'TXT',\n  ZIP = 'ZIP',\n  SEVEN_ZIP = '7Z',\n  RAR = 'RAR',\n  XHTML = 'XHTML',\n  BMP = 'BMP',\n  GIF = 'GIF',\n  TIF = 'TIF',\n  RTF = 'RTF',\n  GZIP = 'GZIP',\n  TAR = 'TAR',\n}\n\n/**\n * @ignore\n */\nconst mimeType2FileFormat: [DsfrMimeType | string, FileFormat][] = [\n  [DsfrMimeTypeConst.APPLICATION_PDF, FileFormat.PDF],\n  [DsfrMimeTypeConst.APPLICATION_RTF, FileFormat.RTF],\n  [DsfrMimeTypeConst.APPLICATION_XML, FileFormat.XML],\n  [DsfrMimeTypeConst.APPLICATION_XML_ATOM, FileFormat.XML],\n  [DsfrMimeTypeConst.APPLICATION_XML_XHTML, FileFormat.XHTML],\n\n  [DsfrMimeTypeConst.ARCHIVE_7Z_COMPRESSED, FileFormat.SEVEN_ZIP],\n  [DsfrMimeTypeConst.ARCHIVE_GZIP, FileFormat.GZIP],\n  [DsfrMimeTypeConst.ARCHIVE_RAR, FileFormat.RAR],\n  [DsfrMimeTypeConst.ARCHIVE_TAR, FileFormat.TAR],\n  [DsfrMimeTypeConst.ARCHIVE_ZIP, FileFormat.ZIP],\n  [DsfrMimeTypeConst.ARCHIVE_ZIP_COMPRESSED, FileFormat.ZIP],\n\n  [DsfrMimeTypeConst.IMAGE_BMP, FileFormat.BMP],\n  [DsfrMimeTypeConst.IMAGE_GIF, FileFormat.GIF],\n  [DsfrMimeTypeConst.IMAGE_JPEG, FileFormat.JPG],\n  [DsfrMimeTypeConst.IMAGE_PNG, FileFormat.PNG],\n  [DsfrMimeTypeConst.IMAGE_SVG, FileFormat.SVG],\n  [DsfrMimeTypeConst.IMAGE_TIFF, FileFormat.TIF],\n\n  [DsfrMimeTypeConst.MS_EXCEL, FileFormat.XLS],\n  [DsfrMimeTypeConst.MS_EXCEL_XML, FileFormat.XLSX],\n  [DsfrMimeTypeConst.MS_POWERPOINT, FileFormat.PPT],\n  [DsfrMimeTypeConst.MS_POWERPOINT_XML, FileFormat.PPTX],\n  [DsfrMimeTypeConst.MS_WORD, FileFormat.DOC],\n  [DsfrMimeTypeConst.MS_WORD_XML, FileFormat.DOCX],\n\n  [DsfrMimeTypeConst.OPEN_PRESENTATION, FileFormat.ODP],\n  [DsfrMimeTypeConst.OPEN_SPREADSHEET, FileFormat.ODS],\n  [DsfrMimeTypeConst.OPEN_TEXT, FileFormat.ODT],\n\n  [DsfrMimeTypeConst.TEXT_CSV, FileFormat.CSV],\n  [DsfrMimeTypeConst.TEXT_HTML, FileFormat.HTML],\n  [DsfrMimeTypeConst.TEXT_PLAIN, FileFormat.TXT],\n  [DsfrMimeTypeConst.TEXT_XML, FileFormat.XML],\n];\n","import { convertMimeType2FileFormat } from '../../components/download/dsfr-mime.type';\n\nconst KILO_OCTETS = 1024;\nconst MEGA_OCTETS = KILO_OCTETS * 1024;\nconst GIGA_OCTETS = MEGA_OCTETS * 1024;\n\n/**\n * Construit le libellé de détail dans un composant de téléchargement lorsque ce libellé n'est pas fourni par le Dsfr\n * @param mimeType Type mime du fichier\n * @param sizeBytes Nombre d'octets\n * @param sizeUnit Unité utilisée dans la restitution\n * @return par exemple 'PDF - 10 octets'\n */\nexport function downloadDetail(\n  mimeType: string | undefined,\n  sizeBytes: number | undefined,\n  sizeUnit: DsfrFileSizeUnit,\n): string {\n  return !sizeBytes\n    ? convertMimeType2FileFormat(mimeType) || ''\n    : convertMimeType2FileFormat(mimeType) + ' - ' + fileSizeToString(sizeBytes, sizeUnit);\n}\n\n/**\n * Retourne la taille sous forme de string sous forme de 'nombre unité'\n * @param bytes Taille à transformer exprimée en octets\n * @param sizeUnit Si true, l'unité sera en bytes (KB, MB, ... ) sinon en octets (ko, mo, ...)\n */\nexport function fileSizeToString(bytes: number, sizeUnit?: DsfrFileSizeUnit): string {\n  if (!bytes) return '';\n\n  const bytesUnit = sizeUnit === 'bytes';\n\n  let fileSize: number;\n  let fileSizeUnit: string;\n\n  if (bytes < KILO_OCTETS) {\n    fileSize = bytes;\n    fileSizeUnit = bytesUnit ? FileSizeUnit.BYTES : FileSizeUnit.OCTETS;\n  } else if (bytes < MEGA_OCTETS) {\n    fileSize = bytes / 1024;\n    fileSizeUnit = bytesUnit ? FileSizeUnit.KB : FileSizeUnit.KO;\n  } else if (bytes < GIGA_OCTETS) {\n    fileSize = bytes / 1048576;\n    fileSizeUnit = bytesUnit ? FileSizeUnit.MB : FileSizeUnit.MO;\n  } else {\n    fileSize = bytes / 1073741824;\n    fileSizeUnit = bytesUnit ? FileSizeUnit.GB : FileSizeUnit.GO;\n  }\n\n  fileSize = Math.round(fileSize * 100) / 100;\n\n  // since 1.8, les options régionales sont prise en compte pour les décimales\n  //FIXME: ne devrait-ton pas transmettre la locale depuis l'extérieur de manière à pouvoir la transmettre depuis i18nService ?\n  const localSize = fileSize.toLocaleString();\n  return localSize + ' ' + fileSizeUnit;\n}\n\n// -- Constantes d'unités de taille de fichier -------------------------------------------------------------------------\n\nenum FileSizeUnit {\n  OCTETS = 'octets',\n  KO = 'ko',\n  MO = 'Mo',\n  GO = 'Go',\n  BYTES = 'bytes',\n  KB = 'KB',\n  MB = 'MB',\n  GB = 'GB',\n}\n\nexport enum DsfrFileSizeUnitConst {\n  BYTES = 'bytes',\n  OCTETS = 'octets',\n}\n\nexport type DsfrFileSizeUnit = `${DsfrFileSizeUnitConst}`;\n","/**\n * https://www.w3resource.com/JSON/JSONPath-with-JavaScript.php\n * @param obj : object|array This parameter represents the Object representing the JSON structure.\n * @param path : string This parameter represents JSONPath expression string.\n * @return une valeur extrait de l'objet Json ou undefined si le path est erroné\n */\nexport function jsonPath2Value(obj: any, path: string): any {\n  const keys = path.split('.');\n  // value est soit un objet JSON, soit une valeur terminale\n  let value = obj;\n  const breakException = {};\n  try {\n    keys.forEach((key) => {\n      if (!value) throw breakException;\n      // key, ex: 'labels[20]'\n      const matchArr = key.match(/([^\\[]*)\\[(\\d*)\\]/);\n      const k = matchArr ? matchArr[1] : undefined; // clé sans l'indice, ex : 'labels'\n      const i = matchArr ? matchArr[2] : undefined; // indice, ex : 20\n      value = k && i ? value[k][i] : value[key];\n    });\n  } catch (e) {\n    // console.error(`Le chemin '${path}' ne correspond pas à une valeur`);\n  }\n  return value;\n}\n","/**\n * La fonction permet de savoir si le code en cours s'exécute côté serveur ou côté browser.\n */\nexport function isOnBrowser() {\n  return typeof window !== 'undefined';\n}\n","import { isOnBrowser } from './ssr-utils';\n\n/**\n * Les méthodes statiques de cette classe permettent de gérer le local storage uniquement si le code s'exécute côté browser.\n */\nexport abstract class LocalStorage {\n  /**\n   * The setItem() method of the Storage interface, when passed a key name and value, will add that key to the given\n   * Storage object, or update that key's value if it already exists.\n   */\n  static set(key: string, value: string): void {\n    if (isOnBrowser()) window.localStorage?.setItem(key, value);\n  }\n\n  /**\n   * The getItem() method of the Storage interface, when passed a key name, will return that key's value, or null if\n   * he key does not exist, in the given Storage object.\n   * @return Signature identique à l'interface Storage.getItem(key: string): string | null\n   */\n  static get(key: string): string | null {\n    return isOnBrowser() ? window.localStorage?.getItem(key) : null;\n  }\n\n  /**\n   * The removeItem() method of the Storage interface, when passed a key name, will remove that key from the given\n   * Storage object if it exists. The Storage interface of the Web Storage API  provides access to a\n   * particular domain's session or local storage.\n   */\n  static remove(key: string): void {\n    if (isOnBrowser()) window.localStorage?.removeItem(key);\n  }\n}\n","export enum StorageEnum {\n  SCHEME = 'scheme', // display type\n  REMEMBER_ME = 'rememberMe',\n  LOGIN = 'login', // remember me dans la page de login\n  // 'lang' pour la langue (dans _commons)\n}\n","/**\n * Retourne vrai si la string 's' est null, undefined ou vide.\n * @param s la chaïne à considére\n */\nexport function isStringEmptyOrNull(s: string | null | undefined): boolean {\n  return !s || s.trim() === '';\n}\n","export function toArray(value: string | string[] | undefined): string[] {\n  if (Array.isArray(value)) {\n    return value;\n  } else {\n    return value ? [value] : [];\n  }\n}\n","import { v4 as uuidv4 } from 'uuid';\n\n/**\n * Fournit un identifiant unique de type string basé, actuellement, sur uuidv4.\n */\nexport function newUniqueId(): string {\n  return uuidv4();\n}\n","import { Component, Input } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\n\n/**\n * Base class for all ControlValueAccessor classes defined in Forms package. Contains common logic and utility functions.\n * Le type de `value` est : T | undefined, undefined par défaut. Par exemple si on manipule un input de type number, celui-ci\n * sera initialisé à undefined par défaut.\n */\n// Même si on ne précise pas undefined, à l'exécution, c'est quand même le cas.\n// Même si on indique un type number, à l'exécution, si l'utilisateur saisie \"1a\", value sera de type string\n@Component({\n  template: '',\n})\nexport abstract class DefaultValueAccessorComponent<T> implements ControlValueAccessor {\n  /**\n   * Permet de désactiver le champ.\n   */\n  @Input() disabled = false;\n\n  private _value: T | undefined;\n\n  get value(): T | undefined {\n    return this._value;\n  }\n\n  /**\n   * La valeur gérée par le champ de formulaire.\n   */\n  @Input() set value(value: T | undefined) {\n    this._value = value;\n    this.fnOnChange(this.value);\n  }\n\n  /**\n   * Writes a new value to the element.\n   * This method is called by the forms API to write to the view when programmatic changes from model to view are requested.\n   *\n   * @internal\n   */\n  writeValue(value: T | undefined): void {\n    this._value = value;\n  }\n\n  /**\n   * Registers a callback function that is called when the control's value changes in the UI.\n   * When the value changes in the UI, call the registered function to allow the forms API to update itself:\n   * host: {\n   *    '(change)': '_onChange($event.target.value)'\n   * }\n   *  @internal\n   */\n  registerOnChange(fn: (_: any) => void): void {\n    this.fnOnChange = fn;\n  }\n\n  /**\n   * Registers a callback function that is called by the forms API on initialization to update the form model on blur.\n   * On blur (or equivalent), your class should call the registered function to allow the forms API to update itself:\n   * host: {\n   *    '(blur)': '_onTouched()'\n   * }\n   *  @internal\n   */\n  registerOnTouched(fn: () => void): void {\n    this.fnOnTouched = fn;\n  }\n\n  /** @internal */\n  onBlur() {\n    this.fnOnTouched();\n  }\n\n  /**\n   * Function that is called by the forms API when the control status changes to or from 'DISABLED'.\n   * Depending on the status, it enables or disables the appropriate DOM element.\n   *\n   * @internal\n   */\n  setDisabledState?(isDisabled: boolean): void {\n    this.disabled = isDisabled;\n  }\n\n  /** @internal */\n  fnOnChange = (_: T | undefined) => {};\n\n  /** @internal */\n  fnOnTouched = () => {};\n}\n","import { Component, computed, input, Input, OnInit } from '@angular/core';\nimport { DsfrSeverity, DsfrSeverityConst } from '../models';\nimport { newUniqueId } from '../utils';\nimport { DefaultValueAccessorComponent } from './default-value-accessor.component';\n\n/**\n * Ce composant est le contrôle abstrait des contrôles Dsfr possédant un id, un name et un label.\n */\n@Component({\n  template: '',\n})\n// Renamed from AbstractControlComponent\nexport abstract class DefaultControlComponent<T> extends DefaultValueAccessorComponent<T> implements OnInit {\n  @Input() ariaControls?: string;\n\n  /**\n   * Attribut `id` du champ, généré automatiquement par défaut.\n   */\n  @Input() inputId?: string;\n\n  /**\n   * Texte(s) de description additionnel(s).\n   */\n  @Input() hint?: string | string[];\n\n  /**\n   *  Libellé du champ.\n   */\n  @Input() label?: string;\n\n  /**\n   * Sera utilisé pour positionner un attribut `name` sur le champ de formulaire.\n   */\n  @Input() name?: string;\n\n  /**\n   * Message d'erreur, quand il est présent les couleurs du contrôle changent.\n   * @deprecated (since 1.12) utiliser message/messageSeverity à la place\n   */\n  error = input<string>();\n\n  /**\n   * Message de validation, quand il est présent les couleurs du contrôle changent.\n   * @deprecated (since 1.12) utiliser message/messageSeverity à la place\n   */\n  valid = input<string>();\n\n  /**\n   * Message d'information lié au composant.\n   */\n  message = input<string | string[]>();\n\n  /**\n   * Représente la sévérité du message.\n   */\n  messageSeverity = input<DsfrSeverity>();\n\n  /** Attribut aria-describedby référençant une description supplémentaire optionnelle */\n  ariaDescribedBy = input<string>();\n\n  /** @internal */\n  messageViewModel = computed<string | string[] | undefined>(() => {\n    if (this.error()) return this.error();\n    if (this.valid()) return this.valid();\n    return this.message();\n  });\n\n  /** @internal */\n  severityViewModel = computed<DsfrSeverity | undefined>(() => {\n    const message = this.messageViewModel();\n    if (!message?.length) return undefined;\n\n    if (this.error()) return DsfrSeverityConst.ERROR;\n    if (this.valid()) return DsfrSeverityConst.VALID;\n    if (this.messageSeverity() === DsfrSeverityConst.SUCCESS) return DsfrSeverityConst.VALID;\n\n    return this.messageSeverity();\n  });\n\n  /** @internal */\n  combinedAriaDescribedBy = computed<string | null>(() => {\n    const ariaDescribedBy = this.ariaDescribedBy();\n    const ids: string[] = [];\n\n    if (ariaDescribedBy) ids.push(ariaDescribedBy);\n    ids.push(this.messagesGroupId); // toujours présent meme si aucun message\n\n    return ids.length ? ids.join(' ') : null;\n  });\n\n  /**\n   * @deprecated since 1.11, l'id sur un label ne sera plus utilisé en 2.0\n   * @internal\n   */\n  labelId?: string;\n\n  /** @internal */\n  messagesGroupId: string = '';\n\n  private _id: string = '';\n\n  /**\n   * Cet attribut doit être utilisé en tant que propriété et non en attribut, ex. `[id]=\"'monid'\"`.\n   *\n   * @deprecated since 1.5, utiliser `inputId` à la place.\n   */\n  @Input() set id(value: string) {\n    if (value) {\n      this._id = value;\n      this.inputId ??= this._id;\n    }\n  }\n\n  /** @internal */\n  ngOnInit() {\n    this.inputId = this.inputId || newUniqueId(); // même si this.inputId = '', l'id sera valorisé (contrairement à '')\n    this.messagesGroupId = newUniqueId();\n    this.labelId = `${this.inputId}-label`;\n  }\n}\n","// -- Background -------------------------------------------------------------------------------------------------------\n/**\n * Définit les différentes couleurs d'arrière-plan supportées par le DSFR.\n */\nexport enum DsfrPanelBackgroundConst {\n  DEFAULT = 'default',\n  GREY = 'grey',\n  TRANSPARENT = 'transparent',\n}\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrPanelBackgroundConst}.\n */\nexport type DsfrPanelBackground = `${DsfrPanelBackgroundConst}`;\n\n// -- Border -----------------------------------------------------------------------------------------------------------\n/**\n * Définit les différentes couleurs de bordure supportées par le DSFR.\n */\nexport enum DsfrPanelBorderConst {\n  DEFAULT = 'default',\n  NO_BORDER = 'no-border',\n  SHADOW = 'shadow',\n}\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrPanelBorderConst}.\n */\nexport type DsfrPanelBorder = `${DsfrPanelBorderConst}`;\n\n/**\n * Définit les différents balisages HTML supportés par la description du panel.\n */\nexport enum DsfrPanelDescMarkupConst {\n  /**\n   * Pour obtenir un conteneur `<DIV>`.\n   */\n  DIV = 'div',\n  /**\n   * Pour obtenir un conteneur `<P>` par défault.\n   */\n  P = 'p',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrPanelDescMarkupConst}.\n */\nexport type DsfrPanelDescMarkup = `${DsfrPanelDescMarkupConst}`;\n","import { Component, inject, Input } from '@angular/core';\nimport { NavigationExtras } from '@angular/router';\nimport {\n  downloadDetail,\n  DsfrFileSizeUnit,\n  DsfrHeadingLevel,\n  DsfrLink,\n  DsfrLinkTarget,\n  DsfrNavigation,\n  DsfrSize,\n  LangService,\n} from '../..';\nimport { DsfrBadge } from '../../../components/badge';\nimport { DsfrTag } from '../../../components/tag';\nimport {\n  DsfrPanelBackground,\n  DsfrPanelBorder,\n  DsfrPanelDescMarkup,\n  DsfrPanelDescMarkupConst,\n} from './base-panel.model';\n// Ne peut pas être déplacé dans 'shared' à cause de la dépendance sur DsfrBadge et DsfrTag\n\nexport const DEFAULT_HEADING_LEVEL: DsfrHeadingLevel = 'H3';\n\n@Component({\n  template: '',\n})\nexport abstract class BasePanelComponent implements DsfrNavigation {\n  /**\n   * La propriété ariaLabel définit une valeur de chaîne qui étiquette un élément interactif.\n   *\n   * @since 1.7\n   */\n  @Input() ariaLabel?: string;\n\n  /**\n   * Permet de positionner des badges (jusqu'à 4 badges maxi) en haut du composant, optionnel.\n   *\n   * @see DsfrBadge\n   */\n  @Input() badges: DsfrBadge[] = [];\n\n  /**\n   * Permet d'avoir un fond gris ou transparent.\n   */\n  @Input() customBackground: DsfrPanelBackground = 'default';\n\n  /**\n   * Permet d'afficher une ombre ou ne pas mettre de bordure.\n   */\n  @Input() customBorder: DsfrPanelBorder = 'default';\n\n  /**\n   * Une description optionnelle plein texte. Utiliser descriptionMarkup et le slot sinon.\n   */\n  @Input() description?: string;\n\n  /**\n   * Type de balise HTML pour le conteneur de la description. <p> par défaut.\n   */\n  @Input() descriptionMarkup: DsfrPanelDescMarkup = DsfrPanelDescMarkupConst.P;\n\n  /**\n   * Permet de désactiver le composant.\n   */\n  @Input() disabled = false;\n\n  /**\n   * Equivalent à l'attribut html natif 'download'.\n   * - true : la fenêtre de téléchargement s'affiche directement,\n   * - false : le fichier est ouvert avant d'être téléchargé,\n   * - string : nouveau nom de fichier proposé au téléchargement.\n   */\n  @Input() downloadDirect: boolean | string = true;\n\n  /**\n   * Si 'true' (défaut) : le détail du téléchargement est automatiquement renseigné par le script DSFR.\n   */\n  @Input() downloadAssessFile = true;\n\n  /**\n   * Obligatoire, dans le cas d'un téléchargement si le document n'est pas du même langage que la page courante.\n   * Ex : downloadLangCode=\"en\".\n   */\n  @Input() downloadLangCode?: string;\n\n  /**\n   * Format du fichier, à renseigner si downloadAssessFile est faux.\n   */\n  @Input() downloadMimeType?: string;\n\n  /**\n   * Poids du fichier en octets, à renseigner si downloadAssessFile est faux.\n   * */\n  @Input() downloadSizeBytes?: number;\n\n  /**\n   * Permet de désactiver le lien étendu de la carte.\n   */\n  @Input() enlargeLink = true;\n\n  /**\n   * Titre du composant.\n   * Le fait de valoriser cette propriété est prioritaire sur le ng-content [heading].\n   * Attention fonctionnellement la présence d'un titre est obligatoire.\n   */\n  @Input() heading?: string;\n\n  /**\n   * Le niveau de titre devant être utilisé (tag `h4` par défaut).\n   * Cette balise ne produit pas de style, mais de la structure.\n   */\n  @Input() headingLevel: string = DEFAULT_HEADING_LEVEL;\n\n  /**\n   * Passe le composant en mode horizontal.\n   */\n  @Input() horizontal = false;\n\n  /**\n   * Permet de positionner un lien de type href.\n   * Sert aussi de lien de téléchargement.\n   */\n  @Input() link?: string;\n\n  /**\n   * Permet de positionner une route Angular qui sera récupérée via 'output tileSelect.\n   */\n  @Input() route?: string;\n\n  /**\n   * Path angular géré en tant que directive routerLink. Prioritaire et exclusif avec link et route.\n   */\n  @Input() routePath?: string | string[];\n\n  /**\n   * Classe CSS utilisée pour la directive routerLink active.\n   */\n  @Input() routerLinkActive?: string | string[];\n\n  /**\n   * RouterLink : valeurs additionnelles de navigation pour le routerLink (queryParams, state, etc.)\n   */\n  @Input() routerLinkExtras?: NavigationExtras;\n\n  /**\n   * Dimension du composant, 'MD' par défaut ('SM, 'MD' uniquement pour la tuile).\n   */\n  @Input() panelSize: DsfrSize = 'MD';\n\n  /**\n   * Permet d'avoir un bouton à la place d'un lien.\n   *\n   * @since 1.12\n   */\n  @Input() enlargeButton = false;\n\n  /**\n   * Attribut target du lien.\n   */\n  @Input() linkTarget?: DsfrLinkTarget;\n\n  private _download = false;\n  private _downloadSizeUnit: DsfrFileSizeUnit | undefined;\n  private _tags: DsfrTag[] = [];\n  private _detailBottom: string = '';\n  private readonly langService = inject(LangService);\n\n  protected constructor() {}\n\n  get downloadSizeUnit(): DsfrFileSizeUnit {\n    return this._downloadSizeUnit || this.langService.lang ? 'octets' : 'bytes';\n  }\n\n  get tags(): DsfrTag[] {\n    return this._tags;\n  }\n\n  get itemLink(): DsfrLink {\n    const label = this.heading ? this.heading : '';\n    const itemLink: DsfrLink = { label: label, ariaLabel: this.ariaLabel }; // ariaLabel (since 1.7)\n    if (this.link) {\n      itemLink.link = this.link;\n    } else if (this.route) {\n      itemLink.route = this.route;\n    }\n    return itemLink;\n  }\n\n  get download(): boolean {\n    return this._download;\n  }\n\n  get detailBottom(): string {\n    return !this.download ? this._detailBottom : this.downloadDetail;\n  }\n\n  /**\n   * Dimension du composant, 'MD' par défaut ('SM, 'MD' uniquement pour la tuile).\n   *\n   * @deprecated since(1.15.0) utiliser 'panelSize' à la place\n   */\n  get size(): DsfrSize {\n    return this.panelSize;\n  }\n\n  /**\n   * Dans le cas d'un téléchargement sans l'option 'downloadAssessFile',\n   * on crée le détail à l'aide des propriétés 'downloadSizeBytes', 'downloadMimeType'.\n   * @internal\n   */\n  protected get downloadDetail(): string {\n    return downloadDetail(this.downloadMimeType, this.downloadSizeBytes, this.downloadSizeUnit);\n  }\n\n  /**\n   * Dimension du composant, 'MD' par défaut ('SM, 'MD' uniquement pour la tuile).\n   *\n   * @deprecated since(1.15.0) utiliser 'panelSize' à la place\n   */\n  @Input() set size(value: DsfrSize) {\n    this.panelSize = value;\n  }\n\n  /**\n   * Transforme le composant classique en composant de téléchargement.\n   */\n  @Input() set download(download: boolean) {\n    this._download = download;\n    if (this._download) this.enlargeLink = true;\n  }\n\n  /** Zone de détail se trouvant visuellement sous la description et à côté de l’icône, optionnel.\n   * Pour la tuile, on peut passer un slot de sélecteur \"detail\".\n   * En cas de téléchargement le détail est remplacé par les informations du fichier calculées selon downloadAssessFile.\n   */\n  @Input() set detailBottom(value: string) {\n    this._detailBottom = value;\n  }\n\n  /**\n   * Force l'unité par défaut qui dépend de la langue du site, en octets (ko, Mo, ...) pour 'fr', en 'bytes' (KB, MB...) pour les autres langues.\n   */\n  @Input() set downloadSizeUnit(value: DsfrFileSizeUnit) {\n    this._downloadSizeUnit = value;\n  }\n\n  /**\n   * Permet de positionner des tags en haut de la carte (cliquables ou non), optionnel.\n   * voir DsfrTag\n   */\n  @Input() set tags(tags: DsfrTag[]) {\n    this._tags = tags;\n\n    // Vérifie si un tag est cliquable pour désactiver enlargeLink.\n    if (tags?.find((tag) => tag.link)) this.enlargeLink = false;\n  }\n\n  /**\n   * Activation du router Angular.\n   * Provoque un bug accessibilité sur la navigation au clavier (ajout d'un tabindex=0)\n   *\n   * @deprecated (since 1.11.5) utiliser `routePath` à la place.\n   */\n  @Input() set routerLink(value: string | string[] | undefined) {\n    if (value) this.routePath = value;\n  }\n\n  /** @internal */\n  hasLink(): boolean {\n    return !!(this.link || this.route || this.routePath);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { booleanAttribute, Component, EventEmitter, input, Output, ViewEncapsulation } from '@angular/core';\n\n/**\n * Composant de checkbox sans ControlValueAccessor\n * Pour utilisation d'un composant \"light\" répété x fois, ex. Table\n */\n@Component({\n  selector: 'edu-checkbox-light, dsfr-ext-checkbox', // pour rétrocompatibilité\n  styleUrls: ['./checkbox-light.component.scss'],\n  templateUrl: './checkbox-light.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule],\n})\nexport class EduCheckboxLightComponent {\n  /* Evenement émis lors du clic sur la checkbox */\n  @Output() checkboxClick: EventEmitter<Event> = new EventEmitter();\n\n  /* Identifiant de la checkbox (obligatoire) */\n  id = input.required<string>();\n\n  /* Label associé à la checkbox */\n  label = input.required<string>();\n\n  /* Surcharge de la propriété tabIndex  (optionnel) */\n  tabIndex = input<number>();\n\n  /* Checkbox désactivée, faux par défaut */\n  disabled = input(false, { transform: booleanAttribute });\n\n  /* Icone affichée à gauche du label (optionnel) */\n  icon = input<string>();\n\n  /**\n   * Cache le label visuellement en le laissant disponible aux lecteurs d'écran.\n   */\n  labelSrOnly = input<boolean | undefined>(false);\n\n  /* Etat de la checkbox */\n  selected = input<boolean | undefined>(false);\n\n  /**@internal */\n  public onClick(event: Event): void {\n    this.checkboxClick.emit(event);\n  }\n\n  /**@internal */\n  public isIndeterminate(): boolean {\n    return this.selected() === undefined;\n  }\n}\n","<span class=\"fr-checkbox-group fr-checkbox-group--sm\">\n  <input\n    [attr.tabindex]=\"tabIndex() || null\"\n    [checked]=\"selected()\"\n    (click)=\"onClick($event)\"\n    [disabled]=\"disabled()\"\n    class=\"edu-table-checkbox\"\n    [indeterminate]=\"isIndeterminate()\"\n    [id]=\"id()\"\n    type=\"checkbox\" />\n  <label class=\"fr-label\" [for]=\"id()\" [class.fr-label--disabled]=\"disabled()\">\n    @if (labelSrOnly() && label()) {\n      <span class=\"fr-sr-only\">{{ label() }} </span>\n    } @else if (label()) {\n      <span class=\"text-node\">{{ label() }}</span>\n    } @else {\n      <ng-content select=\"[label]\"></ng-content>\n    }\n    @if (icon()) {\n      <span [class]=\"icon() + ' fr-icon--sm'\">&nbsp;</span>\n    }\n  </label>\n</span>\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { DsfrHeadingLevel, DsfrHeadingLevelConst } from '../../models';\n\n@Component({\n  selector: 'edu-heading',\n  templateUrl: './heading.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule],\n})\n/**\n * Permet de définir le titre de composant d'un niveau de titre de `<h2>` à `<h6>`, avec un niveau par défaut de `<h2>` à `<h6>` ou `<p>`.\n * Ne permets pas la projection du titre.\n */\nexport class HeadingComponent {\n  /** Classe du titre. */\n  @Input() customClass?: string;\n\n  /** Autoriser l'affichage d'un titre de niveau H1 */\n  @Input() allowFirstLevel = false;\n\n  /** id du titre @since 1.9 */\n  @Input() headingId?: string;\n\n  /** Le niveau du titre dans la structure. */\n  @Input() level?: DsfrHeadingLevel | 'P';\n\n  /** Niveau par défaut si 'level' n'est pas renseigné. */\n  @Input({ required: true }) defaultLevel!: DsfrHeadingLevel | 'P';\n\n  protected getLevel(): DsfrHeadingLevel | 'P' {\n    return this.level && this.level !== DsfrHeadingLevelConst.NONE ? this.level : this.defaultLevel;\n  }\n}\n","@switch (getLevel()) {\n  @case ('H1') {\n    @if (allowFirstLevel) {\n      <h1 [attr.id]=\"headingId || null\" [class]=\"customClass\">\n        <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n      </h1>\n    } @else {\n      <h2 [attr.id]=\"headingId || null\" [class]=\"customClass\">\n        <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n      </h2>\n    }\n  }\n  @case ('H2') {\n    <h2 [attr.id]=\"headingId || null\" [class]=\"customClass\">\n      <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n    </h2>\n  }\n  @case ('H3') {\n    <h3 [attr.id]=\"headingId || null\" [class]=\"customClass\">\n      <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n    </h3>\n  }\n  @case ('H4') {\n    <h4 [attr.id]=\"headingId || null\" [class]=\"customClass\">\n      <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n    </h4>\n  }\n  @case ('H5') {\n    <h5 [attr.id]=\"headingId || null\" [class]=\"customClass\">\n      <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n    </h5>\n  }\n  @case ('H6') {\n    <h6 [attr.id]=\"headingId || null\" [class]=\"customClass\">\n      <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n    </h6>\n  }\n  @case ('P') {\n    <p [attr.id]=\"headingId || null\" [class]=\"customClass\">\n      <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n    </p>\n  }\n  @default {\n    <p [attr.id]=\"headingId || null\" [class]=\"customClass\">\n      <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n    </p>\n  }\n}\n\n<ng-template #headingTemplate>\n  <ng-content></ng-content>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HeadingComponent } from './heading.component';\n\n@NgModule({\n  exports: [HeadingComponent],\n  imports: [CommonModule, HeadingComponent],\n})\nexport class HeadingModule {}\n","import { Directive, HostBinding, Input } from '@angular/core';\nimport { DsfrSeverity, DsfrSeverityConst } from '../models';\n\n/**\n */\n@Directive({ selector: '[eduMessageSeverity]', standalone: true })\nexport class EduMessageSeverityDirective {\n  private _severity: DsfrSeverity | null | undefined = null;\n\n  @HostBinding('class')\n  get className(): string {\n    switch (this._severity) {\n      case DsfrSeverityConst.ERROR:\n        return 'fr-message--error';\n      case DsfrSeverityConst.SUCCESS:\n      case DsfrSeverityConst.VALID:\n        return 'fr-message--valid';\n      case DsfrSeverityConst.INFO:\n        return 'fr-message--info';\n      case DsfrSeverityConst.WARNING:\n        return 'fr-message--warning';\n      default:\n        return '';\n    }\n  }\n\n  @Input('eduMessageSeverity')\n  set severity(value: DsfrSeverity | null | undefined) {\n    this._severity = value;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { booleanAttribute, Component, computed, input, Signal, ViewEncapsulation } from '@angular/core';\nimport { EduMessageSeverityDirective } from '../../directives/message-severity.directive';\nimport { DsfrSeverity, DsfrSeverityConst } from '../../models';\nimport { toArray } from '../../utils';\n\ninterface DisplayedMessageStatus {\n  message: string[] | undefined;\n  messageSeverity: DsfrSeverity | undefined;\n}\n\n/**\n * InputGroupComponent contient la gestion des messages de l'input\n * @since 1.11.0\n */\n@Component({\n  selector: 'edu-input-group',\n  encapsulation: ViewEncapsulation.None,\n  templateUrl: './input-group.component.html',\n  imports: [CommonModule, EduMessageSeverityDirective],\n})\nexport class InputGroupComponent {\n  /**\n   * Permet de désactiver le champ.\n   */\n  disabled = input(false, { transform: booleanAttribute });\n\n  /**\n   * Id de la div affichant les messages d'erreur ou de validation.\n   */\n  messagesGroupId = input.required<string>();\n\n  /**\n   * Message(s) d'information(s) lié au composant fourni par l'utilisateur du composant\n   */\n  message = input<string | string[]>();\n\n  /**\n   * Représente la sévérité du ou des messages\n   */\n  messageSeverity = input<DsfrSeverity>();\n\n  /**\n   * Message(s) d'information(s) lié au composant correspondant à son système de validation interne\n   * @internal\n   */\n  internalError = input<string | string[]>();\n\n  protected readonly DsfrSeverity = DsfrSeverityConst;\n\n  /**\n   * Gestion de l'affichage de la combinaison des messages internes et externes du composant.\n   */\n  protected readonly newMessages = computed<string[]>(() => {\n    const internalError = this.internalError();\n    const message = this.message();\n\n    return this.handleMessagesConcat(internalError, message);\n  });\n\n  /**\n   * Gestion de l'affichage dans le cas où le composant serait dans un autre statut qu'en erreur,\n   * et qu'une erreur interne se manifeste. Dans ce cas, seules sont affichées les erreurs internes, et le statut\n   * affiché du composant est forcé en erreur.\n   */\n  protected readonly displayedMessageStatus: Signal<DisplayedMessageStatus> = computed(() => {\n    const newSeverity = this.messageSeverity();\n    const internalError = toArray(this.internalError());\n\n    // priorité erreur interne\n    if (newSeverity !== DsfrSeverityConst.ERROR && internalError.length > 0) {\n      return {\n        message: internalError,\n        messageSeverity: DsfrSeverityConst.ERROR,\n      };\n    }\n\n    return {\n      message: this.newMessages(),\n      messageSeverity: newSeverity,\n    };\n  });\n\n  /** Gestion des classes CSS ajoutées selon la sévérité */\n  protected readonly inputGroupSeverityClasses: Signal<string | null> = computed(() => {\n    const status = this.displayedMessageStatus();\n\n    if (!status?.message || !status?.messageSeverity) return null;\n\n    const severityToClass: Record<DsfrSeverity, string> = {\n      [this.DsfrSeverity.ERROR]: 'fr-input-group--error',\n      [this.DsfrSeverity.SUCCESS]: 'fr-input-group--valid',\n      [this.DsfrSeverity.VALID]: 'fr-input-group--valid',\n      [this.DsfrSeverity.INFO]: '',\n      [this.DsfrSeverity.WARNING]: '',\n    };\n\n    return severityToClass[status.messageSeverity];\n  });\n\n  private handleMessagesConcat(\n    internalError: string | string[] | undefined,\n    message: string | string[] | undefined,\n  ): string[] {\n    const internal = this.toArray(internalError);\n    const external = this.toArray(message);\n\n    const messages = [...internal, ...external];\n\n    return messages;\n  }\n\n  private toArray(value: string | string[] | undefined): string[] {\n    if (!value) return [];\n    return Array.isArray(value) ? value : [value];\n  }\n}\n","<div class=\"fr-input-group\" [class.fr-input-group--disabled]=\"disabled()\" [ngClass]=\"inputGroupSeverityClasses()\">\n  <ng-content />\n\n  <div class=\"fr-messages-group\" [id]=\"messagesGroupId()\" aria-live=\"polite\">\n    @let messageStatus = displayedMessageStatus();\n\n    @if (messageStatus.messageSeverity && messageStatus.message?.length) {\n      @for (individualMessage of messageStatus.message; track individualMessage) {\n        <!-- prettier-ignore -->\n        <p class=\"fr-message\" [eduMessageSeverity]=\"messageStatus.messageSeverity\">{{ individualMessage }}</p>\n      }\n    }\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  computed,\n  EventEmitter,\n  inject,\n  input,\n  Input,\n  Output,\n  SecurityContext,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { RouterModule } from '@angular/router';\nimport { DsfrLink, DsfrLinkTarget, DsfrPositionConst } from '../../models';\n\n@Component({\n  selector: 'edu-link-download',\n  templateUrl: './link-download.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, RouterModule],\n})\n/** Ce composant correspond au lien de téléchargement utilisé par card, tile et download */\nexport class LinkDownloadComponent {\n  /** Classe personnalisée du composant, par exemple, `fr-btn`, `fr-nav__link`, ... */\n  @Input() customClass?: string;\n\n  /**\n   * Option de détail de téléchargement renseigné automatiquement.\n   * Si la valeur est 'bytes', l'unité sera en Bytes\n   */\n  @Input() downloadAssessFile: boolean | 'bytes' = false;\n\n  /**\n   * Langue courante. hreflang ne sera indiquée que différent de la langue courante.\n   */\n  @Input() langCode = 'fr';\n\n  /**\n   * Attribut target du lien.\n   *\n   * @since 1.12\n   */\n  @Input() linkTarget?: DsfrLinkTarget;\n\n  /** Remplacer le lien par un markup de bouton */\n  @Input() isButton: boolean = false;\n\n  /**\n   * Propage la valeur de 'route' ou de 'link' (selon le cas) lors du click sur le lien.\n   */\n  @Output() linkSelect = new EventEmitter<string>();\n\n  /**\n   * Active la version download avec l'attribut download.\n   * Permet l'utilisation de `downloadAssessFile` et  `langCode`\n   */\n  downloadDirect = input<boolean | string>(false);\n\n  /** Création du fileName en cas de download direct */\n  protected readonly newFileName = computed(() => {\n    if (typeof this.downloadDirect() === 'string') {\n      return this._sanitizer.sanitize(SecurityContext.URL, this.downloadDirect());\n    }\n\n    return '';\n  });\n\n  private readonly _sanitizer = inject(DomSanitizer);\n  private _item!: DsfrLink;\n  private _sanitizedLink: string | null | undefined;\n\n  get disabled(): boolean {\n    return !(this.item.route || this.item.routerLink || this.item.link);\n  }\n\n  get item(): DsfrLink {\n    return this._item;\n  }\n\n  /** Item représentant un lien `<a>` avec ou sans `routerLink`. */\n  @Input({ required: true }) set item(item: DsfrLink) {\n    if (item.label) {\n      this._item = { ...item, label: item.label };\n    } else {\n      this._item = item;\n    }\n\n    if (this._item.link) {\n      this._sanitizedLink = this._sanitizer.sanitize(SecurityContext.URL, this._item.link);\n    }\n\n    if (this.item) this.item.customClass = this.getLinkClasses();\n  }\n\n  /** @internal */\n  getHref(): string | undefined {\n    if (this.item.route) return this.item.route;\n    if (this.item.link) return this._sanitizedLink ?? undefined;\n\n    return undefined;\n  }\n\n  /** @internal */\n  onLinkSelect(event: Event) {\n    if (this.disabled) return;\n\n    if (this.item.route && !this.item.routerLink) {\n      event.preventDefault();\n      this.linkSelect.emit(this.item.route);\n    } else if (this.item.link) {\n      this.linkSelect.emit(this.item.link);\n    } else {\n      this.linkSelect.emit(this.item.linkId ?? this.item.label);\n    }\n  }\n\n  /** @internal */\n  getLinkTarget(item: DsfrLink): DsfrLinkTarget | undefined {\n    return item.target ?? item.linkTarget;\n  }\n\n  /** @internal */\n  private getLinkClasses(): string {\n    const classes = [];\n    classes.push(!this.customClass ? 'fr-link' : this.customClass);\n\n    if (this._item.icon) {\n      classes.push(this._item.icon);\n      // Dans le header, les liens utilisent la classe fr-btn, pour être cohérent, on va utiliser fr-btn--icon-left et right\n      const likeButton = this.customClass && this.customClass?.search('fr-btn') >= 0;\n      const prefixPos = likeButton ? 'fr-btn--icon-' : 'fr-link--icon-';\n      classes.push(this._item.iconPosition === DsfrPositionConst.RIGHT ? prefixPos + 'right' : prefixPos + 'left');\n    }\n\n    return classes.join(' ');\n  }\n}\n","<!-- Lien de téléchargement-->\n@if (!isButton) {\n  <a\n    [ngClass]=\"customClass\"\n    [attr.aria-controls]=\"item.ariaControls || null\"\n    [attr.aria-disabled]=\"disabled || null\"\n    [attr.aria-label]=\"item.ariaLabel || null\"\n    [attr.href]=\"getHref() || null\"\n    [attr.download]=\"downloadDirect() ? newFileName() : null\"\n    [attr.data-fr-assess-file]=\"downloadAssessFile || null\"\n    [attr.hreflang]=\"langCode || null\"\n    [attr.target]=\"linkTarget || null\"\n    (click)=\"onLinkSelect($event)\"\n    [innerHTML]=\"item.label\">\n  </a>\n} @else {\n  <button\n    type=\"button\"\n    (click)=\"onLinkSelect($event)\"\n    [disabled]=\"disabled\"\n    [ngClass]=\"customClass\"\n    [innerHTML]=\"item.label\"></button>\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { RouterModule } from '@angular/router';\n\n@Component({\n  selector: 'edu-pictogram',\n  templateUrl: './pictogram.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, RouterModule],\n})\n/** Ce composant permet de gérer facilement les pictogrammes issus du DSFR. */\nexport class PictogramComponent {\n  /**\n   * Chemin vers le répertoire exposant les pictogrammes illustratifs DSFR.\n   */\n  @Input() artworkDirPath = 'artwork';\n\n  /**\n   * Chemin relatif à artworkDirPath dénotant le fichier d'illustration à utiliser.\n   */\n  @Input() artworkFilePath?: string;\n\n  /**\n   * Détermine l'affichage du pictogramme associé aux téléchargements.\n   */\n  @Input() download = false;\n}\n","@if (artworkFilePath) {\n  <svg aria-hidden=\"true\" class=\"fr-artwork\" viewBox=\"0 0 80 80\" width=\"80px\" height=\"80px\">\n    <use class=\"fr-artwork-decorative\" [attr.href]=\"artworkFilePath + '#artwork-decorative'\"></use>\n    <use class=\"fr-artwork-minor\" [attr.href]=\"artworkFilePath + '#artwork-minor'\"></use>\n    <use class=\"fr-artwork-major\" [attr.href]=\"artworkFilePath + '#artwork-major'\"></use>\n  </svg>\n} @else if (download && !artworkFilePath) {\n  <!---DOWNLOAD-->\n  <svg aria-hidden=\"true\" class=\"fr-artwork\" viewBox=\"0 0 80 80\" width=\"80px\" height=\"80px\">\n    <use\n      class=\"fr-artwork-decorative\"\n      [attr.href]=\"artworkDirPath + '/pictograms/document/document-download.svg#artwork-decorative'\"></use>\n    <use\n      class=\"fr-artwork-minor\"\n      [attr.href]=\"artworkDirPath + '/pictograms/document/document-download.svg#artwork-minor'\"></use>\n    <use\n      class=\"fr-artwork-major\"\n      [attr.href]=\"artworkDirPath + '/pictograms/document/document-download.svg#artwork-major'\"></use>\n  </svg>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { PictogramComponent } from './pictogram.component';\n\n@NgModule({\n  exports: [PictogramComponent],\n  imports: [CommonModule, RouterModule, PictogramComponent],\n})\nexport class PictogramModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { DsfrImageRatio } from '../../../components';\n\n@Component({\n  selector: 'edu-svg-icon',\n  template: `\n    <svg\n      class=\"fr-responsive-img\"\n      [ngClass]=\"{\n        'fr-ratio-32x9': imageRatio === '16:9/2',\n        'fr-ratio-16x9': imageRatio === '16:9',\n        'fr-ratio-3x2': imageRatio === '3:2',\n        'fr-ratio-4x3': imageRatio === '4:3',\n        'fr-ratio-1x1': imageRatio === '1:1',\n        'fr-ratio-3x4': imageRatio === '3:4',\n        'fr-ratio-2x3': imageRatio === '2:3',\n      }\"\n      [attr.aria-hidden]=\"ariaHidden\"\n      [attr.role]=\"role\"\n      [attr.alt]=\"alt\">\n      <use attr.xlink:href=\"{{ iconPath }}\"></use>\n    </svg>\n  `,\n  imports: [CommonModule],\n})\nexport class SvgIconComponent {\n  @Input() iconPath?: string;\n  @Input() role = 'img';\n  @Input() ariaHidden: boolean = true;\n  @Input() alt?: string;\n  @Input() imageRatio?: DsfrImageRatio;\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SvgIconComponent } from './svg-icon.component';\n\n@NgModule({\n  imports: [CommonModule, SvgIconComponent],\n  exports: [SvgIconComponent],\n})\nexport class SvgIconModule {}\n","import { InjectionToken } from '@angular/core';\nimport { DsfrConfig } from './config.model';\n\nexport const DEFAULT_CONFIG = {\n  artworkDirPath: 'artwork',\n};\n\n/*\n * Étant donné que ce jeton est à usage interne uniquement, nous n'exporterons pas ce fichier en dehors de\n * la bibliothèque. La création du jeton DI dans un fichier séparé permet d'éviter dépendances circulaires.\n */\nexport const DSFR_CONFIG_TOKEN = new InjectionToken<DsfrConfig>('ngx-dsfr-config', {\n  providedIn: 'root',\n  factory: () => DEFAULT_CONFIG,\n});\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { DSFR_CONFIG_TOKEN } from './config-token';\nimport { DsfrConfig } from './config.model';\n\n@NgModule({\n  imports: [CommonModule],\n})\nexport class DsfrConfigModule {\n  static forRoot(config: DsfrConfig): ModuleWithProviders<DsfrConfigModule> {\n    return {\n      ngModule: DsfrConfigModule,\n      providers: [{ provide: DSFR_CONFIG_TOKEN, useValue: config }],\n    };\n  }\n}\n","import { Directive, Input, booleanAttribute, inject } from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\n/**\n * Désactiver le lien du routerLink\n * Cas particulier des entrées de menu : profiter de la directive routerLink mais ne pas effectuer la navigation\n * Le preventDefault classique non fonctionnel sur les routerLink\n */\n@Directive({\n  selector: 'button[routerLink][disableNavigation]',\n  standalone: true,\n})\nexport class DsfrDisableRouterLinkDirective {\n  @Input({ transform: booleanAttribute }) disableNavigation: boolean = false;\n\n  constructor() {\n    const routerLink = inject(RouterLink, { optional: true });\n\n    // Replace method\n    if (routerLink) {\n      routerLink.onClick = () => {\n        return true;\n      };\n    }\n  }\n}\n","import { DsfrI18nBaseBundle } from './i18n-types';\n\nexport const LABELS_BUNDLE_EN: DsfrI18nBaseBundle = {\n  commons: {\n    accept: 'Accept',\n    close: 'Close',\n    disabled: 'Disabled',\n    download: 'Download',\n    enlarge: 'Enlarge',\n    refuse: 'Refuse',\n    select: 'Select',\n    search: 'Search',\n    sort: 'Sort',\n  },\n\n  alert: {\n    close: 'Hide message',\n  },\n  backtotop: {\n    topOfPage: 'Top of page',\n  },\n  breadcrumb: {\n    viewBreadcrumb: 'View breadcrumb',\n    ariaLabel: 'you are here :',\n  },\n  consent: {\n    acceptAll: 'Accept All',\n    allowAllCookies: 'Allow all cookies',\n    refuseAll: 'Refuse all',\n    refuseAllCookies: 'Refuse all cookies',\n    customize: 'Customize',\n    customizeCookies: 'Customize cookies',\n    description: {\n      prelink:\n        'Welcome ! We use cookies to improve your experience and the services available on this site. To find out more, visit the ',\n      link: 'Personal data and cookies',\n      postlink: ' page. You can, at any time, have control over the cookies you wish to activate.',\n    },\n\n    manager: {\n      title: 'Cookies management panel',\n      preferences: 'Preferences for all services.',\n      personalData: 'Personal data and cookies',\n      confirmChoices: 'Confirm my choices',\n      finalityExempt: 'Enabled',\n      showDetails: 'Show more details',\n    },\n  },\n  display: {\n    heading: 'Display settings',\n    hint: 'Choose a theme to customize the look of the site.',\n    light: { label: 'Light theme' },\n    dark: { label: 'Dark theme' },\n    system: { label: 'System', hint: 'Use system settings.' },\n  },\n  email: {\n    label: 'Email address',\n    hint: 'Expected format: name@domain.fr',\n    error: 'The format of the email address entered is invalid. The expected format is: name@example.org',\n  },\n  follow: {\n    networks: { heading: 'Follow us<br/>on social networks' },\n    newsletter: {\n      heading: 'Subscribe to our newsletter',\n      button: { label: 'Subscribe', title: 'Subscribe to our newsletter' },\n      input: {\n        placeholder: 'Your email address (e.g. name@domain.fr)',\n        hint: `By entering your email address, you agree to receive our news by email. You can unsubscribe at any time using the unsubscribe links or by contacting us.`,\n        error: 'The format of the email address entered is invalid. The expected format is: name@example.org',\n      },\n      registration: { success: 'Your registration has been taken into account.' },\n    },\n    newWindow: 'New window',\n  },\n  footer: {\n    institutional: { externalLink: 'new windows' },\n    partners: { title: 'Our partners' },\n    display: 'Display settings',\n  },\n  franceConnect: {\n    title: 'Identify with',\n    link: { label: 'What is FranceConnect', tooltip: 'What is FranceConnect? - new window' },\n  },\n  header: {\n    menu: { label: 'Menu' },\n    mainMenu: 'Main menu',\n  },\n  link: {\n    newWindow: 'new window',\n  },\n  login: {\n    heading: 'Connecting to ',\n    franceConnect: {\n      heading: 'Connect with FranceConnect',\n    },\n    or: 'or',\n    account: {\n      heading: 'Log in with your account',\n      email: { label: 'Identifier' },\n      password: { label: 'Password' },\n      srOnly: { label: 'identifiers' },\n      rememberMe: { label: 'Remember me' },\n      button: { label: 'Log in' },\n    },\n    noAccount: { heading: 'You do not have an account ?', button: { label: 'Create an account' } },\n  },\n  modal: {\n    ariaLabel: 'Close the window',\n  },\n  notice: {\n    close: 'Hide message',\n  },\n  pagination: {\n    firstPage: 'First page',\n    previousPage: 'Previous page',\n    nextPage: 'Next page',\n    lastPage: 'Last page',\n    role: 'navigation',\n    rowsPerPageLabel: 'Number of rows per page',\n    row: 'row',\n    ariaLabel: 'Paging',\n  },\n  password: {\n    aria: { label: 'Show password' },\n    forgotPassword: 'Forgot your password ?',\n    label: 'Password',\n    message: 'Your password must contain:',\n    show: 'Show',\n    dataFrValid: 'valid',\n    dataFrError: 'in error',\n    invalidCriteria: 'criteria is invalid',\n    validCriteria: 'criteria is valid',\n  },\n  range: {\n    labelMin: 'Minimum value',\n    labelMax: 'Maximum value',\n  },\n  response: {\n    contactUs: 'Contact us',\n  },\n  select: {\n    placeholder: 'Select an option',\n  },\n  share: {\n    'heading': 'Share page',\n    'cookiesText': {\n      prelink: 'Please',\n      link: 'authorize the deposit of cookies',\n      postlink: 'to be shared on social networks.',\n    },\n    //\n    'copy': { title: 'Clipboard', label: 'Copy to clipboard' },\n    'facebook': { title: 'Facebook', label: 'Share on Facebook' },\n    'linkedin': { title: 'LinkedIn', label: 'Share on LinkedIn' },\n    'mail': { title: 'Email', label: 'Share by email' },\n    'mastodon': { title: 'Mastodon', label: 'Share on Mastodon' },\n    'twitter': { title: 'X', label: 'Share on X' },\n    'twitter-x': { title: 'X', label: 'Share on X' },\n  },\n  sidemenu: {\n    menuMobile: 'In this section',\n  },\n  stepper: {\n    step: 'Step',\n    on: 'on',\n    of: 'of',\n    nextStep: 'Next step:',\n  },\n  table: {\n    noData: 'No data',\n    selectRow: 'Select row',\n    selectAll: 'Select all',\n    unselectAll: 'Unselect all',\n    row: 'row',\n    rowsPerPageLabel: 'Number of rows per page',\n    noResult: 'No result',\n    unselectable: 'unselectable',\n    noSelectedRows: 'No selected rows',\n    oneSelectedRow: 'selected row',\n    selectedRows: 'selected rows',\n    sortExplanation: 'Column headers with buttons are sortable',\n    sortTableBy: 'Sort by',\n  },\n  tag: {\n    removeFilter: 'Remove the filter',\n    removable: 'Removable',\n    selectFilter: 'Select the filter',\n    selected: 'selected',\n    unselected: 'unselected',\n  },\n  tel: {\n    label: 'Phone number',\n    hint: 'Expected format: (+33) 1 23 45 67 89',\n    error: 'The phone number format entered is invalid.',\n  },\n  toggle: {\n    dataLabelChecked: 'Checked',\n    dataLabelUnchecked: 'Unchecked',\n  },\n  tooltip: {\n    button: { label: 'Contextual information' },\n  },\n  transcription: {\n    button: 'Transcription',\n    ariaLabel: 'Enlarge transcript',\n  },\n  translate: {\n    tooltip: 'Select a language',\n  },\n  upload: {\n    label: 'Add a file',\n    hint: '** Mandatory help text which specifies the constraints at the level of the expected file(s) **',\n  },\n  date: {\n    day: { label: 'Day', hint: 'Example: 14' },\n    month: { label: 'Month', hint: 'Example: 12' },\n    year: { label: 'Year', hint: 'Example: 1984' },\n    error: {\n      required: 'All fields are required.',\n      invalid: {\n        format_day: 'The day field must be in numeric format.',\n        format_year: 'The year field must be in numeric format.',\n        format_month: 'The month field must be in numeric format.',\n        day: 'The day is not valid.',\n        month: 'The month is not valid.',\n        date: 'The date is not valid.',\n      },\n    },\n  },\n  pageResponse: {\n    heading: 'Unexpected error',\n    description: 'Try refreshing the page or try again later.',\n    detail: 'Sorry, there is a problem with the service, we are working to resolve it as soon as possible.',\n  },\n  name: {\n    legend: 'Name',\n    country: {\n      label: 'Country',\n      placeholder: 'Select an option',\n    },\n    lastname: 'Name',\n    usualName: {\n      label: 'Username',\n      hint: 'Old name...',\n    },\n    firstname: 'First name',\n    addFirstName: 'Add a first name',\n    legendFirstName: 'Firstname(s)',\n    noFirstName: \"I don't have a first name\",\n  },\n};\n","import { DsfrI18nBaseBundle } from './i18n-types';\n\nexport const LABELS_BUNDLE_FR: DsfrI18nBaseBundle = {\n  commons: {\n    accept: 'Accepter',\n    close: 'Fermer',\n    disabled: 'Désactivé',\n    download: 'Télécharger',\n    enlarge: 'Agrandir',\n    refuse: 'Refuser',\n    select: 'Sélectionner',\n    search: 'Rechercher',\n    sort: 'Trier',\n  },\n\n  alert: {\n    close: 'Masquer le message',\n  },\n  backtotop: {\n    topOfPage: 'Haut de page',\n  },\n  breadcrumb: {\n    viewBreadcrumb: 'Voir le fil d’Ariane',\n    ariaLabel: 'vous êtes ici :',\n  },\n  consent: {\n    acceptAll: 'Tout accepter',\n    allowAllCookies: 'Autoriser tous les cookies',\n    refuseAll: 'Tout refuser',\n    refuseAllCookies: 'Refuser tous les cookies',\n    customize: 'Personnaliser',\n    customizeCookies: 'Personnaliser les cookies',\n    description: {\n      prelink:\n        'Bienvenue ! Nous utilisons des cookies pour améliorer votre expérience et les services disponibles sur ce site. Pour en savoir plus, visitez la page',\n      link: 'Données personnelles et cookies',\n      postlink: '. Vous pouvez, à tout moment, avoir le contrôle sur les cookies que vous souhaitez activer.',\n    },\n    manager: {\n      title: 'Panneau de gestion des cookies',\n      preferences: 'Préférences pour tous les services.',\n      personalData: 'Données personnelles et cookies',\n      confirmChoices: 'Confirmer mes choix',\n      finalityExempt: 'Activé',\n      showDetails: 'Voir plus de détails',\n    },\n  },\n  display: {\n    heading: 'Paramètres d’affichage',\n    hint: 'Choisissez un thème pour personnaliser l’apparence du site.',\n    light: { label: 'Thème clair' },\n    dark: { label: 'Thème sombre' },\n    system: { label: 'Système', hint: 'Utilise les paramètres système.' },\n  },\n  email: {\n    label: 'Adresse électronique',\n    hint: 'Format attendu : nom@domaine.fr',\n    error: 'Le format de l’adresse électronique saisie n’est pas valide. Le format attendu est : nom@exemple.org',\n  },\n  follow: {\n    networks: { heading: 'Suivez-nous<br/>sur les réseaux sociaux' },\n    newsletter: {\n      heading: 'Abonnez-vous à notre lettre d’information',\n      button: { label: 'S’abonner', title: 'S’abonner à notre lettre d’information' },\n      input: {\n        placeholder: 'Votre adresse électronique (ex. : nom@domaine.fr)',\n        hint: `En renseignant votre adresse électronique, vous acceptez de recevoir nos actualités par courriel. Vous pouvez vous désinscrire à tout moment à l’aide des liens de désinscription ou en nous contactant.`,\n        error: 'Le format de l’adresse électronique saisie n’est pas valide. Le format attendu est : nom@exemple.org',\n      },\n      registration: { success: 'Votre inscription a bien été prise en compte.' },\n    },\n    newWindow: 'Nouvelle fenêtre',\n  },\n  footer: {\n    partners: { title: 'Nos partenaires' },\n    institutional: { externalLink: 'nouvelle fenêtre' },\n    display: \"Paramètres d'affichage\",\n  },\n  franceConnect: {\n    title: 'S’identifier avec',\n    link: { label: 'Qu’est-ce que FranceConnect', tooltip: 'Qu’est-ce que FranceConnect ? - nouvelle fenêtre' },\n  },\n  header: {\n    menu: { label: 'Menu' },\n    mainMenu: 'Menu principal',\n  },\n  link: {\n    newWindow: 'nouvelle fenêtre',\n  },\n  login: {\n    heading: 'Connexion à ',\n    franceConnect: {\n      heading: 'Se connecter avec FranceConnnect',\n    },\n    or: 'ou',\n    account: {\n      heading: 'Se connecter avec son compte',\n      email: { label: 'Identifiant' },\n      password: { label: 'Mot de passe' },\n      srOnly: { label: 'identifiants' },\n      rememberMe: { label: 'Se souvenir de moi' },\n      button: { label: 'Se connecter' },\n    },\n    noAccount: { heading: 'Vous n’avez pas de compte ?', button: { label: 'Créer un compte' } },\n  },\n  modal: {\n    ariaLabel: 'Fermer la fenêtre',\n  },\n  notice: {\n    close: 'Masquer le message',\n  },\n  pagination: {\n    firstPage: 'Première page',\n    previousPage: 'Page précédente',\n    nextPage: 'Page suivante',\n    lastPage: 'Dernière page',\n    role: 'navigation',\n    row: 'ligne',\n    ariaLabel: 'Pagination',\n    rowsPerPageLabel: 'Nombre de lignes par page',\n  },\n  password: {\n    aria: { label: 'Afficher le mot de passe' },\n    forgotPassword: 'Mot de passe oublié ?',\n    label: 'Mot de passe',\n    message: 'Votre mot de passe doit contenir :',\n    show: 'Afficher',\n    dataFrValid: 'validé',\n    dataFrError: 'en erreur',\n    invalidCriteria: 'critère non valide',\n    validCriteria: 'critère validé',\n  },\n  range: {\n    labelMin: 'Valeur minimale',\n    labelMax: 'Valeur maximale',\n  },\n  response: {\n    contactUs: 'Contactez-nous',\n  },\n  select: {\n    placeholder: 'Sélectionnez une option',\n  },\n  share: {\n    'heading': 'Partager la page',\n    'cookiesText': {\n      prelink: 'Veuillez',\n      link: 'autoriser le dépôt de cookies',\n      postlink: 'pour partager sur les réseaux sociaux.',\n    },\n    //\n    'copy': { title: 'Presse-papier', label: 'Copier dans le presse-papier' },\n    'facebook': { title: 'Facebook', label: 'Partager sur Facebook' },\n    'linkedin': { title: 'LinkedIn', label: 'Partager sur LinkedIn' },\n    'mail': { title: 'Email', label: 'Partager par email' },\n    'mastodon': { title: 'Mastodon', label: 'Partager sur Mastodon' },\n    'twitter': { title: 'X', label: 'Partager sur X' },\n    'twitter-x': { title: 'X', label: 'Partager sur X' },\n  },\n  sidemenu: {\n    menuMobile: 'Dans cette rubrique',\n  },\n  stepper: {\n    step: 'Étape',\n    on: 'sur',\n    of: 'sur',\n    nextStep: 'Étape suivante :',\n  },\n  table: {\n    noData: 'Aucune donnée',\n    selectRow: 'Sélectionner la ligne',\n    selectAll: 'Tout sélectionner',\n    unselectAll: 'Tout déselectionner',\n    row: 'ligne',\n    rowsPerPageLabel: 'Nombre de lignes par page',\n    noResult: 'Aucun résultat',\n    unselectable: 'Non sélectionnable',\n    noSelectedRows: 'Aucune ligne sélectionnée',\n    oneSelectedRow: 'ligne sélectionnée',\n    selectedRows: 'lignes sélectionnées',\n    sortExplanation: 'Les en-têtes de colonnes avec boutons sont triables',\n    sortTableBy: 'Trier par',\n  },\n  tag: {\n    removeFilter: 'Retirer le filtre',\n    removable: 'Supprimable',\n    selectFilter: 'Sélectionner le filtre',\n    selected: 'Sélectionné',\n    unselected: 'Non sélectionné',\n  },\n  tel: {\n    label: 'Numéro de téléphone',\n    hint: 'Format attendu : (+33) 1 23 45 67 89',\n    error: 'Le format de numéro de téléphone saisi n’est pas valide.',\n  },\n  toggle: {\n    dataLabelChecked: 'Activé',\n    dataLabelUnchecked: 'Désactivé',\n  },\n  tooltip: {\n    button: { label: 'Information contextuelle' },\n  },\n  transcription: {\n    button: 'Transcription',\n    ariaLabel: 'Agrandir la transcription',\n  },\n  translate: {\n    tooltip: 'Sélectionner une langue',\n  },\n  upload: {\n    label: 'Ajouter un fichier',\n    hint: \"** Texte d'aide obligatoire qui précise les contraintes au niveau du ou des fichiers attendus **\",\n  },\n  date: {\n    day: { label: 'Jour', hint: 'Exemple : 14' },\n    month: { label: 'Mois', hint: 'Exemple : 12' },\n    year: { label: 'Année', hint: 'Exemple : 1984' },\n    error: {\n      required: 'Tous les champs sont requis.',\n      invalid: {\n        format_day: 'Le champ jour doit être au format numérique.',\n        format_year: 'Le champ année doit être au format numérique.',\n        format_month: 'Le champ mois doit être au format numérique.',\n        day: 'Le jour est invalide.',\n        month: 'Le mois est invalide.',\n        date: 'La date est invalide.',\n      },\n    },\n  },\n  pageResponse: {\n    heading: 'Erreur inattendue',\n    description: 'Essayez de rafraichir la page ou bien ressayez plus tard.',\n    detail: 'Désolé, le service rencontre un problème, nous travaillons pour le résoudre le plus rapidement possible.',\n  },\n  name: {\n    legend: 'Nom',\n    country: {\n      label: 'Pays',\n      placeholder: 'Sélectionner une option',\n    },\n    lastname: 'Nom',\n    usualName: {\n      label: \"Nom d'usage\",\n      hint: 'Ancien nom...',\n    },\n    firstname: 'Prénom',\n    addFirstName: 'Ajouter un prénom',\n    legendFirstName: 'Prénom(s)',\n    noFirstName: \"Je n'ai pas de prénom\",\n  },\n};\n","import { DsfrI18nBundle, DsfrI18nRecord, DsfrI18nValue } from './i18n-types';\n\n/**\n * Expose les paramètres de configuration de la fonction deepMerge.\n */\nexport interface DsfrI18nMergeOptions {\n  conflictStrategy?: 'keep' | 'replace' | 'error';\n}\n\n/**\n * Fusionne récursivement deux objets sans perte de propriétés.\n *\n * ⚠️ Contrairement au spread operator `{ ...a, ...b }` :\n * - Le spread réalise une fusion **superficielle** (shallow merge) :\n *   si une propriété est elle-même un objet, elle sera complètement écrasée\n *   par celle du second objet, entraînant la perte de ses sous-propriétés.\n * - Cette fonction `deepMerge` effectue une fusion **profonde** (deep merge) :\n *   les sous-objets sont parcourus récursivement et leurs propriétés sont fusionnées,\n *   de sorte que les propriétés existantes sont conservées sauf si elles sont\n *   explicitement remplacées par `toMerge`.\n *\n *  Exemple :\n *\n *  ```ts\n *  const o1 = { a: { b: 'toto', c: 'tutu' } };\n *  const o2 = { a: { b: 'tata' } };\n *  ```\n *\n *  si on procède avec le _spread operator_ :\n *\n *  ```ts\n *  const o3 = { ...o1, ...o2 };\n *  ```\n *\n *  alors `o3` contiendra en sortie `{ a: { b: 'tata' } }` la propriété `c` aura été supprimée\n *\n *  en utilisant la méthode `deepMerge` :\n *\n *  ```ts\n *  const o3 = deepMerge(o1, o2);\n *  ```\n *\n *  alors `o3` contiendra en sortie `{ a: { b: 'tata', c: 'tutu' } }` la propriété `c` aura été préservée.\n *\n * @param reference l'objet de référence\n * @param toMerge l'objet à fusionner\n * @returns une nouvelle référence vers l'objet résultant de la fusion\n */\nexport function i18nDeepMerge(\n  reference: DsfrI18nBundle,\n  toMerge: DsfrI18nRecord,\n  options: DsfrI18nMergeOptions = {},\n): DsfrI18nBundle {\n  // on clone d'abord la référence en profondeur\n  const result: any = structuredClone(reference);\n\n  // on parcourt les clés de la structure à merger\n  for (const [key, toMergeValue] of Object.entries(toMerge)) {\n    const referenceValue: any = result[key];\n    result[key] = recursiveDeepMerge(key, referenceValue, toMergeValue, options);\n  }\n\n  return result;\n}\n\nfunction recursiveDeepMerge(\n  property: string,\n  reference: DsfrI18nValue,\n  toMerge: DsfrI18nValue,\n  options: DsfrI18nMergeOptions = {},\n): DsfrI18nValue {\n  const { conflictStrategy = 'replace' } = options;\n\n  let result;\n\n  if (isStringValue(reference) && isStringValue(toMerge)) {\n    // cas 1 : deux strings ou tableaux de string : on écrase\n    result = toMerge;\n  } else if (isStringArrayValue(reference) && isStringArrayValue(toMerge)) {\n    // cas 1 : deux strings ou tableaux de string : on écrase\n    result = [...toMerge];\n  } else if (isRecordValue(reference) && isRecordValue(toMerge)) {\n    // cas 2 : deux objets : on fusionne récursivement\n    result = reference; // on peut faire ça directement car déja cloné à l'étape précédente\n    for (const key of Object.keys(toMerge)) {\n      result[key] = recursiveDeepMerge(key, reference[key], toMerge[key], options);\n    }\n  } else {\n    // cas 3 : conflit : types différents\n    switch (conflictStrategy) {\n      case 'replace':\n        result = structuredClone(toMerge);\n        break;\n\n      case 'keep':\n        result = structuredClone(reference);\n        break;\n\n      case 'error':\n        throw new Error(\n          `Types incompatibles sur la clé <${property}> : reference=${typeof reference}, toMerge=${typeof toMerge}`,\n        );\n    }\n  }\n  return result;\n}\n\n/** @internal */\nfunction isStringValue(value: unknown): value is string {\n  return typeof value === 'string';\n}\n\n/** @internal */\nfunction isStringArrayValue(value: unknown): value is string[] {\n  return Array.isArray(value) && value.every((item) => typeof item === 'string');\n}\n\n/** @internal */\nfunction isRecordValue<V>(value: unknown): value is Record<string, V> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { DSFR_CONFIG_TOKEN } from '../config/config-token';\nimport { DsfrConfig } from '../config/config.model';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class ConfigService {\n  /**\n   * Puisqu'il est possible que les utilisateurs de la bibliothèque oublient d'appeler forRoot(), nous marquons\n   * le jeton DI comme optionnel à l'aide du décorateur intégré (pour éviter une erreur \"Aucun fournisseur pour ...\").\n   * Dans ces cas, le paramètre constructeur sera nul, mais nous fournirons des valeurs par défaut.\n   */\n  constructor(\n    // eslint-disable-next-line @angular-eslint/prefer-inject\n    @Optional()\n    @Inject(DSFR_CONFIG_TOKEN)\n    public readonly params: DsfrConfig | null,\n  ) {}\n}\n","import { Injectable } from '@angular/core';\nimport { isOnBrowser } from '../utils';\n\n/** Levels used for identifying the severity of an event. Levels are organized from most specific to least. */\nexport enum DsfrLogLevel {\n  OFF = 0, // No events will be logged.\n  ERROR = 2, // An error in the application, possibly recoverable.\n  WARN, // An event that might possible lead to an error.\n  INFO, // An event for informational purposes.\n  DEBUG, // A general debugging event.\n  ALL = 7, // All events should be logged\n}\n\n@Injectable({\n  providedIn: 'root',\n})\n/** Les opérations de journalisation de la librairie sont effectuées via ce service. */\nexport class LoggerService {\n  /** Indique à partir de quel niveau on effectue la journalisation, WARN par défaut. */\n  private _level = DsfrLogLevel.WARN;\n\n  constructor() {}\n\n  set level(value: DsfrLogLevel) {\n    if (!value) return;\n    this._level = value;\n    this.info(`Configuration du niveau de log : '${this.levelAsString()}'`);\n  }\n\n  error(message: string) {\n    this.log(DsfrLogLevel.ERROR, message);\n  }\n\n  warn(message: string) {\n    this.log(DsfrLogLevel.WARN, message);\n  }\n\n  info(message: string) {\n    this.log(DsfrLogLevel.INFO, message);\n  }\n\n  debug(message: string) {\n    this.log(DsfrLogLevel.DEBUG, message);\n  }\n\n  private log(level: DsfrLogLevel, message: string) {\n    if (!isOnBrowser()) return;\n\n    if (level <= this._level) {\n      switch (level) {\n        case DsfrLogLevel.ERROR:\n          console.error(message);\n          break;\n        case DsfrLogLevel.WARN:\n          console.warn(message);\n          break;\n        case DsfrLogLevel.INFO:\n          console.info(message);\n          break;\n        default:\n          console.log(message);\n          break;\n      }\n    }\n  }\n\n  private levelAsString() {\n    switch (this._level) {\n      case DsfrLogLevel.OFF:\n        return 'OFF';\n      case DsfrLogLevel.ERROR:\n        return 'ERROR';\n      case DsfrLogLevel.WARN:\n        return 'WARN';\n      case DsfrLogLevel.INFO:\n        return 'INFO';\n      case DsfrLogLevel.DEBUG:\n        return 'DEBUG';\n      case DsfrLogLevel.ALL:\n        return 'ALL';\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { LocalStorage } from '../utils';\nimport { LoggerService } from './logger.service';\n\n/**\n * Le service est chargé de maintenir le code langue de l'application et de signaler le changement de langue aux observateurs.\n */\n@Injectable({ providedIn: 'root' })\nexport class LangService {\n  private static readonly DEF_LANG = 'fr';\n\n  /** Observable changement de la langue. */\n  langChange$: Observable<string>;\n\n  private langChange: BehaviorSubject<string>;\n\n  /** Par défaut, le code de la langue est stocké dans le localStorage.  */\n  private hasLocalStorage = true;\n\n  /** Nom par défaut du local storage. */\n  private localStorageName = 'lang';\n\n  // eslint-disable-next-line @angular-eslint/prefer-inject\n  constructor(private logger: LoggerService) {\n    this.langChange = new BehaviorSubject<string>(LangService.DEF_LANG);\n    this.langChange$ = this.langChange.asObservable();\n\n    if (this.hasLocalStorage) {\n      const lang = LocalStorage.get(this.localStorageName);\n      if (lang) this.lang = <string>LocalStorage.get(this.localStorageName);\n    }\n  }\n\n  get lang(): string {\n    return this.langChange.value;\n  }\n\n  set lang(code: string) {\n    if (!code || code === this.lang) return;\n    this.logger.info(`Changement de langue courante: '${code}'`);\n\n    if (this.hasLocalStorage) LocalStorage.set(this.localStorageName, code);\n    this.langChange.next(code);\n  }\n}\n","export enum Language {\n  FR = 'fr',\n  EN = 'en',\n}\n","/* eslint-disable @angular-eslint/prefer-inject */\nimport { Inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, EMPTY, merge, Observable } from 'rxjs';\nimport { fromFetch } from 'rxjs/internal/observable/dom/fetch';\n\nimport { DSFR_CONFIG_TOKEN } from '../config/config-token';\nimport { DsfrConfig } from '../config/config.model';\nimport { LangService, Language, LoggerService } from '../services';\nimport { jsonPath2Value } from '../utils';\nimport { LABELS_BUNDLE_EN } from './i18n-labels-bundle-en';\nimport { LABELS_BUNDLE_FR } from './i18n-labels-bundle-fr';\nimport { DsfrI18nBundle, DsfrI18nExtensionBundle } from './i18n-types';\nimport { i18nDeepMerge } from './i18n-utils';\n\n/**\n * Maintient le code langue de l'application et signale le changement de langue.\n */\n@Injectable({ providedIn: 'root' })\nexport class DsfrI18nService {\n  //FIXME: (RPA) mal nommé, j'ai l'impression que ce devrait être `bundleloaded$`\n  // Mais il faut qu'on se réinterroge sur ce qu'on veut notifier ici :\n  // - Est-ce qu'on veut notifier que tous les bundles sont chargés et que le service est opérationnel ?\n  // - Ou est-ce qu'on veut notifier chaque changement de bundle faisant suite au changement de langue ?\n  completeLangChange$: Observable<string>;\n\n  private completeLangChange: BehaviorSubject<string>;\n\n  /**\n   * L'ensemble des bundles de libellés gérés par le service I18N.\n   */\n  private bundles = new Map<string, DsfrI18nBundle>();\n\n  /**\n   * Messages (JSON) de la langue courante.\n   */\n  private currentBundle: DsfrI18nBundle | undefined;\n\n  constructor(\n    @Inject(DSFR_CONFIG_TOKEN) config: DsfrConfig,\n    private readonly logger: LoggerService,\n    private readonly langService: LangService,\n  ) {\n    this.completeLangChange = new BehaviorSubject<string>(this.langService.lang);\n    this.completeLangChange$ = this.completeLangChange.asObservable();\n\n    this.bundles.set(Language.FR, LABELS_BUNDLE_FR);\n    this.bundles.set(Language.EN, LABELS_BUNDLE_EN);\n\n    this.processI18nConfig(config).subscribe({\n      // langChange$ est un BehaviorSubject, cela garantit ainsi qu'à la souscription, on aura une exécution de la\n      // méthode onLangChange avec la dernière valeur émise par langChange$, ceci même si la souscription intervient\n      // après la dernière émission de langChange$\n      complete: () => this.langService.langChange$.subscribe((code) => this.onLangChange(code)),\n    });\n  }\n\n  /**\n   * Retourne la valeur de traduction dans `messages` partir d'un path json.\n   * @param jsonPath le chemin dans le fichier de messages json de la langue courante\n   * @return le message et si non trouvé le path json\n   */\n  t(jsonPath: string): string {\n    return jsonPath2Value(this.currentBundle, jsonPath) ?? this.messageNotFound(this.langService.lang, jsonPath);\n  }\n\n  /**\n   * Permet d'étendre les ressources d'internationalisation sur un périmètre de langue défini.\n   *\n   * @param lang Le code langue sur deux caractères en minuscules.\n   * @param extension Le bundle contenant l'ensemble des libellés traduits dans la langue indiquée.\n   */\n  extendsLabelsBundle(lang: string, extension: DsfrI18nExtensionBundle): void {\n    const locale = lang.toLowerCase();\n    if (locale.length !== 2) {\n      this.logger.warn(`Bundle <${locale}> ignoré : le code langue n'est pas indiqué sur deux caractères`);\n\n      return;\n    }\n\n    const existing: DsfrI18nBundle | undefined = this.bundles.get(lang);\n    if (existing) {\n      const extendedBundle: DsfrI18nBundle = i18nDeepMerge(existing, extension, { conflictStrategy: 'replace' });\n      this.bundles.set(lang, extendedBundle);\n      // si on modifie le bundle de la langue courante, il faut mettre à jour le bundle courant et notifier\n      if (this.langService.lang === lang) {\n        this.currentBundle = extendedBundle;\n        this.completeLangChange.next(lang);\n      }\n    } else {\n      this.logger.warn(`Aucun bundle trouvé pour le code langue <${lang}>`);\n    }\n  }\n\n  /**\n   * Charge le bon fichier de messages selon le code langue, messages en anglais si non trouvé.\n   */\n  protected onLangChange(code: string): void {\n    this.currentBundle = this.bundles?.get(code) ?? this.bundles?.get(Language.EN) ?? LABELS_BUNDLE_EN;\n    this.completeLangChange.next(code);\n  }\n\n  /**\n   * Si message non trouvé, retourne le message en anglais pour les langues autres que les langues par défaut.\n   */\n  protected messageNotFound(codeLang: string, jsonPath: string): string {\n    this.logger.warn(`Aucune traduction '${codeLang}' pour '${jsonPath}'`);\n    // try fallback to english\n    const englishFallback = codeLang !== Language.EN ? jsonPath2Value(this.bundles.get(Language.EN), jsonPath) : null;\n\n    return englishFallback ?? jsonPath;\n  }\n\n  private processI18nConfig(config: DsfrConfig): Observable<never> {\n    // on traite la nouvelle propriété en premier pour lui donner la priorité\n    if (config?.i18n?.labelsBundles) {\n      return new Observable((subscriber) => {\n        for (const [lang, bundle] of Object.entries(config.i18n!.labelsBundles!)) {\n          this.bundles.set(lang, bundle);\n        }\n        subscriber.complete();\n      });\n    }\n    // traitement de la propriété dépréciée\n    if (config?.i18n?.messagesFiles) {\n      return this.readMessagesFiles(config.i18n.messagesFiles);\n    }\n\n    return EMPTY;\n  }\n\n  /**\n   * Lit tous les fichiers de la configuration\n   * @param i18nconfig Configuration i18n\n   * @return événement complet sur l'observable quand tous les fichiers ont été lus, erreur ou non\n   */\n  private readMessagesFiles(messagesFiles: { code: string; filePath: string }[]): Observable<never> {\n    const all: Observable<string>[] = [];\n    messagesFiles.forEach((mf) => {\n      const observable = fetchFile(mf.filePath);\n      observable.subscribe({\n        next: (data: any) => {\n          console.info(`Lecture du fichier ${mf.filePath}`);\n          this.bundles.set(mf.code, data);\n        },\n        error: (err) => {\n          console.error(`Erreur ${err} dans la lecture du fichier ${mf.filePath}`);\n        },\n      });\n      all.push(observable);\n    });\n\n    return new Observable<never>((subscriber) => {\n      merge(...all).subscribe({\n        complete: () => subscriber.complete(),\n      });\n    });\n  }\n}\n\n/**\n * Lecture d'un fichier sur le serveur\n * @param filePath Chemin partiel du fichier\n * @param contentType text par défaut\n * @return Observable\n */\nfunction fetchFile(filePath: string, contentType = 'text/plain'): Observable<any> {\n  const myHeaders = new Headers();\n  myHeaders.append('Content-Type', contentType);\n  const myConfig = { headers: myHeaders };\n\n  return new Observable<any>((subscriber) => {\n    const fetchObs = fromFetch(filePath, myConfig).subscribe({\n      next: (response) => {\n        if (response.ok) {\n          response.json().then((data) => {\n            subscriber.next(data);\n            subscriber.complete();\n          });\n        } else {\n          subscriber.error(response.status);\n          subscriber.complete();\n        }\n      },\n      error: (err) => subscriber.error(err),\n    });\n  });\n}\n","import { ChangeDetectorRef, OnDestroy, Pipe, PipeTransform, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { DsfrI18nService } from './i18n.service';\n\n@Pipe({\n  name: 'dsfrI18n',\n  standalone: true,\n  pure: false,\n})\nexport class DsfrI18nPipe implements PipeTransform, OnDestroy {\n  value: string = '';\n  lastKey: string | null = null;\n  langChangeSub$: Subscription | null = null;\n\n  private readonly i18nService = inject(DsfrI18nService);\n  private readonly cdr = inject(ChangeDetectorRef);\n\n  transform(jsonPath: string): string {\n    if (!jsonPath || jsonPath.length === 0) {\n      return jsonPath;\n    }\n\n    // Utiliser le cache si pas de changement de langue\n    if (this.lastKey === jsonPath) {\n      return this.value;\n    }\n\n    this.lastKey = jsonPath; // Maj du cache\n\n    this.dispose(); // necessaire dans le cas de pipe impur\n\n    this.langChangeSub$ = this.i18nService.completeLangChange$.subscribe(() => {\n      if (this.lastKey) {\n        this.value = this.i18nService.t(this.lastKey);\n        this.cdr.markForCheck(); // pour composants OnPush\n      }\n    });\n\n    return this.value;\n  }\n\n  ngOnDestroy(): void {\n    this.dispose();\n  }\n\n  private dispose(): void {\n    this.langChangeSub$?.unsubscribe();\n    // Note : Il est important de nettoyer la référence fournit dans langChangeSub$\n    // RxJS garde une référence au callback dans sa gestion interne, ce qui peut empêcher le nettoyage en mémoire.\n    this.langChangeSub$ = null;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { DsfrHeadingLevel, DsfrHeadingLevelConst, HeadingComponent, newUniqueId } from '../../shared';\n\n@Component({\n  selector: 'dsfr-accordion',\n  templateUrl: './accordion.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, HeadingComponent],\n})\nexport class DsfrAccordionComponent implements OnInit, AfterViewInit, OnDestroy {\n  /**\n   * Contenu de l'accordéon, texte simple. Prioritaire sur le slot par défaut.\n   */\n  @Input() content?: string;\n\n  /**\n   * Indique si l'accordéon doit être ouvert initialement.\n   */\n  @Input() expanded: boolean = false;\n\n  /**\n   * Le titre de l'accordéon est du texte simple. Utiliser le slot [heading] sinon.\n   */\n  @Input() heading?: string;\n\n  /**\n   * Le niveau du titre dans la structure, ne change pas l'apparence, `<h3>` par défaut.\n   */\n  @Input() headingLevel: DsfrHeadingLevel = DsfrHeadingLevelConst.H3;\n\n  /**\n   * Index qui identifie l'accordéon sur la page. Identifiant unique généré par défaut.\n   *\n   * @deprecated (since 1.8.0) jamais utilisé\n   */\n  @Input() index?: string;\n\n  /**\n   * Attribut d'accessibilité pour l'entête de l'accordéon.\n   */\n  @Input() headingAriaLabel?: string;\n\n  /**\n   * Événement présentant le nouvel état de l'accordéon.\n   */\n  @Output() expandedChange = new EventEmitter<boolean>();\n\n  /** @internal */\n  @ViewChild('dsfrAccordion') accordion!: ElementRef;\n\n  /** @internal */\n  accordionId: string | undefined;\n\n  private _unlisten: { (): void }[] = [];\n  private readonly renderer2 = inject(Renderer2);\n\n  ngOnInit() {\n    this.accordionId = newUniqueId();\n  }\n\n  /**\n   * Ecouter les events scripts dsfr conceal/disclose sur l'accordéon\n   */\n  ngAfterViewInit() {\n    this._unlisten.push(\n      this.renderer2.listen(this.accordion.nativeElement, 'dsfr.conceal', (e: CustomEvent) => {\n        // requestAnimationFrame > permet d'améliorer la cohabitation avec l'instrumentation DSFR (le cas échéant)\n        // cf. https://github.com/GouvernementFR/dsfr/issues/1099\n        window.requestAnimationFrame(() => {\n          if (this.expanded && e.target === this.accordion.nativeElement) {\n            this.expanded = false;\n            this.expandedChange.emit(this.expanded);\n          }\n        });\n      }),\n      this.renderer2.listen(this.accordion.nativeElement, 'dsfr.disclose', (e: CustomEvent) => {\n        window.requestAnimationFrame(() => {\n          if (!this.expanded && e.target === this.accordion.nativeElement) {\n            this.expanded = true;\n            this.expandedChange.emit(this.expanded);\n          }\n        });\n      }),\n    );\n  }\n\n  ngOnDestroy() {\n    this._unlisten.forEach((unlistenFunc) => unlistenFunc());\n  }\n}\n","<section class=\"fr-accordion\">\n  <!-- Titre obligatoire -->\n  <edu-heading [level]=\"headingLevel\" defaultLevel=\"H3\" customClass=\"fr-accordion__title\">\n    <ng-container *ngTemplateOutlet=\"accordionButton\"></ng-container>\n  </edu-heading>\n\n  <div #dsfrAccordion class=\"fr-collapse\" [id]=\"accordionId\">\n    <!-- La propriété content est prioritaire sur le slot -->\n    @if (content) {\n      {{ content }}\n    } @else {\n      <ng-content></ng-content>\n      <!-- TODO @deprecated à supprimer en v2 au profit du slot par défaut -->\n      <ng-content select=\"[content]\"></ng-content>\n      <!-- TODO @deprecated à supprimer en v2 au profit du slot par défaut -->\n      <ng-content select=\"[body]\"></ng-content>\n    }\n  </div>\n</section>\n\n<ng-template #accordionButton>\n  <button\n    type=\"button\"\n    class=\"fr-accordion__btn\"\n    [attr.aria-expanded]=\"expanded\"\n    [attr.aria-controls]=\"accordionId\"\n    [attr.aria-label]=\"headingAriaLabel\">\n    <!-- La propriété heading est prioritaire sur le slot de même nom -->\n    @if (heading) {\n      {{ heading }}\n    } @else {\n      <ng-content select=\"[heading]\"></ng-content>\n    }\n  </button>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HeadingComponent } from '../../shared';\nimport { DsfrAccordionComponent } from './accordion.component';\n\n@NgModule({\n  exports: [DsfrAccordionComponent],\n  imports: [CommonModule, HeadingComponent, DsfrAccordionComponent],\n})\nexport class DsfrAccordionModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'dsfr-accordions-group',\n  templateUrl: './accordions-group.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule],\n})\nexport class DsfrAccordionsGroupComponent {\n  /** Dissocie le groupe d'accordéon pour en avoir plusieurs d'ouvert à la fois.*/\n  @Input() ungroup = false;\n}\n","<div [attr.data-fr-group]=\"ungroup ? false : null\" class=\"fr-accordions-group\">\n  <ng-content></ng-content>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrAccordionsGroupComponent } from './accordions-group.component';\n\n@NgModule({\n  exports: [DsfrAccordionsGroupComponent],\n  imports: [CommonModule, DsfrAccordionsGroupComponent],\n})\nexport class DsfrAccordionsGroupModule {}\n","/**\n * Définit les tailles d'alerte supportées par le DSFR.\n */\nexport enum DsfrAlertSizeConst {\n  /**\n   * A utiliser pour une alerte de taille réduite.\n   */\n  SM = 'SM',\n  /**\n   * A utiliser pour une alerte de taille standard (par défaut).\n   */\n  MD = 'MD',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrAlertSizeConst}.\n */\nexport type DsfrAlertSize = `${DsfrAlertSizeConst}`;\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  Output,\n  Renderer2,\n  signal,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { DsfrHeadingLevel, DsfrI18nPipe, DsfrSeverity, DsfrSeverityConst, DsfrSizeConst } from '../../shared';\nimport { DsfrAlertSize, DsfrAlertSizeConst } from './alert.model';\n\n@Component({\n  selector: 'dsfr-alert',\n  templateUrl: './alert.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, DsfrI18nPipe],\n})\nexport class DsfrAlertComponent implements AfterViewInit {\n  /** Le titre de l'alerte. Peut être remplacé par le slot par défaut. */\n  @Input() heading?: string;\n\n  /** Le niveau de titre devant être utilisé, une balise <p> sera utilisée si la propriété n'est pas renseignée. */\n  @Input() headingLevel?: DsfrHeadingLevel;\n\n  /** Le corps du message de l'alerte (texte simple). Pour utiliser du HTML utilisez le slot `message` à la place. */\n  @Input() message?: string;\n\n  /** Le niveau d'alerte. 'info' par défaut. */\n  @Input() severity: DsfrSeverity;\n\n  /** La valeur à utiliser pour le rôle ARIA. 'alert' par défaut. */\n  @Input() ariaRoleValue: 'alert' | 'status' = 'alert';\n\n  /**\n   * La taille de l'alerte. 'MD' par défaut.\n   */\n  @Input() alertSize: DsfrAlertSize;\n\n  /** Le libellé associé au bouton de fermeture de l'alerte. */\n  @Input() closeControlLabel?: string;\n\n  /** Doit être vrai si l'alerte apparait dynamiquement en cours de navigation. (ajout de role=alert pour l'accessibilité),\n   *  false par défaut */\n  // https://www.systeme-de-design.gouv.fr/version-courante/fr/composants/alerte\n  // Pour les développeurs.\n  // Nous avons retiré l’attribut role=\"alert\" des exemples de code pour les alertes présentes au chargement de la page.\n  // En effet, l'élément avec un role=\"alert\" sont les premières choses lues par les technologies d'assistance.\n  // De ce fait, le role=\"alert\" doit être réservé aux alertes ajoutées (/injectées) dynamiquement au cours de la navigation.\n  // Ex : alertes de notification suite à une action utilisateur ou mise à jour d’un statut.\n  @Input() hasAriaRole = false;\n\n  /** L'alerte peut être masquée */\n  @Input() closeable = false;\n\n  /** Signale la fermeture de l'alerte. */\n  @Output() conceal = new EventEmitter<void>();\n\n  protected containerSlotHeading = viewChild('containerSlotHeading', { read: ElementRef });\n  protected isNgContentEmpty = signal(false);\n\n  private readonly el = inject(ElementRef);\n  private readonly renderer = inject(Renderer2);\n\n  constructor() {\n    this.severity = DsfrSeverityConst.INFO;\n    this.alertSize = DsfrAlertSizeConst.MD;\n  }\n\n  /**\n   * La taille de l'alerte. 'MD' par défaut.\n   *\n   * @deprecated since(1.15.0) utiliser 'alertSize' à la place\n   */\n  get size(): DsfrAlertSize {\n    return this.alertSize;\n  }\n\n  /** @deprecated (since 1.7.0) use 'closeable' instead (avec un 'e') */\n  get closable(): boolean {\n    return this.closeable;\n  }\n\n  /**\n   * La taille de l'alerte. 'MD' par défaut.\n   *\n   * @deprecated since(1.15.0) utiliser 'alertSize' à la place\n   */\n  @Input() set size(value: DsfrAlertSize) {\n    this.alertSize = value;\n  }\n\n  /** @deprecated (since 1.7.0) utiliser `closeable` à la place (avec un 'e') */\n  @Input() set closable(value: boolean) {\n    this.closeable = value;\n  }\n  /**\n   * Supprimer le container <p> du titre si le contenu projeté heading est vide\n   * ok a l'initialisation la balise sera bien supprimé.\n   * mais si du contenu est ajouté dynamiquement dans le slot du heading alors qu'il est vide a l'init, le heading ne\n   * sera pas projeté. Solution temporaire pour ce cas précis : initialiser avec une valeur vide type <span></span>\n   *  */\n  ngAfterViewInit(): void {\n    if (this.isSmall() && !this.heading) {\n      const hasContent = this.hasContent(this.containerSlotHeading()?.nativeElement);\n      this.isNgContentEmpty.set(!hasContent);\n    }\n  }\n\n  protected getClasses(): Record<string, boolean> {\n    return {\n      'fr-alert': true,\n\n      'fr-alert--error': this.severity === DsfrSeverityConst.ERROR,\n      'fr-alert--success': this.severity === DsfrSeverityConst.VALID || this.severity === DsfrSeverityConst.SUCCESS,\n      'fr-alert--info': this.severity === DsfrSeverityConst.INFO,\n      'fr-alert--warning': this.severity === DsfrSeverityConst.WARNING,\n\n      'fr-alert--sm': this.alertSize === DsfrSizeConst.SM,\n    };\n  }\n\n  protected isSmall(): boolean {\n    return this.alertSize == DsfrSizeConst.SM;\n  }\n\n  protected onClose(event: Event): void {\n    const parentNode = this.el.nativeElement?.parentNode;\n    if (parentNode) {\n      this.renderer.removeChild(parentNode, this.el.nativeElement, true);\n    }\n\n    this.conceal.emit();\n  }\n\n  /**\n   * Test si le container doit être affiché (contenu visible)\n   * @returns true si le container possède au moins un noeuf enfant ou du contenu de texte (exclure les commentaires et chaine vide)\n   */\n  private hasContent(container: HTMLElement): boolean {\n    return !!(container?.children?.length > 0 || (container?.textContent && container.textContent !== ' '));\n  }\n}\n","<div [attr.role]=\"hasAriaRole ? ariaRoleValue : null\" [class]=\"getClasses()\">\n  <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n  <!-- La propriété message est prioritaire sur le slot -->\n  @if (message) {\n    <p>{{ message }}</p>\n  } @else {\n    <ng-content select=\"[message]\"></ng-content>\n  }\n  @if (closeable) {\n    <button\n      type=\"button\"\n      class=\"fr-btn--close fr-btn\"\n      [title]=\"closeControlLabel ?? ('alert.close' | dsfrI18n)\"\n      (click)=\"onClose($event)\">\n      {{ closeControlLabel ?? ('alert.close' | dsfrI18n) }}\n    </button>\n  }\n</div>\n\n<!-- Templates ----------------------------------------------------------------------------------------------------- -->\n<ng-template #headingTemplate>\n  <!--FIXME v2 : supprimer les innerHTML -->\n  @switch (headingLevel) {\n    @case ('H2') {\n      @if (heading) {\n        <h2 class=\"fr-alert__title\" [innerHTML]=\"heading\"></h2>\n      } @else {\n        <h2 class=\"fr-alert__title\">\n          <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n        </h2>\n      }\n    }\n    @case ('H3') {\n      @if (heading) {\n        <h3 class=\"fr-alert__title\" [innerHTML]=\"heading\"></h3>\n      } @else {\n        <h3 class=\"fr-alert__title\">\n          <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n        </h3>\n      }\n    }\n    @case ('H4') {\n      @if (heading) {\n        <h4 class=\"fr-alert__title\" [innerHTML]=\"heading\"></h4>\n      } @else {\n        <h4 class=\"fr-alert__title\">\n          <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n        </h4>\n      }\n    }\n    @case ('H5') {\n      @if (heading) {\n        <h5 class=\"fr-alert__title\" [innerHTML]=\"heading\"></h5>\n      } @else {\n        <h5 class=\"fr-alert__title\">\n          <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n        </h5>\n      }\n    }\n    @case ('H6') {\n      @if (heading) {\n        <h6 class=\"fr-alert__title\" [innerHTML]=\"heading\"></h6>\n      } @else {\n        <h6 class=\"fr-alert__title\">\n          <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n        </h6>\n      }\n    }\n    @default {\n      @if (heading) {\n        <p class=\"fr-alert__title\" [innerHTML]=\"heading\"></p>\n      } @else {\n        <p #containerSlotHeading *ngIf=\"!isNgContentEmpty()\" class=\"fr-alert__title\">\n          <ng-container *ngTemplateOutlet=\"headingPropTemplate\"></ng-container>\n        </p>\n      }\n    }\n  }\n</ng-template>\n<ng-template #headingPropTemplate>\n  <ng-content></ng-content>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrAlertComponent } from './alert.component';\n\n@NgModule({\n  exports: [DsfrAlertComponent],\n  imports: [CommonModule, DsfrI18nPipe, DsfrAlertComponent],\n})\nexport class DsfrAlertModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  booleanAttribute,\n  Component,\n  CUSTOM_ELEMENTS_SCHEMA,\n  inject,\n  Input,\n  OnInit,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n  DsfrButton,\n  DsfrButtonType,\n  DsfrButtonTypeConst,\n  DsfrButtonVariant,\n  DsfrButtonVariantConst,\n  DsfrPosition,\n  DsfrPositionConst,\n  DsfrSize,\n  DsfrSizeConst,\n  LoggerService,\n  newUniqueId,\n} from '../../shared';\n\n@Component({\n  selector: 'dsfr-button',\n  templateUrl: './button.component.html',\n  styleUrls: ['./button.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, FormsModule],\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class DsfrButtonComponent implements DsfrButton, OnInit {\n  /** Libellé du bouton.\n   *\n   * Dans le cas d'une utilisation pour une icône seule ne pas renseigner `label`. Renseigner soit `aria-label` soit `tooltipMessage`.\n   */\n  @Input() label?: string;\n\n  /** Type du button, `button` par défaut. */\n  @Input() type: DsfrButtonType = DsfrButtonTypeConst.BUTTON;\n\n  /**\n   * Message du `tooltip` (attribut `title` du bouton).\n   */\n  @Input() tooltipMessage?: string;\n\n  /** Style du bouton, `primary` par défaut. */\n  @Input() variant: DsfrButtonVariant = DsfrButtonVariantConst.PRIMARY;\n\n  /**\n   * Taille du bouton, `MD` par défaut\n   */\n  @Input() buttonSize: DsfrSize = DsfrSizeConst.MD;\n\n  /** Nom de l'icône. */\n  @Input() icon?: string;\n\n  /** Position de l'icône, à gauche par défaut. */\n  @Input() iconPosition?: DsfrPosition;\n\n  /** Permet de désactiver le bouton d'action, `false` par défaut. */\n  @Input() disabled = false;\n\n  /**\n   * Permet de passer le libellé du bouton en majuscules, 'false' par défaut.\n   *\n   * @deprecated (since 1.1.0)\n   *\n   * @internal\n   */\n  @Input() uppercase = false;\n\n  /**\n   * Permet d'activer un visuel dénotant un \"chargement\" (busy), 'false' par défaut.\n   *\n   * @deprecated (since 1.1.0)\n   *\n   * @internal\n   */\n  @Input() loader = false;\n\n  /** 👓 Spécifie le libellé qui sera retranscrit par les narrateurs d'écran. */\n  @Input() ariaLabel?: string;\n\n  /** Permet d'inverser le contraste du marqueur de focus, `false` par défaut. */\n  @Input() invertedOutlineContrast = false;\n\n  /**\n   * Identifiant de l'élément `<button>`\n   *\n   * @deprecated (since 1.14.0) utiliser buttonId\n   */\n  @Input() id?: string;\n\n  /**\n   * Identifiant de l'élément `<button>`\n   */\n  @Input() buttonId: string = newUniqueId();\n\n  /**\n   * 👓 `ariaControls` est utilisé pour la manipulation d'une modale par exemple.\n   * (prise en charge du retour de focus à la fermeture de la modale).\n   */\n  @Input() ariaControls?: string;\n\n  /**\n   * 👓 Spécifie l'attribut `aria-pressed` pour indiquer un état (toggle)\n   */\n  @Input() ariaPressed?: string;\n\n  /**\n   * 👓 Spécifie l'attribut `aria-haspopup` en cas d'ouverture de popup\n   */\n  @Input() ariaHasPopup?: string;\n\n  /**\n   * 👓 Spécifie l'attribut `aria-expanded`\n   */\n  @Input({ transform: booleanAttribute }) ariaExpanded?: boolean;\n\n  /**\n   * 👓 Spécifie l'attribut `aria-hidden`\n   *\n   * Attention: veillez à valoriser l'input `tabIndex` à `-1` si vous valorisez `ariaHidden` à `true`\n   */\n  @Input({ transform: booleanAttribute }) ariaHidden?: boolean;\n\n  /**\n   * 👓 Spécifie l'attribut `tabindex` pour la gestion du focus\n   */\n  @Input() tabIndex?: number;\n\n  /**\n   * Style personnalisé\n   * @since 1.3.0\n   */\n  @Input() customClass?: string;\n\n  /**\n   * Permet de définir le role donné à l'élément `button`\n   * @since 1.15.0\n   */\n  @Input() buttonRole: string = 'button';\n\n  /**\n   * Permet de masquer visuellement le libellé en le laissant accessible aux dispositifs d'assistance.\n   *\n   * A utiliser pour les boutons avec icône seule.\n   *\n   * @since 1.15.0\n   */\n  @Input({ transform: booleanAttribute }) labelSrOnly: boolean = false;\n\n  private readonly logger = inject(LoggerService);\n\n  /**\n   * Taille du bouton, `MD` par défaut\n   *\n   * @deprecated since(1.15.0) utiliser 'buttonSize' à la place\n   */\n  get size(): DsfrSize {\n    return this.buttonSize;\n  }\n\n  /**\n   * Taille du bouton, `MD` par défaut\n   *\n   * @deprecated since(1.15.0) utiliser 'buttonSize' à la place\n   */\n  @Input() set size(value: DsfrSize) {\n    this.buttonSize = value;\n  }\n\n  ngOnInit(): void {\n    if (!this.label && !this.ariaLabel && !this.tooltipMessage) {\n      this.logger.warn(\n        'dsfr-button: le composant doit obligatoirement contenir un label, un aria-label ou un tooltipMessage',\n      );\n    }\n  }\n\n  protected buttonClasses(): Record<string, boolean> {\n    const hasIcon = !!this.icon;\n    const hasTextVisible = !!this.label && !this.labelSrOnly;\n\n    const classes: Record<string, boolean> = {\n      'fr-btn': true,\n\n      'fr-btn--secondary': this.variant === DsfrButtonVariantConst.SECONDARY,\n      'fr-btn--tertiary': this.variant === DsfrButtonVariantConst.TERTIARY,\n      'fr-btn--tertiary-no-outline': this.variant === DsfrButtonVariantConst.TERTIARY_NO_OUTLINE,\n\n      'fr-btn--icon-left': hasIcon && hasTextVisible && this.iconPosition !== DsfrPositionConst.RIGHT,\n      'fr-btn--icon-right': hasIcon && hasTextVisible && this.iconPosition === DsfrPositionConst.RIGHT,\n\n      'fr-btn--sm': this.buttonSize === DsfrSizeConst.SM,\n      'fr-btn--lg': this.buttonSize === DsfrSizeConst.LG,\n\n      // 'déprécié'\n      'uppercase': !!this.uppercase,\n      'inverted-outline-contrast': !!this.invertedOutlineContrast,\n    };\n\n    if (this.icon) {\n      classes[this.icon] = true;\n    }\n\n    return classes;\n  }\n\n  protected customClasses(): string {\n    return this.customClass ?? '';\n  }\n\n  /**\n   * Empêche que l'appuie sur la barre Espace soit considéré comme un clic si le rôle du button est 'link'\n   */\n  protected handleSpaceKeyClick(evt: Event): void {\n    if (this.buttonRole === 'link') {\n      evt.preventDefault();\n    }\n  }\n}\n","<button\n  [attr.id]=\"buttonId\"\n  [ngClass]=\"buttonClasses()\"\n  [class]=\"customClasses()\"\n  [attr.type]=\"type\"\n  [attr.title]=\"tooltipMessage || null\"\n  [disabled]=\"disabled || null\"\n  [attr.role]=\"buttonRole === 'button' ? null : buttonRole\"\n  [attr.aria-label]=\"ariaLabel || null\"\n  [attr.aria-pressed]=\"ariaPressed === undefined ? null : ariaPressed\"\n  [attr.aria-expanded]=\"ariaExpanded === undefined ? null : ariaExpanded\"\n  [attr.aria-haspopup]=\"ariaHasPopup || null\"\n  [attr.aria-controls]=\"ariaControls || null\"\n  [attr.aria-hidden]=\"ariaHidden || null\"\n  [attr.data-fr-opened]=\"ariaControls ? false : null\"\n  [attr.tabindex]=\"tabIndex === undefined ? null : tabIndex\"\n  (keydown.Space)=\"handleSpaceKeyClick($event)\">\n  @if (label) {\n    {{ label }}\n  }\n</button>\n","import { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrButtonComponent } from './button.component';\n\n@NgModule({\n  imports: [CommonModule, FormsModule, DsfrButtonComponent],\n  exports: [DsfrButtonComponent],\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class DsfrButtonModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  inject,\n  Input,\n  OnInit,\n  Output,\n  SecurityContext,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { IsActiveMatchOptions, NavigationExtras, RouterModule } from '@angular/router';\nimport {\n  DsfrI18nService,\n  DsfrLink,\n  DsfrLinkTarget,\n  DsfrLinkTargetConst,\n  DsfrPosition,\n  DsfrPositionConst,\n  DsfrSize,\n  DsfrSizeConst,\n} from '../../shared';\n\n@Component({\n  selector: 'dsfr-link',\n  templateUrl: './link.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, RouterModule],\n})\nexport class DsfrLinkComponent implements Omit<DsfrLink, 'active' | 'target'>, OnInit {\n  /** Permet d'ajouter un attribut `aria-current` sur le lien.*/\n  @Input() ariaCurrent?: string;\n\n  /**\n   * La propriété ariaLabel définit une valeur de chaîne qui étiquette un élément interactif.\n   *\n   * @since 1.4.0\n   */\n  @Input() ariaLabel?: string;\n\n  /**\n   * Identifie l'élément (ou les éléments) contrôlé par cet élément.\n   *\n   * @since 1.7.0\n   */\n  @Input() ariaControls?: string;\n\n  /** Pour ajouter des classes CSS custom. Supprimera la classe par défaut 'fr-link' */\n  @Input() customClass?: string;\n\n  /**\n   * Permet de désactiver le composant.\n   */\n  @Input() disabled = false;\n\n  /** Classe de l'icône. */\n  @Input() icon?: string;\n\n  /** Position de l'icône. À droite par défaut. */\n  @Input() iconPosition: DsfrPosition | undefined = DsfrPositionConst.RIGHT;\n\n  /** @since 1.6 */\n  @Input() linkId?: string;\n\n  /** Texte du lien simple. Sinon utiliser un slot [label].*/\n  @Input() label: string = '';\n\n  /** Attribut target du lien. */\n  // Le nom 'target' crée un problème avec le CSS DSFR, puisque du coup, on a target=\"_blank\" dans le host et un\n  // style s'applique, ce qui provoque un doublement de l'icône lien externe.\n  @Input() linkTarget?: DsfrLinkTarget;\n\n  /** Path interne. Exclusif avec link et routePath, prioritaire sur link. */\n  @Input() route?: string;\n\n  /** Path angular géré en tant que directive routerLink. Prioritaire et exclusif avec link et route. */\n  @Input() routePath?: string | string[];\n\n  /** Classe CSS utilisée pour la directive routerLink active. */\n  @Input() routerLinkActive?: string | string[];\n\n  /** RouterLink : options additionnelles pour le routerLinkActive (exact). */\n  @Input() routerLinkActiveOptions?: { exact: boolean } | IsActiveMatchOptions;\n\n  /** RouterLink : options additionnelles ppour le routerLink (queryParams, state, etc.) */\n  @Input() routerLinkExtras?: NavigationExtras;\n\n  /** Taille du lien. */\n  @Input() linkSize: DsfrSize = DsfrSizeConst.MD;\n\n  /** Message du tooltip (attribut title). @since 1.3.0 */\n  @Input() tooltipMessage?: string;\n\n  /**\n   * Transforme un lien en bouton si `button`, `link` par défaut.\n   *\n   * @since 1.7.0\n   */\n  @Input() mode: 'link' | 'button' | undefined;\n\n  /** Attribut labelledby du lien */\n  @Input() ariaLabelledBy?: string;\n\n  /** Attribut describedby du lien */\n  @Input() ariaDescribedBy?: string;\n\n  /**\n   * Surcharger le comportement ariaCurrentWhenActive (routerLink). Par défaut \"page\" si la route est active .\n   *\n   * @since 1.13.0\n   */\n  @Input() ariaCurrentWhenActive: 'page' | 'step' | 'location' | 'date' | 'time' | true | false | undefined;\n\n  /**\n   * Si l'input 'route' est renseigné, sa valeur sera émise lorsque le lien est sélectionné.\n   */\n  @Output() linkSelect = new EventEmitter<string>();\n\n  protected externalLink = false;\n\n  protected readonly i18n = inject(DsfrI18nService);\n  private readonly _sanitizer = inject(DomSanitizer);\n  private _link: string | undefined;\n  private _sanitizedLink: string | null | undefined;\n\n  /** Lien href externe, exclusif avec route et routePath. */\n  get link(): string | undefined {\n    return this._link;\n  }\n\n  /**\n   * Taille du lien.\n   *\n   * @deprecated since(1.15.0) utiliser 'linkSize' à la place\n   */\n  get size(): DsfrSize {\n    return this.linkSize;\n  }\n\n  /** @deprecated (since 1.5) utiliser `linkTarget` à la place. */\n  get targetLink(): DsfrLinkTarget | undefined {\n    return this.linkTarget;\n  }\n\n  /** Lien href externe, exclusif avec route et routePath. */\n  @Input() set link(value: string | undefined) {\n    this._link = value;\n\n    if (this.link) {\n      this._sanitizedLink = this._sanitizer.sanitize(SecurityContext.URL, this.link);\n    }\n  }\n\n  /**\n   * Taille du lien.\n   *\n   * @deprecated since(1.15.0) utiliser 'linkSize' à la place\n   */\n  @Input() set size(value: DsfrSize) {\n    this.linkSize = value;\n  }\n\n  /** @deprecated (since 1.5) utiliser `linkTarget` à la place. */\n  @Input() set targetLink(value: DsfrLinkTarget | undefined) {\n    this.linkTarget = value;\n  }\n\n  /**\n   * Activation du router Angular.\n   *\n   * L'usage de routerLink provoque un bug accessibilité sur la navigation au clavier (ajout d'un tabindex=0).\n   *\n   * @deprecated (since 1.11.5) utiliser `routePath` à la place.\n   */\n  @Input() set routerLink(value: string | string[] | undefined) {\n    if (value) this.routePath = value;\n  }\n\n  ngOnInit(): void {\n    if (this.linkTarget === DsfrLinkTargetConst.BLANK) {\n      this.externalLink = true;\n      this.tooltipMessage = this.tooltipMessage\n        ? `${this.tooltipMessage} - ${this.i18n.t('link.newWindow')}`\n        : `${this.i18n.t('link.newWindow')}`;\n\n      // Ajout de l'information newWindow en sr-only en plus du title pour a11y (/!\\ fix différent du DSFR)\n      if (this.label) {\n        this.label += `<span class=\"fr-sr-only\">${this.i18n.t('link.newWindow')}</span>`;\n      }\n    }\n  }\n\n  /** @internal */\n  getHref(): string | undefined {\n    return this.disabled ? undefined : this._sanitizedLink || this.route;\n  }\n\n  /** @internal */\n  hasRouterLink(): boolean {\n    return !this.disabled && !!this.routePath;\n  }\n\n  /**\n   * DsfrLink est partagé par plusieurs composants, 'tag', 'card' et 'tile' à la place d'un simple lien.\n   * Cela permet de bénéficier des nombreuses caractéristiques du composant DsfrLink.\n   *\n   * @since 1.5 Cependant, la classe 'fr-link' ne doit pas cohabiter les classes de ces composants ('fr-tag', ...)\n   *\n   * @internal\n   */\n  getClass(): string {\n    let classes = '';\n\n    if (!this.customClass && !this.disabled) classes += 'fr-link';\n    if (this.icon && this.iconPosition === DsfrPositionConst.RIGHT) classes += ' fr-link--icon-right';\n    if (this.icon && this.iconPosition === DsfrPositionConst.LEFT) classes += ' fr-link--icon-left';\n    if (this.linkSize === DsfrSizeConst.SM) classes += ' fr-link--sm';\n    if (this.linkSize === DsfrSizeConst.LG) classes += ' fr-link--lg';\n\n    if (this.icon) classes += ' ' + this.icon;\n\n    if (this.customClass) classes += ' ' + this.customClass;\n\n    return classes;\n  }\n\n  /** @internal */\n  getButtonClasses(): string {\n    const classes = ['fr-btn', 'fr-btn--tertiary-no-outline'];\n    if (this.customClass) classes.push(this.customClass);\n    if (this.linkSize === DsfrSizeConst.SM) classes.push('fr-btn--sm');\n    if (this.linkSize === DsfrSizeConst.LG) classes.push('fr-btn--lg');\n\n    if (this.icon) {\n      classes.push(this.icon);\n      classes.push(this.iconPosition === DsfrPositionConst.RIGHT ? 'fr-btn--icon-right' : 'fr-btn--icon-left');\n    }\n\n    return classes.join(' ');\n  }\n\n  /** @internal */\n  onLink(event: Event) {\n    if (this.disabled) return;\n\n    if (this.route && !this.routePath) {\n      event.preventDefault();\n      this.linkSelect.emit(this.route);\n    } else if (this.link) {\n      this.linkSelect.emit(this.link);\n    } else {\n      this.linkSelect.emit(this.linkId ?? this.label);\n    }\n  }\n}\n","<!-- Lien externe ou géré programmatiquement -->\n<!--FIXME : obligation de dupliquer ici pour gérer a la fois innerHTML (/!\\ pas de outerHTML!) et la présence du slot.\n voir pour fix en angular 19 détection d'un contenu dans le slot ou suppression de innerHTML en v2 -->\n@if (!hasRouterLink() && mode !== 'button') {\n  @if (label) {\n    <!-- Lien externe et label en innerHTML-->\n    <a\n      [attr.aria-controls]=\"ariaControls || null\"\n      [attr.aria-current]=\"ariaCurrent || null\"\n      [attr.aria-disabled]=\"disabled || null\"\n      [attr.aria-label]=\"ariaLabel || null\"\n      [attr.aria-labelledby]=\"ariaLabelledBy || null\"\n      [attr.aria-describedby]=\"ariaDescribedBy || null\"\n      [attr.data-fr-opened]=\"ariaControls ? false : null\"\n      [attr.href]=\"getHref() || null\"\n      [attr.id]=\"linkId || null\"\n      [attr.rel]=\"linkTarget === '_blank' ? 'noopener external' : null\"\n      [attr.role]=\"disabled ? 'link' : null\"\n      [attr.target]=\"linkTarget || null\"\n      [attr.title]=\"tooltipMessage || null\"\n      [ngClass]=\"getClass()\"\n      (click)=\"onLink($event)\"\n      [innerHTML]=\"label\">\n    </a>\n  } @else {\n    <!-- Lien externe et slot pour le label -->\n    <a\n      [attr.aria-controls]=\"ariaControls || null\"\n      [attr.aria-current]=\"ariaCurrent || null\"\n      [attr.aria-disabled]=\"disabled || null\"\n      [attr.aria-label]=\"ariaLabel || null\"\n      [attr.aria-labelledby]=\"ariaLabelledBy || null\"\n      [attr.aria-describedby]=\"ariaDescribedBy || null\"\n      [attr.data-fr-opened]=\"ariaControls ? false : null\"\n      [attr.href]=\"getHref() || null\"\n      [attr.id]=\"linkId || null\"\n      [attr.rel]=\"linkTarget === '_blank' ? 'noopener external' : null\"\n      [attr.role]=\"disabled ? 'link' : null\"\n      [attr.target]=\"linkTarget || null\"\n      [attr.title]=\"tooltipMessage || null\"\n      [ngClass]=\"getClass()\"\n      (click)=\"onLink($event)\">\n      <ng-container [ngTemplateOutlet]=\"slot\"> </ng-container>\n    </a>\n  }\n} @else if (hasRouterLink() && mode !== 'button') {\n  @if (label) {\n    <!-- Routerlink  et label en innerHTML-->\n    <a\n      [ariaCurrentWhenActive]=\"ariaCurrentWhenActive ?? 'page'\"\n      [attr.aria-controls]=\"ariaControls || null\"\n      [attr.aria-current]=\"ariaCurrent || null\"\n      [attr.aria-disabled]=\"disabled || null\"\n      [attr.aria-label]=\"ariaLabel || null\"\n      [attr.aria-labelledby]=\"ariaLabelledBy || null\"\n      [attr.aria-describedby]=\"ariaDescribedBy || null\"\n      [attr.id]=\"linkId || null\"\n      [attr.role]=\"disabled ? 'link' : null\"\n      [attr.target]=\"linkTarget || null\"\n      [attr.title]=\"tooltipMessage || null\"\n      [fragment]=\"routerLinkExtras?.fragment\"\n      [ngClass]=\"getClass()\"\n      [preserveFragment]=\"routerLinkExtras?.preserveFragment\"\n      [queryParams]=\"routerLinkExtras?.queryParams\"\n      [queryParamsHandling]=\"routerLinkExtras?.queryParamsHandling\"\n      [replaceUrl]=\"routerLinkExtras?.replaceUrl\"\n      [routerLink]=\"routePath\"\n      [routerLinkActive]=\"routerLinkActive ?? ''\"\n      [routerLinkActiveOptions]=\"routerLinkActiveOptions ? routerLinkActiveOptions : { exact: false }\"\n      [skipLocationChange]=\"routerLinkExtras?.skipLocationChange\"\n      [state]=\"routerLinkExtras?.state\"\n      (click)=\"onLink($event)\"\n      [innerHTML]=\"label\">\n    </a>\n  } @else {\n    <!-- Routerlink  et slot pour le label -->\n    <a\n      [ariaCurrentWhenActive]=\"ariaCurrentWhenActive ?? 'page'\"\n      [attr.aria-controls]=\"ariaControls || null\"\n      [attr.aria-current]=\"ariaCurrent || null\"\n      [attr.aria-disabled]=\"disabled || null\"\n      [attr.aria-label]=\"ariaLabel || null\"\n      [attr.aria-labelledby]=\"ariaLabelledBy || null\"\n      [attr.aria-describedby]=\"ariaDescribedBy || null\"\n      [attr.id]=\"linkId || null\"\n      [attr.role]=\"disabled ? 'link' : null\"\n      [attr.target]=\"linkTarget || null\"\n      [attr.title]=\"tooltipMessage || null\"\n      [fragment]=\"routerLinkExtras?.fragment\"\n      [ngClass]=\"getClass()\"\n      [preserveFragment]=\"routerLinkExtras?.preserveFragment\"\n      [queryParams]=\"routerLinkExtras?.queryParams\"\n      [queryParamsHandling]=\"routerLinkExtras?.queryParamsHandling\"\n      [replaceUrl]=\"routerLinkExtras?.replaceUrl\"\n      [routerLink]=\"routePath\"\n      [routerLinkActive]=\"routerLinkActive ?? ''\"\n      [routerLinkActiveOptions]=\"routerLinkActiveOptions ? routerLinkActiveOptions : { exact: false }\"\n      [skipLocationChange]=\"routerLinkExtras?.skipLocationChange\"\n      [state]=\"routerLinkExtras?.state\"\n      (click)=\"onLink($event)\">\n      <ng-container [ngTemplateOutlet]=\"slot\"> </ng-container>\n    </a>\n  }\n} @else if (mode === 'button') {\n  @if (label) {\n    <!-- Bouton  et label en innerHTML-->\n    <button\n      type=\"button\"\n      [attr.id]=\"linkId\"\n      [attr.aria-controls]=\"ariaControls || null\"\n      [attr.aria-label]=\"ariaLabel || null\"\n      [attr.aria-labelledby]=\"ariaLabelledBy || null\"\n      [attr.aria-describedby]=\"ariaDescribedBy || null\"\n      [attr.data-fr-opened]=\"ariaControls ? false : null\"\n      [attr.title]=\"tooltipMessage || null\"\n      [disabled]=\"disabled\"\n      [ngClass]=\"getButtonClasses()\"\n      (click)=\"onLink($event)\"\n      [innerHTML]=\"label\"></button>\n  } @else {\n    <!-- Bouton  et slot pour le label-->\n    <button\n      type=\"button\"\n      [attr.id]=\"linkId\"\n      [attr.aria-controls]=\"ariaControls || null\"\n      [attr.aria-label]=\"ariaLabel || null\"\n      [attr.aria-labelledby]=\"ariaLabelledBy || null\"\n      [attr.aria-describedby]=\"ariaDescribedBy || null\"\n      [attr.data-fr-opened]=\"ariaControls ? false : null\"\n      [attr.title]=\"tooltipMessage || null\"\n      [disabled]=\"disabled\"\n      [ngClass]=\"getButtonClasses()\"\n      (click)=\"onLink($event)\">\n      <ng-container [ngTemplateOutlet]=\"slot\"> </ng-container>\n    </button>\n  }\n}\n\n<!-- Déclaré dans un template : le ng-content ne doit être présent qu'une seule fois -->\n<ng-template #slot>\n  <ng-content></ng-content>\n  @if (externalLink) {\n    <span class=\"fr-sr-only\"> {{ i18n.t('link.newWindow') }} </span>\n  }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DsfrLinkComponent } from './link.component';\n\n@NgModule({\n  exports: [DsfrLinkComponent],\n  imports: [CommonModule, RouterModule, DsfrLinkComponent],\n})\nexport class DsfrLinkModule {}\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport { booleanAttribute, Component, inject, input, PLATFORM_ID, ViewEncapsulation } from '@angular/core';\nimport { DsfrI18nPipe } from '../../shared';\nimport { DsfrButtonComponent } from '../button';\nimport { DsfrLinkComponent } from '../link';\n\n@Component({\n  selector: 'dsfr-backtotop',\n  templateUrl: './backtotop.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, DsfrLinkComponent, DsfrI18nPipe, DsfrButtonComponent],\n})\nexport class DsfrBackToTopComponent {\n  buttonMode = input(false, { transform: booleanAttribute });\n\n  /** Identifiant de l'élément cible en  haut de page, par défaut \"top\" */\n  targetId = input<string>('top');\n\n  private readonly scrollBehavior: ScrollBehavior = 'auto';\n  private readonly platformId = inject(PLATFORM_ID);\n\n  constructor() {\n    if (isPlatformBrowser(this.platformId)) {\n      const prefersReduced = window?.matchMedia('(prefers-reduced-motion: reduce)').matches;\n      this.scrollBehavior = prefersReduced ? 'auto' : 'smooth';\n    }\n  }\n\n  protected scrollToTop() {\n    this.scrollToElement(this.targetId());\n  }\n\n  /**\n   * Scroll vers l'élément dont l'id correspond à targetId.\n   * Simule le même comportement que si on avait placé l'ancre #targetId dans l'url.\n   * Sans agir sur la navigation (pas de modification de l'historique)\n   * @param targetId Id de l'élément ciblé par le scroll.\n   */\n  private scrollToElement(targetId: string) {\n    const target = document.getElementById(targetId);\n    if (!target) {\n      return;\n    }\n\n    // simulation du comportement de scroll de l'ancre.\n    target.scrollIntoView({\n      behavior: this.scrollBehavior,\n      block: 'start',\n      inline: 'nearest',\n    });\n\n    // simulation du comportement de focus de l'ancre.\n    if (!target.hasAttribute('tabindex')) {\n      target.setAttribute('tabindex', '-1');\n      target.focus({ preventScroll: true });\n      requestAnimationFrame(() => target.removeAttribute('tabindex'));\n    } else {\n      target.focus({ preventScroll: true });\n    }\n  }\n}\n","@if (buttonMode()) {\n  <dsfr-button\n    [label]=\"'backtotop.topOfPage' | dsfrI18n\"\n    [variant]=\"'tertiary-no-outline'\"\n    [icon]=\"'fr-icon-arrow-up-fill'\"\n    (click)=\"scrollToTop()\" />\n} @else {\n  <dsfr-link\n    class=\"fr-link fr-icon-arrow-up-fill fr-link--icon-left\"\n    routePath=\"./\"\n    [routerLinkExtras]=\"{ fragment: targetId() }\"\n    >{{ 'backtotop.topOfPage' | dsfrI18n }}</dsfr-link\n  >\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrBackToTopComponent } from './backtotop.component';\n\n@NgModule({\n  exports: [DsfrBackToTopComponent],\n  imports: [CommonModule, DsfrLinkComponent, DsfrI18nPipe, DsfrBackToTopComponent],\n})\nexport class DsfrBackToTopModule {}\n","/**\n * Décrit un badge dans un groupe de badges.\n */\nexport interface DsfrBadge {\n  /**\n   * Libellé du badge.\n   */\n  label: string;\n\n  /**\n   * Niveau d'alerte. Optionnel.\n   */\n  severity?: DsfrBadgeSeverity;\n\n  /**\n   * Permet de ne pas afficher l'icône de sévérité, affichée par défaut.\n   */\n  noIcon?: boolean;\n\n  /**\n   * Cette propriété est ignorée : la taille des badges dans un groupe est liée au groupe.\n   *\n   * @deprecated (since 1.9) use `DsfrBadgesGroupComponent#small` instead\n   */\n  size?: DsfrBadgeSize;\n\n  /**\n   * Classe personnalisée pour la couleur du badge.\n   */\n  customClass?: string;\n}\n\n/**\n * Définit les différent niveaux de sévérité supportés par le DSFR.\n */\nexport enum DsfrBadgeSeverityConst {\n  NEW = 'new',\n  INFO = 'info',\n  SUCCESS = 'success',\n  WARNING = 'warning',\n  ERROR = 'error',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrBadgeSeverityConst}.\n */\nexport type DsfrBadgeSeverity = `${DsfrBadgeSeverityConst}` | 'NEW' | 'SUCCESS' | 'INFO' | 'WARNING' | 'ERROR';\n\n/**\n * Définit les tailles de badge supportées par le DSFR.\n */\nexport enum DsfrBadgeSizeConst {\n  /**\n   * Petite taille.\n   */\n  SM = 'SM',\n  /**\n   * Taille normale (par défaut).\n   */\n  MD = 'MD',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrBadgeSeverityConst}.\n */\nexport type DsfrBadgeSize = `${DsfrBadgeSizeConst}`;\n","import { CommonModule } from '@angular/common';\nimport { Component, CUSTOM_ELEMENTS_SCHEMA, Input, ViewEncapsulation } from '@angular/core';\nimport { DsfrSizeConst } from '../../shared';\nimport { DsfrBadgeSeverity, DsfrBadgeSeverityConst, DsfrBadgeSize } from './badge.model';\n\n@Component({\n  selector: 'dsfr-badge',\n  templateUrl: './badge.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule],\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class DsfrBadgeComponent {\n  /** Label du badge, obligatoire. */\n  @Input({ required: true }) label!: string;\n\n  /**\n   * L'icône de sévérité n'est pas affiché si `true` (`false` par défaut).\n   * Attention seuls les badges dits \"système\" peuvent avoir une icône, les badges \"custom\" ne le peuvent pas.\n   */\n  @Input() noIcon = false;\n\n  /**\n   * Taille du badge, optionnel, `MD` par défaut.\n   */\n  @Input() badgeSize: DsfrBadgeSize = 'MD';\n\n  /** Classe personnalisée pour la couleur du badge. Correspond à une classe du type `fr-badge--blue-cumulus`. */\n  @Input() customClass?: string;\n\n  /** @internal */\n  private _severity: DsfrBadgeSeverity | undefined = undefined;\n\n  /**\n   * Taille du badge, optionnel, `MD` par défaut.\n   *\n   * @deprecated since(1.15.0) utiliser 'badgeSize' à la place\n   */\n  get size(): DsfrBadgeSize {\n    return this.badgeSize;\n  }\n\n  get severity(): DsfrBadgeSeverity | undefined {\n    return this._severity;\n  }\n\n  /**\n   * Taille du badge, optionnel, `MD` par défaut.\n   *\n   * @deprecated since(1.15.0) utiliser 'badgeSize' à la place\n   */\n  @Input() set size(value: DsfrBadgeSize) {\n    this.badgeSize = value;\n  }\n\n  /** Niveau d'alerte, optionnel. */\n  @Input() set severity(value: DsfrBadgeSeverity | undefined) {\n    this._severity = !value ? undefined : <DsfrBadgeSeverity>value?.toLowerCase();\n  }\n\n  /** @internal */\n  getClasses() {\n    const classes: Record<string, boolean> = {\n      'fr-badge--sm': this.badgeSize === DsfrSizeConst.SM && !!this.label,\n      'fr-badge--no-icon': this.noIcon,\n    };\n\n    if (this.severity) {\n      classes['fr-badge--new'] = this.severity === DsfrBadgeSeverityConst.NEW;\n      classes['fr-badge--success'] = this.severity === DsfrBadgeSeverityConst.SUCCESS;\n      classes['fr-badge--info'] = this.severity == DsfrBadgeSeverityConst.INFO;\n      classes['fr-badge--warning'] = this.severity == DsfrBadgeSeverityConst.WARNING;\n      classes['fr-badge--error'] = this.severity === DsfrBadgeSeverityConst.ERROR;\n    }\n\n    return classes;\n  }\n}\n","<p class=\"fr-badge\" [class]=\"customClass ?? ''\" [ngClass]=\"getClasses()\">\n  <span class=\"fr-ellipsis\">{{ label }}</span>\n</p>\n","import { CommonModule } from '@angular/common';\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';\nimport { DsfrBadgeComponent } from './badge.component';\n\n@NgModule({\n  imports: [CommonModule, DsfrBadgeComponent],\n  exports: [DsfrBadgeComponent],\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class DsfrBadgeModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { DsfrBadge, DsfrBadgeComponent } from '../badge';\n\n@Component({\n  selector: 'dsfr-badges-group',\n  templateUrl: './badges-group.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, DsfrBadgeComponent],\n})\nexport class DsfrBadgesGroupComponent {\n  /**\n   * Les badges du groupe.\n   */\n  @Input() badges: DsfrBadge[] = [];\n\n  /**\n   * Taille des badges.\n   *\n   * @since 1.9.0\n   */\n  @Input() small = false;\n}\n","<ul class=\"fr-badges-group\" [class.fr-badges-group--sm]=\"small\">\n  @for (badge of badges; track badge.label) {\n    <li>\n      <dsfr-badge\n        [label]=\"badge.label\"\n        [noIcon]=\"badge.noIcon ?? false\"\n        [severity]=\"badge.severity ?? undefined\"\n        [customClass]=\"badge.customClass ?? ''\"></dsfr-badge>\n    </li>\n  }\n</ul>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrBadgeComponent } from '../badge';\nimport { DsfrBadgesGroupComponent } from './badges-group.component';\n\n@NgModule({\n  exports: [DsfrBadgesGroupComponent],\n  imports: [CommonModule, DsfrBadgeComponent, DsfrBadgesGroupComponent],\n})\nexport class DsfrBadgesGroupModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DsfrLink, DsfrPosition, DsfrPositionConst } from '../../shared';\nimport { DsfrLinkComponent } from './link.component';\n\n@Component({\n  selector: 'edu-item-link',\n  templateUrl: './link.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, RouterModule],\n})\nexport class ItemLinkComponent extends DsfrLinkComponent {\n  // DsfrPositionConst.RIGHT pour être, malheureusement, compatible avec l'existant. undefined dans l'idéal.\n  @Input() defaultIconPosition: DsfrPosition | undefined = DsfrPositionConst.RIGHT;\n\n  /**@internal */\n  private _item: DsfrLink | undefined;\n\n  /**@internal */\n  get item(): DsfrLink | undefined {\n    return this._item;\n  }\n\n  /**\n   * Optionnel, utilisation avec un model DsfrLink (exclusif avec les autres propriétés).\n   *\n   * @since 1.7\n   */\n  @Input() set item(value: DsfrLink | undefined) {\n    this._item = value;\n    if (this._item) {\n      this.ariaControls = this._item.ariaControls;\n      this.ariaCurrent = this._item.active ? 'page' : undefined;\n      this.ariaLabel = this._item.ariaLabel;\n      this.routePath = this._item.routerLink;\n      this.route = this._item.route;\n      this.routerLinkActive = this._item.routerLinkActive;\n      this.routerLinkActiveOptions = this._item?.routerLinkActiveOptions;\n      this.routerLinkExtras = this._item.routerLinkExtras;\n      this.customClass = this.customClass || this._item.customClass;\n      this.disabled = this._item.disabled || false;\n      this.mode = this._item.mode;\n      this.icon = this._item.icon;\n      this.iconPosition = this._item.iconPosition || this.defaultIconPosition;\n      this.label = this._item.label;\n      this.link = this._item.link;\n      this.linkId = this._item.linkId;\n      this.linkTarget = this._item.linkTarget || this._item.target;\n      this.tooltipMessage = this._item.tooltipMessage;\n    }\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { DsfrI18nPipe, DsfrLink } from '../../shared';\nimport { ItemLinkComponent } from '../link/item-link.component';\n\n@Component({\n  selector: 'dsfr-breadcrumb',\n  templateUrl: './breadcrumb.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, ItemLinkComponent, DsfrI18nPipe],\n})\nexport class DsfrBreadcrumbComponent {\n  /** Tableau d'item du fil d'Ariane. */\n  @Input() items: DsfrLink[] = [];\n\n  /** Attribut aria-label de la balise `nav` du fil d'Ariane. */\n  @Input() ariaLabel?: string;\n\n  /** Confirmation du clic sur le bouton. */\n  @Output() linkSelect = new EventEmitter<DsfrLink>();\n\n  /** @internal */\n  constructor() {}\n\n  /** @internal */\n  onItem(item: DsfrLink): void {\n    this.linkSelect.emit(item);\n  }\n}\n","<nav role=\"navigation\" class=\"fr-breadcrumb\" [attr.aria-label]=\"'breadcrumb.ariaLabel' | dsfrI18n\">\n  <button type=\"button\" class=\"fr-breadcrumb__button\" aria-expanded=\"false\" aria-controls=\"breadcrumb-1\">\n    {{ 'breadcrumb.viewBreadcrumb' | dsfrI18n }}\n  </button>\n  <div class=\"fr-collapse\" id=\"breadcrumb-1\">\n    <ol class=\"fr-breadcrumb__list\">\n      @for (item of items; track $index; let isFirst = $first; let isLast = $last) {\n        <li>\n          @if (isLast) {\n            <!-- Formatage forcé : suppression des espaces résiduels liés aux retours à la ligne au sein d'un élément inline -->\n            <!-- prettier-ignore -->\n            <a class=\"fr-breadcrumb__link\" aria-current=\"page\" [attr.aria-label]=\"item.ariaLabel || null\">{{\n              item.label\n            }}</a>\n          } @else {\n            <edu-item-link\n              (linkSelect)=\"onItem(item)\"\n              [customClass]=\"'fr-breadcrumb__link'\"\n              [item]=\"item\"></edu-item-link>\n          }\n        </li>\n      }\n    </ol>\n  </div>\n</nav>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { ItemLinkComponent } from '../link/item-link.component';\nimport { DsfrBreadcrumbComponent } from './breadcrumb.component';\n\n@NgModule({\n  exports: [DsfrBreadcrumbComponent],\n  imports: [CommonModule, ItemLinkComponent, DsfrI18nPipe, DsfrBreadcrumbComponent],\n})\nexport class DsfrBreadcrumbModule {}\n","// -- Alignement -------------------------------------------------------------------------------------------------------\n\n/**\n * Définit les modes d'alignement supportés par le composant `dsfr-buttons-group`.\n */\nexport enum DsfrAlignConst {\n  /**\n   *  Aligne les boutons sur la gauche.\n   */\n  DEFAULT = 'default',\n\n  /**\n   * Aligne les boutons sur la droite.\n   */\n  RIGHT = 'right',\n\n  /**\n   * Les boutons ont les mêmes espacements entre eux.\n   */\n  BETWEEN = 'between',\n\n  /**\n   * Aligne les boutons au centre du conteneur.\n   */\n  CENTER = 'center',\n\n  /**\n   * Combine un alignement à droite avec une inversion du sens des boutons de droite à gauche.\n   */\n  REVERSE = 'reverse',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrAlignConst}.\n */\nexport type DsfrAlign = `${DsfrAlignConst}`;\n\n// -- Inline -----------------------------------------------------------------------------------------------------------\n\nimport { DsfrSizeConst } from '../../shared';\n\nexport enum DsfrInlineConst {\n  /**\n   * Mode vertical (par défaut).\n   */\n  NEVER = 'never',\n  /**\n   * Toujours en mode horizontal.\n   */\n  ALWAYS = 'always',\n  /**\n   * Mode horizontal à partir du point de rupture SM (576px).\n   */\n  FROM_SM = DsfrSizeConst.SM,\n  /**\n   * Mode horizontal à partir du point de rupture MD 576px.\n   */\n  FROM_MD = DsfrSizeConst.MD,\n  /**\n   * Mode horizontal à partir du point de rupture LG ().\n   */\n  FROM_LG = DsfrSizeConst.LG,\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrInlineConst}.\n */\nexport type DsfrInline = `${DsfrInlineConst}`;\n\n/**\n * Définit lees différents balisages HTML supportés par le groupe de boutons.\n */\nexport enum DsfrButtonsGroupMarkupConst {\n  /**\n   * Pour obtenir un conteneur `<DIV>`.\n   */\n  DIV = 'div',\n  /**\n   * Pour obtenir un conteneur `<UL>` (par défault).\n   */\n  UL = 'ul',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrButtonsGroupMarkupConst}.\n */\nexport type DsfrButtonsGroupMarkup = `${DsfrButtonsGroupMarkupConst}`;\n","import { CommonModule } from '@angular/common';\nimport {\n  afterRenderEffect,\n  booleanAttribute,\n  Component,\n  contentChildren,\n  ElementRef,\n  inject,\n  Input,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { DomUtils, DsfrPosition, DsfrPositionConst, DsfrSize, DsfrSizeConst } from '../../shared';\nimport { DsfrButtonComponent } from '../button';\nimport {\n  DsfrAlign,\n  DsfrAlignConst,\n  DsfrButtonsGroupMarkup,\n  DsfrButtonsGroupMarkupConst,\n  DsfrInline,\n  DsfrInlineConst,\n} from './buttons-group.model';\n\n@Component({\n  selector: 'dsfr-buttons-group',\n  templateUrl: './buttons-group.component.html',\n  styleUrls: ['./buttons-group.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule],\n})\nexport class DsfrButtonsGroupComponent {\n  /**\n   * Permet de basculer la disposition des boutons en mode horizontal.\n   * En mode vertical, mode par défaut, les boutons prennent 100% de la largeur du conteneur.\n   */\n  @Input() inline: DsfrInline = DsfrInlineConst.NEVER;\n\n  /**\n   * Placement des boutons en mode `inline` :\n   * - `default` : aligne les boutons sur la gauche.\n   * - `right` : aligne les boutons sur la droite\n   * - `between` : les boutons ont les mêmes espacements ente eux.\n   * - `center` : aligne les boutons au centre du conteneur.\n   * - `reverse` : les boutons se lisent de droite à gauche (implique nécessairement un placement à droite).\n   *\n   * 📌 N'a aucun effet en mode vertical.\n   */\n  @Input() alignment: DsfrAlign = DsfrAlignConst.DEFAULT;\n\n  /**\n   * Permet de mettre automatiquement tous les boutons d’un groupe à la même largeur.\n   * Cela permet une uniformité des boutons en mode horizontal.\n   * (en mode vertical, les boutons prennent 100% de la largeur du conteneur)\n   * Cette option peut être combinée avec la propriété d'alignement.\n   */\n  @Input({ transform: booleanAttribute }) equisized = false;\n\n  /**\n   * Taille des boutons du groupe.\n   */\n  @Input() buttonGroupSize: DsfrSize = DsfrSizeConst.MD;\n\n  /**\n   * Type de balise HTML pour la liste du groupe de boutons.\n   *\n   * 📌 Cette propriété ne doit pas être modifiée post-initialisation (i.e. dynamiquement).\n   */\n  /*\n   * Note technique : Le fait de modifier le DOM pour encapsuler les boutons dans des balises <li> nous empêche\n   * aujourd'hui de supporter la modification dynamique du type de balisage. Passer d'un conteneur <ul> à <div> ne\n   * pose pas de problème mais l'inverse produit une structure HTML non valide - les <li> positionnés par un appel à\n   * la méthode `surroundButtonsWithLi` effectué au niveau du setter de `groupMarkup` se verrait effacés par la passe\n   * de rendu Angular qui remplace la <div> par un <ul>. Il serait possible d'invoquer la méthode `surroundButtonsWithLi`\n   * en utilisant un `requestAnimationFrame` mais cette approche nous semble être trop hasardeuse au regard du cas\n   * d'usage (changer dynamiquement la strucure HTML d'un groupe de boutons) qui ne semble pas pertinent.\n   */\n  @Input() groupMarkup: DsfrButtonsGroupMarkup = DsfrButtonsGroupMarkupConst.UL;\n\n  protected readonly DsfrButtonsGroupMarkup = DsfrButtonsGroupMarkupConst;\n\n  private buttonsElements = contentChildren(DsfrButtonComponent, { read: ElementRef });\n  private buttons = contentChildren(DsfrButtonComponent);\n\n  private _iconPosition: DsfrPosition | undefined;\n  private readonly _elementRef = inject(ElementRef);\n\n  constructor() {\n    afterRenderEffect(() => {\n      this.surroundButtonsWithLi();\n    });\n  }\n\n  /**\n   * Taille des boutons du groupe.\n   *\n   * @deprecated since(1.15.0) utiliser 'buttonGroupSize' à la place\n   */\n  get size(): DsfrSize {\n    return this.buttonGroupSize;\n  }\n\n  get iconPosition(): DsfrPosition | undefined {\n    return this._iconPosition;\n  }\n\n  /**\n   * Taille des boutons du groupe.\n   *\n   * @deprecated since(1.15.0) utiliser 'buttonGroupSize' à la place\n   */\n  @Input() set size(value: DsfrSize) {\n    this.buttonGroupSize = value;\n  }\n\n  /**\n   * Positionnement (gauche ou droite) au niveau du groupe des icônes dans les boutons qui\n   * contiennent à la fois une icône et un label.\n   */\n  @Input() set iconPosition(value: DsfrPosition) {\n    this._iconPosition = value;\n    this.updateButtonsIconPosition();\n  }\n\n  /**\n   * Cette méthode calcule les styles du composant en évitant les magic strings.\n   */\n  protected getClasses(): string[] {\n    let classes: string[] = [];\n\n    // Inline class\n    switch (this.inline) {\n      case 'always':\n        classes.push('fr-btns-group--inline');\n        break;\n      case 'LG':\n        classes.push('fr-btns-group--inline-lg');\n        break;\n      case 'MD':\n        classes.push('fr-btns-group--inline-md');\n        break;\n      case 'SM':\n        classes.push('fr-btns-group--inline-sm');\n        break;\n\n      default:\n        break;\n    }\n\n    // Alignment class\n    switch (this.alignment) {\n      case DsfrAlignConst.CENTER:\n        classes.push('fr-btns-group--center');\n        break;\n      case DsfrAlignConst.BETWEEN:\n        classes.push('fr-btns-group--between');\n        break;\n      case DsfrAlignConst.RIGHT:\n        classes.push('fr-btns-group--right');\n        break;\n      case DsfrAlignConst.REVERSE:\n        classes.push('fr-btns-group--inline-reverse', 'fr-btns-group--right');\n        break;\n\n      default:\n        break;\n    }\n\n    // Size class\n    if (this.buttonGroupSize === DsfrSizeConst.SM) {\n      classes.push('fr-btns-group--sm');\n    } else if (this.buttonGroupSize === DsfrSizeConst.LG) {\n      classes.push('fr-btns-group--lg');\n    }\n\n    // Equisized class\n    if (this.equisized) {\n      classes.push('fr-btns-group--equisized');\n    }\n\n    // IconPosition class\n    if (this._iconPosition) {\n      classes.push(\n        this._iconPosition === DsfrPositionConst.LEFT ? 'fr-btns-group--icon-left' : 'fr-btns-group--icon-right',\n      );\n    }\n\n    return classes;\n  }\n\n  /* Entoure chaque composant bouton par une balise <li> si nécessaire */\n  private surroundButtonsWithLi(): void {\n    if (this.groupMarkup === DsfrButtonsGroupMarkupConst.UL) {\n      DomUtils.surroundElementsWithLi(this._elementRef, this.buttonsElements());\n    }\n  }\n\n  /** On force la position des icônes des boutons. */\n  private updateButtonsIconPosition(): void {\n    this.buttons().forEach((b) => (b.iconPosition = this._iconPosition));\n  }\n}\n","@if (groupMarkup === DsfrButtonsGroupMarkup.DIV) {\n  <div class=\"fr-btns-group\" [ngClass]=\"getClasses()\">\n    <ng-container *ngTemplateOutlet=\"buttonsTemplate\"></ng-container>\n  </div>\n} @else {\n  <ul class=\"fr-btns-group\" [ngClass]=\"getClasses()\">\n    <ng-container *ngTemplateOutlet=\"buttonsTemplate\"></ng-container>\n  </ul>\n}\n\n<ng-template #buttonsTemplate>\n  <ng-content></ng-content>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrButtonsGroupComponent } from './buttons-group.component';\n\n@NgModule({\n  exports: [DsfrButtonsGroupComponent],\n  imports: [CommonModule, DsfrButtonsGroupComponent],\n})\nexport class DsfrButtonsGroupModule {}\n","/**\n * Définit lees différents balisages HTML supportés par la description du callout.\n */\nexport enum DsfrCalloutDescMarkupConst {\n  /**\n   * Pour obtenir un conteneur `<DIV>`.\n   */\n  DIV = 'div',\n  /**\n   * Pour obtenir un conteneur `<P>` par défault.\n   */\n  P = 'p',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrCalloutDescMarkupConst}.\n */\nexport type DsfrCalloutDescMarkup = `${DsfrCalloutDescMarkupConst}`;\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { DsfrHeadingLevel, DsfrHeadingLevelConst } from '../../shared';\nimport { DsfrCalloutDescMarkup, DsfrCalloutDescMarkupConst } from './callout.model';\n\n@Component({\n  selector: 'dsfr-callout',\n  templateUrl: './callout.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule],\n})\nexport class DsfrCalloutComponent {\n  /**\n   * Titre du call out. Si inexistant, pas de balise titre.\n   */\n  @Input() heading?: string;\n\n  /**\n   * Le niveau de titre devant être utilisé.\n   * Valeurs supportées : H2, H3, H4, H5, H6 ou P si vous ne souhaitez pas positionner un titre de section.\n   */\n  @Input() headingLevel: DsfrHeadingLevel = DsfrHeadingLevelConst.H3;\n\n  /**\n   * Indique la classe d'icône à utiliser en haut à gauche. Ex. `fr-icon-information-line`.\n   */\n  @Input() icon?: string;\n\n  /**\n   * Permet de personnaliser la couleur du tag. Il faut donner la class exact (ex : fr-callout--green-emeraude) que vous trouverez\n   * [ici](https://www.systeme-de-design.gouv.fr/version-courante/fr/fondamentaux/couleurs-palette#couleurs-illustratives)\n   *  */\n  @Input() customClass?: string;\n\n  /**\n   * Type de balise HTML pour le conteneur de la description.\n   */\n  @Input() descriptionMarkup: DsfrCalloutDescMarkup = DsfrCalloutDescMarkupConst.P;\n\n  protected readonly DsfrCalloutDescMarkup = DsfrCalloutDescMarkupConst;\n\n  /**\n   * Détermine la liste des classes CSS à positioner sur le parent.\n   * @returns un tableau de classes CSS\n   *\n   * @internal\n   */\n  getClasses(): string[] {\n    let results: string[] = ['fr-callout'];\n    if (this.icon) {\n      results = results.concat(this.icon.trim().split(/\\s+/));\n    }\n    if (this.customClass) {\n      results = results.concat(this.customClass.trim().split(/\\s+/));\n    }\n\n    return results;\n  }\n}\n","<div [class]=\"getClasses()\">\n  @if (heading) {\n    @switch (headingLevel) {\n      @case ('none') {\n        <p class=\"fr-callout__title\" [innerHTML]=\"heading\"></p>\n      }\n      @case ('H2') {\n        <h2 class=\"fr-callout__title\" [innerHTML]=\"heading\"></h2>\n      }\n      @case ('H4') {\n        <h4 class=\"fr-callout__title\" [innerHTML]=\"heading\"></h4>\n      }\n      @case ('H5') {\n        <h5 class=\"fr-callout__title\" [innerHTML]=\"heading\"></h5>\n      }\n      @case ('H6') {\n        <h6 class=\"fr-callout__title\" [innerHTML]=\"heading\"></h6>\n      }\n      @default {\n        <h3 class=\"fr-callout__title\" [innerHTML]=\"heading\"></h3>\n      }\n    }\n  }\n  <!-- Description obligatoire -->\n  @if (descriptionMarkup === DsfrCalloutDescMarkup.DIV) {\n    <div class=\"fr-callout__text\">\n      <ng-container *ngTemplateOutlet=\"descTemplate\"></ng-container>\n    </div>\n  } @else {\n    <p class=\"fr-callout__text\">\n      <ng-container *ngTemplateOutlet=\"descTemplate\"></ng-container>\n    </p>\n  }\n</div>\n\n<ng-template #descTemplate>\n  <ng-content></ng-content>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrCalloutComponent } from './callout.component';\n\n@NgModule({\n  exports: [DsfrCalloutComponent],\n  imports: [CommonModule, DsfrCalloutComponent],\n})\nexport class DsfrCalloutModule {}\n","/**\n * Retourne la classe dsfr correspondant au ratio\n */\nexport function ratioClass(ratio: string | undefined): Record<string, boolean> {\n  return {\n    'fr-ratio-32x9': ratio === '16:9/2',\n    'fr-ratio-16x9': ratio === '16:9',\n    'fr-ratio-3x2': ratio === '3:2',\n    'fr-ratio-4x3': ratio === '4:3',\n    'fr-ratio-1x1': ratio === '1:1',\n    'fr-ratio-3x4': ratio === '3:4',\n    'fr-ratio-2x3': ratio === '2:3',\n  };\n}\n","import { DsfrNavigation } from '../../shared';\n\n/**\n *  Décrit l'événement émis lors d'une sélection d'un tag (si l'id est renseigné).\n *\n * @since 1.4.0\n */\nexport interface DsfrTagEvent {\n  /**\n   * L'identifiant du tag.\n   */\n  id: string;\n  /**\n   * Le libellé du tag.\n   */\n  label: string;\n  /**\n   * La valeur de l'hyperlien (exclusif avec `route`).\n   */\n  link: string;\n  /**\n   * La valeur de la route (exclusif avec `link`).\n   */\n  route: string;\n  /**\n   * Indique l'état de sélection.\n   */\n  selected: boolean;\n}\n\n/**\n * Décrit le modèle de présentation d'un Tag.\n */\nexport interface DsfrTag extends Omit<DsfrNavigation, 'linkTarget'> {\n  /**\n   * ID du tag, optionnel.\n   *\n   * @since 1.3.2\n   */\n  id?: string;\n\n  /**\n   * Permet de personnaliser la couleur du tag.\n   */\n  customClass?: string;\n\n  /**\n   * Permet d'avoir un tag cliquable disabled.\n   *\n   * @since 1.3\n   */\n  disabled?: boolean;\n\n  /**\n   * Icône du tag.\n   */\n  icon?: string;\n\n  /**\n   * Libelle du tag.\n   */\n  label: string;\n\n  /**\n   * Lien du tag à renseigner si le mode est 'clickable'.\n   */\n  link?: string;\n\n  /**\n   * Mode spécifique : default / selectable / clickable / deletable.\n   */\n  mode?: DsfrTagMode;\n\n  /** État selected du tag. */\n  selected?: boolean;\n\n  /**\n   * Permet de basculer le tag en taille réduite\n   */\n  small?: boolean;\n\n  /**\n   * Attribut aria-label du tag.\n   */\n  ariaLabel?: string;\n\n  /**\n   * Tooltip du tag.\n   */\n  //TODO: à déprécier au profit d'un input tooltipMessage (pour des raisons de consistence)\n  title?: string;\n}\n\n/**\n * Définit les modes d'affichage supporté pour un composant `Tag`.\n */\nexport enum DsfrTagModeConst {\n  /**\n   * Par défaut, le tag ne peut pas changer d'état ni accepter aucun lien.\n   */\n  DEFAULT = 'default',\n\n  /**\n   * Un tag cliquable permet de débrancher sur un lien ou un path Angular.\n   */\n  CLICKABLE = 'clickable',\n\n  /**\n   * Un tag sélectionnable possède un état de sélection.\n   */\n  SELECTABLE = 'selectable',\n  /**\n   * Un tag supprimable.\n   */\n  DELETABLE = 'deletable',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrTagModeConst}.\n */\nexport type DsfrTagMode = `${DsfrTagModeConst}`;\n","import { CommonModule } from '@angular/common';\nimport {\n  booleanAttribute,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  Output,\n  SimpleChanges,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { NavigationExtras } from '@angular/router';\nimport { DsfrI18nPipe, DsfrLinkTarget } from '../../shared';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrTag, DsfrTagEvent, DsfrTagMode, DsfrTagModeConst } from './tag.model';\n\n@Component({\n  selector: 'dsfr-tag',\n  templateUrl: './tag.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, DsfrLinkComponent, DsfrI18nPipe],\n})\nexport class DsfrTagComponent implements Omit<DsfrTag, 'title'>, OnChanges {\n  /**\n   * ID du tag, optionnel.\n   */\n  @Input() tagId?: string;\n\n  /**\n   * Permet de personnaliser la couleur du tag, pour les tags sélectionnables uniquement.\n   * Il faut donner la classe exacte (ex : `fr-tag--green-emeraude`). cf. [Couleurs](https://www.systeme-de-design.gouv.fr/version-courante/fr/fondamentaux/couleurs-palette#couleurs-illustratives)\n   */\n  @Input() customClass?: string;\n\n  /**\n   * Permet d'avoir un tag cliquable disabled.\n   *\n   * @since 1.3\n   */\n  @Input({ transform: booleanAttribute }) disabled: boolean = false;\n\n  /** Classe de l'icône (cf. DSFR TAG). */\n  @Input() icon?: string; // undefined car peut provenir d'un DsfrTag.icon dans le cas d'un groupe\n\n  /** Libelle du tag. */\n  @Input({ required: true }) label!: string;\n\n  /** Mode hyperlien externe, exclusif avec les propriétés `route` et `routePath`. */\n  @Input() link?: string;\n\n  /** Target du lien. Target par défaut de l'application si la propriété est non renseignée. */\n  @Input() linkTarget?: DsfrLinkTarget;\n\n  /**\n   * Mode action. La route spécifié sera retransmise dans l'événement lors de la sélection.\n   * Usage exclusif avec les propriétés `link` et `routePath`.\n   */\n  @Input() route?: string;\n\n  /** Active la directive RouterLink. Exclusif avec les propriétés `link` et `route`. */\n  @Input() routePath?: string | string[];\n\n  /** En usage conjint avec routePath (activation RouterLink) : classe utilisée pour la directive routerLink active. */\n  @Input() routerLinkActive?: string | string[];\n\n  /** En usage conjint avec routePath (activation RouterLink) : valeurs additionnelles de navigation pour le routerLink (queryParams, state etc.) */\n  @Input() routerLinkExtras?: NavigationExtras;\n\n  /** État d'un tag 'selectable'. */\n  // 1.3 Non automatiquement modifié lorsque l'état du bouton 'aria-pressed' change, 'aria-pressed' est géré\n  // le JavaScript du DSFR, d'où la gestion de l'événement '(click)' pour synchroniser 'selected' et 'aria-pressed'.\n  @Input() selected = false;\n\n  /** Taille du tag (small ou médium). */\n  @Input() small = false;\n\n  /** Donne l'attribut title pour les liens. */\n  @Input() tooltipMessage?: string;\n\n  @Input() ariaLabel?: string;\n\n  /**\n   * Événement émis suite au click sur un tag, le contenu de l'événement est soit le lien, la route ou à défaut le label du tag.\n   * @since 1.4.0, si l'id du tag est renseigné, l'événement émet un objet de type DsfrTagEvent.\n   */\n  @Output() tagSelect = new EventEmitter<string | DsfrTagEvent>();\n\n  /** @internal */\n  ariaPressed: boolean | undefined;\n\n  /** Mode spécifique : default / selectable / clickable / deletable (les modes exclusifs entre eux). */\n  private _mode: DsfrTagMode | undefined;\n\n  private _id: string | undefined;\n\n  get mode(): DsfrTagMode | undefined {\n    if (!this._mode) {\n      if (this.selected) this._mode = DsfrTagModeConst.SELECTABLE;\n      else if (this.link || this.route || this.routePath) this._mode = DsfrTagModeConst.CLICKABLE;\n    }\n    return this._mode;\n  }\n\n  /** Mode spécifique : default / selectable / clickable / deletable (les modes exclusifs entre eux). */\n  @Input() set mode(value: DsfrTagMode) {\n    this._mode = value;\n  }\n\n  /**\n   * Attention en cas d'utilisation de cet attribut, il doit être utilisé en tant que propriété et non en attribut,\n   * ex. [id]=\"'monid'\"\n   *\n   * @deprecated (since 1.5) utiliser tagId.\n   */\n  @Input() set id(value: string) {\n    if (value) {\n      this._id = value;\n      this.tagId ??= this._id;\n    }\n  }\n\n  /**\n   * Activtion du router Angular.\n   *\n   * routerLink provoque un bug accessibilité sur la navigation au clavier (ajout d'un tabindex=0)\n   *\n   * @deprecated (since 1.11.5) utiliser `routePath` à la place.\n   **/\n  @Input() set routerLink(value: string | string[] | undefined) {\n    if (value) this.routePath = value;\n  }\n\n  ngOnChanges({ selected }: SimpleChanges) {\n    // On ne se préoccupe pas trop du mode qui à l'initialisation est 'default' (comme ça chacun porte ses responsabilités)\n    if (selected) {\n      // On synchronise l'attribut 'aria-pressed' avec la nouvelle valeur de selected\n      this.ariaPressed = this.selected || false; // || false au cas où on reçoit undefined ou null\n      // On n'émet pas d'événement\n    }\n  }\n\n  /**\n   * Valeur pour le 'href' dans le template.\n   * @internal\n   */\n  getHrefValue(): string | undefined {\n    return this.route || this.link;\n  }\n\n  /**\n   * Tag `selectable` : événement `tagSelect()` avec le contenu de du lien ou à défaut son label.\n   * @internal\n   */\n  onSelectable() {\n    this.selected = !this.selected; // @since 1.3.2\n    this.emitTagSelect(this.getHrefValue() || this.label);\n  }\n\n  /**\n   * Événement (click) sur un lien.\n   * @internal\n   */\n  onClickable(event: Event) {\n    if (this.route) {\n      event.preventDefault();\n      this.emitTagSelect(this.route);\n    }\n  }\n\n  /**\n   * Tag `selectable` : événement `tagSelect()` avec le contenu de `link` ou à défaut son `label`.\n   * @internal\n   */\n  onDeletable() {\n    this.emitTagSelect(this.getHrefValue() || this.label);\n  }\n\n  /** @internal */\n  getSelectableClasses(): string[] {\n    return this.getDefaultClasses();\n  }\n\n  /** @internal */\n  getClickableClasses(): string {\n    const classes = this.getDefaultClasses();\n    if (this.customClass) classes.push(this.customClass);\n    return classes.join(' ');\n  }\n\n  /** @internal */\n  getNotClickableClasses(): string[] {\n    return this.getDefaultClasses();\n  }\n\n  private emitTagSelect(value: string) {\n    if (!this.tagId) this.tagSelect.emit(value);\n    else {\n      this.tagSelect.emit({\n        id: this.tagId,\n        label: this.label,\n        link: this.link ?? '',\n        route: this.route ?? '',\n        selected: this.selected,\n      });\n    }\n  }\n\n  private getDefaultClasses(): string[] {\n    const classes: string[] = ['fr-tag'];\n\n    if (this.small) classes.push('fr-tag--sm');\n    if (this.icon) {\n      classes.push('fr-tag--icon-left');\n      classes.push(this.icon);\n    }\n    // Un tag non cliquable ne peut pas avoir de custom class\n\n    return classes;\n  }\n}\n","@switch (mode) {\n  <!-- Tag supprimable -->\n  @case ('deletable') {\n    <button\n      type=\"button\"\n      [attr.id]=\"tagId || null\"\n      [class]=\"{\n        'fr-tag': true,\n        'fr-tag--dismiss': true,\n        'fr-tag--sm': small,\n      }\"\n      [attr.title]=\"tooltipMessage || null\"\n      [attr.aria-label]=\"ariaLabel ? ariaLabel : label + ', ' + ('tag.removeFilter' | dsfrI18n) + ' ' + label\"\n      [disabled]=\"disabled || null\"\n      (click)=\"onDeletable()\">\n      {{ label }}<span class=\"fr-sr-only\">&nbsp;({{ 'tag.removable' | dsfrI18n }})</span>\n    </button>\n  }\n  <!-- Tag sélectionnable -->\n  @case ('selectable') {\n    <button\n      type=\"button\"\n      [attr.id]=\"tagId || null\"\n      [ngClass]=\"getSelectableClasses()\"\n      [attr.class]=\"icon || null\"\n      [attr.title]=\"tooltipMessage || null\"\n      [attr.aria-label]=\"ariaLabel ? ariaLabel : ('tag.selectFilter' | dsfrI18n) + ' ' + label\"\n      [attr.aria-pressed]=\"ariaPressed\"\n      (click)=\"onSelectable()\"\n      [disabled]=\"disabled || null\">\n      {{ label }}\n      <span class=\"fr-sr-only\"\n        >&nbsp;({{ selected ? ('tag.selected' | dsfrI18n) : ('tag.unselected' | dsfrI18n) }})</span\n      >\n    </button>\n  }\n  <!-- Tag cliquable -->\n  @case ('clickable') {\n    <dsfr-link\n      [linkId]=\"tagId\"\n      [customClass]=\"getClickableClasses()\"\n      [tooltipMessage]=\"tooltipMessage\"\n      [ariaLabel]=\"ariaLabel ? ariaLabel : label\"\n      (click)=\"onClickable($event)\"\n      [link]=\"link\"\n      [linkTarget]=\"linkTarget\"\n      [route]=\"route\"\n      [routePath]=\"routePath\"\n      [routerLinkActive]=\"routerLinkActive ?? ''\"\n      [routerLinkExtras]=\"routerLinkExtras\"\n      [label]=\"label\"\n      [disabled]=\"disabled\">\n    </dsfr-link>\n  }\n  <!-- Tag non cliquable -->\n  @default {\n    <p [attr.id]=\"tagId || null\" [ngClass]=\"getNotClickableClasses()\" [attr.title]=\"tooltipMessage || null\">\n      {{ label }}\n    </p>\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrTagComponent } from './tag.component';\n\n@NgModule({\n  exports: [DsfrTagComponent],\n  imports: [CommonModule, DsfrLinkComponent, DsfrI18nPipe, DsfrTagComponent],\n})\nexport class DsfrTagModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  contentChildren,\n  effect,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { DomUtils } from '../../shared';\nimport { DsfrTag, DsfrTagComponent, DsfrTagEvent, DsfrTagMode } from '../tag';\n\n@Component({\n  selector: 'dsfr-tags-group',\n  templateUrl: './tags-group.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, DsfrTagComponent],\n})\nexport class DsfrTagsGroupComponent {\n  /** Modèle de présentation des tags. */\n  @Input() tags: DsfrTag[] = [];\n\n  /** Mode du groupe de tags (deletable / clickable / selectable). Surcharge le mode par tag. */\n  @Input() mode?: DsfrTagMode;\n\n  /**\n   * Événement émis suite au click sur un tag, le contenu de l'événement est soit le link, la route ou à défaut le label du tag.\n   * @since 1.4.0, si l'id du tag est renseigné, l'événement émet un objet de type DsfrTagEvent.\n   */\n  @Output() tagSelect = new EventEmitter<string | DsfrTagEvent>();\n\n  private tagsElements = contentChildren(DsfrTagComponent, { read: ElementRef });\n  private tagsComponents = contentChildren(DsfrTagComponent);\n  private readonly _elementRef = inject(ElementRef);\n\n  constructor() {\n    effect(() => {\n      this.setGroupeMode();\n      this.surroundTagsWithLi();\n    });\n  }\n\n  /**\n   * Surcharge le mode de chaque tag avec le mode du groupe en cas d'utilisation de ng-content.\n   * @internal\n   */\n  setGroupeMode() {\n    if (this.mode && this.tagsComponents()) {\n      this.tagsComponents().map((t) => (t.mode = this.mode ?? 'default'));\n    }\n  }\n\n  /** @internal */\n  onTagSelect(event: string | DsfrTagEvent) {\n    this.tagSelect.emit(event);\n  }\n\n  /* Entoure chaque composant tag par une balise <li> si nécessaire */\n  private surroundTagsWithLi(): void {\n    DomUtils.surroundElementsWithLi(this._elementRef, this.tagsElements());\n  }\n}\n","<ul class=\"fr-tags-group\">\n  @for (tag of tags; track tag.id ?? tag.label) {\n    <li>\n      <dsfr-tag\n        [tagId]=\"tag.id ?? ''\"\n        [customClass]=\"tag.customClass ?? ''\"\n        [icon]=\"tag.icon\"\n        [label]=\"tag.label\"\n        [ariaLabel]=\"tag.ariaLabel ?? ''\"\n        [link]=\"tag.link ?? ''\"\n        [mode]=\"mode ? mode : (tag.mode ?? 'default')\"\n        [route]=\"tag.route ?? ''\"\n        [selected]=\"tag.selected ?? false\"\n        [small]=\"tag.small ?? false\"\n        [tooltipMessage]=\"tag.title ?? ''\"\n        (tagSelect)=\"onTagSelect($event)\"></dsfr-tag>\n    </li>\n  }\n  <ng-content></ng-content>\n</ul>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrTagModule } from '../tag';\nimport { DsfrTagsGroupComponent } from './tags-group.component';\n\n@NgModule({\n  exports: [DsfrTagsGroupComponent],\n  imports: [CommonModule, DsfrTagModule, DsfrTagsGroupComponent],\n})\nexport class DsfrTagsGroupModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  ContentChild,\n  EventEmitter,\n  Input,\n  Output,\n  TemplateRef,\n  ViewEncapsulation,\n  booleanAttribute,\n  inject,\n} from '@angular/core';\nimport { DsfrI18nService, DsfrSizeConst, LinkDownloadComponent, SvgIconComponent } from '../../shared';\nimport { BasePanelComponent } from '../../shared/components/base-panel/base-panel.component';\nimport { DsfrPanelBackgroundConst, DsfrPanelBorderConst } from '../../shared/components/base-panel/base-panel.model';\nimport { ratioClass } from '../../shared/utils/ratio-utils';\nimport { DsfrBadgeComponent } from '../badge';\nimport { DsfrBadgesGroupComponent } from '../badges-group';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrTagComponent } from '../tag';\nimport { DsfrTagsGroupComponent } from '../tags-group';\nimport { DsfrImageFit, DsfrImageRatio, DsfrImageType } from './card.model';\n\ntype ProportionMediaInfo = '1tier/2tier' | '40%/60%' | 'moitié/moitié';\nexport enum DsfrProportionConst {\n  TIER = '1tier/2tier',\n  DEFAULT = '40%/60%',\n  HALF = 'moitié/moitié',\n}\n\n@Component({\n  selector: 'dsfr-card',\n  templateUrl: './card.component.html',\n  styleUrls: ['./card.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    CommonModule,\n    DsfrBadgesGroupComponent,\n    DsfrBadgeComponent,\n    DsfrTagsGroupComponent,\n    DsfrTagComponent,\n    SvgIconComponent,\n    DsfrLinkComponent,\n    LinkDownloadComponent,\n  ],\n})\nexport class DsfrCardComponent extends BasePanelComponent {\n  @Input({ transform: booleanAttribute }) badgesOnMedia: boolean = false;\n\n  /**\n   * Le détail, optionnel.\n   */\n  @Input() detail?: string;\n\n  /** Icône de la zone de détail, optionnel. */\n  @Input() detailIcon?: string;\n\n  /** Icône devant le détail situé au bas de la carte, optionnel. */\n  @Input() detailBottomIcon?: string;\n\n  /**\n   * Zone d'actions, composée de bouton ou de liens, optionnelle (mais incompatible avec la\n   * deuxième zone de détail). Si activée elle affiche le slot avec sélecteur `footer`\n   */\n  @Input() hasFooter = false;\n\n  /** Texte alternatif d'une image à utiliser uniquement si l'image à une information à passer. */\n  @Input() imageAlt: string = '';\n\n  /**\n   * Selon la valeur utilisée pour 'imageFit', l'élément peut être rogné, mis à l'échelle ou étiré, afin de remplir\n   * la boîte qui le contient.\n   */\n  @Input() imageFit?: DsfrImageFit;\n\n  /** Url de l'image de l'entête, optionnel. */\n  @Input() imagePath?: string;\n\n  /** Ratio de l'image. */\n  @Input() imageRatio?: DsfrImageRatio;\n\n  /** En mode horizontal: proportion de l'image par rapport au contenu en horizontal (par défaut: 40%/60%). */\n  @Input() horizontalProportion: DsfrProportionConst = DsfrProportionConst.DEFAULT;\n\n  /**\n   * Supprime l'icône du lien.\n   *\n   * @since 1.12\n   */\n  @Input() noIcon = false;\n\n  /**\n   * Type d'illustration\n   * - `img` : pour l'utilisation d'une balise '<img>'.\n   * - `svg` : pour l'utilisation de '<edu-svg-icon>'.\n   * Si c'est le cas, `@ImagePath` devient le path du fichier `sprite.svg` et la concaténation de l'id du svg à afficher.\n   */\n  @Input() imageType: DsfrImageType = 'img';\n\n  /** Remplace le lien du bouton de download par un markup de bouton */\n  @Input() isDownloadButton = false;\n\n  /** Signale quand la carte est sélectionnée. */\n  @Output() readonly cardSelect: EventEmitter<string> = new EventEmitter();\n\n  /** Template optionnel de la description. Remplace description.  */\n  @ContentChild('descriptionTemplate', { static: true }) descriptionTemplate?: TemplateRef<void>;\n\n  protected readonly i18n = inject(DsfrI18nService);\n\n  /** @internal */\n  protected readonly DsfrBorder = DsfrPanelBorderConst;\n  /** @internal */\n  protected readonly DsfrBackground = DsfrPanelBackgroundConst;\n  /** @internal */\n  protected readonly DsfrSize = DsfrSizeConst;\n  /** @internal */\n  protected readonly DsfrProportionMediaInfo = DsfrProportionConst;\n\n  public constructor() {\n    super();\n  }\n\n  protected get cardClasses(): Record<string, boolean> {\n    return {\n      'fr-card': true,\n\n      'fr-card--horizontal': this.horizontal,\n      'fr-card--horizontal-half': this.horizontal && this.horizontalProportion === DsfrProportionConst.HALF,\n      'fr-card--horizontal-tier': this.horizontal && this.horizontalProportion === DsfrProportionConst.TIER,\n\n      'fr-card--download': this.download,\n      'fr-enlarge-link': this.enlargeLink && this.hasLink() && !this.hasFooter,\n      'fr-enlarge-button': this.enlargeButton || this.isDownloadButton,\n\n      'fr-card--no-arrow': this.hasFooter,\n      'fr-card--no-icon': this.noIcon,\n\n      'fr-card--no-border': this.customBorder === DsfrPanelBorderConst.NO_BORDER,\n      'fr-card--shadow': this.customBorder === DsfrPanelBorderConst.SHADOW,\n\n      'fr-card--grey': this.customBackground === DsfrPanelBackgroundConst.GREY,\n      'fr-card--no-background': this.customBackground === DsfrPanelBackgroundConst.TRANSPARENT,\n\n      'fr-card--sm': this.panelSize === DsfrSizeConst.SM,\n      'fr-card--lg': this.panelSize === DsfrSizeConst.LG,\n\n      'fr-card--has-footer': this.hasFooter,\n      'fr-card--badges-on-media': this.badgesOnMedia,\n    };\n  }\n\n  protected get imageRatioClass(): Record<string, boolean> {\n    return ratioClass(this.imageRatio);\n  }\n\n  /** @internal */\n  onLinkSelect(): void {\n    // on propage l'output, pas besoin de gérer ici le preventDefault, c'est géré en amont\n    if (this.route) {\n      this.cardSelect.emit(this.route);\n    }\n  }\n}\n","<div [class]=\"cardClasses\">\n  <!-- Card body -->\n  <div class=\"fr-card__body\">\n    <div class=\"fr-card__content\">\n      <!-- Titre du contenu -->\n      <ng-container *ngTemplateOutlet=\"cardHeadingTemplate\"></ng-container>\n\n      <!-- Détail du haut -->\n      @if (detail || (tags && tags.length) || (badges && badges.length && !badgesOnMedia)) {\n        <div class=\"fr-card__start\">\n          @if (tags && tags.length === 1) {\n            <dsfr-tag\n              [label]=\"tags[0]?.label ?? ''\"\n              [tagId]=\"tags[0]?.id ?? ''\"\n              [link]=\"tags[0]?.link ?? ''\"\n              [route]=\"tags[0]?.route ?? ''\"\n              [selected]=\"tags[0]?.selected ?? false\"></dsfr-tag>\n          } @else if (tags && tags.length > 1) {\n            <dsfr-tags-group [tags]=\"tags\"></dsfr-tags-group>\n          }\n          @if (badges && badges.length && !badgesOnMedia) {\n            @if (badges.length === 1) {\n              <dsfr-badge\n                [label]=\"badges[0]?.label ?? ''\"\n                [severity]=\"badges[0]?.severity\"\n                [noIcon]=\"badges[0]?.noIcon ?? false\"\n                [customClass]=\"badges[0]?.customClass ?? ''\"></dsfr-badge>\n            } @else if (badges.length > 1) {\n              <dsfr-badges-group [badges]=\"badges\"></dsfr-badges-group>\n            }\n          }\n\n          @if (detail || detailIcon) {\n            <p class=\"fr-card__detail\" [ngClass]=\"detailIcon\">\n              {{ detail }}\n            </p>\n          }\n        </div>\n      }\n\n      <!-- Description -->\n      @if (description) {\n        @if (descriptionMarkup === 'p') {\n          <p class=\"fr-card__desc\" [innerHTML]=\"description\"></p>\n        } @else {\n          <div class=\"fr-card__desc\" [innerHTML]=\"description\"></div>\n        }\n      }\n\n      @if (!description && descriptionTemplate) {\n        @if (descriptionMarkup === 'p') {\n          <p class=\"fr-card__desc\"><ng-container *ngTemplateOutlet=\"descriptionTemplate\"></ng-container></p>\n        } @else {\n          <div class=\"fr-card__desc\"><ng-container *ngTemplateOutlet=\"descriptionTemplate\"></ng-container></div>\n        }\n      }\n\n      <!-- Détail du bas -->\n      @if (detailBottom || detailBottomIcon || (downloadAssessFile && download)) {\n        <div class=\"fr-card__end\">\n          <p class=\"fr-card__detail\" [ngClass]=\"detailBottomIcon\">\n            {{ detailBottom }}\n          </p>\n        </div>\n      }\n    </div>\n\n    <!-- Card footer -->\n    @if (hasFooter) {\n      <div class=\"fr-card__footer\">\n        <ng-content select=\"[footer]\"></ng-content>\n      </div>\n    }\n  </div>\n\n  <!-- Card header -->\n  @if (imagePath) {\n    <div class=\"fr-card__header\">\n      <div class=\"fr-card__img\">\n        @if (imageType === 'img') {\n          <img\n            [src]=\"imagePath\"\n            class=\"fr-responsive-img\"\n            [class]=\"imageRatioClass\"\n            [ngStyle]=\"{ 'object-fit': imageFit }\"\n            [attr.alt]=\"imageAlt\" />\n        }\n        <!-- L’alternative de l’image (attribut alt) doit toujours être présente, sa valeur peut-être vide (image n’apportant pas de sens supplémentaire au contexte) ou non (porteuse de texte ou apportant du sens) selon votre contexte -->\n        @if (imageType === 'svg') {\n          <edu-svg-icon [iconPath]=\"imagePath\" [imageRatio]=\"imageRatio\"></edu-svg-icon>\n        }\n      </div>\n      @if (badges && badgesOnMedia) {\n        <dsfr-badges-group [badges]=\"badges\"></dsfr-badges-group>\n      }\n    </div>\n  }\n</div>\n\n<!-- Templates ----------------------------------------------------------------------------------------------------- -->\n\n<ng-template #cardHeadingTemplate>\n  @switch (headingLevel) {\n    @case ('H2') {\n      <h2 class=\"fr-card__title\">\n        <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n      </h2>\n    }\n    @case ('H4') {\n      <h4 class=\"fr-card__title\">\n        <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n      </h4>\n    }\n    @case ('H5') {\n      <h5 class=\"fr-card__title\">\n        <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n      </h5>\n    }\n    @case ('H6') {\n      <h6 class=\"fr-card__title\">\n        <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n      </h6>\n    }\n    @default {\n      <h3 class=\"fr-card__title\">\n        <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n      </h3>\n    }\n  }\n</ng-template>\n\n<ng-template #headingTemplate>\n  <!-- Definition des templates directement ici pour une projection du slot correcte (pas de else)-->\n\n  <!-- Titre simple -------------------------------------------------------->\n  @if (!hasLink()) {\n    @if (heading) {\n      <!-- FIXME V2 supprimer le innerHtml-et le span associé -->\n      <span [innerHTML]=\"heading\"></span>\n    } @else {\n      <ng-container *ngTemplateOutlet=\"headingTemplateSlot\"></ng-container>\n    }\n  }\n\n  <!-- Lien  --------------------------------------------------------------->\n  @if (hasLink()) {\n    <!-- Lien sans téléchargement -->\n    @if (!download) {\n      <dsfr-link\n        [customClass]=\"'edu-link'\"\n        [ariaLabel]=\"ariaLabel ?? ''\"\n        [disabled]=\"disabled\"\n        [link]=\"link\"\n        [linkTarget]=\"linkTarget\"\n        [label]=\"heading ?? ''\"\n        [route]=\"route\"\n        [routePath]=\"routePath\"\n        [routerLinkActive]=\"routerLinkActive ?? ''\"\n        [routerLinkExtras]=\"routerLinkExtras\"\n        [mode]=\"enlargeButton ? 'button' : 'link'\"\n        (linkSelect)=\"onLinkSelect()\">\n        @if (!heading) {\n          <ng-container *ngTemplateOutlet=\"headingTemplateSlot\"></ng-container>\n        }\n      </dsfr-link>\n    } @else {\n      <!-- Lien de téléchargement -->\n      <edu-link-download\n        [item]=\"itemLink\"\n        [downloadDirect]=\"downloadDirect\"\n        [downloadAssessFile]=\"downloadAssessFile\"\n        [linkTarget]=\"linkTarget\"\n        [langCode]=\"downloadLangCode ?? ''\"\n        [isButton]=\"isDownloadButton\"\n        (linkSelect)=\"onLinkSelect()\"></edu-link-download>\n    }\n  }\n</ng-template>\n\n<!-- Template séparé pour avoir une seule définition du select heading (DO NOT DELETE) -->\n<ng-template #headingTemplateSlot>\n  <ng-content select=\"[heading]\"></ng-content>\n</ng-template>\n","// -- Background -------------------------------------------------------------------------------------------------------\n\nimport { DsfrPanelBackground, DsfrPanelBorder } from '../../shared/components/base-panel/base-panel.model';\n\n/**\n * @deprecated (since 1.5.0) use {@link DsfrPanelBackgroundConst} instead\n */\nexport enum DsfrCardBackgroundConst {\n  DEFAULT = 'default',\n  GREY = 'grey',\n  TRANSPARENT = 'transparent',\n}\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrCardBackgroundConst}.\n *\n * @deprecated (since 1.5.0) use {@link DsfrPanelBackground} instead\n */\nexport type DsfrCardBackground = `${DsfrCardBackgroundConst}`;\n\n// -- Border -----------------------------------------------------------------------------------------------------------\n\n/**\n * @deprecated (since 1.5.0) use {@link DsfrPanelBorderConst} instead\n */\nexport enum DsfrCardBorderConst {\n  DEFAULT = 'default',\n  NO_BORDER = 'no-border',\n  SHADOW = 'shadow',\n}\n\n/**\n * @deprecated (since 1.5.0) use {@link DsfrPanelBorder} instead\n */\nexport type DsfrCardBorder = `${DsfrCardBorderConst}`;\n\n// -- Image Fit --------------------------------------------------------------------------------------------------------\n\n/**\n * Définit les différentes façons dont l'image doit s'adapter à son conteneur.\n */\nexport enum DsfrImageFitConst {\n  FILL = 'fill',\n  CONTAIN = 'contain',\n  COVER = 'cover',\n  NONE = 'none',\n  SCALE_DOWN = 'scale-down',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrImageFitConst}.\n */\nexport type DsfrImageFit = `${DsfrImageFitConst}`;\n\n// -- Image Ratio ------------------------------------------------------------------------------------------------------\n\n/**\n * Définit les différents ratios supportés par le DSFR pour l'illustration d'un composant `Card`.\n */\nexport enum DsfrImageRatioConst {\n  /**\n   * Ratio largeur sur hauteur de 32 neuvièmes.\n   */\n  RATIO_32_9 = '16:9/2',\n  /**\n   * Ratio largeur sur hauteur de 16 neuvièmes.\n   */\n  RATIO_16_9 = '16:9',\n  /**\n   * Ratio largeur sur hauteur de trois à deux.\n   */\n  RATIO_3_2 = '3:2',\n  /**\n   * Ratio largeur sur hauteur de quatre tiers.\n   */\n  RATIO_4_3 = '4:3',\n  /**\n   * Ratio largeur sur hauteur de un pour un (largeur égale à la hauteur).\n   */\n  RATIO_1_1 = '1:1',\n  /**\n   * Ratio largeur sur hauteur de trois quarts.\n   */\n  RATIO_3_4 = '3:4',\n  /**\n   * Ratio largeur sur hauteur de deux tiers.\n   */\n  RATIO_2_3 = '2:3',\n}\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrImageRatioConst}.\n */\nexport type DsfrImageRatio = `${DsfrImageRatioConst}`;\n\n// -- Image Type ------------------------------------------------------------------------------------------------------\n\n/**\n * Définit les différents formats d'image supportés par le DSFR en illustration d'un composant `Card`.\n */\nexport enum DsfrImageTypeConst {\n  /**\n   * Pour une balise `<img>`.\n   */\n  IMG = 'img',\n  /**\n   * Pour une balise `<svg>`.\n   */\n  SVG = 'svg',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrImageTypeConst}.\n */\nexport type DsfrImageType = `${DsfrImageTypeConst}`;\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { LinkDownloadComponent, SvgIconModule } from '../../shared';\nimport { DsfrBadgesGroupModule } from '../badges-group';\nimport { DsfrLinkModule } from '../link';\nimport { DsfrTagsGroupModule } from '../tags-group';\nimport { DsfrCardComponent } from './card.component';\n\n@NgModule({\n  exports: [DsfrCardComponent],\n  imports: [\n    CommonModule,\n    DsfrBadgesGroupModule,\n    DsfrTagsGroupModule,\n    SvgIconModule,\n    DsfrLinkModule,\n    LinkDownloadComponent,\n    DsfrCardComponent,\n  ],\n})\nexport class DsfrCardModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrI18nPipe } from '../../../../shared';\nimport { DsfrFinality, DsfrSubFinality } from '../../consent-banner.model';\n\n@Component({\n  selector: 'edu-consent-service',\n  templateUrl: './consent-service.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, FormsModule, DsfrI18nPipe],\n})\nexport class ConsentServiceComponent implements OnInit {\n  /**\n   * Le modèle de présentation.\n   */\n  @Input({ required: true }) finality!: DsfrFinality;\n  /**\n   * L'index de la finalité au sein du panneau de gestion.\n   */\n  @Input({ required: true }) idxFinality!: number;\n  /**\n   * Émis lors l'utilisateur accepte/refuse la finalité.\n   */\n  @Output() finalityChange = new EventEmitter<DsfrFinality>(); // changement accept/refuse d'une finalité ou sous-finalité\n\n  _acceptAll: boolean | undefined;\n  fieldsetLabelledBy: string = '';\n  buttonDescribedBy = 'finality-{{idxFinality}}-legend';\n  buttonControls = 'finality-{{idxFinality}}-collapse';\n\n  /**\n   * Au changement utilisateur accepter tout / refuser tout, mettre a jour la finalité et finalités enfants\n   * Pas de mise à jour si la finalité est en disabled ou exempt (toujours accept=true)\n   * @param value true (accept all), false (refuse all), undefined (pas de sélection)\n   */\n  @Input() set acceptAll(value: boolean | undefined) {\n    this._acceptAll = value;\n    if (this._acceptAll !== undefined && !this.finality.disabled && !this.finality.exempt) {\n      this.finality.accept = this._acceptAll;\n      this.finality.subFinalities?.map((f) => (f.accept = this._acceptAll));\n    }\n  }\n\n  ngOnInit() {\n    const index = this.idxFinality;\n    this.fieldsetLabelledBy = `finality-${index}-legend finality-${index}}-desc`;\n    this.buttonDescribedBy = `finality-${index}-legend`;\n    this.buttonControls = `finality-${index}-collapse`;\n    if (this.finality.exempt || this.finality.disabled) {\n      this.finality.accept = true;\n    }\n  }\n\n  /**\n   * Changement accept/refuse de la finalité, mettre a jour les sous-finalités enfant\n   * @param subFinality sous-finalité concernée\n   */\n  onFinalityRadioChange() {\n    if (this.finality.subFinalities) {\n      this.finality.subFinalities.map((f: DsfrSubFinality) => (f.accept = this.finality.accept));\n    }\n    this.finalityChange.emit(this.finality);\n  }\n\n  /**\n   * Changement accept/refuse d'une sous finalité, remettre la finalité parente en accept undefined si necessaire\n   * @param subFinality sous-finalité concernée\n   */\n  onSubFinalityRadioChange(subFinality: DsfrSubFinality) {\n    if (\n      (this.finality.accept && subFinality.accept === false) ||\n      (this.finality.accept === false && subFinality.accept)\n    ) {\n      this.finality.accept = undefined;\n    }\n\n    this.finalityChange.emit(this.finality);\n  }\n}\n","<div class=\"fr-consent-service\">\n  <fieldset\n    class=\"fr-fieldset\"\n    [attr.role]=\"finality.description ? 'group' : null\"\n    [attr.aria-labelledby]=\"finality.description ? fieldsetLabelledBy : null\">\n    <legend class=\"fr-consent-service__title\">{{ finality.name }}</legend>\n    <div class=\"fr-consent-service__radios\">\n      @if (!finality.exempt) {\n        <div class=\"fr-radio-group\">\n          <input\n            (change)=\"onFinalityRadioChange()\"\n            [value]=\"true\"\n            [(ngModel)]=\"finality.accept\"\n            [disabled]=\"finality.disabled ? true : false\"\n            type=\"radio\"\n            id=\"consent-finality-{{ idxFinality }}-accept\"\n            name=\"consent-finality-{{ idxFinality }}\" />\n          <label class=\"fr-label\" for=\"consent-finality-{{ idxFinality }}-accept\">\n            {{ 'commons.accept' | dsfrI18n }}\n          </label>\n        </div>\n        <div class=\"fr-radio-group\">\n          <input\n            [value]=\"false\"\n            [(ngModel)]=\"finality.accept\"\n            [disabled]=\"finality.disabled ? true : false\"\n            (change)=\"onFinalityRadioChange()\"\n            type=\"radio\"\n            id=\"consent-finality-{{ idxFinality }}-refuse\"\n            name=\"consent-finality-{{ idxFinality }}\" />\n          <label class=\"fr-label\" for=\"consent-finality-{{ idxFinality }}-refuse\">\n            {{ 'commons.refuse' | dsfrI18n }}\n          </label>\n        </div>\n      } @else {\n        <p>{{ 'consent.manager.finalityExempt' | dsfrI18n }}</p>\n      }\n    </div>\n    @if (finality.description) {\n      <p id=\"finality-{{ idxFinality }}-desc\" class=\"fr-consent-service__desc\">\n        {{ finality.description }}\n      </p>\n    }\n    @if (finality.subFinalities) {\n      <div class=\"fr-consent-service__collapse\">\n        <button\n          type=\"button\"\n          class=\"fr-consent-service__collapse-btn\"\n          aria-expanded=\"false\"\n          [attr.aria-describedby]=\"buttonDescribedBy\"\n          [attr.aria-controls]=\"buttonControls\">\n          {{ 'consent.manager.showDetails' | dsfrI18n }}\n        </button>\n      </div>\n    }\n    <div class=\"fr-consent-services fr-collapse\" id=\"finality-{{ idxFinality }}-collapse\">\n      <!-- Sous finalités -->\n      @for (subfinality of finality.subFinalities; track idx_sub; let idx_sub = $index) {\n        <div class=\"fr-consent-service\">\n          <fieldset class=\"fr-fieldset fr-fieldset--inline\">\n            <legend id=\"finality-{{ idxFinality }}-sub-{{ idx_sub }}-legend\" class=\"fr-consent-service__title\">\n              {{ subfinality.name }}\n            </legend>\n            <div class=\"fr-consent-service__radios fr-fieldset--inline\">\n              <div class=\"fr-radio-group\">\n                <input\n                  [(ngModel)]=\"subfinality.accept\"\n                  type=\"radio\"\n                  (change)=\"onSubFinalityRadioChange(subfinality)\"\n                  [value]=\"true\"\n                  id=\"consent-finality-{{ idxFinality }}-sub-{{ idx_sub }}-accept\"\n                  name=\"consent-finality-{{ idxFinality }}-sub-{{ idx_sub }}-\" />\n                <label class=\"fr-label\" for=\"consent-finality-{{ idxFinality }}-sub-{{ idx_sub }}-accept\">\n                  {{ 'commons.accept' | dsfrI18n }}\n                </label>\n              </div>\n              <div class=\"fr-radio-group\">\n                <input\n                  (change)=\"onSubFinalityRadioChange(subfinality)\"\n                  type=\"radio\"\n                  [value]=\"false\"\n                  [(ngModel)]=\"subfinality.accept\"\n                  id=\"consent-finality-{{ idxFinality }}-sub-{{ idx_sub }}-refuse\"\n                  name=\"consent-finality-{{ idxFinality }}-sub-{{ idx_sub }}-\" />\n                <label class=\"fr-label\" for=\"consent-finality-{{ idxFinality }}-sub-{{ idx_sub }}-refuse\">\n                  {{ 'commons.refuse' | dsfrI18n }}\n                </label>\n              </div>\n            </div>\n          </fieldset>\n        </div>\n      }\n    </div>\n  </fieldset>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrHeadingLevel, DsfrI18nPipe, DsfrNavigation, HeadingComponent } from '../../../shared';\nimport { DsfrLinkComponent } from '../../link';\nimport { DsfrFinality } from '../consent-banner.model';\nimport { ConsentServiceComponent } from './consent-service/consent-service.component';\n\nexport const CONSENT_MODAL_ID = 'consent-modal-id';\n\n@Component({\n  selector: 'edu-consent-manager',\n  templateUrl: './consent-manager.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, FormsModule, HeadingComponent, DsfrLinkComponent, DsfrI18nPipe, ConsentServiceComponent],\n})\nexport class ConsentManagerComponent implements OnInit {\n  /** URL de présentation des données personnelles. */\n  @Input({ required: true }) rgpdNavigation!: DsfrNavigation;\n\n  /** Modèle de présentation : liste de finalités. */\n  @Input() finalities: DsfrFinality[] = [];\n\n  /**\n   * Le niveau de titre devant être utilisé (tag `H2` par défaut).\n   * Cette balise ne produit pas de style, mais de la structure.\n   * @since 1.17\n   */\n  @Input() headingLevel?: DsfrHeadingLevel;\n\n  /** Confirmation de la personnalisation des finalités. */\n  @Output() confirmSelect = new EventEmitter<DsfrFinality[]>();\n\n  /** Changement selection accept/refuse d'une finalité ou sous-finalité. */\n  @Output() finalityChange = new EventEmitter<DsfrFinality>();\n\n  /**\n   * Signale quand la route rgdp est sélectionnée.\n   *\n   * @since 1.7\n   */\n  @Output() rgpdRouteSelect = new EventEmitter<string>();\n\n  /*Identifiant de la modale ('consent-modal-id' par défaut) */\n  @Input() modalId: string = CONSENT_MODAL_ID;\n\n  /** internal */ titleId: string = '';\n\n  acceptAll: boolean | undefined;\n\n  ngOnInit(): void {\n    this.acceptAll = undefined;\n    this.titleId = this.modalId + '-title';\n  }\n\n  /**\n   * Changement selection accept/refuse d'une finalité ou sous-finalité\n   * @param finality\n   */\n  onFinalityChange(finality: DsfrFinality): void {\n    // update selon l'état des sous-finalités\n    if (finality.subFinalities) {\n      if (finality.subFinalities.every((f) => f.accept === true)) {\n        finality.accept = true;\n      } else if (finality.subFinalities.every((f) => f.accept === false)) {\n        finality.accept = false;\n      }\n    }\n\n    // update état global\n    this.acceptAll = this.finalities.every((f) => f.accept === finality.accept || f.exempt || f.disabled)\n      ? finality.accept\n      : undefined;\n\n    this.finalityChange.emit(finality);\n  }\n\n  /**\n   * Confirmation de la sélection\n   */\n  onConfirm(): void {\n    this.confirmSelect.emit(this.finalities);\n  }\n\n  /** @since 1.7 */\n  onRgpdSelect(): void {\n    // Signale quand la route rgdp est sélectionnée\n    const route = this.rgpdNavigation?.route;\n    if (route) this.rgpdRouteSelect.emit(route);\n  }\n}\n","<dialog [id]=\"modalId\" class=\"fr-modal\" role=\"dialog\" [attr.aria-labelledby]=\"titleId\">\n  <div class=\"fr-container fr-container--fluid fr-container-md\">\n    <div class=\"fr-grid-row fr-grid-row--center\">\n      <div class=\"fr-col-12 fr-col-md-10 fr-col-lg-8\">\n        <div class=\"fr-modal__body\">\n          <div class=\"fr-modal__header\">\n            <button\n              type=\"button\"\n              class=\"fr-btn--close fr-btn\"\n              [attr.aria-controls]=\"modalId\"\n              [attr.aria-label]=\"'modal.ariaLabel' | dsfrI18n\">\n              {{ 'commons.close' | dsfrI18n }}\n            </button>\n          </div>\n          <div class=\"fr-modal__content\">\n            <edu-heading\n              [allowFirstLevel]=\"true\"\n              [headingId]=\"titleId\"\n              [level]=\"headingLevel\"\n              defaultLevel=\"H2\"\n              customClass=\"fr-modal__title\">\n              {{ 'consent.manager.title' | dsfrI18n }}\n            </edu-heading>\n\n            <!-- BUG: Classe 'fr-consent-manager' inconnue en DSFR 1.9.3 -->\n            <div class=\"fr-consent-manager\">\n              <!-- Finalités -->\n              <div class=\"fr-consent-service fr-consent-manager__header\">\n                <fieldset class=\"fr-fieldset\">\n                  <legend id=\"finality-legend\" class=\"fr-consent-service__title\">\n                    {{ 'consent.manager.preferences' | dsfrI18n }}\n                    <dsfr-link\n                      [customClass]=\"'edu-link'\"\n                      [link]=\"rgpdNavigation.link ?? ''\"\n                      [linkTarget]=\"rgpdNavigation.linkTarget\"\n                      [route]=\"rgpdNavigation.route ?? ''\"\n                      [routePath]=\"rgpdNavigation.routerLink ?? ''\"\n                      [routerLinkActive]=\"rgpdNavigation.routerLinkActive ?? ''\"\n                      [routerLinkExtras]=\"rgpdNavigation.routerLinkExtras\"\n                      (linkSelect)=\"onRgpdSelect()\"\n                      >{{ 'consent.manager.personalData' | dsfrI18n }}</dsfr-link\n                    >\n                  </legend>\n                  <div class=\"fr-consent-service__radios\">\n                    <div class=\"fr-radio-group\">\n                      <input\n                        [(ngModel)]=\"acceptAll\"\n                        [value]=\"true\"\n                        type=\"radio\"\n                        id=\"consent-all-accept\"\n                        name=\"consent-all\" />\n                      <label class=\"fr-label\" for=\"consent-all-accept\"> {{ 'consent.acceptAll' | dsfrI18n }} </label>\n                    </div>\n                    <div class=\"fr-radio-group\">\n                      <input\n                        [(ngModel)]=\"acceptAll\"\n                        [value]=\"false\"\n                        type=\"radio\"\n                        id=\"consent-all-refuse\"\n                        name=\"consent-all\" />\n                      <label class=\"fr-label\" for=\"consent-all-refuse\"> {{ 'consent.refuseAll' | dsfrI18n }} </label>\n                    </div>\n                  </div>\n                </fieldset>\n              </div>\n\n              @for (finality of finalities; track i; let i = $index) {\n                <edu-consent-service\n                  [finality]=\"finality\"\n                  [idxFinality]=\"i\"\n                  [acceptAll]=\"acceptAll\"\n                  (finalityChange)=\"onFinalityChange(finality)\"></edu-consent-service>\n              }\n\n              <!-- Bouton de confirmation/fermeture -->\n              <ul class=\"fr-consent-manager__buttons fr-btns-group fr-btns-group--right fr-btns-group--inline-sm\">\n                <li>\n                  <button type=\"button\" (click)=\"onConfirm()\" [attr.aria-controls]=\"modalId\" class=\"fr-btn\">\n                    {{ 'consent.manager.confirmChoices' | dsfrI18n }}\n                  </button>\n                </li>\n              </ul>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</dialog>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NavigationExtras } from '@angular/router';\nimport { DsfrI18nPipe, DsfrLinkTarget } from '../../shared';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrFinality } from './consent-banner.model';\nimport { CONSENT_MODAL_ID, ConsentManagerComponent } from './consent-manager/consent-manager.component';\n\n@Component({\n  selector: 'dsfr-consent-banner',\n  templateUrl: './consent-banner.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, FormsModule, ConsentManagerComponent, DsfrLinkComponent, DsfrI18nPipe],\n})\nexport class DsfrConsentBannerComponent {\n  /**\n   * URL de présentation des données personnelles. Utilisé si welcome n'est pas renseigné\n   * RGPD : Règlement Général sur la Protection des Données\n   */\n  @Input() rgpdLink = 'https://www.transformation.gouv.fr/donnees-personnelles-et-cookies';\n\n  /**\n   * Target du lien. Target par défaut de l'application si la propriété est non renseignée.\n   *\n   * @since 1.7\n   */\n  @Input() rgpdLinkTarget?: DsfrLinkTarget;\n\n  /** Path interne. Exclusif avec link et routerLink.\n   *\n   * @since 1.7\n   */\n  @Input() rgpdRoute?: string;\n\n  /**\n   * Path angular géré en tant que directive routerLink. Exclusif avec link et route.\n   *\n   * @since 1.7\n   */\n  @Input() rgpdRouterLink?: string | string[];\n\n  /**\n   * RouterLink : classe utilisée pour la directive routerLink active.\n   *\n   * @since 1.7\n   */\n  @Input() rgpdRouterLinkActive?: string | string[];\n\n  /**\n   * RouterLink : valeurs additionnelles de navigation pour le routerLink (queryParams, state etc.)\n   *\n   * @since 1.7\n   */\n  @Input() rgpdRouterLinkExtras?: NavigationExtras;\n\n  /**\n   * Titre de la bannière.\n   */\n  @Input() heading?: string;\n\n  /**\n   * Modèle de présentation des finalités.\n   */\n  @Input() finalities: DsfrFinality[] = [];\n\n  /**\n   * Sélection bouton Tout accepter.\n   */\n  @Output() acceptAllSelect = new EventEmitter<void>();\n\n  /**\n   * Sélection bouton Tout refuser.\n   */\n  @Output() refuseAllSelect = new EventEmitter<void>();\n\n  /** Sélection bouton Personnaliser */\n  @Output() customizeSelect = new EventEmitter<void>();\n\n  /** Validation de la personnalisation */\n  @Output() confirmCustomizeSelect = new EventEmitter<DsfrFinality[]>();\n\n  /** Sélection de Accepter ou Refuser pour une finalité */\n  @Output() finalityChange = new EventEmitter<DsfrFinality>();\n\n  /**\n   * Signale quand la route rgdp est sélectionnée.\n   *\n   * @since 1.7\n   */\n  @Output() rgpdRouteSelect = new EventEmitter<string>();\n\n  /** Description de bienvenue. Utilisation du texte par défaut si non renseigné */\n  @Input() welcome?: string;\n\n  /** Identifiant de la modale ('consent-modal' par défaut) */\n  @Input() modalId: string = CONSENT_MODAL_ID;\n\n  /** @deprecated (since 1.7) utiliser `rgdpLink` à la place. */\n  get rgpdUrl(): string {\n    return this.rgpdLink;\n  }\n\n  /** @deprecated (since 1.7) utiliser 'heading' à la place. */\n  get title(): string | undefined {\n    return this.heading;\n  }\n\n  /** @deprecated (since 1.7) utiliser `rgdpLink` à la place. */\n  @Input() set rgpdUrl(value: string) {\n    this.rgpdLink = value;\n  }\n\n  /** @deprecated (since 1.7) utiliser `heading` à la place. */\n  @Input() set title(value: string) {\n    this.heading = value;\n  }\n\n  /**\n   * Accepter tout\n   * @internal\n   */\n  onAcceptAll(): void {\n    this.acceptAllSelect.emit();\n  }\n\n  /**\n   * Refuser tout\n   * @internal\n   */\n  onRefuseAll(): void {\n    this.refuseAllSelect.emit();\n  }\n\n  /**\n   * Changement de sélection accept/refuse d'une finalité ou sous-finalité.\n   * @internal\n   */\n  onFinalityChange(finality: DsfrFinality): void {\n    this.finalityChange.emit(finality);\n  }\n\n  /**\n   * Ouverture du panneau de personnalisation des finalités.\n   * @internal\n   */\n  onCustomizeSelect(): void {\n    this.customizeSelect.emit();\n  }\n\n  /**\n   * Confirmation de la personnalisation des finalités.\n   * @param finalities liste des finalités\n   * @internal\n   */\n  onConfirmCustomize(finalities: DsfrFinality[]): void {\n    this.confirmCustomizeSelect.emit(finalities);\n  }\n\n  /**\n   * Emet un événement lors de la sélection du lien RGPD si l'accès aux RGPD est fait via la propriété 'route'.\n   *\n   * @since 1.7\n   * @internal\n   */\n  onRgpdSelect(): void {\n    // Relais. Signale quand la route rgdp est sélectionnée\n    if (this.rgpdRoute) this.rgpdRouteSelect.emit(this.rgpdRoute);\n  }\n}\n","<div class=\"fr-consent-banner\">\n  @if (title) {\n    <h2 class=\"fr-h6\">{{ title }}</h2>\n  }\n  <!-- BUG: Classe 'fr-consent-banner__content' inconnue en DSFR 1.9.3 -->\n  <div class=\"fr-consent-banner__content\">\n    @if (welcome) {\n      <p class=\"fr-text--sm\" [innerHtml]=\"welcome\"></p>\n    } @else {\n      <p class=\"fr-text--sm\">\n        {{ 'consent.description.prelink' | dsfrI18n }}\n        <dsfr-link\n          [customClass]=\"'edu-link'\"\n          [link]=\"rgpdLink\"\n          [linkTarget]=\"rgpdLinkTarget\"\n          [route]=\"rgpdRoute ?? ''\"\n          [routePath]=\"rgpdRouterLink ?? ''\"\n          [routerLinkActive]=\"rgpdRouterLinkActive ?? ''\"\n          [routerLinkExtras]=\"rgpdRouterLinkExtras\"\n          [tooltipMessage]=\"'consent.welcome[1]' | dsfrI18n\"\n          (linkSelect)=\"onRgpdSelect()\"\n          >{{ 'consent.description.link' | dsfrI18n }}</dsfr-link\n        >{{ 'consent.description.postlink' | dsfrI18n }}\n      </p>\n    }\n  </div>\n  <ul\n    class=\"fr-consent-banner__buttons fr-btns-group fr-btns-group--right fr-btns-group--inline-reverse fr-btns-group--inline-sm\">\n    <li>\n      <button type=\"button\" (click)=\"onAcceptAll()\" class=\"fr-btn\" title=\"{{ 'consent.allowAllCookies' | dsfrI18n }}\">\n        {{ 'consent.acceptAll' | dsfrI18n }}\n      </button>\n    </li>\n    <li>\n      <button type=\"button\" (click)=\"onRefuseAll()\" class=\"fr-btn\" title=\"{{ 'consent.refuseAllCookies' | dsfrI18n }}\">\n        {{ 'consent.refuseAll' | dsfrI18n }}\n      </button>\n    </li>\n    <li>\n      <button\n        type=\"button\"\n        class=\"fr-btn fr-btn--secondary\"\n        (click)=\"onCustomizeSelect()\"\n        data-fr-opened=\"false\"\n        [attr.aria-controls]=\"modalId\"\n        title=\"{{ 'consent.customizeCookies' | dsfrI18n }}\">\n        {{ 'consent.customize' | dsfrI18n }}\n      </button>\n    </li>\n  </ul>\n</div>\n\n<edu-consent-manager\n  [rgpdNavigation]=\"{\n    link: rgpdLink,\n    linkTarget: rgpdLinkTarget,\n    route: rgpdRoute,\n    routerLink: rgpdRouterLink,\n    routerLinkActive: rgpdRouterLinkActive,\n    routerLinkExtras: rgpdRouterLinkExtras,\n  }\"\n  [finalities]=\"finalities\"\n  (finalityChange)=\"onFinalityChange($event)\"\n  [modalId]=\"modalId\"\n  (confirmSelect)=\"onConfirmCustomize(finalities)\"\n  (rgpdRouteSelect)=\"onRgpdSelect()\"></edu-consent-manager>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrConsentBannerComponent } from './consent-banner.component';\nimport { ConsentManagerComponent } from './consent-manager/consent-manager.component';\n\n@NgModule({\n  exports: [DsfrConsentBannerComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    ConsentManagerComponent,\n    DsfrLinkComponent,\n    DsfrI18nPipe,\n    DsfrConsentBannerComponent,\n  ],\n})\nexport class DsfrConsentBannerModule {}\n","import {\n  AfterContentInit,\n  AfterViewInit,\n  Component,\n  ElementRef,\n  Input,\n  ViewEncapsulation,\n  inject,\n} from '@angular/core';\nimport { newUniqueId } from '../../shared';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\n\n@Component({\n  selector: 'dsfr-transcription',\n  templateUrl: './transcription.component.html',\n  styleUrls: ['./transcription.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [DsfrI18nPipe],\n})\nexport class DsfrTranscriptionComponent implements AfterContentInit, AfterViewInit {\n  /**\n   * Contenu de la transcription, prioritaire sur le slot <ng-content /> sans sélecteur.\n   * Le slot permet d'avoir un contenu plus riche.\n   */\n  @Input() content?: string;\n\n  /** Titre du média de niveau h1. */\n  @Input() heading?: string;\n\n  protected collapseId: string = '';\n  protected dialogId: string = '';\n  protected titleId: string = '';\n  protected roleDialog = false;\n\n  private readonly elementRef = inject(ElementRef);\n\n  ngAfterContentInit(): void {\n    this.collapseId = newUniqueId();\n    this.dialogId = newUniqueId();\n    this.titleId = newUniqueId();\n  }\n\n  ngAfterViewInit() {\n    // Pour pallier `.fr-content-media + .fr-transcription`\n    const previousElt = this.elementRef.nativeElement.previousElementSibling;\n    if (previousElt && previousElt.classList.contains('fr-content-media')) {\n      const transcriptionElt = this.elementRef.nativeElement.querySelector('.fr-transcription');\n      transcriptionElt?.classList.add('follows-content');\n    }\n  }\n\n  protected enlargeScript() {\n    this.roleDialog = !this.roleDialog;\n  }\n}\n","<div class=\"fr-transcription\">\n  <button type=\"button\" class=\"fr-transcription__btn\" aria-expanded=\"false\" [attr.aria-controls]=\"collapseId\">\n    {{ 'transcription.button' | dsfrI18n }}\n  </button>\n  <div class=\"fr-collapse\" [id]=\"collapseId\">\n    <div class=\"fr-transcription__footer\">\n      <div class=\"fr-transcription__actions-group\">\n        <button\n          type=\"button\"\n          class=\"fr-btn fr-btn--fullscreen\"\n          [attr.aria-controls]=\"dialogId\"\n          [attr.aria-label]=\"'transcription.ariaLabel' | dsfrI18n\"\n          data-fr-opened=\"false\">\n          {{ 'commons.enlarge' | dsfrI18n }}\n        </button>\n      </div>\n    </div>\n    <div [id]=\"dialogId\" class=\"fr-modal\" [attr.role]=\"roleDialog ? 'dialog' : null\" [attr.aria-labelledby]=\"titleId\">\n      <!-- Suppression de \"fr-container fr-container-md\" -->\n      <div class=\"fr-container--fluid\">\n        <div class=\"fr-grid-row fr-grid-row--center\">\n          <!-- Suppression de \"fr-col-12 fr-col-md-10 fr-col-lg-8\" -->\n          <div class=\"\">\n            <div class=\"fr-modal__body\">\n              <div class=\"fr-modal__header\">\n                <button\n                  type=\"button\"\n                  class=\"fr-btn--close fr-btn\"\n                  [attr.aria-controls]=\"dialogId\"\n                  [title]=\"'commons.close' | dsfrI18n\">\n                  {{ 'commons.close' | dsfrI18n }}\n                </button>\n              </div>\n              <div class=\"fr-modal__content\">\n                <h1 [id]=\"titleId\" class=\"fr-modal__title\">\n                  {{ heading }}\n                </h1>\n                @if (content) {\n                  <div [innerHTML]=\"content\"></div>\n                } @else {\n                  <ng-content></ng-content>\n                }\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  ContentChild,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  TemplateRef,\n  ViewEncapsulation,\n  inject,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { NavigationExtras } from '@angular/router';\nimport { DsfrLinkTarget, DsfrNavigation, DsfrSize, DsfrSizeConst } from '../../shared';\nimport { LoggerService } from '../../shared/services/logger.service';\nimport { ratioClass } from '../../shared/utils/ratio-utils';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrTranscriptionComponent } from '../transcription';\nimport { DsfrMedia } from './content.model';\n\n// https://www.systeme-de-design.gouv.fr/elements-d-interface/fondamentaux-techniques/medias/\ntype RatioImage = '16:9/2' | '16:9' | '3:2' | '4:3' | '1:1' | '3:4' | '2:3';\ntype RatioVideo = '16:9' | '4:3' | '1:1';\n\n@Component({\n  selector: 'dsfr-content',\n  templateUrl: './content.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, DsfrTranscriptionComponent, DsfrLinkComponent],\n})\nexport class DsfrContentComponent implements DsfrNavigation, OnInit {\n  // -- Commun images / vidéos -----------------------------------------------------------------------------------------\n\n  /** Type du média 'image' | 'video', 'image' par défaut. */\n  @Input() type: DsfrMedia = 'image';\n\n  /** Légende, optionnelle */\n  @Input() legend?: string;\n\n  /** Le format conseillé par défaut est le 16:9. */\n  @Input() ratio: RatioImage | RatioVideo = '16:9';\n\n  /** Media, image, vidéo ou audio, obligatoire */\n  @Input() source?: string;\n\n  // -- Lien de transcription sous le media (optionnel) ----------------------------------------------------------------\n\n  /**\n   * Label du lien (de transcription), optionnel.\n   *\n   * @since 1.6 remplace 'transcriptionLabel'.\n   */\n  @Input() linkLabel?: string;\n\n  /** Lien de transcription (ou autre), optionnel. */\n  @Input() link?: string;\n\n  /** Target du lien. Target par défaut de l'application si la propriété est non renseignée. */\n  @Input() linkTarget?: DsfrLinkTarget;\n\n  /** Path interne. Exclusif avec link et routePath */\n  @Input() route?: string;\n\n  /** Path angular géré en tant que directive routerLink. Exclusif avec link et route. */\n  @Input() routePath?: string | string[];\n\n  /** RouterLink : classe utilisée pour la directive routerLink active. */\n  @Input() routerLinkActive?: string | string[];\n\n  /** RouterLink : valeurs additionnelles de navigation pour le routerLink (queryParams, state, etc.) */\n  @Input() routerLinkExtras?: NavigationExtras;\n\n  /** Message du tooltip du média. */\n  @Input() tooltipMessage?: string;\n\n  /** Redimensionnement du composant : `LG` : 125%, `MD` : 100% (défault), `SM` : 75%. */\n  @Input() contentSize: DsfrSize = DsfrSizeConst.MD;\n\n  // -- Modal de transcription (optionnel) -----------------------------------------------------------------------------\n\n  /**\n   * Contenu, simple, optionnel de la modale de transcription.\n   *\n   * @since 1.6 remplace 'transcription'.\n   */\n  @Input() transcriptionContent?: string;\n\n  /**\n   * Titre du média (image ou vidéo), de niveau h1.\n   *\n   * @since 1.6\n   */\n  @Input() transcriptionHeading?: string;\n\n  // -- Images ---------------------------------------------------------------------------------------------------------\n\n  /**\n   * Spécifique aux images.\n   * Alternative d'une image (attribut alt), doit toujours être présente, sa valeur peut être vide (image n’apportant\n   * pas de sens supplémentaire au contexte) ou non (porteuse de texte ou apportant du sens) selon votre contexte.\n   */\n  @Input() alternate: string = '';\n\n  // -------------------------------------------------------------------------------------------------------------------\n\n  /**\n   * Si une route est spécifiée, émet un événement avec la route comme valeur, sinon n'émet rien.\n   */\n  @Output() linkSelect = new EventEmitter<string>();\n\n  /** Template du contenu du composant (pour l'utilisation d'une balise, par exemple: \"video\"). */\n  @ContentChild('contentMediaTemplate', { static: true }) contentMediaTemplate?: TemplateRef<void>;\n\n  private readonly sanitizer = inject(DomSanitizer);\n  private readonly loggerService = inject(LoggerService);\n\n  get size(): DsfrSize {\n    return this.contentSize;\n  }\n\n  /** @deprecated (since 1.6) utiliser `transcriptionContent` à la place */\n  get transcription(): string | undefined {\n    return this.transcriptionContent;\n  }\n\n  /** @deprecated (since 1.6) utiliser `transcriptionLinkLabel` à la place  */\n  get transcriptionLabel(): string | undefined {\n    return this.linkLabel;\n  }\n\n  protected get imageRatioClass(): Record<string, boolean> {\n    return ratioClass(this.ratio);\n  }\n\n  /** @deprecated (since 1.6) utiliser `transcriptionContent` à la place  */\n  @Input() set transcription(value: string) {\n    this.transcriptionContent = value;\n  }\n\n  /** @deprecated (since 1.6) utiliser `transcriptionLinkLabel` à la place  */\n  @Input() set transcriptionLabel(value: string) {\n    this.linkLabel = value;\n  }\n\n  /**\n   * Redimensionnement du composant : `LG` : 125%, `MD` : 100% (défault), `SM` : 75%.\n   *\n   * @deprecated (since 1.17.0) utiliser contentSize à la place\n   */\n  @Input() set size(value: DsfrSize) {\n    this.contentSize = <DsfrSize>value?.toUpperCase();\n  }\n\n  /**\n   * @deprecated (since 1.11.5) utiliser `routePath` à la place.\n   * routerLink provoque un bug accessibilité sur la navigation au clavier (ajout d'un tabindex=0)\n   **/\n  @Input() set routerLink(value: string | string[] | undefined) {\n    if (value) this.routePath = value;\n  }\n  ngOnInit(): void {\n    this.verifyAccessibility();\n  }\n\n  /** @internal */\n  onLinkSelect() {\n    if (this.route) {\n      this.linkSelect.emit(this.route);\n    }\n  }\n\n  /**\n   * @internal\n   */\n  sanitizedSource() {\n    return this.sanitizer.bypassSecurityTrustResourceUrl(this.source!);\n  }\n\n  private verifyAccessibility(): void {\n    const missingVideoTitle = this.type === 'video' && !this.tooltipMessage;\n\n    if (missingVideoTitle) {\n      this.loggerService.warn('dsfr-content : Renseigner le titre du contenu est obligatoire (tooltipMessage).');\n    }\n  }\n}\n","<figure\n  class=\"fr-content-media\"\n  [class.fr-content-media--lg]=\"contentSize === 'LG'\"\n  [class.fr-content-media--sm]=\"contentSize === 'SM'\"\n  role=\"group\"\n  [attr.aria-label]=\"legend\">\n  @if (contentMediaTemplate) {\n    <ng-container *ngTemplateOutlet=\"contentMediaTemplate\"></ng-container>\n  } @else {\n    @if (type === 'image') {\n      <div class=\"fr-content-media__img\">\n        @if (source) {\n          <img\n            class=\"fr-responsive-img\"\n            [attr.title]=\"tooltipMessage || null\"\n            [class]=\"imageRatioClass\"\n            [src]=\"source\"\n            [alt]=\"alternate\" />\n        }\n        <!-- since 1.6 slot par défaut déprécié -->\n        <ng-content></ng-content>\n        <!-- since 1.6 ajout du slot 'svg' -->\n        <ng-content select=\"[svg]\"></ng-content>\n      </div>\n    } @else if (type === 'video' && source) {\n      <iframe\n        [attr.title]=\"tooltipMessage || null\"\n        class=\"fr-responsive-vid\"\n        [class.fr-ratio-16x9]=\"ratio === '16:9'\"\n        [class.fr-ratio-4x3]=\"ratio === '4:3'\"\n        [class.fr-ratio-1x1]=\"ratio === '1:1'\"\n        [src]=\"sanitizedSource()\"\n        allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n        allowfullscreen></iframe>\n    }\n  }\n\n  @if (legend || linkLabel) {\n    <figcaption class=\"fr-content-media__caption\">\n      {{ legend }}\n      @if (linkLabel) {\n        <dsfr-link\n          [link]=\"link\"\n          [label]=\"linkLabel\"\n          [linkTarget]=\"linkTarget\"\n          [route]=\"route\"\n          [routePath]=\"routePath\"\n          [routerLinkActive]=\"routerLinkActive ?? ''\"\n          [routerLinkExtras]=\"routerLinkExtras\"\n          (linkSelect)=\"onLinkSelect()\">\n        </dsfr-link>\n      }\n    </figcaption>\n  }\n</figure>\n@if (transcriptionContent) {\n  <dsfr-transcription [heading]=\"transcriptionHeading\" [content]=\"transcriptionContent\"></dsfr-transcription>\n} @else {\n  <!-- since 1.6 ajout du slot 'transcription' -->\n  <ng-content select=\"[transcription]\"></ng-content>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrTranscriptionComponent } from '../transcription';\nimport { DsfrContentComponent } from './content.component';\n\n@NgModule({\n  exports: [DsfrContentComponent],\n  imports: [CommonModule, DsfrTranscriptionComponent, DsfrLinkComponent, DsfrContentComponent],\n})\nexport class DsfrContentModule {}\n","/**\n * Définit les types de medias supportés par le DSFR.\n */\nexport enum DsfrMediaConst {\n  /**\n   * Media image.\n   */\n  IMAGE = 'image',\n  /**\n   * Media vidéo.\n   */\n  VIDEO = 'video',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrMediaConst}.\n */\nexport type DsfrMedia = `${DsfrMediaConst}`;\n","import { Directive, Input, TemplateRef, inject } from '@angular/core';\n\n/**\n * Directive structurelle permettant au composant parent d'identifier les composants devant être encapsulés au sein\n * d'une structure HTML complémentaire.\n */\n@Directive({\n  selector: '[fieldsetElement]',\n  standalone: true,\n})\nexport class DsfrFormFieldsetElementDirective {\n  /**\n   * Permet d'indiquer des classes CSS additionnelles à ajouter à l'élément de fielset.\n   */\n  @Input() fieldsetElement?: string;\n\n  readonly templateRef = inject<TemplateRef<unknown>>(TemplateRef);\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\n\n/**\n * EduHintComponent contient la description additionnelle d'un champ de formulaire\n * @since 1.16.0\n */\n@Component({\n  selector: 'edu-hint-form',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule],\n  template: `\n    @if (isArray(hint)) {\n      @for (elem of hint; track $index) {\n        <span class=\"fr-hint-text\">{{ elem }}</span>\n      }\n    } @else {\n      <span class=\"fr-hint-text\">{{ hint }}</span>\n    }\n  `,\n})\nexport class EduHintComponent {\n  /**\n   * Texte(s) de description additionnel(s).\n   */\n  @Input() hint?: string | string[];\n\n  protected isArray(hint: string | string[] | undefined): boolean {\n    return Array.isArray(hint);\n  }\n}\n","import { Component, computed, input, Input, OnInit, signal, Signal } from '@angular/core';\nimport { DsfrSeverity, DsfrSeverityConst, newUniqueId, toArray } from '../../shared';\n\ninterface DisplayedMessageStatus {\n  message: string[] | undefined;\n  messageSeverity: DsfrSeverity | undefined;\n}\n\n@Component({\n  template: '',\n})\nexport abstract class BaseFieldsetComponent implements OnInit {\n  /**\n   * L'identifiant du fieldset - Optionnel (sera généré si non fourni).\n   *\n   * @deprecated (since 1.14.0) utiliser fieldsetId\n   */\n  @Input() id?: string;\n\n  /**\n   * L'identifiant du fieldset - Optionnel (sera généré si non fourni).\n   */\n  @Input() fieldsetId?: string;\n\n  /**\n   * La légende du fieldset. Peut être indiquée via cet input ou via un slot [legend].\n   */\n  @Input() legend?: string;\n\n  /**\n   * Permet de rétablir une graisse standard sur la légende.\n   */\n  @Input() legendRegular = false;\n\n  /**\n   * Permet de masquer la légende en la préservant pour les lecteurs d'écran.\n   */\n  @Input() legendSrOnly = false;\n\n  /**\n   * Texte(s) de description additionnel(s).\n   */\n  @Input() hint?: string | string[];\n\n  /**\n   * Permet de désactiver l'ensemble des champs du fieldset.\n   */\n  disabled = input<boolean>();\n\n  /**\n   * Positionne un message d'erreur.\n   * @deprecated (since 1.14) utiliser message et messageSeverity à la place\n   **/\n  error = input<string | string[]>();\n\n  /**\n   * Positionne un message de validation.\n   * @deprecated (since 1.14) utiliser message et messageSeverity à la place\n   */\n  valid = input<string>();\n\n  /**\n   * Message d'information lié au composant.\n   */\n  message = input<string | string[]>();\n\n  /**\n   * Représente la sévérité du message.\n   */\n  messageSeverity = input<DsfrSeverity>();\n\n  /**\n   * Gestion de l'affichage de la combinaison des messages internes et externes du composant.\n   */\n  protected readonly newMessages = computed(() => {\n    const [message, error] = [this._message(), this._internalError()];\n\n    return message || error ? this.handleMessagesConcat() : undefined;\n  });\n\n  /**\n   * Gestion de l'affichage dans le cas où le composant serait dans un autre statut qu'en erreur,\n   * et qu'une erreur interne se manifeste. Dans ce cas, seules sont affichées les erreurs internes, et le statut\n   * affiché du composant est forcé en erreur.\n   */\n  protected readonly displayedMessageStatus: Signal<DisplayedMessageStatus> = computed(() => {\n    const [newMessages, messageSeverity, internalError] = [\n      this.newMessages(),\n      this._messageSeverity(),\n      toArray(this._internalError()),\n    ];\n\n    if (messageSeverity !== DsfrSeverityConst.ERROR && internalError.length > 0) {\n      return {\n        message: internalError,\n        messageSeverity: DsfrSeverityConst.ERROR,\n      };\n    } else {\n      return {\n        message: newMessages,\n        messageSeverity: messageSeverity,\n      };\n    }\n  });\n\n  protected readonly fieldsetSeverity = computed<string | null>(() => {\n    const status = this.displayedMessageStatus();\n\n    if (!status.message || status.message.length === 0 || !status.messageSeverity) return null;\n\n    const severityToClass: Record<DsfrSeverity, string> = {\n      [this.DsfrSeverity.ERROR]: 'fr-fieldset--error',\n      [this.DsfrSeverity.SUCCESS]: 'fr-fieldset--valid',\n      [this.DsfrSeverity.VALID]: 'fr-fieldset--valid',\n      [this.DsfrSeverity.INFO]: '',\n      [this.DsfrSeverity.WARNING]: '',\n    };\n\n    return severityToClass[status.messageSeverity];\n  });\n\n  protected readonly DsfrSeverity = DsfrSeverityConst;\n\n  protected legendId: string = '';\n  protected messagesId: string = '';\n  protected nativeElementId: string = ''; // TODO : à enlever en v2\n\n  /**\n   * Attribut utilisés par les composants héritant de la class BaseFieldset afin d'afficher des messages d'erreurs relatif\n   * à une validation interne spécifique au composant.\n   * @internal\n   */\n  private readonly _internalError = signal<string | string[] | undefined>(undefined);\n\n  /** @internal */\n  private readonly _message = computed<string | string[] | undefined>(() => {\n    if (this.error()) return this.error();\n    if (this.valid()) return this.valid();\n\n    return this.message();\n  });\n\n  /** @internal */\n  private readonly _messageSeverity = computed<DsfrSeverity | undefined>(() => {\n    const message = this._message();\n    if (!message?.length) return undefined;\n\n    if (this.error()) return DsfrSeverityConst.ERROR;\n    if (this.valid()) return DsfrSeverityConst.VALID;\n\n    return this.messageSeverity();\n  });\n\n  /**\n   * Attribut utilisés par les composants héritant de la class BaseFieldset afin d'afficher des messages d'erreurs relatif\n   * à une validation interne spécifique au composant.\n   */\n  get internalError(): string | string[] | undefined {\n    return this._internalError();\n  }\n\n  /**\n   * Attribut utilisés par les composants héritant de la class BaseFieldset afin d'afficher des messages d'erreurs relatif\n   * à une validation interne spécifique au composant.\n   * @internal\n   */\n  @Input() set internalError(value: string | string[] | undefined) {\n    this._internalError.set(value);\n  }\n\n  ngOnInit() {\n    this.nativeElementId = this.fieldsetId ?? this.id ?? newUniqueId();\n    this.legendId = this.nativeElementId + '-legend';\n    this.messagesId = this.nativeElementId + '-messages';\n  }\n\n  protected isLegendRegular(): boolean {\n    return this.legendRegular;\n  }\n\n  /**\n   * Gère la concaténation des messages internes et externes\n   */\n  private handleMessagesConcat(): string[] | undefined {\n    const [internalError, message, messageSeverity] = [\n      toArray(this._internalError()),\n      toArray(this._message()),\n      this._messageSeverity(),\n    ];\n\n    if (internalError.length > 0 || messageSeverity === DsfrSeverityConst.ERROR) {\n      const combinedMessages = [];\n\n      combinedMessages.push(...internalError);\n\n      if (messageSeverity === DsfrSeverityConst.ERROR) {\n        combinedMessages.push(...message);\n      }\n\n      return combinedMessages;\n    }\n\n    return message.length === 0 ? undefined : message;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, ContentChildren, Input, QueryList, ViewEncapsulation } from '@angular/core';\nimport { EduHintComponent } from '../../shared/components/input-group/hint.component';\nimport { EduMessageSeverityDirective } from '../../shared/directives/message-severity.directive';\nimport { BaseFieldsetComponent } from './base-fieldset.component';\nimport { DsfrFormFieldsetElementDirective } from './form-fieldset-element.directive';\n\n@Component({\n  selector: 'dsfr-fieldset, dsfr-form-fieldset',\n  templateUrl: './form-fieldset.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, EduMessageSeverityDirective, EduHintComponent],\n})\nexport class DsfrFormFieldsetComponent extends BaseFieldsetComponent {\n  /**\n   * Ensemble des champs de formulaire sur une même ligne.\n   */\n  @Input() inline = false;\n\n  /**\n   * Les champs composant le formulaire.\n   * @internal\n   */\n  @ContentChildren(DsfrFormFieldsetElementDirective) elements!: QueryList<DsfrFormFieldsetElementDirective>;\n\n  /**\n   * Attribut aria-labelledBy en fonction de la lagende et du groupe de message\n   */\n  protected readonly ariaLabelledyBy = computed(() => {\n    const messageStatus = this.displayedMessageStatus();\n    return this.legendId + (messageStatus.message && messageStatus.messageSeverity ? ' ' + this.messagesId : '');\n  });\n\n  protected getFieldsetElementClass(elem: DsfrFormFieldsetElementDirective): string[] {\n    const classes = ['fr-fieldset__element'];\n\n    if (this.inline) {\n      classes.push('fr-fieldset__element--inline');\n    }\n\n    if (elem.fieldsetElement) {\n      const elemClasses: string[] = elem.fieldsetElement.split(/\\s+/g);\n      elemClasses.forEach((c) => classes.push(c));\n    }\n\n    return classes;\n  }\n\n  protected isMessageArray(): boolean {\n    return Array.isArray(this.message);\n  }\n}\n","<fieldset\n  [attr.id]=\"nativeElementId\"\n  class=\"fr-fieldset\"\n  [ngClass]=\"fieldsetSeverity()\"\n  [attr.aria-labelledby]=\"ariaLabelledyBy()\"\n  [disabled]=\"disabled() || null\">\n  <legend\n    id=\"{{ legendId }}\"\n    [class]=\"{\n      'fr-fieldset__legend': true,\n      'fr-fieldset__legend--regular': isLegendRegular(),\n      'fr-sr-only': legendSrOnly,\n    }\">\n    @if (legend) {\n      {{ legend }}\n    } @else {\n      <ng-content select=\"[legend]\"></ng-content>\n    }\n\n    @if (hint) {\n      <edu-hint-form [hint]=\"hint\"></edu-hint-form>\n    }\n  </legend>\n\n  @for (elem of elements; track $index) {\n    <div [class]=\"getFieldsetElementClass(elem)\">\n      <ng-container *ngTemplateOutlet=\"elem.templateRef\"></ng-container>\n    </div>\n  }\n\n  <div class=\"fr-messages-group\" id=\"{{ messagesId }}\" aria-live=\"polite\">\n    @let messageStatus = displayedMessageStatus();\n\n    @if (messageStatus.messageSeverity) {\n      @for (individualMessage of messageStatus.message; track individualMessage) {\n        <!-- prettier-ignore -->\n        <p class=\"fr-message\" [eduMessageSeverity]=\"messageStatus.messageSeverity\">{{ individualMessage }}</p>\n      }\n    }\n  </div>\n</fieldset>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrFormFieldsetElementDirective } from './form-fieldset-element.directive';\nimport { DsfrFormFieldsetComponent } from './form-fieldset.component';\n\n@NgModule({\n  imports: [CommonModule, DsfrFormFieldsetComponent, DsfrFormFieldsetElementDirective],\n  exports: [DsfrFormFieldsetComponent, DsfrFormFieldsetElementDirective],\n})\nexport class DsfrFormFieldsetModule {}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { DefaultControlComponent, newUniqueId } from '../shared';\n\n@Component({\n  template: '',\n})\nexport abstract class DefaultRadioComponent extends DefaultControlComponent<any> implements OnInit {\n  /*** Bascule l'affichage des radio-buttons en ligne. */\n  @Input() inline = false;\n\n  /** Ajouter l'attribut 'aria-invalid' sur le champ de formulaire.\n   */\n  @Input() ariaInvalid?: string;\n\n  /** Attribut required du radio-button. */\n  @Input() required = false;\n\n  /** Permet de rétablir une graisse standard sur la légende. */\n  @Input() legendRegular = false;\n\n  get fieldsetLabelledBy(): string {\n    return this.legendId + ' ' + this.inputId + '-messages';\n  }\n\n  get hintId(): string {\n    return this.inputId + '-hint';\n  }\n\n  get legendId(): string {\n    return this.inputId + '-legend';\n  }\n\n  /** Légende du groupe de boutons radios (alias sur la propriété label). */\n  @Input() set legend(legend: string) {\n    this.label = legend;\n  }\n\n  override ngOnInit(): void {\n    super.ngOnInit();\n    this.name ??= newUniqueId();\n  }\n\n  /** @internal */\n  getRadioId(index: number): string {\n    return `${this.name}_${index + 1}`;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, Input, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { PictogramComponent } from '../../shared';\nimport { DefaultRadioComponent } from '../default-radio.component';\nimport { DsfrFormFieldsetComponent, DsfrFormFieldsetElementDirective } from '../fieldset';\nimport { DsfrRadioRich } from './form-radio-rich.model';\n\n@Component({\n  selector: 'dsfr-form-radio-rich',\n  templateUrl: './form-radio-rich.component.html',\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DsfrFormRadioRichComponent),\n      multi: true,\n    },\n  ],\n  imports: [CommonModule, FormsModule, DsfrFormFieldsetComponent, PictogramComponent, DsfrFormFieldsetElementDirective],\n})\nexport class DsfrFormRadioRichComponent extends DefaultRadioComponent {\n  /**\n   * Le modèle de présentation permettant de transmettre la liste des radios.\n   */\n  @Input({ required: true }) options!: DsfrRadioRich[];\n\n  /**\n   * @deprecated (@since 1.1.0) utiliser la propriété options à la place.\n   */\n  @Input() set radioRich(options: DsfrRadioRich[]) {\n    this.options = options;\n  }\n}\n","<dsfr-fieldset\n  [fieldsetId]=\"inputId\"\n  [legend]=\"label\"\n  [legendRegular]=\"legendRegular\"\n  [disabled]=\"disabled\"\n  [hint]=\"hint ?? ''\"\n  [inline]=\"inline\"\n  [message]=\"messageViewModel()\"\n  [messageSeverity]=\"severityViewModel()\">\n  @if (!label) {\n    <ng-container legend>\n      <ng-content select=\"[legend]\"></ng-content>\n    </ng-container>\n  }\n  @for (radio of options; track i; let i = $index) {\n    <div *fieldsetElement class=\"fr-radio-group fr-radio-rich\">\n      <!--\n      On bind à la fois la propriété et l'attribut 'name' pour contourner le bug suivant: https://github.com/angular/angular/issues/11757\n      cf. issue#360\n      -->\n      <input\n        type=\"radio\"\n        [attr.id]=\"getRadioId(i)\"\n        [name]=\"name!\"\n        [attr.name]=\"name\"\n        [value]=\"radio.value\"\n        [disabled]=\"radio.disabled ? radio.disabled : false\"\n        [attr.aria-invalid]=\"ariaInvalid || null\"\n        [(ngModel)]=\"value\"\n        (blur)=\"onBlur()\"\n        [required]=\"required\" />\n      <label class=\"fr-label\" [for]=\"getRadioId(i)\">\n        <span [innerHTML]=\"radio.label\"></span>\n        @if (radio.hint) {\n          <span class=\"fr-hint-text\">{{ radio.hint }}</span>\n        }\n      </label>\n      @if (radio.imagePath || radio.artworkFilePath) {\n        <div\n          [class]=\"{\n            'fr-radio-rich__img': radio.imagePath,\n            'fr-radio-rich__pictogram': !radio.imagePath && radio.artworkFilePath,\n          }\">\n          @if (radio.imagePath) {\n            <img [src]=\"radio.imagePath\" [attr.alt]=\"radio.imageAlt\" />\n          } @else if (radio.artworkFilePath && !radio.imagePath) {\n            <edu-pictogram [artworkFilePath]=\"radio.artworkFilePath\"></edu-pictogram>\n          }\n        </div>\n      }\n    </div>\n  }\n</dsfr-fieldset>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { PictogramComponent } from '../../shared';\nimport { DsfrFormFieldsetComponent } from '../fieldset';\nimport { DsfrFormRadioRichComponent } from './form-radio-rich.component';\n\n@NgModule({\n  exports: [DsfrFormRadioRichComponent],\n  imports: [CommonModule, FormsModule, DsfrFormFieldsetComponent, PictogramComponent, DsfrFormRadioRichComponent],\n})\nexport class DsfrFormRadioRichModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  DOCUMENT,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnInit,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrFormRadioRichComponent } from '../../forms/form-radio-rich';\nimport {\n  DsfrHeadingLevel,\n  DsfrI18nPipe,\n  DsfrI18nService,\n  HeadingComponent,\n  isOnBrowser,\n  LocalStorage,\n  StorageEnum,\n} from '../../shared';\nimport { DSFR_CONFIG_TOKEN } from '../../shared/config/config-token';\nimport { DsfrConfig } from '../../shared/config/config.model';\n\nexport const DISPLAY_MODAL_ID = 'theme-modal-id';\n\ntype DisplayTheme = 'light' | 'dark' | 'system';\n\n@Component({\n  selector: 'dsfr-display',\n  templateUrl: './display.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, FormsModule, HeadingComponent, DsfrI18nPipe, DsfrFormRadioRichComponent],\n})\nexport class DsfrDisplayComponent implements OnInit {\n  /**\n   * l'identifiant de la modale portant les paramètres d'affichage.\n   */\n  @Input() displayId = DISPLAY_MODAL_ID;\n\n  /**\n   * Le niveau de titre devant être utilisé (tag `H2` par défaut).\n   * Cette balise ne produit pas de style, mais de la structure.\n   * @since 1.17\n   */\n  @Input() headingLevel?: DsfrHeadingLevel;\n\n  /**\n   * Chemin vers le répertoire exposant les pictogrammes illustratifs DSFR.\n   */\n  @Input() artworkDirPath?: string;\n\n  /**\n   * Événement émis lorsque le thème change avec la valeur du nouveau thème : `light`, `dark` ou `system`.\n   */\n  @Output() displayChange = new EventEmitter<string>();\n\n  /**\n   * Thème courant du composant.\n   * @internal\n   */\n  currentTheme: DisplayTheme | undefined;\n\n  protected readonly i18n = inject(DsfrI18nService);\n\n  /** @internal */\n  protected themes: any[] = [\n    {\n      value: 'light',\n      label: this.i18n.t('display.light.label'),\n      link: '/pictograms/environment/sun.svg',\n      deprecatedLink: '/sun.svg',\n    },\n    {\n      value: 'dark',\n      label: this.i18n.t('display.dark.label'),\n      link: '/pictograms/environment/moon.svg',\n      deprecatedLink: '/moon.svg',\n    },\n    {\n      value: 'system',\n      label: this.i18n.t('display.system.label'),\n      hint: this.i18n.t('display.system.hint'),\n      link: '/pictograms/system/system.svg',\n      deprecatedLink: '/system.svg',\n    },\n  ];\n\n  private _useDeprecatedLink = false;\n  private readonly config = inject<DsfrConfig>(DSFR_CONFIG_TOKEN);\n  private readonly elementRef = inject(ElementRef);\n  private readonly document = inject(DOCUMENT);\n\n  /** @internal */\n  constructor() {}\n\n  get pictoPath(): string | undefined {\n    return this.artworkDirPath;\n  }\n\n  /**\n   * Chemin des pictogrammes (du composant display) renseigné par le développeur.\n   *\n   * Note: ce chemin doit permettre de récupérer directement les fichiers SVG suivants : moon.svg, sun.svg, system.svg\n   *\n   * @deprecated Use `artworkDirPath` instead.\n   */\n  @Input() set pictoPath(path: string) {\n    this.artworkDirPath = path;\n    this._useDeprecatedLink = true;\n  }\n\n  ngOnInit(): void {\n    this.initDisplayTheme();\n    if (this.artworkDirPath === undefined && this.config.artworkDirPath) {\n      this.artworkDirPath = this.config.artworkDirPath;\n    }\n\n    for (let theme of this.themes) {\n      theme.artworkFilePath = this.buildSvgPath(theme);\n    }\n  }\n\n  /** @internal */\n  onChange() {\n    this.setHtmlSchemeAttribute(this.currentTheme);\n    this.displayChange.emit(this.currentTheme);\n  }\n\n  /** @internal */\n  buildSvgPath(theme: any) {\n    return this.artworkDirPath + (this._useDeprecatedLink ? theme.deprecatedLink : theme.link);\n  }\n\n  private initDisplayTheme(): void {\n    if (!isOnBrowser()) return;\n\n    // Si l’utilisateur effectue une modification, son choix est conservé (dans le local storage) pour les visites ultérieures.\n    const savedTheme = <DisplayTheme>LocalStorage.get(StorageEnum.SCHEME);\n\n    if (savedTheme) {\n      this.setHtmlSchemeAttribute(savedTheme);\n      this.currentTheme = savedTheme;\n    }\n\n    // Sinon on prend le theme de la balise HTML\n    else {\n      const html = this.document.documentElement;\n      const themeInHtml = html.getAttribute('data-fr-scheme');\n      this.currentTheme = (themeInHtml as DisplayTheme) || undefined;\n    }\n  }\n\n  private setHtmlSchemeAttribute(value: DisplayTheme | undefined) {\n    const nativeElt = this.elementRef?.nativeElement;\n    const html = nativeElt?.ownerDocument?.documentElement;\n    html?.setAttribute('data-fr-scheme', value);\n  }\n}\n","<dialog [id]=\"displayId\" class=\"fr-modal\" role=\"dialog\" [attr.aria-labelledby]=\"displayId + '-title'\">\n  <div class=\"fr-container fr-container--fluid fr-container-md\">\n    <div class=\"fr-grid-row fr-grid-row--center\">\n      <div class=\"fr-col-12 fr-col-md-6 fr-col-lg-4\">\n        <div class=\"fr-modal__body\">\n          <div class=\"fr-modal__header\">\n            <button\n              type=\"button\"\n              class=\"fr-btn--close fr-btn\"\n              [attr.aria-controls]=\"displayId\"\n              [title]=\"'commons.close' | dsfrI18n\">\n              {{ 'commons.close' | dsfrI18n }}\n            </button>\n          </div>\n          <div class=\"fr-modal__content\">\n            <edu-heading\n              [headingId]=\"displayId + '-title'\"\n              [level]=\"headingLevel\"\n              [allowFirstLevel]=\"true\"\n              defaultLevel=\"H2\"\n              customClass=\"fr-modal__title\">\n              {{ 'display.heading' | dsfrI18n }}\n            </edu-heading>\n            <dsfr-form-radio-rich\n              [inputId]=\"displayId + '-fieldset'\"\n              legend=\" {{ 'display.hint' | dsfrI18n }}\"\n              [name]=\"displayId + '-options'\"\n              [options]=\"themes\"\n              [legendRegular]=\"true\"\n              [required]=\"true\"\n              (change)=\"onChange()\"\n              [(ngModel)]=\"currentTheme\">\n            </dsfr-form-radio-rich>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</dialog>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrFormRadioRichComponent } from '../../forms/form-radio-rich';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrDisplayComponent } from './display.component';\n\n@NgModule({\n  exports: [DsfrDisplayComponent],\n  imports: [CommonModule, FormsModule, DsfrI18nPipe, DsfrDisplayComponent, DsfrFormRadioRichComponent],\n})\nexport class DsfrDisplayModule {}\n","import { DsfrLinkTarget } from '../../shared';\n\nexport interface DsfrDownload {\n  /**\n   * Obligatoire si le document n'est pas du même langage que la page courante.\n   * Attribut hreflang, ex: hreflang=\"en\".\n   */\n  langCode?: string;\n  /**\n   * Equivalent à l'attribut html natif 'download'.\n   * Si == 'true', télécharge directement le fichier sans l'ouvrir, 'false' par défaut.\n   * Peut prendre le nom du fichier à télécharger si on souhaite renommer ce fichier.\n   */\n  directDownload?: boolean | string;\n\n  /**\n   * Lien de téléchargement du fichier.\n   */\n  link?: string;\n\n  /** Surcharger le label 'Télécharger [ nom de fichier ]' */\n  label?: string;\n\n  /**\n   * Lien interne\n   * Si cette propriété est renseignée, un bouton remplace l'ancre et l'événement (linkSelect) au clic du bouton doit être intercepté.\n   */\n  route?: string;\n\n  /** Format du fichier - obligatoire. Cf. DsfrMimeType */\n  mimeType: string;\n\n  /** Nom du ficher - obligatoire. */\n  fileName: string;\n\n  /** Poids du fichier en octets. Obligatoire dans le Dsfr mais peut être renseigné ultérieurement. */\n  sizeBytes?: number;\n\n  /** Attribut aria-label  */\n  ariaLabel?: string;\n\n  /** Target du lien. Target par défaut de l'application si la propriété est non renseignée. */\n  linkTarget?: DsfrLinkTarget;\n\n  /**\n   * Indique que les métadonnées du fichier seront positionnées automatiquement par le script DSFR. Les propriétés\n   * fileMimeType, fileSizeBytes, hreflang sont alors ignorées. Si la propriété est positionnée à false alors ce sont\n   * les valeurs des propriétés fileMimeType, fileSizeBytes, hreflang qui seront utlisées.\n   */\n  assessFile?: boolean;\n}\n\n/**\n * Constantes correspondant aux différentes variantes du composant download.\n *\n * @deprecated\n */\nexport enum DsfrDownloadVariantConst {\n  LINK = 'link',\n  BLOCK = 'block',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrDownloadVariantConst}.\n *\n * @deprecated\n */\nexport type DsfrDownloadVariant = `${DsfrDownloadVariantConst}`;\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation, inject } from '@angular/core';\nimport {\n  DsfrFileSizeUnit,\n  DsfrI18nPipe,\n  DsfrI18nService,\n  DsfrLink,\n  DsfrLinkTarget,\n  LangService,\n  LinkDownloadComponent,\n  downloadDetail,\n} from '../../shared';\nimport { DsfrDownload, DsfrDownloadVariant, DsfrDownloadVariantConst } from './download.model';\n\n@Component({\n  selector: 'dsfr-download',\n  templateUrl: './download.component.html',\n  styleUrls: ['./download.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, LinkDownloadComponent, DsfrI18nPipe],\n})\nexport class DsfrDownloadComponent implements DsfrDownload {\n  /** Label du lien. Par défaut indique 'Télécharger [nom du fichier]' */\n  @Input() label?: string;\n\n  /** La propriété ariaLabel définit une valeur de chaîne qui étiquette un élément interactif. */\n  @Input() ariaLabel?: string;\n\n  /**\n   * Lien de téléchargement (href) du fichier.\n   * Si cette propriété n'est pas renseignée, un bouton remplace l'ancre (voir route)\n   */\n  @Input() link?: string;\n\n  /** Format du fichier - obligatoire. Cf. DsfrMimeType */\n  @Input({ required: true }) mimeType!: string;\n\n  /** Nom du ficher - obligatoire. */\n  @Input({ required: true }) fileName!: string;\n\n  /** Poids du fichier en octets. Obligatoire dans le DSDFR mais peut être renseigné ultérieurement. */\n  @Input() sizeBytes?: number;\n\n  /**\n   * Obligatoire si le document n'est pas du même langage que la page courante.\n   *\n   * Ex : langCode=\"en\".\n   */\n  @Input() langCode?: string;\n\n  /**\n   * Permet de basculer la présentation en Card.\n   *\n   * @deprecated Le mode 'block' est déprécié, utiliser `Card#download` à la place\n   */\n  @Input() variant: DsfrDownloadVariant = DsfrDownloadVariantConst.LINK;\n\n  /**\n   * Description du fichier (uniquement en mode block).\n   *\n   * @deprecated Le mode block est déprécié\n   */\n  @Input() description?: string;\n\n  /**\n   * Indique que les métadonnées du fichier seront positionnées automatiquement par le script DSFR. Les propriétés\n   * `mimeType`, `sizeBytes`, `langCode` sont alors ignorées. Si la propriété est positionnée à false alors ce sont\n   * les valeurs des propriétés `mimeType`, `sizeBytes`, `langCode` qui seront utlisées.\n   */\n  @Input() assessFile = true;\n\n  /**\n   * Equivalent à l'attribut html natif 'download'.\n   * Si == 'true', télécharge directement le fichier sans l'ouvrir, 'false' par défaut.\n   * Peut prendre le nom du fichier à télécharger si on souhaite renommer ce fichier.\n   */\n  @Input() directDownload: boolean | string | undefined = false;\n\n  /**\n   * Si cette propriété est renseignée, un bouton remplace l'ancre et l'évènement linkSelect doit être intercepté.\n   * Son activation est exclusive avec link et prime sur ce dernier.\n   * Attention, en mode 'route' les métadonnées du fichier à télécharger ne peuvent être connues a priori, vous\n   * devez donc obligatoirement renseigner les propriétés `mimeType`, `sizeBytes` et langCode` car la propriété\n   * `assessFile` sera ignorée.\n   */\n  @Input() route?: string;\n\n  /**\n   * Attribut target du lien.\n   */\n  @Input() linkTarget?: DsfrLinkTarget;\n\n  /**\n   * Propage la valeur de 'route' ou 'link' lors du clic sur le lien.\n   */\n  @Output() downloadSelect = new EventEmitter<string>();\n\n  protected readonly i18n = inject(DsfrI18nService);\n\n  /** cf. accesseurs. */\n  private _sizeUnit: DsfrFileSizeUnit | undefined;\n  private readonly langService = inject(LangService);\n\n  get currentLang(): string {\n    return this.langService.lang;\n  }\n\n  get itemLink(): DsfrLink {\n    let label = this.label ? this.label : `${this.i18n.t('commons.download')} ${this.fileName}`;\n    label += `<span class=\"fr-link__detail\">${this.detail}</span>`;\n\n    const itemLink: DsfrLink = { label: label, ariaLabel: this.ariaLabel ?? '' };\n    if (this.link) {\n      itemLink.link = this.link;\n    } else if (this.route) {\n      itemLink.route = this.route;\n    }\n\n    return itemLink;\n  }\n\n  /**\n   * Retourne l'affichage des détails si assetFile est positionné et que l'utilisateur n'est pas en mode action\n   * (activation via l'input route), sinon retourne '' ce qui aura pour effet de laisser calculer l'affichage par\n   * le script DSFR.\n   */\n  get detail(): string {\n    return this.assessFile && !this.route ? '' : downloadDetail(this.mimeType, this.sizeBytes, this.sizeUnit);\n  }\n\n  get sizeUnit(): DsfrFileSizeUnit {\n    return this._sizeUnit ? this._sizeUnit : this.langService.lang === 'fr' ? 'octets' : 'bytes';\n  }\n\n  /**\n   * Permet d'afficher la taille soit en bytes (KB, MB, ...) soit en octets (Ko, Mo, ...). Par défaut, l'unité est\n   * en octets lorsque la langue courante est 'fr', 'bytes' dans les autres cas.\n   */\n  @Input() set sizeUnit(value: DsfrFileSizeUnit) {\n    this._sizeUnit = value;\n  }\n\n  /** @internal */\n  onLinkSelect(link: string): void {\n    this.downloadSelect.emit(link);\n  }\n\n  onButtonSelect(): void {\n    if (this.route) {\n      this.downloadSelect.emit(this.route);\n    }\n  }\n\n  /**\n   * Retourne vrai si on affiche un bouton à la place d'une ancre.\n   * @internal\n   */\n  hasButtonMarkup(): boolean {\n    return !!this.route || !this.link;\n  }\n\n  /**\n   * Si 'true' ou avec un nom de fichier, télécharge directement le fichier sans l'ouvrir. False par défaut.\n   * @internal\n   */\n  isDirectDownload(): boolean {\n    return !!this.directDownload;\n  }\n\n  /** @internal */\n  getNewFileName(): string {\n    return typeof this.directDownload === 'string' ? this.directDownload : '';\n  }\n\n  /** @internal */\n  isBlockMode() {\n    return this.variant === DsfrDownloadVariantConst.BLOCK;\n  }\n}\n","@if (!isBlockMode()) {\n  <edu-link-download\n    [isButton]=\"hasButtonMarkup()\"\n    [item]=\"itemLink\"\n    [downloadDirect]=\"directDownload ?? false\"\n    [downloadAssessFile]=\"assessFile\"\n    [linkTarget]=\"linkTarget\"\n    customClass=\"fr-link fr-link--download\"\n    [langCode]=\"langCode ?? ''\"\n    (linkSelect)=\"onLinkSelect($event)\">\n  </edu-link-download>\n} @else {\n  <!-- Pour rétrocompatibilité avec mode \"block\" (déprécié) -->\n  <div\n    class=\"fr-download\"\n    [ngClass]=\"{\n      'fr-enlarge-link fr-download--card': isBlockMode(),\n      'edu-cardWithButton': hasButtonMarkup(),\n    }\"\n    [attr.lang]=\"currentLang || null\">\n    <p>\n      <!-- Téléchargement avec une ancre -->\n      @if (!hasButtonMarkup()) {\n        <a\n          [href]=\"link\"\n          [attr.download]=\"!isDirectDownload() ? null : getNewFileName()\"\n          [attr.hreflang]=\"langCode ? langCode : null\"\n          class=\"fr-download__link\"\n          [attr.data-fr-assess-file]=\"assessFile && sizeBytes ? sizeUnit : null\">\n          {{ 'commons.download' | dsfrI18n }} {{ fileName }}\n          <span class=\"fr-download__detail\">{{ detail }}</span>\n        </a>\n      } @else {\n        <!-- Téléchargement avec un bouton (sans métadata) -->\n        <button (linkSelect)=\"onButtonSelect()\" type=\"button\" class=\"fr-download__link\">\n          {{ 'commons.download' | dsfrI18n }} {{ fileName }}\n          <span class=\"fr-download__detail\">{{ detail }}</span>\n        </button>\n      }\n    </p>\n    @if (description) {\n      <p class=\"fr-download__desc\">{{ description }}</p>\n    }\n  </div>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { LinkDownloadComponent } from '../../shared';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrDownloadComponent } from './download.component';\n\n@NgModule({\n  exports: [DsfrDownloadComponent],\n  imports: [CommonModule, LinkDownloadComponent, DsfrI18nPipe, DsfrDownloadComponent],\n})\nexport class DsfrDownloadModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { DsfrDownload, DsfrDownloadComponent } from '../download';\n\n@Component({\n  selector: 'dsfr-downloads-group',\n  templateUrl: './downloads-group.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, DsfrDownloadComponent],\n})\n/**\n * Ce composant permet de proposer une liste de plusieurs téléchargements. Les téléchargements sont des liens\n * présentés sous forme de liste avec des puces. Un lien ne peut pas être un bloc. La description des liens est faite\n * sous forme de tableau.\n */\nexport class DsfrDownloadsGroupComponent {\n  /** @deprecated Titre du groupe de fichiers (facultatif). */\n  @Input() heading?: string;\n\n  /** @deprecated Niveau de titre, '<h4>' par défaut. */\n  @Input() headingLevel?: string;\n\n  /** Tableau des fichiers à lister. */\n  @Input() downloads: DsfrDownload[] = [];\n\n  /**\n   * Propage la valeur de 'route' ou 'link' lors du clic sur un lien.\n   */\n  @Output() downloadSelect = new EventEmitter<string>();\n\n  protected onDownloadSelect(link: string): void {\n    this.downloadSelect.emit(link);\n  }\n}\n","@if (heading) {\n  <div class=\"fr-downloads-group\">\n    @switch (headingLevel) {\n      @case ('H2') {\n        <h2 class=\"fr-downloads-group__title\">{{ heading }}</h2>\n      }\n      @case ('H3') {\n        <h3 class=\"fr-downloads-group__title\">{{ heading }}</h3>\n      }\n      @case ('H5') {\n        <h5 class=\"fr-downloads-group__title\">{{ heading }}</h5>\n      }\n      @case ('H6') {\n        <h6 class=\"fr-downloads-group__title\">{{ heading }}</h6>\n      }\n      @default {\n        <h4 class=\"fr-downloads-group__title\">{{ heading }}</h4>\n      }\n    }\n    <ng-container *ngTemplateOutlet=\"links\"></ng-container>\n  </div>\n} @else {\n  <ng-container *ngTemplateOutlet=\"links\"></ng-container>\n}\n\n<ng-template #links>\n  <ul class=\"fr-links-group\">\n    @for (item of downloads; track $index) {\n      <li>\n        <dsfr-download\n          (downloadSelect)=\"onDownloadSelect($event)\"\n          [fileName]=\"item.fileName\"\n          [label]=\"item.label\"\n          [ariaLabel]=\"item.ariaLabel\"\n          [link]=\"item.link\"\n          [route]=\"item.route\"\n          [mimeType]=\"item.mimeType\"\n          [linkTarget]=\"item.linkTarget\"\n          [sizeBytes]=\"item.sizeBytes\"\n          [langCode]=\"item.langCode\"\n          [assessFile]=\"item.assessFile ?? true\"\n          [directDownload]=\"item.directDownload\"></dsfr-download>\n      </li>\n    }\n  </ul>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrDownloadComponent } from '../download';\nimport { DsfrDownloadsGroupComponent } from './downloads-group.component';\n\n@NgModule({\n  exports: [DsfrDownloadsGroupComponent],\n  imports: [CommonModule, DsfrDownloadComponent, DsfrDownloadsGroupComponent],\n})\nexport class DsfrDownloadsGroupModule {}\n","import { DsfrLink, DsfrLinkTarget } from '../../shared';\n\n/**\n * Utilisé pour le pied de page complet intégrant des listes de liens en rebond de la navigation.\n */\nexport interface DsfrFooterReboundLinks {\n  /** Titre des catégories. */\n  title: string;\n  /** Liste de liens. */\n  links: DsfrLink[];\n}\n\n/**\n * Représentation du bloc partenaire\n */\nexport interface DsfrPartner {\n  /** Source de l'image. */\n  imagePath: string;\n  /** L’alternative de l’image (attribut alt) doit impérativement être renseignée et reprendre le texte visible dans l’image. **/\n  imageAlt: string;\n  /** Valeur du lien. */\n  link: string;\n  /** Target optionnelle, target html par défaut si non renseigné. */\n  linkTarget?: DsfrLinkTarget;\n  /** Modifier la hauteur en rem. */\n  customHeight?: string;\n  /** Message du tooltip (attribut title).   */\n  tooltipMessage?: string;\n}\n\n/**\n * Définit les différents balisages HTML supportés par la présentation du footer.\n */\nexport enum DsfrFooterPresMarkupConst {\n  /**\n   * Pour obtenir un conteneur `<DIV>`.\n   */\n  DIV = 'div',\n  /**\n   * Pour obtenir un conteneur `<P>` par défault.\n   */\n  P = 'p',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrPanelDescMarkupConst}.\n */\nexport type DsfrFooterPresMarkup = `${DsfrFooterPresMarkupConst}`;\n","import { CommonModule } from '@angular/common';\nimport {\n  booleanAttribute,\n  Component,\n  ContentChild,\n  EventEmitter,\n  inject,\n  Input,\n  OnInit,\n  Output,\n  TemplateRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport {\n  DsfrHeadingLevel,\n  DsfrHeadingLevelConst,\n  DsfrI18nPipe,\n  DsfrI18nService,\n  DsfrLink,\n  DsfrLinkTarget,\n  DsfrLinkTargetConst,\n  HeadingComponent,\n} from '../../shared';\nimport { DSFR_CONFIG_TOKEN } from '../../shared/config/config-token';\nimport { DsfrConfig } from '../../shared/config/config.model';\nimport { DsfrLogo } from '../../shared/models/logo.model';\nimport { DISPLAY_MODAL_ID, DsfrDisplayComponent } from '../display';\nimport { DsfrLinkComponent } from '../link';\nimport { ItemLinkComponent } from '../link/item-link.component';\nimport { DsfrFooterPresMarkup, DsfrFooterPresMarkupConst, DsfrFooterReboundLinks, DsfrPartner } from './footer.model';\n\n/**\n * Le niveau de confirmité RGAA du site.\n */\nexport type DsfrAccessibility = 'none' | 'partially' | 'fully-compliant';\n\n@Component({\n  selector: 'dsfr-footer',\n  templateUrl: './footer.component.html',\n  encapsulation: ViewEncapsulation.None,\n  styleUrls: ['./footer.component.scss'],\n  imports: [\n    CommonModule,\n    RouterModule,\n    DsfrLinkComponent,\n    DsfrDisplayComponent,\n    DsfrI18nPipe,\n    ItemLinkComponent,\n    HeadingComponent,\n  ],\n})\nexport class DsfrFooterComponent implements OnInit {\n  /** Liens institutionnels */\n  /** @internal */\n  static readonly DEF_INSTITUTIONAL_LINKS: DsfrLink[] = [\n    {\n      label: 'info.gouv.fr',\n      link: 'https://info.gouv.fr',\n      tooltipMessage: 'info.gouv.fr',\n      linkTarget: '_blank',\n    },\n    {\n      label: 'service-public.gouv.fr',\n      link: 'https://service-public.gouv.fr',\n      tooltipMessage: 'service-public.gouv.fr',\n      linkTarget: '_blank',\n    },\n    {\n      label: 'legifrance.gouv.fr',\n      link: 'https://legifrance.gouv.fr',\n      tooltipMessage: 'legifrance.gouv.fr',\n      linkTarget: '_blank',\n    },\n    { label: 'data.gouv.fr', link: 'https://data.gouv.fr', tooltipMessage: 'data.gouv.fr', linkTarget: '_blank' },\n  ];\n\n  /** Liens réglementaires obligatoires */\n  /** @internal */\n  static readonly DEF_MANDATORY_LINKS: DsfrLink[] = [\n    {\n      label: 'Accessibilité : ',\n      link: 'https://www.info.gouv.fr/accessibilite',\n      linkTarget: '_blank',\n    },\n    { label: 'Mentions légales', link: '#' },\n    {\n      label: 'Données personnelles',\n      link: 'https://www.info.gouv.fr/donnees-personnelles-et-cookies',\n      linkTarget: '_blank',\n    },\n    {\n      label: 'Gestion des cookies',\n      link: 'https://www.info.gouv.fr/donnees-personnelles-et-cookies',\n      linkTarget: '_blank',\n    },\n  ];\n\n  /**\n   * Affichage du lien 'Paramètre d'affichage' pour gérer les modes clair/sombre.\n   */\n  @Input({ transform: booleanAttribute }) display: boolean = false;\n\n  /**\n   * Chemin vers le répertoire exposant les pictogrammes illustratifs DSFR.\n   */\n  @Input() artworkDirPath?: string;\n\n  /** Bloc-marque Marianne. */\n  @Input() logo: DsfrLogo = {\n    label: 'République<br/>Française',\n    tooltipMessage:\n      \"Accueil - [À MODIFIER - texte alternatif de l’image : nom de l'opérateur ou du site serviciel] - République Française\",\n  };\n\n  /** Texte de présentation (html déprécié, utiliser `presentationTemplate` à la place). */\n  @Input() presentation?: string;\n\n  /** Tableau des liens institutionnels - obligatoires. Initialisé par défaut. */\n  @Input() institutionalLinks: DsfrLink[] = DsfrFooterComponent.DEF_INSTITUTIONAL_LINKS;\n\n  /**\n   * Liens d'obligations légales. Cette liste doit être définie en fonction du site, toutefois les liens & contenus suivants\n   * sont obligatoires : “accessibilité : non/partiellement/totalement conforme”, mentions légales, données personnelles et gestion des cookies. - obligatoire.\n   */\n  @Input() mandatoryLinks: DsfrLink[] = DsfrFooterComponent.DEF_MANDATORY_LINKS;\n\n  /** Logo partenaire principal. */\n  @Input() partnerMain?: DsfrPartner;\n\n  /** Le niveau de titre devant être utilisé (tag `H2` par défaut) sur l'élément Nos Partenaires  */\n  @Input() partnerMainHeadingLevel: DsfrHeadingLevel | 'P' = DsfrHeadingLevelConst.H3;\n\n  /** Listes des logos partenaires. */\n  @Input() partnersSub: DsfrPartner[] = [];\n\n  /** Liste de liens de rebond catégorisé. */\n  @Input() reboundLinks: DsfrFooterReboundLinks[] = [];\n\n  /** Le niveau de titre devant être utilisé (tag `H3` par défaut) sur les catégories de liens de rebond. */\n  @Input() reboundLinksHeadingLevel: DsfrHeadingLevel | 'P' = DsfrHeadingLevelConst.H3;\n\n  /** Mention de licence. */\n  @Input() license: string = 'Emplacement de la mention de licence - OBLIGATOIRE.';\n\n  /** Type de balise HTML pour le conteneur de la présentation. <p> par défaut. */\n  @Input() presentationMarkup: DsfrFooterPresMarkup = DsfrFooterPresMarkupConst.P;\n\n  /** Template pour la mention de licence (par ex. pour utiliser un dsfr-link). Remplace license. */\n  @ContentChild('licenseTemplate', { static: true }) licenseTemplate?: TemplateRef<void>;\n\n  /** Template pour le texte de présentation. Remplace `presentation`. Contenu à l'intérieur d'une balise <p>. */\n  @ContentChild('presentationTemplate') presentationTemplate?: TemplateRef<void>;\n\n  /** Indique le lien mandatory sélectionné. */\n  @Output() mandatoryLinkSelect = new EventEmitter<string>();\n\n  /**\n   * Événement émis lorsque le thème change avec la valeur du nouveau thème : `light`, `dark` ou `system`.\n   */\n  @Output() displayChange = new EventEmitter<string>();\n\n  protected _useDeprecatedPictoPath = false;\n  private readonly i18n = inject(DsfrI18nService);\n  private readonly config = inject<DsfrConfig>(DSFR_CONFIG_TOKEN);\n\n  /** @internal */\n  constructor() {}\n\n  get pictoPath(): string | undefined {\n    return this.artworkDirPath;\n  }\n\n  get displayModalId() {\n    return DISPLAY_MODAL_ID;\n  }\n\n  /**\n   * Chemin des pictogrammes (du composant display) renseigné par le développeur.\n   *\n   * Note: ce chemin doit permettre de récupérer directement les fichiers SVG suivants : moon.svg, sun.svg, system.svg\n   *\n   * @deprecated Use `artworkDirPath` instead.\n   */\n  @Input() set pictoPath(path: string) {\n    this.artworkDirPath = path;\n    this._useDeprecatedPictoPath = true;\n  }\n\n  /** Mention légale de la conformité d'accessibilité (none / partially / fully-compliant) */\n  @Input() set accessibility(accessibility: DsfrAccessibility) {\n    let labelAccessibility: string = 'Accessibilité : non conforme';\n    switch (accessibility) {\n      case 'fully-compliant':\n        labelAccessibility = 'Accessibilité : totalement conforme';\n        break;\n      case 'partially':\n        labelAccessibility = 'Accessibilité : partiellement conforme';\n        break;\n    }\n\n    DsfrFooterComponent.DEF_MANDATORY_LINKS[0].label = labelAccessibility;\n  }\n\n  ngOnInit(): void {\n    if (this.artworkDirPath === undefined && this.config.artworkDirPath) {\n      this.artworkDirPath = this.config.artworkDirPath;\n    }\n  }\n\n  /** @internal */\n  getLinkTarget(item: DsfrLink): DsfrLinkTarget | undefined {\n    return item.target ?? item.linkTarget;\n  }\n\n  /** @internal */\n  onMandatoryLinkSelect(link: string) {\n    this.mandatoryLinkSelect.emit(link);\n  }\n\n  protected onDisplayChange(theme: string) {\n    this.displayChange.emit(theme);\n  }\n\n  protected tooltipMessagePartner(partner: DsfrPartner): string | undefined {\n    if (partner.linkTarget === DsfrLinkTargetConst.BLANK) {\n      return partner.tooltipMessage\n        ? `${partner.tooltipMessage} - ${this.i18n.t('link.newWindow')}`\n        : `${this.i18n.t('link.newWindow')}`;\n    }\n    return partner.tooltipMessage;\n  }\n}\n","<footer class=\"fr-footer\" role=\"contentinfo\" id=\"footer\">\n  <!-- ReboundLinks -->\n  @if (reboundLinks && reboundLinks.length >= 1) {\n    <div class=\"fr-footer__top\">\n      <div class=\"fr-container\">\n        <!-- BUG: Classe 'fr-grid-row--start' inconnue en DSFR 1.9.3 -->\n        <div class=\"fr-grid-row fr-grid-row--start fr-grid-row--gutters\">\n          @for (item of reboundLinks; track $index) {\n            <div class=\"fr-col-12 fr-col-sm-3 fr-col-md-2\">\n              <edu-heading defaultLevel=\"H3\" [level]=\"reboundLinksHeadingLevel\" customClass=\"fr-footer__top-cat\">\n                {{ item.title }}\n              </edu-heading>\n              <ul class=\"fr-footer__top-list\">\n                @for (link of item.links; track $index) {\n                  <li>\n                    <edu-item-link [item]=\"link\" customClass=\"fr-footer__top-link\"></edu-item-link>\n                  </li>\n                }\n              </ul>\n            </div>\n          }\n        </div>\n      </div>\n    </div>\n  }\n\n  <div class=\"fr-container\">\n    <div class=\"fr-footer__body\">\n      <div class=\"fr-footer__brand fr-enlarge-link\">\n        <!-- Bloc avec logo opérateur -->\n        @if (logo.imagePath) {\n          <p class=\"fr-logo\" [innerHTML]=\"logo.label\"></p>\n          <dsfr-link\n            [customClass]=\"'fr-footer__brand-link'\"\n            [link]=\"logo.link ?? logo.navigation?.link ?? ''\"\n            [linkTarget]=\"logo.navigation?.linkTarget\"\n            [ariaCurrentWhenActive]=\"false\"\n            [route]=\"logo.navigation?.route ?? ''\"\n            [tooltipMessage]=\"logo.tooltipMessage ? logo.tooltipMessage : ''\"\n            [routePath]=\"logo.navigation?.routerLink ?? ''\">\n            <img\n              class=\"fr-footer__logo\"\n              [ngClass]=\"logo.customClass || 'defaults'\"\n              [src]=\"logo.imagePath\"\n              [attr.alt]=\"logo.imageAlt\" />\n          </dsfr-link>\n        } @else {\n          <!-- Bloc sans logo opérateur -->\n          <dsfr-link\n            customClass=\"edu-link\"\n            [link]=\"logo.link ?? logo.navigation?.link ?? ''\"\n            [linkTarget]=\"logo.navigation?.linkTarget\"\n            [ariaCurrentWhenActive]=\"false\"\n            [route]=\"logo.navigation?.route ?? ''\"\n            [tooltipMessage]=\"logo.tooltipMessage ? logo.tooltipMessage : ''\"\n            [routePath]=\"logo.navigation?.routerLink ?? ''\">\n            <p class=\"fr-logo\" [innerHTML]=\"logo.label\"></p>\n          </dsfr-link>\n        }\n      </div>\n      <div class=\"fr-footer__content\">\n        @if (presentation) {\n          @if (presentationMarkup === 'p') {\n            <p class=\"fr-footer__content-desc\" [innerHtml]=\"presentation\"></p>\n          } @else {\n            <div class=\"fr-footer__content-desc\" [innerHtml]=\"presentation\"></div>\n          }\n        }\n\n        @if (presentationTemplate && !presentation) {\n          @if (presentationMarkup === 'p') {\n            <p class=\"fr-footer__content-desc\">\n              <ng-container [ngTemplateOutlet]=\"presentationTemplate\"></ng-container>\n            </p>\n          } @else {\n            <div class=\"fr-footer__content-desc\">\n              <ng-container [ngTemplateOutlet]=\"presentationTemplate\"></ng-container>\n            </div>\n          }\n        }\n\n        <ul class=\"fr-footer__content-list\">\n          @for (item of institutionalLinks; track $index) {\n            <li class=\"fr-footer__content-item\">\n              <!-- BUG: Classe 'fr-footer__content-item' inconnue en DSFR 1.9.3 -->\n              <edu-item-link [item]=\"item\" customClass=\"fr-footer__content-link\"></edu-item-link>\n            </li>\n          }\n        </ul>\n      </div>\n    </div>\n    <!--Bloc avec partenaires-->\n    @if (partnerMain) {\n      <div class=\"fr-footer__partners\">\n        <edu-heading defaultLevel=\"H2\" [level]=\"partnerMainHeadingLevel\" customClass=\"fr-footer__partners-title\">\n          {{ 'footer.partners.title' | dsfrI18n }}\n        </edu-heading>\n        <div class=\"fr-footer__partners-logos\">\n          <div class=\"fr-footer__partners-main\">\n            <a\n              class=\"fr-footer__partners-link\"\n              [href]=\"partnerMain.link\"\n              [attr.title]=\"tooltipMessagePartner(partnerMain) ?? null\"\n              [attr.target]=\"partnerMain.linkTarget || null\">\n              <img\n                class=\"fr-footer__logo\"\n                [ngStyle]=\"{\n                  height: partnerMain.customHeight ? partnerMain.customHeight : '5.625rem',\n                }\"\n                [src]=\"partnerMain.imagePath\"\n                [attr.alt]=\"partnerMain.imageAlt\" />\n            </a>\n          </div>\n          @if (partnersSub) {\n            <div class=\"fr-footer__partners-sub\">\n              <ul>\n                @for (item of partnersSub; track $index) {\n                  <li>\n                    <a\n                      class=\"fr-footer__partners-link\"\n                      [attr.title]=\"tooltipMessagePartner(item) ?? null\"\n                      [href]=\"item.link\"\n                      [attr.target]=\"item.linkTarget || null\">\n                      <img\n                        class=\"fr-footer__logo\"\n                        [ngStyle]=\"{ height: item.customHeight ? item.customHeight : '5.625rem' }\"\n                        [src]=\"item.imagePath\"\n                        [attr.alt]=\"item.imageAlt\" />\n                    </a>\n                  </li>\n                }\n              </ul>\n            </div>\n          }\n        </div>\n      </div>\n    }\n    <!-- Bottom ------------------------------------------------------------------------------------------------------->\n    <div class=\"fr-footer__bottom\">\n      <ul class=\"fr-footer__bottom-list\">\n        @for (item of mandatoryLinks; track $index) {\n          <li class=\"fr-footer__bottom-item\">\n            <edu-item-link\n              [item]=\"item\"\n              customClass=\"fr-footer__bottom-link\"\n              (linkSelect)=\"onMandatoryLinkSelect($event)\"></edu-item-link>\n          </li>\n        }\n        @if (display) {\n          <li class=\"fr-footer__bottom-item\">\n            <button\n              type=\"button\"\n              class=\"fr-footer__bottom-link fr-fi-theme-fill fr-link--icon-left\"\n              [attr.aria-controls]=\"displayModalId\"\n              data-fr-opened=\"false\">\n              {{ 'footer.display' | dsfrI18n }}\n            </button>\n          </li>\n        }\n      </ul>\n      <div class=\"fr-footer__bottom-copy\">\n        @if (licenseTemplate) {\n          <p><ng-container [ngTemplateOutlet]=\"licenseTemplate\"></ng-container></p>\n        } @else {\n          <p [innerHTML]=\"license\"></p>\n        }\n      </div>\n    </div>\n  </div>\n</footer>\n\n@if (display && _useDeprecatedPictoPath) {\n  <dsfr-display (displayChange)=\"onDisplayChange($event)\" [pictoPath]=\"artworkDirPath ?? ''\"></dsfr-display>\n} @else if (display && !_useDeprecatedPictoPath) {\n  <dsfr-display (displayChange)=\"onDisplayChange($event)\" [artworkDirPath]=\"artworkDirPath\"></dsfr-display>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrDisplayComponent } from '../display';\nimport { DsfrLinkComponent } from '../link';\nimport { ItemLinkComponent } from '../link/item-link.component';\nimport { DsfrFooterComponent } from './footer.component';\n\n@NgModule({\n  exports: [DsfrFooterComponent],\n  imports: [\n    CommonModule,\n    RouterModule,\n    DsfrLinkComponent,\n    DsfrDisplayComponent,\n    DsfrI18nPipe,\n    ItemLinkComponent,\n    DsfrFooterComponent,\n  ],\n})\nexport class DsfrFooterModule {}\n","import { CommonModule } from '@angular/common';\nimport { booleanAttribute, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\n\n@Component({\n  selector: 'dsfr-franceconnect',\n  templateUrl: './franceconnect.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, DsfrI18nPipe],\n})\nexport class DsfrFranceConnectComponent {\n  /** Utilisation de FranceConnect+ (qui est plus sécurisé). */\n  @Input({ transform: booleanAttribute }) secure: boolean = false;\n\n  /** Demande de connexion par FranceConnect */\n  @Output() franceConnectSelect = new EventEmitter<boolean>();\n\n  /** @internal */\n  onConnect() {\n    this.franceConnectSelect.emit(this.secure);\n  }\n}\n","<div class=\"fr-connect-group\">\n  <button\n    type=\"button\"\n    [class]=\"{\n      'fr-connect': true,\n      'fr-connect--plus': secure,\n    }\"\n    (click)=\"onConnect()\">\n    <span class=\"fr-connect__login\">{{ 'franceConnect.title' | dsfrI18n }}</span>\n    <span class=\"fr-connect__brand\">FranceConnect</span>\n  </button>\n  <p>\n    <a\n      [href]=\"secure ? 'https://franceconnect.gouv.fr/france-connect-plus' : 'https://franceconnect.gouv.fr/'\"\n      target=\"_blank\"\n      rel=\"noopener\"\n      [title]=\"'franceConnect.link.tooltip' | dsfrI18n\"\n      >{{ 'franceConnect.link.label' | dsfrI18n }}{{ secure ? '+' : '' }} ?</a\n    >\n  </p>\n</div>\n","import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { DsfrLink } from '../../../shared';\nimport { DsfrI18nPipe } from '../../../shared/i18n/i18n.pipe';\nimport { DsfrLinkComponent } from '../../link';\nimport { ItemLinkComponent } from '../../link/item-link.component';\nimport { DsfrMegaMenu } from './mega-menu.model';\n\n@Component({\n  selector: 'dsfr-mega-menu',\n  templateUrl: './mega-menu.component.html',\n  styleUrls: ['./mega-menu.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [FormsModule, ItemLinkComponent, DsfrLinkComponent, RouterModule, DsfrI18nPipe],\n})\nexport class DsfrMegaMenuComponent {\n  @Input({ required: true }) megaMenu!: DsfrMegaMenu;\n  @Input({ required: true }) idMenu!: string;\n\n  /**Emet l'évènement Event du DOM à la sélection d'un lien */\n  @Output() linkSelect = new EventEmitter<DsfrLink>();\n\n  /**Emet l'évènement Event du DOM à la fermeture du méga menu */\n  @Output() closeSelect = new EventEmitter<Event>();\n\n  onLink(event: DsfrLink) {\n    this.linkSelect.emit(event);\n  }\n\n  onClose() {\n    this.closeSelect.emit();\n  }\n\n  // Support ancien type string (1.18), a supprimer en V2\n  protected isString(value: unknown): value is string {\n    return typeof value === 'string';\n  }\n}\n","<div class=\"fr-container fr-container--fluid fr-container-lg\">\n  <div class=\"fr-grid-row fr-grid-row-lg--gutters\">\n    <div class=\"fr-col-12 fr-mb-n3v\">\n      <button\n        type=\"button\"\n        (click)=\"onClose()\"\n        class=\"fr-btn--close fr-btn\"\n        [title]=\"'commons.close' | dsfrI18n\"\n        [attr.aria-controls]=\"'mega-menu-' + idMenu\">\n        {{ 'commons.close' | dsfrI18n }}\n      </button>\n    </div>\n    @if (megaMenu.leader) {\n      <div class=\"fr-col-12 fr-col-lg-8 fr-col-offset-lg-4--right\">\n        <div class=\"fr-mega-menu__leader\">\n          <h4 class=\"fr-h4 fr-mb-2v\">{{ megaMenu.leader.title }}</h4>\n          @if (megaMenu.leader.text) {\n            <p>{{ megaMenu.leader.text }}</p>\n          }\n          @if (megaMenu.leader.link) {\n            <edu-item-link\n              [item]=\"megaMenu.leader.link\"\n              [icon]=\"'fr-icon-arrow-right-line'\"\n              (linkSelect)=\"onLink(megaMenu.leader.link)\"></edu-item-link>\n          }\n        </div>\n      </div>\n    }\n    @for (category of megaMenu.categories; track category.label) {\n      <div class=\"fr-col-12 fr-col-lg-3\">\n        @if (category.label) {\n          <h5 class=\"fr-mega-menu__category\">\n            @if (!category.link) {\n              <span class=\"fr-nav__link\">{{ category.label }}</span>\n            } @else if (isString(category.link)) {\n              <dsfr-link\n                [label]=\"category.label\"\n                [customClass]=\"'fr-nav__link'\"\n                [link]=\"category.link\"\n                linkTarget=\"_self\">\n              </dsfr-link>\n            } @else {\n              <edu-item-link\n                [item]=\"category.link\"\n                [customClass]=\"'fr-nav__link'\"\n                (linkSelect)=\"onLink(category.link)\"></edu-item-link>\n            }\n          </h5>\n        }\n        <ul class=\"fr-mega-menu__list\">\n          @for (link of category.subItems; track $index) {\n            <li>\n              @if (link) {\n                <edu-item-link [item]=\"link\" customClass=\"fr-nav__link\" (linkSelect)=\"onLink(link)\"></edu-item-link>\n              }\n            </li>\n          }\n        </ul>\n      </div>\n    }\n  </div>\n</div>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { DsfrLink } from '../../../shared';\nimport { ItemLinkComponent } from '../../link/item-link.component';\n\n@Component({\n  selector: 'dsfr-tool-link',\n  template: `\n    <edu-item-link\n      [customClass]=\"'fr-btn ' + (link.customClass ?? '')\"\n      [defaultIconPosition]=\"link.iconPosition ?? undefined\"\n      (linkSelect)=\"onLinkSelect(link)\"\n      [item]=\"link\">\n    </edu-item-link>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  styles: [' .edu-tools-links.fr-header__tools-links  { display: block}'],\n  imports: [ItemLinkComponent],\n})\nexport class DsfrToolLinkComponent {\n  /** Lien rapide */\n  @Input({ required: true }) link!: DsfrLink;\n\n  /** Evènement émis au clic sur un lien */\n  @Output() readonly linkSelect = new EventEmitter<DsfrLink>();\n\n  protected onLinkSelect(link: DsfrLink) {\n    this.linkSelect.emit(link);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterContentInit,\n  booleanAttribute,\n  Component,\n  DestroyRef,\n  EventEmitter,\n  inject,\n  input,\n  Input,\n  OnInit,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { debounceTime, distinctUntilChanged, map, Subject } from 'rxjs';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrI18nService } from '../../shared/i18n/i18n.service';\nimport { newUniqueId } from '../../shared/utils/uuid-utils';\n\n@Component({\n  selector: 'dsfr-search-bar',\n  templateUrl: './search-bar.component.html',\n  styleUrl: './search-bar.component.scss',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, FormsModule, DsfrI18nPipe],\n})\nexport class DsfrSearchBarComponent implements AfterContentInit, OnInit {\n  /** Attribut 'id' du champ de recherche, généré automatiquement par défaut. */\n  @Input() inputId?: string;\n\n  /** Texte du bouton\n   * @deprecated (since 1.14.0) Cette propriété n'est pas utilisée, utilisez buttonTitle à la place.\n   */\n  @Input() buttonText?: string;\n\n  /** Permet de positionner la valeur de la barre de recherche. */\n  @Input() value?: string;\n\n  /** Emet le texte lors de l'évènement keyup sur l'input de recherche. */\n  @Output() searchChange = new EventEmitter<string>();\n\n  /** Emet le texte lors du clic sur le bouton \"rechercher\". */\n  @Output() searchSelect: EventEmitter<string> = new EventEmitter<string>();\n\n  /** Label (lecteurs d’écran). */\n  label = input<string>();\n\n  /** Version large du composant. */\n  large = input(false, { transform: booleanAttribute });\n\n  /** Placeholder de l’input. */\n  placeholder = input<string>();\n\n  /** Attribut title du bouton. */\n  buttonTitle = input<string>();\n\n  /** Pattern de l’input. */\n  pattern = input<string | RegExp>();\n\n  /** Soumettre à l’appui sur Entrée. */\n  triggerSearchOnEnter = input(false, { transform: booleanAttribute });\n\n  /** Attribut maxLength de l’input. */\n  maxLength = input<number>();\n\n  /**\n   * Le délai (en millisecondes) pour déclencher l'événement de changement de saisie et de filtrage.\n   * Par défaut la valeur est 0\n   */\n  delay = input<number>(0);\n\n  protected defaultButtonTitle: string | null | undefined;\n  protected readonly i18n = inject(DsfrI18nService);\n\n  private _id: string | undefined;\n  private inputChange$ = new Subject<KeyboardEvent>(); // Subject pour capturer les changements d'input\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor() {}\n\n  get formId() {\n    return 'search-form-' + this.inputId;\n  }\n\n  /**\n   * Positionne la valeur initiale de la barre de recherche.\n   *\n   * @deprecated (since 1.15) Utiliser la propriété `value` à la place\n   */\n  @Input() set initialValue(initialValue: string | undefined) {\n    this.value = initialValue;\n  }\n\n  /**\n   * Cet attribut doit être utilisé en tant que propriété et non en attribut, ex. [id]=\"'monid'\"\n   *\n   * @deprecated Utiliser la propriété `inputId` à la place\n   */\n  @Input() set id(value: string | undefined) {\n    if (value) {\n      this._id = value;\n      this.inputId ??= this._id;\n    }\n  }\n\n  ngOnInit() {\n    this.inputChange$\n      .pipe(\n        map((e: KeyboardEvent) => (e.target as HTMLInputElement).value),\n        debounceTime(this.delay()),\n        distinctUntilChanged(),\n        takeUntilDestroyed(this.destroyRef),\n      )\n      .subscribe(() => this.handleSearchChange());\n  }\n\n  ngAfterContentInit() {\n    if (!this.inputId) this.inputId = newUniqueId();\n  }\n\n  protected inputSearchChange(event: KeyboardEvent) {\n    this.inputChange$.next(event);\n  }\n\n  /** @internal */\n  protected onSearchSelect() {\n    this.searchSelect.emit(this.value);\n  }\n\n  /**\n   * Si le libellé du bouton est identique au libellé potentiel du tooltip, il ne faut pas positionner de tooltip.\n   */\n  protected getButtonTitleValue(): string | null {\n    const defaultTitle = this.i18n.t('commons.search');\n\n    return this.buttonText === defaultTitle ? null : defaultTitle;\n  }\n\n  private handleSearchChange() {\n    this.searchChange.emit(this.value);\n  }\n}\n","<div [class.fr-search-bar--lg]=\"large()\" class=\"fr-search-bar\" [id]=\"formId\" role=\"search\">\n  <label class=\"fr-label\" for=\"{{ inputId }}\"> {{ label() ?? ('commons.search' | dsfrI18n) }} </label>\n\n  @if (triggerSearchOnEnter()) {\n    <!-- edugouvfr-variant -->\n    <form class=\"edu-search-bar-form\" (submit)=\"onSearchSelect()\">\n      <ng-container *ngTemplateOutlet=\"searchTemplate\"></ng-container>\n    </form>\n  } @else {\n    <ng-container *ngTemplateOutlet=\"searchTemplate\"></ng-container>\n  }\n</div>\n\n<ng-template #searchTemplate>\n  <input\n    type=\"search\"\n    class=\"fr-input\"\n    [placeholder]=\"placeholder() ?? ('commons.search' | dsfrI18n)\"\n    (keyup)=\"inputSearchChange($event)\"\n    [attr.maxlength]=\"maxLength() || null\"\n    [id]=\"inputId\"\n    [pattern]=\"pattern() ?? ''\"\n    name=\"{{ inputId || null }}\"\n    [(ngModel)]=\"value\" />\n\n  <button\n    class=\"fr-btn\"\n    id=\"search-btn-{{ inputId }}\"\n    [type]=\"triggerSearchOnEnter() ? 'submit' : 'button'\"\n    [attr.title]=\"buttonTitle() ?? this.getButtonTitleValue()\">\n    {{ 'commons.search' | dsfrI18n }}\n  </button>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrI18nPipe } from '../../shared';\nimport { DsfrSearchBarComponent } from './search-bar.component';\n\n@NgModule({\n  exports: [DsfrSearchBarComponent],\n  imports: [CommonModule, FormsModule, DsfrI18nPipe, DsfrSearchBarComponent],\n})\nexport class DsfrSearchBarModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  DOCUMENT,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnInit,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrI18nPipe, LangService, newUniqueId } from '../../shared';\nimport { DsfrLang } from './lang.model';\n\n@Component({\n  selector: 'dsfr-translate',\n  templateUrl: './translate.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, FormsModule, DsfrI18nPipe],\n})\n/** Composant de sélection de la langue. */\nexport class DsfrTranslateComponent implements OnInit {\n  /** Liste des langues proposées à l'utilisateur. */\n  @Input() languages: DsfrLang[] = [];\n\n  /** Sans bordure si 'false' */\n  @Input() outline = true;\n\n  /** Événement émit uniquement si la langue sélectionnée ne contient pas de href. Il contient le code de la langue. */\n  @Output() langChange = new EventEmitter<string>();\n\n  protected collapseId: string = '';\n\n  private readonly langService = inject(LangService);\n  private readonly elementRef = inject(ElementRef);\n  private readonly document = inject<Document>(DOCUMENT);\n\n  get currentLangCode(): string {\n    return this.langService.lang;\n  }\n\n  get currentLabel(): string {\n    let label = '';\n    const language = this.getCurrentLang();\n\n    if (language && language.label) {\n      label = language.label;\n    }\n\n    return label;\n  }\n\n  /** Force la langue courante. */\n  @Input() set currentLangCode(value: string) {\n    this.langService.lang = value; // Informe le service\n    this.setDocLang(value); // Positionne la langue dans le document html\n  }\n\n  ngOnInit() {\n    this.collapseId = newUniqueId();\n  }\n\n  protected onClick(event: Event, lang: DsfrLang) {\n    this.currentLangCode = lang.value;\n\n    if (!lang.link) {\n      event.preventDefault();\n      // Si on ne déclenche pas le href, on est obligé de fermer manuellement le composant\n      this.collapse();\n      this.langChange.emit(lang.value);\n    }\n  }\n\n  private getCurrentLang(): DsfrLang | undefined {\n    return this.languages.find((l) => l.value === this.currentLangCode);\n  }\n\n  private collapse() {\n    const nativeElt = this.elementRef.nativeElement;\n    const buttonElt = nativeElt.querySelector('button');\n    if (buttonElt) {\n      buttonElt.setAttribute('aria-expanded', 'false');\n      buttonElt.setAttribute('data-fr-js-collapse-button', true);\n    }\n  }\n\n  /** Positionne l'attribut lang dans la balise html, ex : lang=\"fr\" */\n  private setDocLang(codeLang: string) {\n    this.document?.documentElement.setAttribute('lang', codeLang);\n  }\n}\n","<div class=\"fr-translate fr-nav\">\n  <div class=\"fr-nav__item\">\n    <button\n      type=\"button\"\n      [ngClass]=\"{\n        'fr-translate__btn': true,\n        'fr-btn fr-btn--tertiary': outline,\n        'fr-btn--tertiary-no-outline': !outline,\n      }\"\n      [attr.aria-controls]=\"collapseId\"\n      aria-expanded=\"false\"\n      title=\"{{ 'translate.tooltip' | dsfrI18n }}\">\n      {{ currentLangCode.toUpperCase() }}<span class=\"fr-hidden-lg\">&nbsp;- {{ currentLabel }}</span>\n    </button>\n    <div class=\"fr-collapse fr-translate__menu fr-menu\" [id]=\"collapseId\">\n      <ul class=\"fr-menu__list\">\n        @for (lang of languages; track $index) {\n          <li>\n            <a\n              class=\"fr-translate__language fr-nav__link\"\n              hreflang=\"{{ lang.value }}\"\n              lang=\"{{ lang.value }}\"\n              [href]=\"lang.link ? lang.link : lang.value\"\n              [attr.aria-current]=\"lang.value === currentLangCode ? true : null\"\n              (click)=\"onClick($event, lang)\">\n              {{ lang.value.toUpperCase() }}&nbsp;- {{ lang.label }}\n            </a>\n          </li>\n        }\n      </ul>\n    </div>\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrTranslateComponent } from './translate.component';\n\n@NgModule({\n  exports: [DsfrTranslateComponent],\n  imports: [CommonModule, FormsModule, DsfrI18nPipe, DsfrTranslateComponent],\n})\nexport class DsfrTranslateModule {}\n","import { AfterViewInit, Directive, ElementRef, inject } from '@angular/core';\n\n/**\n * Directive pour wrapper les éléments d'un container ul avec des li\n * fixme : probleme lorsque les éléments sont générés dynamiquements et avec ng-template :\n * Dans le cas ou des éléments sont supprimés dynamiquement, erreur insertBefore angular.\n * Tests à refaire pour le cas du ng-content. Code commenté a supprimer si non concluant.\n * On conserve la directive, pour ajouter des warning sur les éléments qui ne sont pas wrappés\n */\n@Directive({\n  selector: '[eduWrapWithLi]',\n  standalone: true,\n})\nexport class EduWrapWithLiDirective implements AfterViewInit {\n  private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n\n  ngAfterViewInit(): void {\n    // this.wrapChildren();\n    this.warningChildren();\n\n    /* \n    // Observe les ajouts dynamiques (si ngTemplateOutlet, etc.)\n    this.mutationObserver = new MutationObserver(() => this.wrapChildren());\n    this.mutationObserver.observe(this.el.nativeElement, {\n      childList: true,\n      subtree: false,\n    });*/\n  }\n\n  private warningChildren() {\n    const container = this.el.nativeElement;\n\n    for (const elem of Array.from(container?.children)) {\n      if (elem?.parentElement?.tagName !== 'LI' && elem?.tagName !== 'LI') {\n        console.warn('Chaque élément de toolsLinksTemplate doit être contenu dans un <li>');\n      }\n    }\n  }\n\n  /*\n  private wrapChildren() {\n      this.mutationObserver?.disconnect();\n    const container = this.el.nativeElement;\n\n    DomUtils.surroundNativeElementsWithLi(this.el, Array.from(container?.children));\n\n    this.mutationObserver?.observe(container, { childList: true, subtree: false });\n  }*/\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  TemplateRef,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { DsfrI18nPipe, DsfrLink } from '../../../shared';\nimport { EduWrapWithLiDirective } from '../../../shared/directives/wrap-li.directive';\nimport { DsfrToolLinkComponent } from './tool-link.component';\n\n/**\n * Composant interne représentant le container des liens d'accès rapides du header\n */\n@Component({\n  selector: 'edu-tools-links',\n  templateUrl: './tools-links.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  styles: [' .edu-tools-links.fr-header__tools-links  { display: block}'],\n  imports: [DsfrToolLinkComponent, EduWrapWithLiDirective, DsfrI18nPipe, CommonModule],\n})\nexport class EduToolsLinksComponent {\n  /** Liste des liens rapides */\n  @Input({ required: true }) toolsLinks: DsfrLink[] = [];\n\n  /** Composant display à afficher */\n  @Input({ transform: booleanAttribute }) showDisplay: boolean = false;\n\n  /** identifiant du display */\n  @Input({ required: true }) displayId!: string;\n\n  /** Template optionnel des accès rapides */\n  @Input() toolsLinksTemplate?: TemplateRef<void>;\n\n  /** Nombre maximum de liens d'accès rapides (3)  */\n  @Input() maxToolsLinks = 3;\n\n  /** Evènement émis au clic sur un lien */\n  @Output() readonly linkSelect = new EventEmitter<DsfrLink>();\n\n  /* Référence du container depuis le composant header (pour duplication en mobile) */\n  readonly toolsLinksListRef = viewChild<ElementRef<HTMLElement>>('toolsLinksList');\n\n  protected onLinkSelect(link: DsfrLink) {\n    this.linkSelect.emit(link);\n  }\n}\n","@if ((toolsLinks && toolsLinks.length > 0) || showDisplay || toolsLinksTemplate) {\n  <ul class=\"fr-btns-group\" eduWrapWithLi #toolsLinksList>\n    @if (toolsLinks && toolsLinks.length > 0) {\n      @for (item of toolsLinks; track i; let i = $index) {\n        @if (i < maxToolsLinks) {\n          <li><dsfr-tool-link (linkSelect)=\"onLinkSelect(item)\" [link]=\"item\"></dsfr-tool-link></li>\n        }\n      }\n    }\n    @if (toolsLinksTemplate) {\n      <ng-container *ngTemplateOutlet=\"toolsLinksTemplate\"></ng-container>\n    }\n    @if (showDisplay) {\n      <li>\n        <button type=\"button\" class=\"fr-btn fr-icon-theme-fill\" [attr.aria-controls]=\"displayId\" data-fr-opened=\"false\">\n          {{ 'display.heading' | dsfrI18n }}\n        </button>\n      </li>\n    }\n  </ul>\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  computed,\n  ContentChild,\n  effect,\n  ElementRef,\n  EventEmitter,\n  inject,\n  input,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n  Signal,\n  TemplateRef,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { DsfrDisableRouterLinkDirective, DsfrI18nPipe, DsfrLink, DsfrNavigation, newUniqueId } from '../../shared';\nimport { DSFR_CONFIG_TOKEN } from '../../shared/config/config-token';\nimport { DsfrConfig } from '../../shared/config/config.model';\nimport { DsfrLogo } from '../../shared/models/logo.model';\nimport { DsfrBadgeComponent } from '../badge';\nimport { DISPLAY_MODAL_ID, DsfrDisplayComponent } from '../display';\nimport { DsfrLinkComponent } from '../link';\nimport { ItemLinkComponent } from '../link/item-link.component';\nimport { DsfrSearchBarComponent } from '../search-bar';\nimport { DsfrTranslateModule } from '../translate';\nimport { DsfrMegaMenuComponent } from './component/mega-menu.component';\nimport { EduToolsLinksComponent } from './component/tools-links.component';\nimport { DsfrHeaderMenuItem, DsfrHeaderTranslate } from './header.model';\n\n/**\n * Modèle de présentation interne du menu.\n */\nexport class ViewMenu {\n  /**\n   * Identifiant unique du menu.\n   */\n  public menuId: string;\n\n  constructor(/** Menu wrappé */ public menu: DsfrHeaderMenuItem) {\n    this.menuId = newUniqueId();\n  }\n}\n\n@Component({\n  selector: 'dsfr-header',\n  templateUrl: './header.component.html',\n  styleUrls: ['./header.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    CommonModule,\n    FormsModule,\n    RouterModule,\n    DsfrSearchBarComponent,\n    ItemLinkComponent,\n    DsfrTranslateModule,\n    DsfrDisplayComponent,\n    DsfrLinkComponent,\n    DsfrMegaMenuComponent,\n    DsfrDisableRouterLinkDirective,\n    EduToolsLinksComponent,\n    DsfrI18nPipe,\n    DsfrBadgeComponent,\n  ],\n})\nexport class DsfrHeaderComponent implements OnInit, AfterViewInit, OnDestroy {\n  /** Slot contenant la liste des tools links. Ils seront placés dans un container `<ul>` */\n  @ContentChild('toolsLinksTemplate', { static: true }) toolsLinksTemplate?: TemplateRef<void>;\n\n  /** Slot contenant une barre de recherche personnalisée (par ex. avec autocomplétion) */\n  @ContentChild('searchBarTemplate', { static: true }) searchBarTemplate?: TemplateRef<void>;\n\n  /** Slot custom de toolLinks supplémentaire sur le header pour la version desktop\n   * @deprecated (since 1.15) utiliser toolsLinksTemplate\n   */\n  @ContentChild('headerTools', { static: true }) headerTools?: TemplateRef<void>;\n\n  /** Slot custom de toolLinks supplémentaire sur le header pour la version mobile\n   * @deprecated (since 1.15) utiliser toolsLinksTemplate\n   */\n  @ContentChild('headerToolsMobile', { static: true }) headerToolsMobile?: TemplateRef<void>;\n\n  /** Slot pour personnaliser le nom du service. Peut contenir le nom et un badge */\n  @ContentChild('serviceTitleTemplate', { static: true }) serviceTitleTemplate?: TemplateRef<void>;\n\n  /** Slot custom pour personnaliser le tagline (description) du service */\n  @ContentChild('serviceTaglineTemplate', { static: true }) serviceTaglineTemplate?: TemplateRef<void>;\n\n  /**\n   * Chemin vers le répertoire exposant les pictogrammes illustratifs DSFR.\n   */\n  @Input() artworkDirPath?: string;\n\n  /**\n   * Boolean pour afficher le badge Beta. Pour un badge différent utiliser un dsfr-badge avec le slot serviceTitleTemplate.\n   */\n  @Input() beta = false;\n\n  /**\n   * Définit le bloc-marque Marianne + opérateur.\n   *\n   * @since 1.16.0\n   */\n  @Input() logo: DsfrLogo = { label: 'République<br/>Française' };\n\n  /**\n   * Identifiant de la navigation principale, généré par défaut\n   */\n  @Input() navigationId?: string;\n\n  /** Nom du service. */\n  @Input() serviceTitle?: string;\n\n  /** Tagline du service. */\n  @Input() serviceTagline?: string;\n\n  /**\n   * Permet d'afficher la barre de recherche.\n   */\n  @Input() searchBar = false;\n\n  /**\n   * Valeur du title du bouton de la barre de recherche, si searchBar est `true`.\n   */\n  @Input() searchButtonTitle?: string;\n\n  /**\n   * Label de la barre de recherche (pour les lecteurs d'écrans).\n   */\n  @Input() searchLabel = 'Rechercher';\n\n  /**\n   * Valeur de l'input de recherche, si searchBar est `true`.\n   */\n  @Input() searchInputValue?: string;\n\n  /**\n   * Valeur du placeholder de l'input de recherche, si searchBar est `true`.\n   */\n  @Input() searchInputPlaceholder?: string;\n\n  /**\n   * Permet de soumettre la recherche à l'appui sur la touche Entrée.\n   */\n  @Input() triggerSearchOnEnter: boolean = false;\n\n  /**\n   * Permet d'afficher le selecteur de langue pour l'internationalisation.\n   *\n   * @see DsfrHeaderTranslate\n   */\n  @Input() translate?: DsfrHeaderTranslate;\n\n  /**\n   * Renvoie le code de la langue au changement de langue (si `showTranslate`).\n   */\n  @Output() readonly langChange = new EventEmitter<string>();\n\n  /**\n   * Renvoie le lien lors d'un clic sur un lien en mode `route`.\n   */\n  @Output() readonly linkSelect = new EventEmitter<DsfrLink>();\n\n  /**\n   * Renvoie la valeur de l'input de la barre de recherche au changement.\n   */\n  @Output() readonly searchChange: EventEmitter<string> = new EventEmitter();\n\n  /**\n   * Renvoie la valeur de l'input de la barre de recherche au clic sur rechercher.\n   */\n  @Output() readonly searchSelect: EventEmitter<string> = new EventEmitter();\n\n  /**\n   * Renvoie la valeur du nouveau thème lorsque le thème change : `light`, `dark` ou `system`.\n   */\n  @Output() displayChange = new EventEmitter<string>();\n\n  /**\n   * Notifie l'ouverture du menu en affichage mobile.\n   */\n  @Output() menuDisclose = new EventEmitter<void>();\n\n  /**\n   * Notifie la fermeture du menu en affichage mobile.\n   */\n  @Output() menuConceal = new EventEmitter<void>();\n  /** Menu de navigation principale */\n  menu = input<DsfrHeaderMenuItem[]>([]);\n\n  protected searchInputId = newUniqueId();\n\n  /** Nombre maximum de liens d'accès rapides (3)  */\n  protected maxToolsLinks = 3;\n\n  protected _useDeprecatedPictoPath = false;\n\n  protected showDisplay: boolean = false;\n\n  // fixme: supprimer en V2 avec le déplacement de translate dans EduToolsLinksComponent\n  protected readonly translateElement = viewChild('translateComponent', { read: ElementRef });\n  protected readonly translateNativeElement = computed(() => this.translateElement()?.nativeElement);\n\n  protected readonly toolsLinksCmp = viewChild<EduToolsLinksComponent>('toolsLinksComponent');\n  protected readonly toolsLinksNativeElement = computed(() => this.toolsLinksCmp()?.toolsLinksListRef()?.nativeElement);\n\n  protected readonly toolsLinksMobile = viewChild<ElementRef<HTMLElement>>('toolLinksMobile');\n  protected readonly toolsLinksMobileContainer = computed(() => this.toolsLinksMobile()?.nativeElement);\n\n  protected readonly menuModal = viewChild<ElementRef<HTMLElement>>('menuModal');\n\n  protected readonly viewMenu: Signal<ViewMenu[]> = computed(() => {\n    if (!this.menu || !this.menu().length) return [];\n    return this.menu().map((m) => new ViewMenu(m));\n  });\n\n  private _headerToolsLinks: DsfrLink[] = [];\n\n  private mutationObserver: MutationObserver | undefined;\n\n  private readonly renderer = inject(Renderer2);\n  private readonly config = inject<DsfrConfig>(DSFR_CONFIG_TOKEN);\n  private _unlisten: { (): void }[] = [];\n\n  constructor() {\n    // Ajout observer a l'init pour la copie du script DSFR puis sur l'ajout d'éléments\n    if (typeof MutationObserver !== 'undefined') {\n      this.mutationObserver = new MutationObserver(() => {\n        this.duplicateToolsLinksMobile(); // dupliquer les liens pour la version mobile\n      });\n    } else {\n      this.duplicateToolsLinksMobile(); // mode SSR dégradé\n    }\n\n    effect(() => {\n      if (this.toolsLinksMobileContainer())\n        this.mutationObserver?.observe(this.toolsLinksMobileContainer()!, { childList: true, subtree: true });\n    });\n  }\n\n  get display(): boolean {\n    return this.showDisplay;\n  }\n\n  get headerToolsLinks(): DsfrLink[] {\n    return this._headerToolsLinks;\n  }\n\n  get displayModalId() {\n    return DISPLAY_MODAL_ID;\n  }\n\n  get pictoPath(): string | undefined {\n    return this.artworkDirPath;\n  }\n\n  get searchInputInitialValue(): string | undefined {\n    return this.searchInputValue;\n  }\n\n  /** Affichage du lien 'Paramètre d'affichage' pour gérer les modes clair/sombre. */\n  @Input() set display(value: boolean) {\n    this.showDisplay = value;\n    this.maxToolsLinks = this.showDisplay ? 2 : 3;\n  }\n\n  /**\n   * Tableau de lien d'accès rapide.\n   * Les icônes acceptées sont ceux du DSFR y compris ceux du tableau `DsfrBtnIcon`.\n   */\n  @Input() set headerToolsLinks(links: DsfrLink[]) {\n    if (links && links.length > this.maxToolsLinks) {\n      if (this.showDisplay) {\n        console.warn(\n          \"Avec l'utilisation du paramètre d'affichage, le nombre d'accès rapides (tools links) est limité à \" +\n            this.maxToolsLinks,\n        );\n      } else {\n        console.warn(\"Le nombre d'accès rapides (tools links) est limité à \" + this.maxToolsLinks);\n      }\n    }\n\n    this._headerToolsLinks = links;\n  }\n\n  /**\n   * Chemin des pictogrammes (du composant display) renseigné par le développeur.\n   *\n   * Note: ce chemin doit permettre de récupérer directement les fichiers SVG suivants : moon.svg, sun.svg, system.svg\n   *\n   * @deprecated Use `artworkDirPath` instead.\n   */\n  @Input() set pictoPath(path: string) {\n    this.artworkDirPath = path;\n    this._useDeprecatedPictoPath = true;\n  }\n\n  /**\n   * Permet de positionner la valeur initiale de la barre de recherche, si cette dernière est utilisée.\n   *\n   * @deprecated (since 1.15) Utiliser la propriété `searchInputValue` à la place.\n   */\n  @Input() set searchInputInitialValue(value: string | undefined) {\n    this.searchInputValue = value;\n  }\n\n  /**\n   * Url du lien 'retour accueil' du logo de la Marianne.\n   *\n   * @deprecated (sing 1.16) Passser par  la propriété `logo.navigation` à la place.\n   */\n  @Input() set logoLink(value: string | DsfrNavigation) {\n    if (typeof value === 'string' || !value) {\n      this.logo.navigation = { link: value };\n    } else {\n      this.logo.navigation = value;\n    }\n  }\n\n  /**\n   * Label associé au bloc marque (Marianne). Respectez la structure avec les <br>.\n   * (Ministère, gouvernement, république française)\n   *\n   * @deprecated (since 1.16) Utiliser `logo.label` à la place\n   */\n  @Input() set logoLabel(label: string) {\n    this.logo.label = label;\n  }\n\n  /**\n   * Tooltip associé au lien 'retour accueil' du logo de la Marianne.\n   *\n   * @deprecated (since 1.16) Utiliser `logo.tooltipMessage` à la place\n   */\n  @Input() set logoTooltipMessage(tooltip: string) {\n    this.logo.tooltipMessage = tooltip;\n  }\n\n  /**\n   * Text alternatif à utiliser uniquement si l'image à une information à passer.\n   *\n   * @deprecated (since 1.16) Utiliser `logo.imageAlt` à la place\n   */\n  @Input() set operatorImageAlt(value: string) {\n    this.logo.imageAlt = value;\n  }\n\n  /**\n   * Path pour src d'image d'illustration.\n   *\n   * @deprecated (since 1.16) Utiliser `logo.imagePath` à la place\n   */\n  @Input() set operatorImagePath(path: string) {\n    this.logo.imagePath = path;\n  }\n\n  /**\n   * Boolean pour passer le logo opérateur en mode vertical.\n   *\n   * @deprecated (since 1.16) Utiliser `logo.customClass` à la place\n   * */\n  @Input() set operatorImageVertical(vertical: boolean) {\n    if (vertical) {\n      this.logo.customClass = 'operator-logo--vertical';\n    } else {\n      this.logo.customClass = 'operator-logo--horizontal';\n    }\n  }\n\n  ngOnInit(): void {\n    if (this.artworkDirPath === undefined && this.config.artworkDirPath) {\n      this.artworkDirPath = this.config.artworkDirPath;\n    }\n    this.navigationId ??= newUniqueId();\n  }\n\n  ngAfterViewInit() {\n    if (!this.menuModal() || !this.menuModal()?.nativeElement) return;\n\n    this._unlisten.push(\n      this.renderer.listen(this.menuModal()?.nativeElement, 'dsfr.conceal', (e: CustomEvent) => {\n        if (e.target === this.menuModal()?.nativeElement) {\n          this.menuConceal.emit();\n        }\n      }),\n      this.renderer.listen(this.menuModal()?.nativeElement, 'dsfr.disclose', (e: CustomEvent) => {\n        if (e.target === this.menuModal()?.nativeElement) {\n          this.menuDisclose.emit();\n        }\n      }),\n    );\n  }\n\n  ngOnDestroy(): void {\n    this.mutationObserver?.disconnect();\n    this._unlisten.forEach((unlistenFunc) => unlistenFunc());\n  }\n\n  protected hasToolsLinks(): boolean {\n    return (\n      (this.headerToolsLinks && this.headerToolsLinks.length > 0) ||\n      (this.translate && this.translate.languages?.length > 0) ||\n      this.display ||\n      !!this.headerTools ||\n      !!this.toolsLinksTemplate\n    );\n  }\n\n  protected onLink(item: DsfrLink) {\n    this.linkSelect.emit(item);\n  }\n\n  protected onSearchSelect(text: string) {\n    this.searchSelect.emit(text);\n  }\n\n  protected onSearchChange(text: string) {\n    this.searchChange.emit(text);\n  }\n\n  protected onLanguageChange(codeLang: string) {\n    this.langChange.emit(codeLang);\n  }\n\n  protected onMegaMenuClose(item: DsfrHeaderMenuItem) {\n    item.expanded = false;\n  }\n\n  protected onMenuItemClick(item: DsfrHeaderMenuItem) {\n    this.menu().forEach((i) => (i.expanded = false));\n    item.expanded = true;\n  }\n\n  protected getCustomClassHeaderToolsLink(item: DsfrLink) {\n    const customClass = ['fr-btn'];\n    if (item.icon) customClass.push(item.icon);\n    if (item.customClass) customClass.push(item.customClass);\n    return customClass.join(' ');\n  }\n\n  protected onDisplayChange(theme: string) {\n    this.displayChange.emit(theme);\n  }\n\n  /**\n   * Dupliquer tous les composants de toolsLinks pour le menu mobile (edu-tools-links, translate etc.)\n   * /!\\ interaction script DSFR : le script copie les liens la premiere fois, mais n'écoute pas les changements\n   * Les liens à l'interieur de fr-header__tools-links sont dupliqués dans fr-header__menu-links\n   */\n  private duplicateToolsLinksMobile() {\n    this.mutationObserver?.disconnect(); // deconnecter l'observer pour ne pas le déclencher sur le clonage\n    if (this.toolsLinksMobileContainer()) {\n      const childElements: HTMLCollection = this.toolsLinksMobileContainer()!.children;\n\n      // suppression des noeuds précédent\n      Array.from(childElements).forEach((e) => {\n        this.renderer.removeChild(this.toolsLinksMobileContainer(), e);\n      });\n\n      // Dupliquer les liens de menu  en suffixant tous les ids par -mobile\n      // La duplication se fait en déplaçant le composant EduToolsLinksComponent créé en double pour conserver les évents\n      if (this.toolsLinksNativeElement()) {\n        const clone: HTMLElement = this.toolsLinksNativeElement() as HTMLElement;\n\n        if (clone) {\n          this.suffixIdsToolsLinks(clone);\n          this.renderer.appendChild(this.toolsLinksMobileContainer(), clone);\n        }\n      }\n\n      // Dupliquer le composant translate - a supprimer en V2 (translate dans EduToolsLinksComponent)\n      if (this.translate) {\n        this.renderer.appendChild(this.toolsLinksMobileContainer(), this.translateNativeElement());\n        this.translateNativeElement().style.display = 'block';\n      }\n\n      // Dupliquer le custom slot - a supprimer en V2\n      if (this.headerToolsMobile) {\n        this.renderer.appendChild(this.toolsLinksMobileContainer(), this.headerToolsMobile.elementRef.nativeElement);\n      }\n    }\n\n    if (this.toolsLinksNativeElement()) {\n      this.mutationObserver?.observe(this.toolsLinksNativeElement()!, { childList: true, subtree: true });\n    }\n  }\n\n  /**\n   * Reprise de la logique du script DSFR pour suffixer les ids dupliqués en mobile\n   * @param toolsLinks container concerné des liens d'accès rapides dupliqués\n   * @param suffix -mobile pour ne pas avoir plusieurs ids identiques\n   */\n  private suffixIdsToolsLinks(toolsLinks: HTMLElement, suffix = '-mobile'): void {\n    const idMap = new Map<string, string>();\n\n    // suffixes des ids\n    toolsLinks.querySelectorAll<HTMLElement>('[id]').forEach((el) => {\n      const newId = `${el.id}${suffix}`;\n      idMap.set(el.id, newId);\n      el.id = newId;\n    });\n\n    // Mise a jour des attributs qui peuvent référencer ces ids\n    const attributes = ['aria-controls', 'aria-describedby', 'aria-labelledby'];\n\n    toolsLinks.querySelectorAll<HTMLElement>('*').forEach((el) => {\n      attributes.forEach((attr) => {\n        const value = el.getAttribute(attr);\n        if (!value) return;\n\n        const newId = idMap.get(value.trim());\n        if (newId) {\n          el.setAttribute(attr, newId);\n        }\n      });\n    });\n  }\n}\n","<header role=\"banner\" class=\"fr-header\">\n  <div class=\"fr-header__body\">\n    <div class=\"fr-container\">\n      <div class=\"fr-header__body-row\">\n        <div class=\"fr-header__brand fr-enlarge-link\">\n          <div class=\"fr-header__brand-top\">\n            <div class=\"fr-header__logo\">\n              <!--loc Marianne sans intitulé ni logo opérateur-->\n              @if (!serviceTitle && !logo.imagePath && !serviceTitleTemplate) {\n                <ng-container [ngTemplateOutlet]=\"logoLink\"></ng-container>\n              } @else if (serviceTitle || logo.imagePath || serviceTitleTemplate) {\n                <!--bloc Marianne avec intitulé et/ou logo opérateur-->\n                <p class=\"fr-logo\" [innerHTML]=\"logo.label\"></p>\n              }\n            </div>\n            <!-- Avec logo opérateur -->\n            @if (logo.imagePath) {\n              <div class=\"fr-header__operator\">\n                <!-- Pas d'intitulé pour le service -->\n                @if (!serviceTitle && !serviceTitleTemplate) {\n                  <ng-container [ngTemplateOutlet]=\"logoLink\"></ng-container>\n                } @else {\n                  <!-- Avec un intitulé pour le service -->\n                  <img\n                    class=\"fr-responsive-img\"\n                    [class]=\"logo.customClass || 'operator-logo--horizontal'\"\n                    [src]=\"logo.imagePath\"\n                    [attr.alt]=\"logo.imageAlt\" />\n                }\n              </div>\n            }\n            <div class=\"fr-header__navbar\">\n              @if (searchBar || searchBarTemplate) {\n                <button\n                  type=\"button\"\n                  class=\"fr-btn--search fr-btn\"\n                  data-fr-opened=\"false\"\n                  [attr.aria-controls]=\"navigationId + '-search'\"\n                  id=\"{{ navigationId }}-button-search\"\n                  [title]=\"'commons.search' | dsfrI18n\">\n                  {{ 'commons.search' | dsfrI18n }}\n                </button>\n              }\n              @if (hasToolsLinks() || menu().length > 0) {\n                <button\n                  type=\"button\"\n                  class=\"fr-btn--menu fr-btn\"\n                  data-fr-opened=\"false\"\n                  [attr.aria-controls]=\"navigationId\"\n                  id=\"{{ navigationId }}-button-menu\"\n                  [title]=\"'header.menu.label' | dsfrI18n\">\n                  {{ 'header.menu.label' | dsfrI18n }}\n                </button>\n              }\n            </div>\n          </div>\n          @if (serviceTitle || beta || serviceTitleTemplate) {\n            <div class=\"fr-header__service\">\n              @if (logo.navigation) {\n                <ng-container [ngTemplateOutlet]=\"logoLink\"></ng-container>\n              }\n              @if (!logo.navigation) {\n                <ng-container *ngTemplateOutlet=\"serviceTitleTemplateDefault\"></ng-container>\n              }\n              @if (serviceTagline || serviceTaglineTemplate) {\n                <p class=\"fr-header__service-tagline\">\n                  @if (serviceTagline) {\n                    {{ serviceTagline }}\n                  } @else {\n                    <ng-container *ngTemplateOutlet=\"serviceTaglineTemplate\"></ng-container>\n                  }\n                </p>\n              }\n            </div>\n          }\n        </div>\n\n        <!-- Tools links -->\n        @if (hasToolsLinks() || searchBar) {\n          <div class=\"fr-header__tools\">\n            @if (hasToolsLinks()) {\n              <div class=\"fr-header__tools-links\">\n                <!--headerTools pour rétrocompatibilité, déprécié et suppression en V2 -->\n                @if (headerTools) {\n                  <div class=\"edu-header__tools--custom\">\n                    <ng-container *ngTemplateOutlet=\"headerTools\"></ng-container>\n                  </div>\n                }\n                <edu-tools-links\n                  (linkSelect)=\"onLink($event)\"\n                  [toolsLinks]=\"headerToolsLinks\"\n                  [maxToolsLinks]=\"maxToolsLinks\"\n                  [displayId]=\"displayModalId\"\n                  [showDisplay]=\"showDisplay\"\n                  [toolsLinksTemplate]=\"toolsLinksTemplate\"></edu-tools-links>\n                @if (translate) {\n                  <!-- en V2 apres suppression de headerTools, déplacer dans edu-tools-links -->\n                  <dsfr-translate\n                    (langChange)=\"onLanguageChange($event)\"\n                    [languages]=\"translate.languages\"></dsfr-translate>\n                }\n              </div>\n            }\n            <!-- Recherche ------------------------------------------------------------------------------------------->\n            @if (searchBarTemplate) {\n              <div\n                [attr.aria-labelledby]=\"'search-btn-' + searchInputId\"\n                class=\"fr-header__search fr-modal\"\n                [id]=\"navigationId + '-search'\">\n                <div class=\"fr-container fr-container-lg--fluid\">\n                  <ng-container *ngTemplateOutlet=\"closeSearchBtnTemplate\"></ng-container>\n                  <ng-container *ngTemplateOutlet=\"searchBarTemplate\"></ng-container>\n                </div>\n              </div>\n            } @else if (searchBar) {\n              <div\n                [attr.aria-labelledby]=\"'search-btn-' + searchInputId\"\n                class=\"fr-header__search fr-modal\"\n                [id]=\"navigationId + '-search'\">\n                <div class=\"fr-container fr-container-lg--fluid\">\n                  <ng-container *ngTemplateOutlet=\"closeSearchBtnTemplate\"></ng-container>\n                  <dsfr-search-bar\n                    [label]=\"searchLabel\"\n                    [inputId]=\"searchInputId\"\n                    [buttonTitle]=\"searchButtonTitle\"\n                    [triggerSearchOnEnter]=\"triggerSearchOnEnter\"\n                    [placeholder]=\"searchInputPlaceholder\"\n                    [value]=\"searchInputValue\"\n                    (searchChange)=\"onSearchChange($event)\"\n                    (searchSelect)=\"onSearchSelect($event)\"></dsfr-search-bar>\n                </div>\n              </div>\n            }\n          </div>\n          <ng-template #closeSearchBtnTemplate>\n            <button\n              type=\"button\"\n              class=\"fr-btn--close fr-btn\"\n              [attr.aria-controls]=\"navigationId + '-search'\"\n              title=\"{{ 'commons.close' | dsfrI18n }}\">\n              {{ 'commons.close' | dsfrI18n }}\n            </button>\n          </ng-template>\n        }\n        <!-- fin header tools ----------------------------------------------------------------------------------------->\n      </div>\n    </div>\n  </div>\n  <!-- Menu de navigation principale  --------------------------------------------------------------------------------->\n  @if (hasToolsLinks() || viewMenu().length > 0) {\n    <div\n      #menuModal\n      class=\"fr-header__menu fr-modal\"\n      [id]=\"navigationId\"\n      [attr.aria-labelledby]=\"navigationId + '-button-menu'\">\n      <div class=\"fr-container\">\n        <button\n          type=\"button\"\n          class=\"fr-btn--close fr-btn\"\n          [attr.aria-controls]=\"navigationId\"\n          title=\" {{ 'commons.close' | dsfrI18n }}\">\n          {{ 'commons.close' | dsfrI18n }}\n        </button>\n        <div #toolLinksMobile class=\"fr-header__menu-links\"></div>\n        <!-- Composant translate déplacé dans toolsLinksMobile. Display none pour éviter le flickering de l'element\n         fixme: A supprimer en V2  -->\n        @if (translate) {\n          <dsfr-translate\n            [ngStyle]=\"{ display: 'none' }\"\n            #translateComponent\n            (langChange)=\"onLanguageChange($event)\"\n            [languages]=\"translate.languages\"></dsfr-translate>\n        }\n        <!-- Duplication du composant tools links pour le mode mobile -->\n        @if (hasToolsLinks()) {\n          <edu-tools-links\n            #toolsLinksComponent\n            [ngStyle]=\"{ display: 'none' }\"\n            (linkSelect)=\"onLink($event)\"\n            [toolsLinks]=\"headerToolsLinks\"\n            [maxToolsLinks]=\"maxToolsLinks\"\n            [displayId]=\"displayModalId\"\n            [showDisplay]=\"showDisplay\"\n            [toolsLinksTemplate]=\"toolsLinksTemplate\"></edu-tools-links>\n        }\n        <!-- Custom slot pour mobile. fixme: A supprimer en V2 -->\n        @if (headerToolsMobile) {\n          <div class=\"fr-header__menu-links\">\n            <ng-container *ngTemplateOutlet=\"headerToolsMobile\"></ng-container>\n          </div>\n        }\n        @if (viewMenu() && viewMenu().length > 0) {\n          <nav\n            class=\"fr-nav\"\n            id=\"{{ navigationId }}-nav\"\n            role=\"navigation\"\n            [attr.aria-label]=\"'header.mainMenu' | dsfrI18n\">\n            <ul class=\"fr-nav__list\">\n              @for (item of viewMenu(); track item) {\n                <!-- Entrée de menu simple (lien direct) ------------------------------------------------------------------>\n                @if (!item.menu.subItems && !item.menu.megaMenu) {\n                  <li class=\"fr-nav__item\">\n                    <edu-item-link\n                      [item]=\"item.menu\"\n                      customClass=\"fr-nav__link\"\n                      (linkSelect)=\"onLink(item.menu)\"></edu-item-link>\n                  </li>\n                }\n\n                <!-- Entrée de menu déroulant ----------------------------------------------------------------------------->\n                @if (item.menu.subItems) {\n                  <li class=\"fr-nav__item\">\n                    <ng-container\n                      [ngTemplateOutlet]=\"buttonMenu\"\n                      [ngTemplateOutletContext]=\"{ item: item.menu, ariaId: 'menu-' + item.menuId }\"></ng-container>\n                    <div class=\"fr-collapse fr-menu\" id=\"menu-{{ item.menuId }}\">\n                      <ul class=\"fr-menu__list\">\n                        @for (subItem of item.menu.subItems; track subItem) {\n                          <li>\n                            <edu-item-link\n                              [item]=\"subItem\"\n                              customClass=\"fr-nav__link\"\n                              (linkSelect)=\"onLink(subItem)\"></edu-item-link>\n                          </li>\n                        }\n                      </ul>\n                    </div>\n                  </li>\n                }\n                <!-- Entrée de méga menu ---------------------------------------------------------------------------------->\n                @if (item.menu.megaMenu) {\n                  <li class=\"fr-nav__item\">\n                    <ng-container\n                      [ngTemplateOutlet]=\"buttonMenu\"\n                      [ngTemplateOutletContext]=\"{\n                        item: item.menu,\n                        ariaId: 'mega-menu-' + item.menuId,\n                      }\"></ng-container>\n                    <div\n                      [class.fr-collapse--expanded]=\"item.menu.expanded\"\n                      class=\"fr-collapse fr-mega-menu\"\n                      id=\"mega-menu-{{ item.menuId }}\"\n                      tabindex=\"-1\">\n                      <dsfr-mega-menu\n                        [megaMenu]=\"item.menu.megaMenu\"\n                        [idMenu]=\"item.menuId\"\n                        (closeSelect)=\"onMegaMenuClose(item.menu)\"\n                        (linkSelect)=\"onLink($event)\"></dsfr-mega-menu>\n                    </div>\n                  </li>\n                }\n              }\n            </ul>\n          </nav>\n        }\n      </div>\n    </div>\n  }\n</header>\n\n@if (showDisplay && _useDeprecatedPictoPath) {\n  <dsfr-display (displayChange)=\"onDisplayChange($event)\" [pictoPath]=\"artworkDirPath ?? ''\"></dsfr-display>\n} @else if (showDisplay && !_useDeprecatedPictoPath) {\n  <dsfr-display (displayChange)=\"onDisplayChange($event)\" [artworkDirPath]=\"artworkDirPath\"></dsfr-display>\n}\n\n<ng-template #buttonMenu let-item=\"item\" let-ariaId=\"ariaId\">\n  @if (item.routerLink) {\n    <button\n      type=\"button\"\n      (click)=\"onMenuItemClick(item)\"\n      class=\"fr-nav__btn\"\n      [routerLink]=\"item.routerLink\"\n      [routerLinkActive]=\"item.routerLinkActive ?? ''\"\n      [ariaCurrentWhenActive]=\"true\"\n      [attr.aria-expanded]=\"item.expanded ?? false\"\n      [disableNavigation]=\"true\"\n      [routerLinkActiveOptions]=\"item.routerLinkActiveOptions ? item.routerLinkActiveOptions : { exact: false }\"\n      [attr.aria-controls]=\"ariaId\">\n      {{ item.label }}\n    </button>\n  } @else {\n    <!-- Séparer de la définition avec routerLink pour que l'attribut aria-current ne soit pas écrasé par la directive -->\n    <button\n      type=\"button\"\n      (click)=\"onMenuItemClick(item)\"\n      class=\"fr-nav__btn\"\n      [attr.aria-expanded]=\"item.expanded ?? false\"\n      [attr.aria-current]=\"item.active && !item.routerLink ? true : null\"\n      [attr.aria-controls]=\"ariaId\">\n      {{ item.label }}\n    </button>\n  }\n</ng-template>\n\n<ng-template #logoLink>\n  <dsfr-link\n    [link]=\"logo.navigation?.link ?? ''\"\n    [linkTarget]=\"logo.navigation?.linkTarget\"\n    [route]=\"logo.navigation?.route ?? ''\"\n    [ariaCurrentWhenActive]=\"false\"\n    [tooltipMessage]=\"logo.tooltipMessage\"\n    [customClass]=\"'edu-link'\"\n    [routePath]=\"logo.navigation?.routerLink ?? ''\">\n    @if (serviceTitle || serviceTitleTemplate) {\n      <ng-container *ngTemplateOutlet=\"serviceTitleTemplateDefault\"></ng-container>\n    } @else if (logo.imagePath) {\n      <img\n        class=\"fr-responsive-img\"\n        [class]=\"logo.customClass || 'operator-logo--horizontal'\"\n        [src]=\"logo.imagePath\"\n        [attr.alt]=\"logo.imageAlt\" />\n    } @else {\n      <p class=\"fr-logo\" [innerHTML]=\"logo.label\"></p>\n    }\n  </dsfr-link>\n</ng-template>\n\n<ng-template #serviceTitleTemplateDefault>\n  <p class=\"fr-header__service-title\">\n    @if (serviceTitleTemplate) {\n      <ng-container *ngTemplateOutlet=\"serviceTitleTemplate\"></ng-container>\n    } @else {\n      {{ serviceTitle }}\n      @if (beta) {\n        <dsfr-badge label=\"BETA\" badgeSize=\"SM\" customClass=\"fr-badge--green-emeraude\"></dsfr-badge>\n      }\n    }\n  </p>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { DsfrDisableRouterLinkDirective } from '../../shared/directives/disable-router-link.directive';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrDisplayComponent } from '../display';\nimport { DsfrLinkComponent } from '../link';\nimport { ItemLinkComponent } from '../link/item-link.component';\nimport { DsfrSearchBarComponent } from '../search-bar';\nimport { DsfrTranslateComponent } from '../translate';\nimport { DsfrMegaMenuComponent } from './component/mega-menu.component';\nimport { DsfrToolLinkComponent } from './component/tool-link.component';\nimport { EduToolsLinksComponent } from './component/tools-links.component';\nimport { DsfrHeaderComponent } from './header.component';\n\n@NgModule({\n  exports: [DsfrHeaderComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    RouterModule,\n    DsfrMegaMenuComponent,\n    DsfrSearchBarComponent,\n    ItemLinkComponent,\n    DsfrTranslateComponent,\n    DsfrDisplayComponent,\n    DsfrLinkComponent,\n    DsfrDisableRouterLinkDirective,\n    DsfrI18nPipe,\n    DsfrHeaderComponent,\n    DsfrToolLinkComponent,\n    EduToolsLinksComponent,\n  ],\n})\nexport class DsfrHeaderModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { DsfrSize, DsfrSizeConst } from '../../shared';\n\n@Component({\n  selector: 'dsfr-highlight',\n  templateUrl: './highlight.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule],\n})\nexport class DsfrHighlightComponent {\n  /** Contenu du composant, html accepté. */\n  @Input() text?: string;\n\n  /** Choix de la taille du texte, medium par défaut. */\n  @Input() textSize: DsfrSize = DsfrSizeConst.MD;\n\n  /**\n   * Permet de personnaliser la couleur.\n   * Il faut donner le nom de class exact (ex : fr-highlight--green-emeraude) que vous trouverez via ce\n   * [lien](https://www.systeme-de-design.gouv.fr/version-courante/fr/fondamentaux/couleurs-palette#couleurs-illustratives)\n   */\n  @Input() customClass?: string;\n\n  /** @internal */\n  getClasses(): { [className: string]: boolean } {\n    return { 'fr-text--sm': this.textSize === DsfrSizeConst.SM, 'fr-text--lg': this.textSize === DsfrSizeConst.LG };\n  }\n}\n","<div class=\"fr-highlight\" [ngClass]=\"customClass ? customClass : ''\">\n  @if (text) {\n    <p [class]=\"getClasses()\" [innerHtml]=\"text\"></p>\n  } @else {\n    <p [class]=\"getClasses()\">\n      <ng-content></ng-content>\n    </p>\n  }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrHighlightComponent } from './highlight.component';\n\n@NgModule({\n  exports: [DsfrHighlightComponent],\n  imports: [CommonModule, DsfrHighlightComponent],\n})\nexport class DsfrHighlightModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, contentChildren, effect, ElementRef, inject, Input, ViewEncapsulation } from '@angular/core';\nimport { DomUtils, DsfrPosition, DsfrPositionConst, DsfrSize, DsfrSizeConst } from '../../shared';\nimport { DsfrLinkComponent } from '../link/link.component';\n\n@Component({\n  selector: 'dsfr-links-group',\n  templateUrl: './links-group.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule],\n})\nexport class DsfrLinksGroupComponent {\n  /**\n   * Permet de basculer la disposition des liens en mode horizontal.\n   */\n  @Input() inline = false;\n\n  /**\n   * Taille des liens du groupe.\n   */\n  @Input() linksGroupSize: DsfrSize = DsfrSizeConst.MD;\n\n  /** @internal */\n  private linksElements = contentChildren(DsfrLinkComponent, { read: ElementRef });\n  private links = contentChildren(DsfrLinkComponent);\n\n  private _iconPosition: DsfrPosition | undefined;\n  private readonly _elementRef = inject(ElementRef);\n\n  constructor() {\n    effect(() => {\n      this.updateLinksIconPosition();\n      this.surroundLinksWithLi();\n    });\n  }\n\n  /**\n   * Taille des liens du groupe.\n   *\n   * @deprecated since(1.15.0) utiliser 'linksGroupSize' à la place\n   */\n  get size(): DsfrSize {\n    return this.linksGroupSize;\n  }\n\n  get iconPosition(): DsfrPosition | undefined {\n    return this._iconPosition;\n  }\n\n  /**\n   * Taille des liens du groupe.\n   *\n   * @deprecated since(1.15.0) utiliser 'linksGroupSize' à la place\n   */\n  @Input() set size(value: DsfrSize) {\n    this.linksGroupSize = value;\n  }\n\n  /**\n   * Positionnement (gauche ou droite) au niveau du groupe des icônes dans les boutons qui\n   * contiennent à la fois une icône et un label.\n   */\n  @Input() set iconPosition(value: DsfrPosition) {\n    this._iconPosition = value;\n    this.updateLinksIconPosition();\n  }\n\n  /**\n   * Cette méthode calcule les styles du composant en évitant les magic strings.\n   * @internal\n   */\n  getClasses(): string[] {\n    let classes: string[] = [];\n\n    // Inline class\n    if (this.inline) {\n      classes.push('fr-links-group--inline');\n    }\n\n    // Size class\n    if (this.linksGroupSize === DsfrSizeConst.SM) {\n      classes.push('fr-links-group--sm');\n    } else if (this.linksGroupSize === DsfrSizeConst.LG) {\n      classes.push('fr-links-group--lg');\n    }\n\n    // IconPosition class\n    if (this._iconPosition) {\n      classes.push(\n        this._iconPosition === DsfrPositionConst.LEFT ? 'fr-links-group--icon-left' : 'fr-links-group--icon-right',\n      );\n    }\n\n    return classes;\n  }\n\n  /** On force la position des icônes des boutons. */\n  private updateLinksIconPosition(): void {\n    if (this.links()) {\n      this.links().forEach((link) => (link.iconPosition = this._iconPosition));\n    }\n  }\n\n  /* Entoure chaque composant link par une balise <li> si nécessaire */\n  private surroundLinksWithLi(): void {\n    DomUtils.surroundElementsWithLi(this._elementRef, this.linksElements());\n  }\n}\n","<ul class=\"fr-links-group\" [ngClass]=\"getClasses()\">\n  <ng-content></ng-content>\n</ul>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrLinksGroupComponent } from './links-group.component';\n\n@NgModule({\n  exports: [DsfrLinksGroupComponent],\n  imports: [CommonModule, DsfrLinksGroupComponent],\n})\nexport class DsfrLinksGroupModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input } from '@angular/core';\nimport { DsfrSize, DsfrSizeConst } from '../../shared';\n\n@Component({\n  selector: 'dsfr-logo',\n  templateUrl: './logo.component.html',\n  imports: [CommonModule],\n})\nexport class DsfrLogoComponent {\n  /**\n   * Taille du logo, MD par défaut si non spécifié.\n   */\n  @Input() logoSize: DsfrSize = DsfrSizeConst.MD;\n\n  /** Intitulé officiel. Utiliser un slot pour du contenu personnalisé. */\n  @Input() label?: string;\n\n  /** Personnalisation CSS du logo. */\n  @Input() customClass?: string;\n\n  /**\n   * Taille du logo, MD par défaut si non spécifié.\n   *\n   * @deprecated since(1.15.0) utiliser 'logoSize' à la place\n   */\n  get size(): DsfrSize {\n    return this.logoSize;\n  }\n\n  /**\n   * Taille du logo, MD par défaut si non spécifié.\n   *\n   * @deprecated since(1.15.0) utiliser 'logoSize' à la place\n   */\n  @Input() set size(value: DsfrSize) {\n    this.logoSize = value;\n  }\n}\n","<!-- FIXME supprimer le innerHTML -->\n@if (label) {\n  <p\n    [innerHTML]=\"label\"\n    [class]=\"customClass || ''\"\n    [ngClass]=\"{\n      'fr-logo': true,\n      'fr-logo--sm': logoSize === 'SM',\n      'fr-logo--lg': logoSize === 'LG',\n    }\"></p>\n} @else {\n  <p\n    [class]=\"customClass || ''\"\n    [ngClass]=\"{\n      'fr-logo': true,\n      'fr-logo--sm': logoSize === 'SM',\n      'fr-logo--lg': logoSize === 'LG',\n    }\">\n    <ng-content></ng-content>\n  </p>\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrLogoComponent } from './logo.component';\n\n@NgModule({\n  exports: [DsfrLogoComponent],\n  imports: [CommonModule, DsfrLogoComponent],\n})\nexport class DsfrLogoModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  computed,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  inject,\n  input,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { DsfrHeadingLevel, DsfrI18nPipe, DsfrSize, DsfrSizeConst, HeadingComponent, newUniqueId } from '../../shared';\nimport { DsfrButtonComponent } from '../button';\nimport { DsfrModalAction } from './modal-action.model';\n\ndeclare function dsfr(elem: HTMLElement): any;\n\n@Component({\n  selector: 'dsfr-modal',\n  templateUrl: './modal.component.html',\n  styleUrls: ['./modal.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, DsfrButtonComponent, HeadingComponent, DsfrI18nPipe],\n})\nexport class DsfrModalComponent implements AfterViewInit, OnInit, OnDestroy {\n  /** L'identifiant unique de l'élément <dialog>. */\n  @Input() dialogId?: string;\n\n  /** Titre de la modale. */\n  // TODO à renommer heading (en dépréciant)\n  @Input() titleModal?: string;\n\n  /**\n   * Le niveau de titre devant être utilisé (tag `H2` par défaut).\n   * Cette balise ne produit pas de style, mais de la structure.\n   */\n  @Input() headingLevel?: DsfrHeadingLevel;\n\n  /** Le tableau des actions à positionner dans la modale. */\n  // TODO Ne faudrait-il pas homogénéiser avec les tuiles et les cartes ?\n  @Input() actions: DsfrModalAction[] = [];\n\n  /** Permet de ne pas fermer la modale automatiquement lorsqu'une action est exécutée. */\n  @Input() autoCloseOnAction = true;\n\n  /** Autorise la fermeture de la modale au click sur le fond. */\n  @Input() concealingBackdrop = true;\n\n  /**\n   * Le mode de contrôle vous permet, le cas échéant,  de maintenir la capacité de la modale à être pilotée\n   * programmatiquement en absence de bouton de contrôle.\n   *\n   * @since 1.8.0\n   * @deprecated (since 1.14.0)\n   */\n  @Input() controlMode: 'button' | 'dynamic' = 'button';\n\n  /** Indique la classe d'icône à utiliser en haut à gauche. Par défaut `fr-icon-arrow-right-line` */\n  @Input() icon: string = 'fr-icon-arrow-right-line';\n\n  /** Type de balise HTML, dialog par défaut */\n  @Input() markup: 'dialog' | 'div' = 'dialog';\n\n  /** Positionnement de la modale en haut en mobile. */\n  @Input() mobileTop = false;\n\n  /** Signale l'ouverture de la modale. */\n  @Output() disclose = new EventEmitter<void>();\n\n  /** Signale la fermeture de la modale. */\n  @Output() conceal = new EventEmitter<void>();\n\n  /** @internal */\n  @ViewChild('dsfrModal') dsfrModal?: ElementRef;\n\n  /** Template du pied de la modale (doit contenir des boutons d'actions) */\n  @ContentChild('modalFooterTemplate', { static: true }) modalFooterTemplate?: TemplateRef<void>;\n\n  /**\n   * La taille de la modale.\n   * Valeurs possibles : `SM` (pour small), `MD` (pour medium), `LG` (pour large).\n   *\n   * @deprecated (since 1.17.0) utiliser modalSize à la place\n   */\n  size = input<DsfrSize>();\n\n  /**\n   * La taille de la modale.\n   * Valeurs possibles : `SM` (pour small), `MD` (pour medium), `LG` (pour large).\n   */\n  modalSize = input<DsfrSize>('MD');\n\n  /**\n   * L'identifiant unique de l'élément tenant titre descriptif de la modale.\n   */\n  protected titleElementId: string = '';\n\n  protected sizeClasses = computed(() => {\n    const size = this.size() ?? this.modalSize();\n\n    return {\n      'fr-col-12': true,\n      'fr-col-md-4': size === DsfrSizeConst.SM,\n      'fr-col-md-8 fr-col-lg-6': size === DsfrSizeConst.MD,\n      'fr-col-md-8': size === DsfrSizeConst.LG,\n    };\n  });\n\n  private _unlisten: { (): void }[] = [];\n  private readonly renderer2 = inject(Renderer2);\n\n  ngOnInit() {\n    this.dialogId ??= newUniqueId();\n    this.titleElementId = newUniqueId();\n  }\n\n  ngAfterViewInit() {\n    this._unlisten.push(\n      this.renderer2.listen(this.dsfrModal?.nativeElement, 'dsfr.conceal', (e: CustomEvent) => {\n        if (e.target === this.dsfrModal?.nativeElement) {\n          const dialog: HTMLElement = this.dsfrModal.nativeElement;\n          if (Boolean(dialog.getAttribute('open'))) {\n            this.conceal.emit();\n          }\n        }\n      }),\n      this.renderer2.listen(this.dsfrModal?.nativeElement, 'dsfr.disclose', (e: CustomEvent) => {\n        if (e.target === this.dsfrModal?.nativeElement) {\n          this.disclose.emit();\n        }\n      }),\n    );\n  }\n\n  ngOnDestroy() {\n    this._unlisten.forEach((unlistenFunc) => unlistenFunc());\n  }\n\n  /**\n   * Permet de déclencher programmatiquement l'ouverture de la modale.\n   */\n  open() {\n    dsfr(this.dsfrModal?.nativeElement).modal.disclose();\n  }\n\n  /**\n   * Permet de déclencher programmatiquement la fermeture de la modale.\n   */\n  close() {\n    dsfr(this.dsfrModal?.nativeElement).modal.conceal();\n  }\n\n  /** @internal */\n  performAction(action: DsfrModalAction): void {\n    if (action.callback) {\n      action.callback();\n    }\n  }\n}\n","@if (markup === 'dialog') {\n  <dialog\n    [attr.aria-labelledby]=\"titleElementId\"\n    [id]=\"dialogId\"\n    class=\"fr-modal\"\n    [class.fr-modal--top]=\"mobileTop\"\n    [attr.data-fr-concealing-backdrop]=\"concealingBackdrop === false ? false : null\"\n    #dsfrModal>\n    <ng-container *ngTemplateOutlet=\"dialogTemplate\"></ng-container>\n  </dialog>\n} @else {\n  <div\n    [attr.aria-labelledby]=\"titleElementId\"\n    [id]=\"dialogId\"\n    role=\"dialog\"\n    class=\"fr-modal\"\n    [class.fr-modal--top]=\"mobileTop\"\n    [attr.data-fr-concealing-backdrop]=\"concealingBackdrop === false ? false : null\"\n    #dsfrModal>\n    <ng-container *ngTemplateOutlet=\"dialogTemplate\"></ng-container>\n  </div>\n}\n\n<ng-template #dialogTemplate>\n  <div class=\"fr-container fr-container--fluid fr-container-md\">\n    <div class=\"fr-grid-row fr-grid-row--center\">\n      <div [ngClass]=\"sizeClasses()\">\n        <div class=\"fr-modal__body\">\n          <div class=\"fr-modal__header\">\n            <button\n              type=\"button\"\n              class=\"fr-btn fr-btn--close\"\n              [title]=\"'modal.ariaLabel' | dsfrI18n\"\n              [attr.aria-controls]=\"dialogId\"\n              data-testid=\"modal-btn-close\">\n              {{ 'commons.close' | dsfrI18n }}\n            </button>\n          </div>\n          <div class=\"fr-modal__content\">\n            <!-- Niveau de titre par défaut H2  -->\n            <edu-heading\n              [headingId]=\"titleElementId\"\n              [level]=\"headingLevel\"\n              defaultLevel=\"H2\"\n              [allowFirstLevel]=\"true\"\n              customClass=\"fr-modal__title\">\n              <ng-container *ngTemplateOutlet=\"titleTemplate\"></ng-container>\n            </edu-heading>\n            <ng-content></ng-content>\n          </div>\n          @if (actions && actions.length > 0) {\n            <div class=\"fr-modal__footer\">\n              <div\n                class=\"fr-btns-group fr-btns-group--right fr-btns-group--inline-reverse fr-btns-group--inline-lg fr-btns-group--icon-left\">\n                @for (action of actions; track $index) {\n                  <dsfr-button\n                    [ariaControls]=\"autoCloseOnAction ? dialogId : ''\"\n                    [ariaLabel]=\"action.ariaLabel ?? ''\"\n                    [icon]=\"action.icon\"\n                    [label]=\"action.label\"\n                    [type]=\"action.type ?? 'button'\"\n                    [tooltipMessage]=\"action.tooltipMessage ?? ''\"\n                    [disabled]=\"action.disabled ?? false\"\n                    [uppercase]=\"action.uppercase ?? false\"\n                    [variant]=\"action.variant ?? 'primary'\"\n                    (click)=\"performAction(action)\">\n                  </dsfr-button>\n                }\n              </div>\n            </div>\n          }\n          @if (modalFooterTemplate) {\n            <div class=\"fr-modal__footer\">\n              <ng-container *ngTemplateOutlet=\"modalFooterTemplate\"></ng-container>\n            </div>\n          }\n        </div>\n      </div>\n    </div>\n  </div>\n</ng-template>\n\n<ng-template #titleTemplate>\n  @if (icon) {\n    <span class=\"{{ icon }} fr-icon--lg\" aria-hidden=\"true\"></span>\n  }\n  {{ titleModal }}\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrButtonComponent } from '../button';\nimport { DsfrModalComponent } from './modal.component';\n\n@NgModule({\n  exports: [DsfrModalComponent],\n  imports: [CommonModule, DsfrButtonComponent, DsfrI18nPipe, DsfrModalComponent],\n})\nexport class DsfrModalModule {}\n","/**\n * Définit les types de notice supportés par le DSFR.\n */\nexport enum DsfrNoticeTypeConst {\n  INFO = 'info',\n  WARNING = 'warning',\n  ALERT = 'alert',\n  WEATHER_ORANGE = 'weather-orange',\n  WEATHER_RED = 'weather-red',\n  WEATHER_PURPLE = 'weather-purple',\n  ATTACK = 'attack',\n  WITNESS = 'witness',\n  CYBERATTACK = 'cyberattack',\n}\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrNoticeTypeConst}.\n */\nexport type DsfrNoticeType = `${DsfrNoticeTypeConst}`;\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, EventEmitter, Input, Output, ViewEncapsulation, inject } from '@angular/core';\nimport { DsfrHeadingLevel, DsfrI18nPipe } from '../../shared';\nimport { DsfrNoticeType, DsfrNoticeTypeConst } from './notice.model';\n\n@Component({\n  selector: 'dsfr-notice',\n  templateUrl: './notice.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, DsfrI18nPipe],\n})\nexport class DsfrNoticeComponent {\n  /**\n   * Le message qui sera affiché dans le bandeau.\n   * Renseigner le titre via l'input est prioritaire sur le slot.\n   */\n  @Input() heading?: string;\n\n  /**\n   * Le niveau du titre, `<span>` par défaut.\n   */\n  @Input() headingLevel?: DsfrHeadingLevel;\n\n  /**\n   * Permet d'afficher le bouton servant à fermer le bandeau d'information.<br>\n   * La valeur 'controlled' permet d'afficher le bouton de fermeture, mais c'est vous qui devez contrôler l'action de\n   * fermeture du bandeau.\n   */\n  @Input() closeable: boolean | 'controlled' = false;\n\n  /**\n   * @since 1.12 Permet d'enlever l'icône du bandeau d'information\n   */\n  @Input() noIcon = false;\n\n  /**\n   * @since 1.12 Permet de personnaliser l'icône du bandeau. Html possible.\n   */\n  @Input() icon?: string;\n\n  /**\n   * @since 1.12 Texte complémentaire au titre\n   */\n  @Input() description?: string;\n\n  /**\n   * @since 1.12 Sévérité du message\n   */\n  @Input() type: DsfrNoticeType = DsfrNoticeTypeConst.INFO;\n\n  /**\n   * Signale la fermeture manuelle du bandeau d'information.\n   */\n  @Output() readonly noticeClose = new EventEmitter<ElementRef>();\n\n  private readonly hostElement = inject(ElementRef);\n\n  get iconClass(): string {\n    return this.icon ?? '';\n  }\n\n  /** @deprecated since 1.12 use `closeable`instead. */\n  get closable(): boolean | 'controlled' {\n    return this.closeable;\n  }\n\n  /** @deprecated since 1.12 use `heading` instead. */\n  get message(): string | undefined {\n    return this.heading;\n  }\n\n  /** @deprecated since 1.12 use `closeable`instead. */\n  @Input() set closable(value: boolean | 'controlled') {\n    this.closeable = value;\n  }\n\n  /**\n   * Le message qui sera affiché dans le bandeau.\n   *\n   * Renseigner le message via l'input est prioritaire sur le slot.\n   *\n   * @deprecated since 1.12 use `heading` instead.\n   */\n  @Input() set message(value: string) {\n    this.heading = value;\n  }\n\n  /** @internal */\n  onClose() {\n    if (this.closeable && this.closeable !== 'controlled') {\n      this.hostElement.nativeElement.parentNode?.removeChild(this.hostElement.nativeElement);\n    }\n    this.noticeClose.emit(this.hostElement);\n  }\n}\n","<div class=\"fr-notice\" [class]=\"'fr-notice--' + type\" [class.fr-notice--no-icon]=\"noIcon === true\">\n  <div class=\"fr-container\">\n    <div class=\"fr-notice__body\">\n      <p>\n        @if (heading) {\n          <!-- Titre obligatoire -->\n          <ng-container [ngTemplateOutlet]=\"headingTemplate\"></ng-container>\n        } @else {\n          <span class=\"fr-notice__title\" [ngClass]=\"iconClass\"><ng-content></ng-content></span>\n        }\n\n        @if (description) {\n          <span class=\"fr-notice__desc\" [innerHTML]=\"description\"></span>\n        }\n\n        <ng-content select=\"[link]\"></ng-content>\n      </p>\n\n      @if (closeable) {\n        <button type=\"button\" class=\"fr-btn--close fr-btn\" title=\"{{ 'notice.close' | dsfrI18n }}\" (click)=\"onClose()\">\n          {{ 'notice.close' | dsfrI18n }}\n        </button>\n      }\n    </div>\n  </div>\n</div>\n\n<!-- Templates ----------------------------------------------------------------------------------------------------- -->\n\n<ng-template #headingTemplate>\n  @switch (headingLevel) {\n    @case ('H2') {\n      <h2 class=\"fr-notice__title\" [ngClass]=\"iconClass\">{{ heading }}</h2>\n    }\n    @case ('H3') {\n      <h3 class=\"fr-notice__title\" [ngClass]=\"iconClass\">{{ heading }}</h3>\n    }\n    @case ('H4') {\n      <h4 class=\"fr-notice__title\" [ngClass]=\"iconClass\">{{ heading }}</h4>\n    }\n    @case ('H5') {\n      <h5 class=\"fr-notice__title\" [ngClass]=\"iconClass\">{{ heading }}</h5>\n    }\n    @case ('H6') {\n      <h6 class=\"fr-notice__title\" [ngClass]=\"iconClass\">{{ heading }}</h6>\n    }\n    @default {\n      <span class=\"fr-notice__title\" [ngClass]=\"iconClass\">{{ heading }}</span>\n    }\n  }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrNoticeComponent } from './notice.component';\n\n@NgModule({\n  exports: [DsfrNoticeComponent],\n  imports: [CommonModule, DsfrI18nPipe, DsfrNoticeComponent],\n})\nexport class DsfrNoticeModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\n@Component({\n  selector: 'edu-page-link',\n  templateUrl: './page-link.component.html',\n  styleUrls: ['./page-link.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule],\n})\nexport class EduPageLinkComponent {\n  @Input() active = false;\n  @Input() customClass?: string;\n  @Input() disabled = false;\n  @Input() label?: string;\n  @Input() labelCustomClass?: string;\n  @Input() num?: number;\n  @Output() pageSelectEvent = new EventEmitter<number>();\n  private _tooltipMessage: string | undefined;\n\n  get tooltipMessage(): string | undefined {\n    return this._tooltipMessage ? this._tooltipMessage : this.label;\n  }\n\n  @Input() set tooltipMessage(value: string) {\n    this._tooltipMessage = value;\n  }\n\n  onPage(event: Event, pageNum: number | undefined) {\n    event.preventDefault();\n    this.pageSelectEvent.emit(pageNum);\n  }\n}\n","<!-- ici on utilise des boutons a la place des liens pour l'accessibilité (pas de href) -->\n<button\n  type=\"button\"\n  class=\"fr-pagination__link\"\n  [ngClass]=\"customClass ? customClass : ''\"\n  [attr.aria-current]=\"active ? 'page' : null\"\n  [disabled]=\"disabled\"\n  [attr.aria-label]=\"tooltipMessage || null\"\n  (click)=\"onPage($event, num)\">\n  @if (label) {\n    <span [class]=\"labelCustomClass || null\">{{ label }}</span>\n  }\n</button>\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  computed,\n  effect,\n  EventEmitter,\n  forwardRef,\n  input,\n  Input,\n  OnInit,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DefaultControlComponent, DsfrI18nPipe, DsfrSelectOption, DsfrSeverityConst } from '../../shared';\nimport { EduHintComponent } from '../../shared/components/input-group/hint.component';\nimport { EduMessageSeverityDirective } from '../../shared/directives/message-severity.directive';\n\n@Component({\n  selector: 'dsfr-form-select',\n  templateUrl: './form-select.component.html',\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DsfrFormSelectComponent),\n      multi: true,\n    },\n  ],\n  imports: [CommonModule, FormsModule, DsfrI18nPipe, EduMessageSeverityDirective, EduHintComponent],\n  // Fix CSS DSFR : supprimer margin top en cas de label caché visuellement (labelSrOnly)\n  styles: ['.fr-label.fr-sr-only + .fr-select { margin-top: 0}'],\n})\nexport class DsfrFormSelectComponent extends DefaultControlComponent<any> implements OnInit {\n  /**\n   * Permet de personnaliser la première option (non sélectionnable). Cette propriété est positionnée à une valeur par\n   * défaut (ex : Sélectionnez une option) internationalisée.\n   */\n  @Input() placeholder?: string;\n\n  /**\n   * Indique que le champ est obligatoire, nécessaire du point de vue de l'accessibilité.\n   */\n  @Input() required = false;\n\n  /**\n   * Permet d'ajouter un attribut 'aria-label' sur le champ de formulaire en cas de besoin.\n   */\n  @Input() ariaLabel?: string;\n\n  /**\n   * Ajouter l'attribut 'aria-invalid' sur le champ de formulaire.\n   */\n  @Input() ariaInvalid?: string;\n\n  /**\n   * Cache le label visuellement en le laissant disponible aux lecteurs d'écran.\n   */\n  @Input() labelSrOnly = false;\n\n  /**\n   * Output équivalent de (ngModelChange) si celui n'est pas disponible.\n   */\n  @Output() selectChange = new EventEmitter<any>();\n\n  /**\n   * Le modèle de présentation permettant de transmettre la liste des options.\n   */\n  readonly options = input<DsfrSelectOption[]>([]);\n\n  /** Fonction de comparaison */\n  protected compareFn: (o1: any, o2: any) => boolean = Object.is;\n\n  protected readonly NO_VALUE = null; // valeur interne unique utilisée uniquement pour l’affichage du placeholder\n  protected internalValue: any; // mapping vers value pour NO_VALUE, pour ne jamais émettre NO_VALUE\n\n  /**\n   * Permet de conditionner la présence de l'option servant de placeholder. Sert à désactiver la gestion du placeholder\n   * dans le cas où l'utilisateur souhaite avoir une liste déroulante désélectionnable, dans ce cas, il fournit lui-même\n   * l'option servant de placeholder et d'option de désélection.\n   */\n  protected addDefaultPlaceholder = true;\n\n  protected groupClasses = computed(() => {\n    const severity = this.severityViewModel();\n    const message = this.messageViewModel();\n\n    return {\n      'fr-select-group': true,\n      'fr-select-group--disabled': this.disabled,\n      'fr-select-group--valid':\n        message && (severity === DsfrSeverityConst.SUCCESS || severity === DsfrSeverityConst.VALID),\n      'fr-select-group--error': message && severity === DsfrSeverityConst.ERROR,\n      'fr-input-group--warning': message && severity === DsfrSeverityConst.WARNING,\n    };\n  });\n\n  constructor() {\n    super();\n\n    effect(() => {\n      const options = this.options();\n\n      if (options?.length && options[0]) {\n        const firstOpt = options[0];\n\n        this.addDefaultPlaceholder =\n          firstOpt.options !== undefined || (firstOpt.value !== '' && firstOpt.value !== undefined);\n      } else if (options?.length === 0) {\n        this.addDefaultPlaceholder = true;\n      } else {\n        this.addDefaultPlaceholder = false;\n      }\n    });\n  }\n\n  /* fixme : remplacer par un signal input si https://github.com/compodoc/compodoc/pull/1491 */\n  // private _options: DsfrSelectOption[] = [];\n  /**\n   * @deprecated since 1.2, utiliser `placeholder` à la place (sans H majuscule).\n   */\n  get placeHolder(): string | undefined {\n    return this.placeholder;\n  }\n\n  override get value(): any | undefined {\n    return super.value;\n  }\n\n  /**\n   * @deprecated since 1.2, utiliser `placeholder` à la place (sans H majuscule).\n   */\n  @Input() set placeHolder(value: string | undefined) {\n    this.placeholder = value;\n  }\n\n  @Input()\n  override set value(value: any | undefined) {\n    super.value = value;\n    this.updateInternalValue();\n  }\n\n  /**\n   * Personnalisation de la comparaison.\n   * `compareWith` est une fonction qui a deux arguments: valeur option1 et valeur option2.\n   * Si `compareWith` est fournie, sélection de l'option en fonction du retour de la fonction.\n   */\n  @Input()\n  set compareWith(fn: (o1: any, o2: any) => boolean) {\n    if (typeof fn !== 'function') {\n      throw Error('`compareWith` must be a function.');\n    }\n\n    this.compareFn = fn;\n  }\n\n  override ngOnInit() {\n    super.ngOnInit();\n    this.messagesGroupId = `${this.inputId}-messages`;\n\n    if (this.value === undefined) this.updateInternalValue();\n  }\n\n  public override writeValue(value: any): void {\n    super.writeValue(value);\n    this.updateInternalValue();\n  }\n\n  /**\n   * Mise a jour de value selon internalValue (nécessaire pour le cas du undefined et placeholder)\n   * @param value\n   */\n  protected onChange(value: any) {\n    this.value = value === this.NO_VALUE ? undefined : this.internalValue;\n    this.selectChange.emit(this.value);\n  }\n\n  /**\n   * Met à jour la valeur interne utilisée par le <select> pour afficher correctement le placeholder.\n   *\n   * En reactive form, la valeur [ngValue]=\"undefined\" ne sera jamais sélectionnée par angular et\n   * le placeholder ne sera donc pas affiché. Fix : contournement avec une valeur interne positionnée\n   * à nulle (NO_VALUE) en cas de undefined sur this.value\n   *\n   * En template driven, il faut maj internalValue a l'initialisation pour que cette solution\n   * fonctionne également (pas de passage dans writeValue)\n   */\n  private updateInternalValue() {\n    if (this.value === undefined && this.addDefaultPlaceholder) {\n      // set manuellement une valeur autre que undefined pour que le placeholder soit affiché\n      this.internalValue = this.NO_VALUE;\n    } else {\n      this.internalValue = this.value;\n    }\n  }\n\n  private findOption(value: any, options: DsfrSelectOption[]): any {\n    return options?.find(\n      (option) =>\n        this.compareFn(value, option.value) ||\n        option.value === value ||\n        (option.options && this.findOption(value, option.options)),\n    );\n  }\n}\n","<div [class]=\"groupClasses()\">\n  <label class=\"fr-label\" [class.fr-sr-only]=\"labelSrOnly\" [for]=\"inputId\">\n    @if (label) {\n      {{ label }}\n    } @else {\n      <ng-content select=\"[label]\"></ng-content>\n    }\n    @if (hint) {\n      <edu-hint-form [hint]=\"hint\"></edu-hint-form>\n    }\n  </label>\n\n  <select\n    class=\"fr-select\"\n    [id]=\"inputId\"\n    [attr.name]=\"name || null\"\n    [(ngModel)]=\"internalValue\"\n    [attr.aria-describedby]=\"combinedAriaDescribedBy()\"\n    [attr.aria-label]=\"ariaLabel\"\n    [attr.aria-invalid]=\"ariaInvalid || null\"\n    [disabled]=\"disabled\"\n    [required]=\"required\"\n    [compareWith]=\"compareFn\"\n    (blur)=\"onBlur()\"\n    (change)=\"onChange($event)\">\n    @if (addDefaultPlaceholder === true) {\n      <option [ngValue]=\"NO_VALUE\" disabled>\n        {{ placeholder ?? ('select.placeholder' | dsfrI18n) }}\n      </option>\n    }\n    @for (option of options(); track $index) {\n      @if (option.options) {\n        <!-- Affichage des groupes -->\n        <optgroup [label]=\"option.label\">\n          @for (option of option.options; track $index) {\n            <option [ngValue]=\"option.value\" [disabled]=\"option.disabled || null\">\n              {{ option.label }}\n            </option>\n          }\n        </optgroup>\n      } @else {\n        <option [ngValue]=\"option.value\" [disabled]=\"option.disabled || null\">\n          {{ option.label }}\n        </option>\n      }\n    }\n  </select>\n\n  <div [id]=\"messagesGroupId\" class=\"fr-messages-group\" aria-live=\"polite\">\n    @if (messageViewModel()) {\n      <p class=\"fr-message\" [eduMessageSeverity]=\"severityViewModel()\">\n        {{ messageViewModel() }}\n      </p>\n    }\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrFormSelectComponent } from './form-select.component';\n\n@NgModule({\n  exports: [DsfrFormSelectComponent],\n  imports: [CommonModule, FormsModule, DsfrI18nPipe, DsfrFormSelectComponent],\n})\nexport class DsfrFormSelectModule {}\n","export type Interval = [number, number];\n\n/**\n * Permet de calculer le ou les intervalles à afficher dans le composant de pagination.\n *\n * @param currentPage n° de la page courante, démarre à 1\n * @param pagesTotal nombre de pages\n * @param extended affichage sur 7 numéros plutôt que 5 (default: false)\n */\nexport function calcPages(currentPage: number, pagesTotal: number, extended = false): Interval[] {\n  if (extended) return calcPagesExtended(currentPage, pagesTotal);\n  else return calcPagesRestricted(currentPage, pagesTotal);\n}\n\n/**\n * Établit les intervalles affichés dans la pagination\n * avec au plus 5 numéros de page visibles.\n *\n * Configurations possibles (p = page courante / n = nombre total de pages) :\n * - 1 2 3 4 5                 (si n <= 5)\n * - 1 2 3 ... n-1 n           (si p = 1 ou 2)\n * - 1 2 3 4 ... n             (si p = 3)\n * - 1 ... n-3 n-2 n-1 n       (si p = n-2)\n * - 1 2 ... n-2 n-1 n         (si p = n ou n-1)\n * - 1 ... p-1 p p+1 ... n     (sinon)\n *\n * @param currentPage page courante\n * @param pagesTotal nombre totale de pages\n * @returns intervalles correspondants\n */\nfunction calcPagesRestricted(currentPage: number, pagesTotal: number): Interval[] {\n  if (pagesTotal <= 5) {\n    return [[1, pagesTotal]];\n  }\n\n  if (currentPage <= 2) {\n    return [\n      [1, 3],\n      [pagesTotal - 1, pagesTotal],\n    ];\n  }\n\n  if (currentPage === 3) {\n    return [\n      [1, 4],\n      [pagesTotal, pagesTotal],\n    ];\n  }\n\n  if (currentPage === pagesTotal - 2) {\n    return [\n      [1, 1],\n      [pagesTotal - 3, pagesTotal],\n    ];\n  }\n\n  if (currentPage >= pagesTotal - 1) {\n    return [\n      [1, 2],\n      [pagesTotal - 2, pagesTotal],\n    ];\n  }\n\n  return [\n    [1, 1],\n    [currentPage - 1, currentPage + 1],\n    [pagesTotal, pagesTotal],\n  ];\n}\n\n/**\n * Établit les intervalles affichés dans la pagination\n * avec au plus 7 numéros de page visibles.\n *\n * Configurations possibles (p = page courante / n = nombre total de pages) :\n * - 1 2 3 4 5 6 7                     (si n <= 7)\n * - 1 2 3 4 ... n-2 n-1 n             (si p = 1, 2 ou 3)\n * - 1 2 3 4 5 ... n-1 n               (si p = 4)\n * - 1 2 3 ... n-3 n-2 n-1 n           (si p = n, n-1 ou n-2)\n * - 1 2 ... n-4 n-3 n-2 n-1 n         (si p = n-3)\n * - 1 2 ... p-1 p p+1 ... n-1 n       (sinon)\n *\n * @param currentPage page courante\n * @param pagesTotal nombre totale de pages\n * @returns intervalles correspondants\n */\nfunction calcPagesExtended(currentPage: number, pagesTotal: number): Interval[] {\n  if (pagesTotal <= 7) {\n    return [[1, pagesTotal]];\n  }\n\n  // Début de pagination\n  if (currentPage <= 4) {\n    return [\n      [1, currentPage === 4 ? 5 : 4],\n      [pagesTotal - (currentPage === 4 ? 1 : 2), pagesTotal],\n    ];\n  }\n\n  // Fin de pagination\n  if (currentPage >= pagesTotal - 3) {\n    return [\n      [1, currentPage === pagesTotal - 3 ? 2 : 3],\n      [pagesTotal - (currentPage === pagesTotal - 3 ? 4 : 3), pagesTotal],\n    ];\n  }\n\n  // Milieu\n  return [\n    [1, 1],\n    [currentPage - 2, currentPage + 2],\n    [pagesTotal, pagesTotal],\n  ];\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  booleanAttribute,\n  Component,\n  computed,\n  ContentChild,\n  EventEmitter,\n  input,\n  Input,\n  InputSignal,\n  OnInit,\n  Output,\n  Signal,\n  TemplateRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { DsfrFormSelectComponent } from '../../forms/form-select';\nimport { DsfrI18nPipe, DsfrSelectOption, newUniqueId } from '../../shared';\nimport { EduPageLinkComponent } from './page-link.component';\nimport { calcPages, Interval } from './pagination-calc';\n\n@Component({\n  selector: 'dsfr-pagination',\n  templateUrl: './pagination.component.html',\n  styleUrls: ['./pagination.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, RouterModule, DsfrI18nPipe, EduPageLinkComponent, DsfrFormSelectComponent, FormsModule],\n})\nexport class DsfrPaginationComponent implements OnInit {\n  /**\n   * Affiche uniquement l'icône d'accès à la page précédement si vrai.\n   *\n   * @since 1.6\n   */\n  @Input() previousOnly = false;\n\n  /** Attribut ariaLabel permettant de contextualiser la pagination */\n  @Input() ariaLabel?: string;\n\n  /** Surcharger le placeholder par défaut de la sélection du nombre de lignes */\n  @Input() rowsPerPagePlaceholder?: string;\n\n  /** Template optionnel pour afficher le nombre d'éléments total */\n  @ContentChild('totalElementsTemplate', { static: true }) totalElementsTemplate?: TemplateRef<void>;\n\n  /** Template optionnel pour afficher des éléments additionnels à côté de la pagination (ex. boutons d'actions) */\n  @ContentChild('additionalTemplate', { static: true }) additionalTemplate?: TemplateRef<void>;\n\n  /** Sélection d'une page */\n  @Output() pageSelect = new EventEmitter<number>();\n\n  /** @deprecated(since 1.6) utiliser `pageSelect` à la place. */\n  @Output() pageSelectEvent = new EventEmitter<number>();\n\n  /* Evènement page précédente. L'événement initial n'est pas propagé. */\n  @Output() backSelect = new EventEmitter<void>();\n\n  /** Changement du nombre de lignes à afficher */\n  @Output() rowsPerPageChange: EventEmitter<number> = new EventEmitter();\n\n  /**\n   * @deprecated (since 1.6) utiliser `backSelect` à la place.\n   */\n  @Output() backEvent = new EventEmitter<void>();\n\n  /* N° de la page active, démarre à : 1 */\n  currentPage: InputSignal<number> = input(1);\n\n  /** Désactiver la sélection du nombre de lignes à afficher */\n  disabledRowsPerPage = input(false, { transform: booleanAttribute });\n\n  pageCount: InputSignal<number> = input.required();\n\n  /** Nombre d'éléments total. Optionnel pour afficher un nombre d'éléments */\n  totalElements = input<number>();\n\n  /** Controle le nombre de numéro de pages affichés (5 en standard par défaut, 7 en extended) */\n  displayedNumbers = input<'standard' | 'extended'>('standard');\n\n  /** Options pour la sélection du nombre de lignes à afficher par page */\n  rowsPerPageOptions = input<DsfrSelectOption[]>([]);\n\n  /** Taille de page courante */\n  rowsPerPage = input<number>(10);\n\n  /* Affiche les boutons textuels \"Page précédente/suivante\" */\n  showPrevAndNextBtn = input(true, { transform: booleanAttribute });\n\n  /** Affiche les labels des boutons textuels \"Page précédente/suivante\" à partir du breakpoint LG */\n  showPrevAndNextLabelLg = input(true, { transform: booleanAttribute });\n\n  /** Identifiant du select du nombre de pages */\n  protected selectId: string = '';\n\n  protected multipleElements = computed(() => {\n    const total = this.totalElements();\n    return total && total > 1;\n  });\n\n  protected readonly intervals: Signal<Interval[]> = computed(() => {\n    return calcPages(this.currentPage(), this.pageCount(), this.displayedNumbers() === 'extended');\n  });\n\n  protected readonly isFirstPage: Signal<boolean> = computed(() => {\n    return this.pageCount() === 0 || this.currentPage() == 1;\n  });\n\n  protected isLastPage: Signal<boolean> = computed(() => {\n    return this.pageCount() === 0 || this.currentPage() == this.pageCount();\n  });\n\n  get prevNum(): number {\n    return Math.max(1, this.currentPage() - 1);\n  }\n\n  get nextNum(): number {\n    return Math.min(this.currentPage() + 1, this.pageCount());\n  }\n\n  public ngOnInit(): void {\n    this.selectId = newUniqueId();\n  }\n\n  protected onBack() {\n    this.backSelect.emit();\n    this.backEvent.emit();\n  }\n\n  protected onPage(pageNum: number) {\n    this.pageSelect.emit(pageNum);\n    this.pageSelectEvent.emit(pageNum);\n  }\n\n  protected previous(): number {\n    if (!this.isFirstPage()) this.onPage(this.currentPage() - 1);\n    return this.currentPage();\n  }\n\n  protected next(): number {\n    if (!this.isLastPage()) this.onPage(this.currentPage() + 1);\n    return this.currentPage();\n  }\n\n  protected pagesFrom(interval: Interval): number[] {\n    const firstPage = interval[0];\n    const lastPage = interval[1];\n    const count = lastPage - firstPage + 1;\n    return Array(count)\n      .fill(0)\n      .map((e, i) => i + firstPage);\n  }\n\n  protected onChangerowsPerPage(value: number): void {\n    this.rowsPerPageChange.emit(value);\n  }\n}\n","@if (totalElements() || rowsPerPageOptions().length > 0) {\n  <div class=\"fr-table__footer\">\n    <!-- Nombre de résultats total -->\n    <div class=\"fr-table__footer--start\">\n      @if (totalElements()) {\n        <p class=\"fr-table__detail\">\n          <!-- Afficher le nombre de résultat  -->\n          @if (totalElementsTemplate) {\n            <ng-container *ngTemplateOutlet=\"totalElementsTemplate\"></ng-container>\n          } @else {\n            @if (multipleElements()) {\n              {{ totalElements() }} {{ 'pagination.row' | dsfrI18n }}s\n            } @else {\n              {{ totalElements() }} {{ 'pagination.row' | dsfrI18n }}\n            }\n          }\n        </p>\n      }\n\n      <!-- Sélection de la taille de page  -->\n      @if (rowsPerPageOptions().length > 0) {\n        <dsfr-form-select\n          [inputId]=\"selectId\"\n          [ngModel]=\"rowsPerPage()\"\n          (ngModelChange)=\"onChangerowsPerPage($event)\"\n          [disabled]=\"disabledRowsPerPage()\"\n          [placeholder]=\"rowsPerPagePlaceholder ?? 'pagination.rowsPerPageLabel' | dsfrI18n\"\n          [options]=\"rowsPerPageOptions()\">\n          <ng-container label\n            ><span class=\"fr-sr-only\"> {{ 'pagination.rowsPerPageLabel' | dsfrI18n }}</span>\n          </ng-container>\n        </dsfr-form-select>\n      }\n    </div>\n    <div class=\"fr-table__footer--middle\">\n      <ng-container *ngTemplateOutlet=\"paginationTemplate\"></ng-container>\n    </div>\n\n    <div class=\"fr-table__footer--end\">\n      @if (additionalTemplate) {\n        <ng-container *ngTemplateOutlet=\"additionalTemplate\"></ng-container>\n      }\n    </div>\n  </div>\n} @else {\n  <ng-container *ngTemplateOutlet=\"paginationTemplate\"></ng-container>\n}\n\n<ng-template #paginationTemplate>\n  <!-- Page précédente seulement ---------------------------------------------------------------------------------------->\n\n  @if (previousOnly) {\n    <nav\n      class=\"fr-pagination\"\n      [attr.role]=\"'pagination.role' | dsfrI18n\"\n      [attr.aria-label]=\"ariaLabel ?? ('pagination.ariaLabel' | dsfrI18n)\">\n      <ul class=\"fr-pagination__list\">\n        <edu-page-link\n          customClass=\"fr-pagination__link--prev fr-pagination__link--lg-label\"\n          label=\"Page précédente\"\n          (pageSelectEvent)=\"onBack()\"></edu-page-link>\n      </ul>\n    </nav>\n  } @else {\n    <!-- Pagination ------------------------------------------------------------------------------------------------------->\n    <nav class=\"fr-pagination\" [attr.role]=\"'pagination.role' | dsfrI18n\" [attr.aria-label]=\"ariaLabel\">\n      <ul class=\"fr-pagination__list\">\n        <!-- Première page -->\n        <li>\n          <edu-page-link\n            customClass=\"fr-pagination__link--first\"\n            [label]=\"'pagination.firstPage' | dsfrI18n\"\n            labelCustomClass=\"label-sm\"\n            [tooltipMessage]=\"'pagination.firstPage' | dsfrI18n\"\n            [num]=\"1\"\n            [disabled]=\"isFirstPage()\"\n            (pageSelectEvent)=\"onPage($event)\"></edu-page-link>\n        </li>\n        <!-- Lien vers 'Page précédente' -->\n        @if (showPrevAndNextBtn()) {\n          <li>\n            <edu-page-link\n              [customClass]=\"\n                showPrevAndNextLabelLg()\n                  ? 'fr-pagination__link--prev fr-pagination__link--lg-label'\n                  : 'fr-pagination__link--prev'\n              \"\n              [label]=\"'pagination.previousPage' | dsfrI18n\"\n              labelCustomClass=\"label-sm\"\n              [tooltipMessage]=\"'pagination.previousPage' | dsfrI18n\"\n              [num]=\"prevNum\"\n              [disabled]=\"isFirstPage()\"\n              (pageSelectEvent)=\"onPage($event)\"></edu-page-link>\n          </li>\n        }\n        <!-- Toutes les pages -->\n        @for (interval of intervals(); let i = $index; track i) {\n          @if (interval[0] !== 1) {\n            <li>\n              <span class=\"fr-pagination__link fr-hidden fr-unhidden-lg\"> … </span>\n            </li>\n          }\n          @for (pageNum of pagesFrom(interval); track $index) {\n            <li>\n              <edu-page-link\n                [num]=\"pageNum\"\n                [label]=\"pageNum + ''\"\n                [tooltipMessage]=\"'Page ' + pageNum\"\n                [active]=\"pageNum === currentPage()\"\n                (pageSelectEvent)=\"onPage($event)\"></edu-page-link>\n            </li>\n          }\n        }\n        <!-- Lien vers 'Page suivante' -->\n        @if (showPrevAndNextBtn()) {\n          <li>\n            <edu-page-link\n              [customClass]=\"\n                showPrevAndNextLabelLg()\n                  ? 'fr-pagination__link--next fr-pagination__link--lg-label'\n                  : 'fr-pagination__link--next'\n              \"\n              [label]=\"'pagination.nextPage' | dsfrI18n\"\n              labelCustomClass=\"label-sm\"\n              [tooltipMessage]=\"'pagination.nextPage' | dsfrI18n\"\n              [num]=\"nextNum\"\n              [disabled]=\"isLastPage()\"\n              (pageSelectEvent)=\"onPage($event)\"></edu-page-link>\n          </li>\n        }\n        <!-- Dernière page (non affichée sur mobile) -->\n        <li>\n          <edu-page-link\n            customClass=\"fr-pagination__link--last\"\n            [label]=\"'pagination.lastPage' | dsfrI18n\"\n            labelCustomClass=\"label-sm\"\n            [tooltipMessage]=\"'pagination.lastPage' | dsfrI18n\"\n            [num]=\"pageCount()\"\n            [disabled]=\"isLastPage()\"\n            (pageSelectEvent)=\"onPage($event)\"></edu-page-link>\n        </li>\n      </ul>\n    </nav>\n  }\n</ng-template>\n","import { Component, EventEmitter, Output, ViewEncapsulation } from '@angular/core';\nimport { EduPageLinkComponent } from '../page-link.component';\n\n@Component({\n  selector: 'dsfr-previous-page',\n  templateUrl: './previous-page.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [EduPageLinkComponent],\n})\n/** @deprecated (since 1.6) utiliser `dsfr-pagination` à la place. */\nexport class DsfrPreviousPageComponent {\n  /* Evènement page précédente. L'événement initial n'est pas propagé. */\n  @Output() backEvent = new EventEmitter();\n\n  onBack() {\n    this.backEvent.emit();\n  }\n}\n","<nav role=\"navigation\" class=\"fr-pagination\" aria-label=\"Pagination\">\n  <ul class=\"fr-pagination__list\">\n    <edu-page-link\n      customClass=\"fr-pagination__link--prev fr-pagination__link--lg-label\"\n      label=\"Page précédente\"\n      (pageSelectEvent)=\"onBack()\"></edu-page-link>\n  </ul>\n</nav>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { EduPageLinkComponent } from './page-link.component';\nimport { DsfrPaginationComponent } from './pagination.component';\nimport { DsfrPreviousPageComponent } from './previous-page/previous-page.component';\n\n@NgModule({\n  exports: [DsfrPaginationComponent],\n  imports: [\n    CommonModule,\n    RouterModule,\n    DsfrI18nPipe,\n    EduPageLinkComponent,\n    DsfrPreviousPageComponent,\n    DsfrPaginationComponent,\n  ],\n})\nexport class DsfrPaginationModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { DsfrI18nPipe, DsfrTextSize, DsfrTextSizeConst } from '../../shared';\n\nexport interface DsfrQuoteDetail {\n  text: string;\n  isTitle?: boolean;\n  sourceUrl?: string;\n}\n\n@Component({\n  selector: 'dsfr-quote',\n  templateUrl: './quote.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, DsfrI18nPipe],\n})\nexport class DsfrQuoteComponent {\n  /**\n   * Texte de la citation.\n   */\n  @Input() text = '';\n\n  /**\n   * Taille du texte de la citation. XL par défaut si non précisé.\n   */\n  @Input() textSize: DsfrTextSize = DsfrTextSizeConst.XL;\n\n  /**\n   * URL pour afficher une image d'illustration.\n   */\n  @Input() imagePath = '';\n\n  /**\n   * Texte alternatif à utiliser uniquement si l'image à une information à passer.\n   */\n  @Input() imageAlt = '';\n\n  /**\n   * Auteur de la citation.\n   */\n  @Input() author = '';\n\n  /**\n   * URL de la source de la citation.\n   */\n  @Input() sourceUrl = '';\n\n  /**\n   * Tableau des détails de la citation, sous la forme : detail=[{text:string, isTitle?:boolean, sourceURL?:string}]\n   *\n   */\n  @Input() details: DsfrQuoteDetail[] = [];\n\n  /**\n   * Permet de personnaliser la couleur du tag. Il faut donner la class exact (ex : fr-quote--green-emeraude) que vous\n   * trouverez [ici](https://www.systeme-de-design.gouv.fr/version-courante/fr/fondamentaux/couleurs-palette#couleurs-illustratives)\n   */\n  @Input() customClass = '';\n}\n","<figure class=\"fr-quote\" [class]=\"customClass\" [ngClass]=\"{ 'fr-quote--column': imagePath ? true : false }\">\n  <blockquote [attr.cite]=\"sourceUrl && sourceUrl.length ? sourceUrl : null\">\n    <p\n      [class.fr-text--lg]=\"textSize === 'LG'\"\n      [class.fr-text--md]=\"textSize === 'MD'\"\n      [class.fr-text--sm]=\"textSize === 'SM'\"\n      [class.fr-text--xs]=\"textSize === 'XS'\"\n      [innerHTML]=\"text\"></p>\n  </blockquote>\n  <figcaption>\n    @if (author) {\n      <p class=\"fr-quote__author\" [innerHTML]=\"author\"></p>\n    }\n    <ng-container *ngTemplateOutlet=\"detailTemplate\"></ng-container>\n\n    @if (imagePath) {\n      <div class=\"fr-quote__image\">\n        <img [src]=\"imagePath\" class=\"fr-responsive-img\" [attr.alt]=\"imageAlt\" />\n        <!-- L’alternative de l’image (attribut alt) doit rester vide car l’image est illustrative et ne doit pas être restituée aux technologies d’assistance -->\n      </div>\n    }\n  </figcaption>\n</figure>\n\n<ng-template #detailTemplate>\n  @if (details.length && details.length > 1) {\n    <ul class=\"fr-quote__source\">\n      @for (detail of details; track $index) {\n        <li>\n          @if (!detail.isTitle && !detail.sourceUrl) {\n            <!--fixme supprimer innerHTML -->\n            <span [innerHTML]=\"detail.text\"></span>\n          } @else if (detail.isTitle) {\n            <cite>{{ detail.text }}</cite>\n          } @else if (detail.sourceUrl && !detail.isTitle) {\n            <a\n              target=\"_blank\"\n              rel=\"noopener external\"\n              [title]=\"detail.text + ' - ' + ('link.newWindow' | dsfrI18n)\"\n              [href]=\"detail.sourceUrl\"\n              >{{ detail.text }}</a\n            >\n          }\n        </li>\n      }\n    </ul>\n  } @else if (details.length && details.length === 1) {\n    <div class=\"fr-quote__source\">\n      @if (!details[0].isTitle && !details[0].sourceUrl) {\n        <span *ngIf=\"!details[0].isTitle && !details[0].sourceUrl\" [innerHTML]=\"details[0].text\"></span>\n      } @else if (details[0].isTitle) {\n        <cite>{{ details[0].text }}</cite>\n      } @else if (details[0].sourceUrl && !details[0].isTitle) {\n        <a target=\"_blank\" rel=\"noreferrer\" [href]=\"details[0].sourceUrl\">{{ details[0].text }}</a>\n      }\n    </div>\n  }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrQuoteComponent } from './quote.component';\n\n@NgModule({\n  exports: [DsfrQuoteComponent],\n  imports: [CommonModule, DsfrI18nPipe, DsfrQuoteComponent],\n})\nexport class DsfrQuoteModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { DsfrSize, DsfrSizeConst, newUniqueId } from '../../shared';\nimport { EduHintComponent } from '../../shared/components/input-group/hint.component';\nimport { DsfrSegmentedControl } from './segmented-control.model';\n\n@Component({\n  selector: 'dsfr-segmented-control',\n  templateUrl: './segmented-control.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, EduHintComponent],\n})\nexport class DsfrSegmentedControlComponent {\n  /**\n   * Liste des choix du contrôle segmenté.\n   */\n  @Input({ required: true }) segments!: DsfrSegmentedControl[];\n\n  /**\n   * Légende du composant (obligatoire).\n   */\n  @Input({ required: true }) legend!: string;\n\n  /**\n   * Cache la légende visuellement.\n   */\n  @Input() legendSrOnly = false;\n\n  /**\n   * Texte(s) de description additionnel(s).\n   */\n  @Input() hint?: string | string[];\n\n  /**\n   * Taille du contrôle segmenté, existe en `SM` et `MD` uniquement. `MD` par défaut.\n   */\n  @Input() segmentedControlSize: DsfrSize = DsfrSizeConst.MD;\n\n  /**\n   * Contrôle segmenté avec légende en ligne\n   */\n  @Input() inline = false;\n\n  /**\n   * Renvoie la value du choix selectionné.\n   */\n  @Output() segmentedControlSelect = new EventEmitter<string>();\n\n  private _name: string | undefined;\n\n  /**\n   * Taille du contrôle segmenté, existe en `SM` et `MD` uniquement. `MD` par défaut.\n   *\n   * @deprecated since(1.15.0) utiliser 'segmentedControlSize' à la place\n   */\n  get size(): DsfrSize {\n    return this.segmentedControlSize;\n  }\n\n  get name(): string | undefined {\n    return this._name;\n  }\n\n  /**\n   * Taille du contrôle segmenté, existe en `SM` et `MD` uniquement. `MD` par défaut.\n   *\n   * @deprecated since(1.15.0) utiliser 'segmentedControlSize' à la place\n   */\n  @Input() set size(value: DsfrSize) {\n    this.segmentedControlSize = value;\n  }\n\n  /**\n   * Valeur de l'attribut name des inputs du contrôle segmenté.\n   */\n  @Input() set name(value: string) {\n    if (!value.length) {\n      this._name = 'segmented-' + newUniqueId();\n    } else {\n      this._name = value;\n    }\n  }\n\n  /** @internal */\n  getClasses(): {} {\n    return {\n      'fr-segmented': true,\n      'fr-segmented--sm': this.segmentedControlSize === DsfrSizeConst.SM,\n      'fr-segmented--no-legend': this.legendSrOnly,\n    };\n  }\n\n  /** @internal */\n  getSegmentedControlId(index: number): string {\n    return `${this._name}_${index + 1}`;\n  }\n\n  /**\n   * @internal\n   */\n  onSegmentSelect(value: string) {\n    this.segmentedControlSelect.emit(value);\n  }\n}\n","<fieldset [class]=\"getClasses()\">\n  @if (legend) {\n    <legend class=\"fr-segmented__legend\" [class.fr-segmented__legend--inline]=\"inline && !hint\">\n      {{ legend }}\n      @if (hint) {\n        <edu-hint-form [hint]=\"hint\"></edu-hint-form>\n      }\n    </legend>\n  }\n  <div class=\"fr-segmented__elements\">\n    @for (segment of segments; track $index; let i = $index) {\n      <div class=\"fr-segmented__element\">\n        <input\n          [value]=\"segment.value\"\n          type=\"radio\"\n          [attr.checked]=\"segment.checked ? segment.checked : null\"\n          [disabled]=\"segment.disabled\"\n          [attr.id]=\"getSegmentedControlId(i)\"\n          [name]=\"name\"\n          (click)=\"onSegmentSelect(segment.value)\" />\n        <label class=\"fr-label\" [ngClass]=\"segment.icon\" [for]=\"getSegmentedControlId(i)\">{{ segment.label }}</label>\n      </div>\n    }\n  </div>\n</fieldset>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrSegmentedControlComponent } from './segmented-control.component';\n\n@NgModule({\n  exports: [DsfrSegmentedControlComponent],\n  imports: [CommonModule, DsfrSegmentedControlComponent],\n})\nexport class DsfrSegmentedControlModule {}\n","/**\n * Définit les réseaux sociaux suportés par le composant `Share`.\n */\nexport enum DsfrShareNameConst {\n  /**\n   * Facebook.\n   */\n  FACEBOOK = 'facebook',\n  /**\n   * Linkedin.\n   */\n  LINKEDIN = 'linkedin',\n  /**\n   * Mail\n   */\n  MAIL = 'mail',\n  /**\n   * Mastodon\n   */\n  MASTODON = 'mastodon',\n  /**\n   * Twitter\n   */\n  TWITTER = 'twitter',\n  /**\n   * X (ex-Twitter)\n   */\n  X = 'twitter-x',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrShareNameConst}.\n */\nexport type DsfrShareName = `${DsfrShareNameConst}`;\n","import { CommonModule } from '@angular/common';\nimport { booleanAttribute, Component, Input } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DsfrI18nPipe, DsfrLinkTarget } from '../../../shared';\nimport { DsfrShareName, DsfrShareNameConst } from '../share.model';\n\n@Component({\n  selector: 'dsfr-share-link',\n  templateUrl: './share-link.component.html',\n  imports: [CommonModule, RouterModule, DsfrI18nPipe],\n})\nexport class DsfrShareLinkComponent {\n  /** Indique si le composant est disable ou non (le mail est toujours enable). */\n  @Input({ transform: booleanAttribute }) disabled: boolean = false;\n\n  /**\n   * L'identifiant du lien - Optionnel.\n   *\n   * @deprecated (since 1.14.0) utiliser linkId\n   */\n  @Input() id?: string;\n\n  /**\n   * L'identifiant du lien - Optionnel.\n   */\n  @Input() linkId?: string;\n\n  /** 'Partager <name>' par défaut, peut être personnalisé. */\n  @Input() label?: string;\n\n  /** Lien obligatoire pour les réseaux sociaux et mailto. Optionnel pour le presse-papier. */\n  @Input() link?: string;\n\n  /** L'attribut rel définit la relation entre une ressource liée et le document actuel.\n   * Cf. https://developer.mozilla.org/fr/docs/Web/HTML/Attributes/rel\n   */\n  @Input() rel?: string;\n\n  /** Target optionnelle, target html par défaut si non renseigné. */\n  @Input() linkTarget?: DsfrLinkTarget;\n\n  private _name: DsfrShareName | undefined;\n\n  /** @deprecated (since 1.8.0) use linkTarget instead. */\n  get target(): DsfrLinkTarget | undefined {\n    return this.linkTarget;\n  }\n\n  get name(): DsfrShareName | undefined {\n    return this._name;\n  }\n\n  /** @deprecated (since 1.8.0) use linkTarget instead. */\n  @Input() set target(value: DsfrLinkTarget) {\n    this.linkTarget = value;\n  }\n\n  /** La propriété 'name' est obligatoire et doit être sélectionnée dans une liste énumérée. */\n  @Input() set name(value: DsfrShareName) {\n    if (value === DsfrShareNameConst.TWITTER) {\n      this._name = DsfrShareNameConst.X;\n    } else {\n      this._name = value;\n    }\n  }\n\n  /** @internal */\n  getClasses() {\n    return `fr-btn--${this.name} fr-btn`;\n  }\n}\n","<li>\n  <a\n    [class]=\"getClasses()\"\n    [title]=\"'share.' + name + '.title' | dsfrI18n\"\n    [attr.id]=\"linkId || id || null\"\n    [attr.href]=\"!disabled ? link : null\"\n    [attr.target]=\"linkTarget || null\"\n    [attr.aria-disabled]=\"disabled || null\"\n    [attr.role]=\"disabled ? 'link' : null\"\n    [attr.rel]=\"rel || null\">\n    {{ 'share.' + name + '.label' | dsfrI18n }}\n  </a>\n</li>\n","import { CommonModule } from '@angular/common';\nimport {\n  afterRenderEffect,\n  booleanAttribute,\n  Component,\n  ContentChildren,\n  EventEmitter,\n  input,\n  Input,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DsfrI18nPipe, DsfrLinkTarget } from '../../shared';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrShareLinkComponent } from './share-link/share-link.component';\nimport { DsfrShareNameConst } from './share.model';\n\n@Component({\n  selector: 'dsfr-share',\n  templateUrl: './share.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, RouterModule, DsfrLinkComponent, DsfrI18nPipe],\n})\nexport class DsfrShareComponent {\n  /** @internal */\n  @ContentChildren(DsfrShareLinkComponent) shareLinks!: QueryList<DsfrShareLinkComponent>;\n\n  /** Permet de fournir le lien affichant le gestionnaire de consentement (exclusif avec la route). */\n  @Input() consentManagerLink?: string;\n\n  /** Target du lien. Target par défaut de l'application si la propriété est non renseignée. */\n  @Input() consentManagerLinkTarget?: DsfrLinkTarget | undefined;\n\n  /** Permet de fournir la route affichant le gestionnaire de consentement (prioritaire sur le lien). */\n  @Input() consentManagerRoute?: string;\n\n  /** Si route, événement avec la route en paramètre. */\n  @Output() readonly consentManagerSelect = new EventEmitter<string>();\n\n  /** Permet d'indiquer si l'usage des cookies a été autorisé par l'utilisateur final. */\n  hasCookiePermissions = input(true, { transform: booleanAttribute });\n\n  /** @internal Message de copie dans le presse-papier. */\n  message: string | undefined;\n\n  /** @internal Texte du message de permission des cookies. */\n  cookiesText: any;\n\n  /** @internal */\n  constructor() {\n    this.cookiesText = 'share.cookiesText';\n    afterRenderEffect(() => {\n      this.setDisabled(!this.hasCookiePermissions());\n    });\n  }\n\n  /** @internal */\n  onConsentLinkSelect() {\n    if (this.consentManagerRoute) {\n      this.consentManagerSelect.emit(this.consentManagerRoute);\n    }\n  }\n\n  /** @internal */\n  onCopy(event: Event): void {\n    event.preventDefault();\n    navigator.clipboard.writeText(window.location.href).then(() => {\n      this.message = 'Le lien a été copié dans le presse-papier.';\n      setTimeout((): string => (this.message = ''), 3000);\n    });\n  }\n\n  private setDisabled(disabled: boolean) {\n    this.shareLinks?.forEach((shareLink) => {\n      if (shareLink.name != DsfrShareNameConst.MAIL) shareLink.disabled = disabled;\n    });\n  }\n}\n","<div class=\"fr-share\">\n  <p class=\"fr-share__title\">{{ 'share.heading' | dsfrI18n }}</p>\n  @if (!hasCookiePermissions()) {\n    <p class=\"fr-share__text\">\n      {{ 'share.cookiesText.prelink' | dsfrI18n }}\n      <dsfr-link\n        customClass=\"fr-share__text\"\n        [link]=\"consentManagerLink\"\n        [linkTarget]=\"consentManagerLinkTarget\"\n        [route]=\"consentManagerRoute\"\n        (linkSelect)=\"onConsentLinkSelect()\"\n        >{{ 'share.cookiesText.link' | dsfrI18n }}</dsfr-link\n      >\n      {{ 'share.cookiesText.postlink' | dsfrI18n }}\n    </p>\n  }\n  @if (message) {\n    <p class=\"fr-share__text\">{{ message }}</p>\n  }\n  <ul class=\"fr-btns-group\">\n    <ng-content></ng-content>\n    <li>\n      <button\n        type=\"button\"\n        class=\"fr-share__link fr-share__link--copy\"\n        [title]=\"'share.copy.title' | dsfrI18n\"\n        (click)=\"onCopy($event)\">\n        {{ 'share.copy.label' | dsfrI18n }}\n      </button>\n    </li>\n  </ul>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrShareLinkComponent } from './share-link/share-link.component';\nimport { DsfrShareComponent } from './share.component';\n\n@NgModule({\n  exports: [DsfrShareComponent, DsfrShareLinkComponent],\n  imports: [CommonModule, RouterModule, DsfrLinkComponent, DsfrI18nPipe, DsfrShareLinkComponent, DsfrShareComponent],\n})\nexport class DsfrShareModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  ContentChild,\n  effect,\n  ElementRef,\n  EventEmitter,\n  input,\n  Input,\n  Output,\n  TemplateRef,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport {\n  DsfrDisableRouterLinkDirective,\n  DsfrI18nPipe,\n  DsfrPosition,\n  DsfrPositionConst,\n  newUniqueId,\n} from '../../shared';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrItemMenuContexte, DsfrMenu, DsfrMenuItem } from './menu.model';\n\n@Component({\n  selector: 'dsfr-sidemenu',\n  templateUrl: './sidemenu.component.html',\n  styleUrls: ['./sidemenu.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CommonModule, RouterModule, DsfrDisableRouterLinkDirective, DsfrLinkComponent, DsfrI18nPipe],\n})\nexport class DsfrSidemenuComponent<T = unknown> {\n  /** Attribut aria-label du menu latéral.  */\n  @Input() ariaLabel = 'Menu latéral';\n\n  /** Id du menu, généré par défaut si non affecté. */\n  @Input() controlId?: string;\n\n  /** Affiche le menu latéral en version fixe  */\n  @Input() sticky = false;\n\n  /** Affiche le menu latéral en version fixe sur 100% de la hauteur de la page. */\n  @Input() stickyFullHeight = false;\n\n  /** Le menu latéral est affiché à gauche par défaut mais il est possible de l'afficher à droite. */\n  @Input() position: DsfrPosition = DsfrPositionConst.LEFT;\n\n  /**\n   * Callback global déterminant si un item doit être affiché.\n   * La maj du rendu du menu ne sera réactive que si cette fonction utilise un signal\n   */\n  @Input() canDisplay?: (item: DsfrMenuItem<T>) => boolean;\n\n  /** Activer la selection automatique des items et parents (si absence de routerLink) */\n  @Input() autoActive = true;\n\n  /** Evénement émis suite à la sélection d'un item avec lien */\n  @Output() itemSelect = new EventEmitter<DsfrMenuItem<T>>();\n\n  /** Template pour afficher le label d'un item de menu (contenu d'un lien ou d'un bouton). Remplace label par défaut. */\n  @ContentChild('labelItemTemplate', { static: true }) labelItemTemplate?: TemplateRef<DsfrItemMenuContexte>;\n\n  /** Ne pas afficher d'accordéons pour les éléments de menu */\n  readonly noAccordion = input<boolean>(false);\n\n  /** Modèle de donnée du menu. */\n  readonly menu = input.required<DsfrMenu<T>>();\n\n  readonly menuViewModel = computed<DsfrMenuItem<T>[]>(() => {\n    const menu = this.menu();\n    if (!menu.items) return [];\n\n    return menu.items.map((item) => this.cloneAndFilterVisibles(item)).filter(Boolean) as DsfrMenuItem<T>[];\n  });\n\n  /** Pointeur sur le dernier item sélectionné (permet de le désélectionner lors d'une nouvelle sélection). */\n  private _prevItemSelected: DsfrMenuItem<T> | undefined;\n\n  private _initialActiveItem: DsfrMenuItem<T> | undefined;\n\n  private _btnMenuMobile = viewChild<ElementRef<HTMLElement>>('btnMenuMobile');\n\n  constructor() {\n    effect(() => {\n      const menu = this.menuViewModel();\n\n      // recalculer l'élément actif en cas de modification de menu\n      if (this.autoActive && this._initialActiveItem) {\n        this.selectItem(this._initialActiveItem!);\n      }\n    });\n  }\n\n  protected onSelectItem(item: DsfrMenuItem<T>): void {\n    if (this.autoActive) {\n      this.selectItem(item);\n    }\n    this.itemSelect.emit(item);\n\n    this.closeMenuOnMobile();\n  }\n\n  /**\n   * Fermer le menu en mode mobile après une navigation\n   */\n  private closeMenuOnMobile() {\n    const element = this._btnMenuMobile();\n\n    if (element) {\n      element.nativeElement.setAttribute('aria-expanded', 'false');\n    }\n  }\n\n  /** Dupliquer les items de menu et filtres les éléments visibles pour ne pas modifier le modèle en entrée */\n  private cloneAndFilterVisibles(item: DsfrMenuItem<T>): DsfrMenuItem<T> | undefined {\n    if (!this.isItemVisible(item)) {\n      return undefined;\n    }\n\n    let children: DsfrMenuItem<T>[] | undefined;\n\n    if (item.subItems?.length) {\n      children = item.subItems.map((sub) => this.cloneAndFilterVisibles(sub)).filter(Boolean) as DsfrMenuItem<T>[];\n\n      if (children.length === 0) {\n        return undefined; // aucun enfant visible\n      }\n    }\n\n    const clonedItem: DsfrMenuItem<T> = {\n      ...item,\n      active: this.autoActive ? !!(item.active && !item.subItems) : item.active,\n      controlId: item.controlId ?? newUniqueId(),\n      subItems: children,\n    };\n\n    if (clonedItem.active && !clonedItem.subItems) {\n      this._initialActiveItem = clonedItem;\n    }\n\n    return clonedItem;\n  }\n\n  /** A la selection d'un item si autoActive :\n   * - on passe le précédent item  sélectionné _prevItemSelected en désactivé ainsi que ses parents (trois niveaux potentiels)\n   * - nouvel item et ses parents en actif\n   * - mise a jour de _prevItemSelected\n   */\n  private selectItem(item: DsfrMenuItem<T>): void {\n    if (this._prevItemSelected) {\n      this.activateItem(this._prevItemSelected, false);\n    }\n\n    this.activateItem(item, true);\n    this._prevItemSelected = item;\n  }\n\n  /** Désactiver ou activer un item et ses noeuds parents */\n  private activateItem(item: DsfrMenuItem<T>, activate: boolean): void {\n    item.active = activate;\n    const parent = this.findParent(item, this.menuViewModel());\n    if (parent) {\n      this.activateItem(parent, activate);\n    }\n  }\n\n  /**\n   * Parcours récursif du menu pour retrouver le parent direct d'un item\n   */\n  private findParent(item: DsfrMenuItem<T>, items: DsfrMenuItem<T>[]): DsfrMenuItem<T> | undefined {\n    for (const parent of items) {\n      if (parent.subItems?.includes(item)) {\n        return parent;\n      }\n      const foundParent = this.findParent(item, parent.subItems || []);\n      if (foundParent) {\n        return foundParent;\n      }\n    }\n\n    return undefined;\n  }\n\n  private isItemVisible(item: DsfrMenuItem<T>): boolean {\n    const visible = item.isVisible?.();\n\n    if (visible !== undefined) return visible;\n\n    if (this.canDisplay) {\n      return this.canDisplay(item);\n    }\n\n    return true;\n  }\n}\n","<nav\n  [class]=\"{\n    'fr-sidemenu': true,\n    'fr-sidemenu--sticky': sticky,\n    'fr-sidemenu--sticky-full-height': stickyFullHeight,\n    'fr-sidemenu--right': position === 'right',\n  }\"\n  role=\"navigation\"\n  [attr.aria-labelledBy]=\"menu().title ? 'sidemenu-title-' + controlId : null\"\n  [attr.aria-label]=\"menu().title ? null : ariaLabel\">\n  <div class=\"fr-sidemenu__inner\" [class.fr-sidemenu__inner--no-accordion]=\"noAccordion()\">\n    <button\n      #btnMenuMobile\n      type=\"button\"\n      class=\"fr-sidemenu__btn\"\n      [attr.aria-controls]=\"'sidemenu-' + controlId\"\n      aria-expanded=\"false\">\n      {{ 'sidemenu.menuMobile' | dsfrI18n }}\n    </button>\n    <div [class]=\"'fr-collapse'\" [id]=\"'sidemenu-' + controlId\">\n      <!--Titre de rubrique optionnel-->\n      @if (menu() && menu().title) {\n        <p class=\"fr-sidemenu__title\" [id]=\"'sidemenu-title-' + controlId\">{{ menu().title }}</p>\n      }\n      <ul class=\"fr-sidemenu__list\">\n        @for (item1 of menuViewModel(); track item1) {\n          <!--Niveau 1-->\n          @if (!item1.subItems) {\n            <li class=\"fr-sidemenu__item\">\n              <ng-container [ngTemplateOutlet]=\"linkMenu\" [ngTemplateOutletContext]=\"{ item: item1 }\"></ng-container>\n            </li>\n          } @else {\n            <li class=\"fr-sidemenu__item\">\n              <ng-container\n                [ngTemplateOutlet]=\"noAccordion() ? linkMenu : buttonMenu\"\n                [ngTemplateOutletContext]=\"{ item: item1 }\"></ng-container>\n              <div [class.fr-collapse]=\"!noAccordion()\" [id]=\"item1.controlId\">\n                <!--Titre de rubrique optionnel-->\n                @if (item1.title) {\n                  <div class=\"fr-sidemenu__title\">{{ item1.title }}</div>\n                }\n                <ul class=\"fr-sidemenu__list\">\n                  @for (item2 of item1.subItems; track item2) {\n                    <!--Niveau 2-->\n\n                    @if (!item2.subItems) {\n                      <li class=\"fr-sidemenu__item\">\n                        <ng-container\n                          [ngTemplateOutlet]=\"linkMenu\"\n                          [ngTemplateOutletContext]=\"{ item: item2 }\"></ng-container>\n                      </li>\n                    } @else {\n                      <li class=\"fr-sidemenu__item\">\n                        <ng-container\n                          [ngTemplateOutlet]=\"noAccordion() ? linkMenu : buttonMenu\"\n                          [ngTemplateOutletContext]=\"{ item: item2 }\"></ng-container>\n\n                        <div [class.fr-collapse]=\"!noAccordion()\" [id]=\"item2.controlId\">\n                          @if (item2.title) {\n                            <div class=\"fr-sidemenu__title\">{{ item2.title }}</div>\n                          }\n                          <ul class=\"fr-sidemenu__list\">\n                            @for (item3 of item2.subItems; track item3) {\n                              <!--Niveau 3-->\n                              <li class=\"fr-sidemenu__item\" [attr.aria-current]=\"item3.active ? 'page' : null\">\n                                <ng-container\n                                  [ngTemplateOutlet]=\"linkMenu\"\n                                  [ngTemplateOutletContext]=\"{ item: item3 }\"></ng-container>\n                              </li>\n                            }\n                          </ul>\n                        </div>\n                      </li>\n                    }\n                  }\n                </ul>\n              </div>\n            </li>\n          }\n        }\n      </ul>\n    </div>\n  </div>\n</nav>\n\n<ng-template #buttonMenu let-item=\"item\" let-index=\"index\">\n  <button\n    #rla=\"routerLinkActive\"\n    type=\"button\"\n    class=\"fr-sidemenu__btn\"\n    [attr.aria-expanded]=\"noAccordion() ? null : item.routerLink ? rla.isActive : item.active\"\n    [attr.aria-controls]=\"item.controlId\"\n    [disableNavigation]=\"true\"\n    [attr.aria-current]=\"item.active && !item.routerLink ? true : null\"\n    [routerLink]=\"item.routerLink\"\n    [routerLinkActive]=\"item.routerLinkActive ?? ''\"\n    [routerLinkActiveOptions]=\"item.routerLinkActiveOptions ? item.routerLinkActiveOptions : { exact: false }\"\n    [ariaCurrentWhenActive]=\"true\">\n    @if (labelItemTemplate) {\n      <ng-container [ngTemplateOutlet]=\"labelItemTemplate\" [ngTemplateOutletContext]=\"{ item: item }\"></ng-container>\n    } @else {\n      <i *ngIf=\"item.icon\" class=\"edu-item-icon\" [class]=\"item.icon\" aria-hidden=\"true\"></i>\n      {{ item.label }}\n    }\n  </button>\n</ng-template>\n\n<ng-template #linkMenu let-item=\"item\" let-index=\"index\">\n  @if (!item.route && !item.routerLink && !item.link) {\n    @if (labelItemTemplate) {\n      <ng-container [ngTemplateOutlet]=\"labelItemTemplate\" [ngTemplateOutletContext]=\"{ item: item }\"></ng-container>\n    } @else {\n      <span [attr.aria-current]=\"item.active ? true : null\" class=\"fr-sidemenu__link\">\n        @if (item.iconPosition === 'left') {\n          <i class=\"edu-item-icon\" [class]=\"item.icon\" aria-hidden=\"true\"></i>\n        }\n        {{ item.label }}\n        @if (item.iconPosition === 'right') {\n          <i class=\"edu-item-icon edu-item-icon--right\" [class]=\"item.icon\" aria-hidden=\"true\"></i>\n        }\n      </span>\n    }\n  } @else {\n    <dsfr-link\n      [ariaControls]=\"item.ariaControls\"\n      [ariaCurrent]=\"item.active && !item.routerLink ? (item.subItems ? 'true' : 'page') : undefined\"\n      [ariaLabel]=\"item.ariaLabel ?? ''\"\n      [customClass]=\"'fr-sidemenu__link ' + (item.customClass ?? '')\"\n      [disabled]=\"item.disabled\"\n      [link]=\"item.link\"\n      [linkId]=\"item.linkId\"\n      [linkTarget]=\"item.linkTarget\"\n      [label]=\"item.icon || labelItemTemplate ? null : item.label\"\n      [route]=\"item.route\"\n      [routePath]=\"item.routerLink\"\n      [routerLinkActive]=\"item.routerLinkActive ?? ''\"\n      [routerLinkActiveOptions]=\"item.routerLinkActiveOptions ? item.routerLinkActiveOptions : { exact: false }\"\n      [routerLinkExtras]=\"item.routerLinkExtras\"\n      [tooltipMessage]=\"item.tooltipMessage\"\n      (linkSelect)=\"onSelectItem(item)\">\n      @if (labelItemTemplate) {\n        <ng-container [ngTemplateOutlet]=\"labelItemTemplate\" [ngTemplateOutletContext]=\"{ item: item }\"></ng-container>\n      } @else {\n        @if (item.iconPosition === 'left') {\n          <i class=\"edu-item-icon\" [class]=\"item.icon\" aria-hidden=\"true\"></i>\n        }\n        @if (item.icon) {\n          <span label> {{ item.label }}</span>\n        }\n        @if (item.iconPosition === 'right') {\n          <i class=\"edu-item-icon edu-item-icon--right\" [class]=\"item.icon\" aria-hidden=\"true\"></i>\n        }\n      }\n    </dsfr-link>\n  }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DsfrDisableRouterLinkDirective } from '../../shared/directives/disable-router-link.directive';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrSidemenuComponent } from './sidemenu.component';\n\n@NgModule({\n  exports: [DsfrSidemenuComponent],\n  imports: [CommonModule, RouterModule, DsfrDisableRouterLinkDirective, DsfrLinkComponent, DsfrSidemenuComponent],\n})\nexport class DsfrSidemenuModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, input, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DsfrAnchorLink, newUniqueId } from '../../shared';\n\n@Component({\n  selector: 'dsfr-skiplinks',\n  templateUrl: './skiplinks.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, RouterModule],\n})\nexport class DsfrSkipLinksComponent {\n  /**\n   * Tableau des liens.\n   */\n  @Input({ required: true }) links!: DsfrAnchorLink[];\n\n  /**\n   * Permet la gestion programmatique d'une navigation initiée au click sur le lien si l'input 'route' est valorisé.\n   * La valeur de la propriété 'route' sera transmise.\n   */\n  @Output() linkSelect = new EventEmitter<string>();\n\n  /** Identifiant du container skipLinks, généré par défaut */\n  skipLinksId = input<string>(newUniqueId());\n\n  /**\n   * Dans le cas d'une route, un événement `(routeSelect)` est émis avec la valeur de la route et\n   * l'événement initial n'est pas propagé.\n   *\n   * @internal\n   */\n  onSkiplinkSelect(event: Event, route: string | undefined) {\n    if (route) {\n      event.preventDefault();\n      this.linkSelect.emit(route);\n    }\n  }\n}\n","<div class=\"fr-skiplinks\">\n  <nav [id]=\"skipLinksId()\" class=\"fr-container\" role=\"navigation\" aria-label=\"Accès rapide\">\n    @if (links.length === 1) {\n      @if (!links[0].fragment) {\n        <a\n          class=\"fr-link\"\n          [href]=\"links[0].route || links[0].link\"\n          (click)=\"onSkiplinkSelect($event, links[0].route)\"\n          >{{ links[0].label }}</a\n        >\n      } @else {\n        <a class=\"fr-link\" [routerLink]=\"'.'\" [fragment]=\"links[0].fragment\"> {{ links[0].label }}</a>\n      }\n    } @else {\n      <ul class=\"fr-skiplinks__list\">\n        @for (item of links; track item) {\n          <li>\n            @if (!item.fragment) {\n              <a class=\"fr-link\" [href]=\"item.route || item.link\" (click)=\"onSkiplinkSelect($event, item.route)\">{{\n                item.label\n              }}</a>\n            } @else {\n              <a class=\"fr-link\" [routerLink]=\"'.'\" [fragment]=\"item.fragment\"> {{ item.label }}</a>\n            }\n          </li>\n        }\n      </ul>\n    }\n  </nav>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DsfrSkipLinksComponent } from './skiplinks.component';\n\n@NgModule({\n  exports: [DsfrSkipLinksComponent],\n  imports: [CommonModule, RouterModule, DsfrSkipLinksComponent],\n})\nexport class DsfrSkiplinksModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, effect, inject, input, Input, ViewEncapsulation } from '@angular/core';\nimport { DsfrHeadingLevel, DsfrHeadingLevelConst, DsfrI18nPipe, DsfrI18nService, HeadingComponent } from '../../shared';\n\n@Component({\n  selector: 'dsfr-stepper',\n  templateUrl: './stepper.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, HeadingComponent, DsfrI18nPipe],\n})\nexport class DsfrStepperComponent {\n  /**\n   * Titre de l'étape courante.\n   */\n  @Input({ required: true }) currentStepTitle!: string;\n\n  /**\n   * Titre de l'étape suivante.\n   */\n  @Input({ required: true }) nextStepTitle!: string;\n\n  /**\n   * Le niveau du titre dans la structure, ne change pas l'apparence, `<h2>` par défaut.\n   *\n   * @since 1.11.8\n   */\n  @Input() headingLevel: DsfrHeadingLevel | 'P' | 'H1' = DsfrHeadingLevelConst.H2;\n\n  /**\n   * Nombre total d'étapes.\n   */\n  totalSteps = input<number>(1);\n\n  /**\n   * Index de l'étape courante.\n   */\n  currentStep = input<number>(1);\n\n  protected readonly i18n = inject(DsfrI18nService);\n\n  /** @internal */\n  constructor() {\n    effect(() => {\n      const totalSteps = this.totalSteps();\n\n      if (totalSteps > 8 || totalSteps < 2) {\n        console.warn('dsfr-stepper : totalSteps must be below or equal to 8');\n      }\n    });\n  }\n}\n","<div class=\"fr-stepper\">\n  <edu-heading [level]=\"headingLevel\" defaultLevel=\"H2\" customClass=\"fr-stepper__title\">\n    {{ currentStepTitle }}\n    <span class=\"fr-stepper__state\">\n      {{ 'stepper.step' | dsfrI18n }} {{ currentStep() }} {{ 'stepper.of' | dsfrI18n }} {{ totalSteps() }}\n    </span>\n  </edu-heading>\n  <div class=\"fr-stepper__steps\" [attr.data-fr-current-step]=\"currentStep()\" [attr.data-fr-steps]=\"totalSteps()\"></div>\n  <p class=\"fr-stepper__details\">\n    <span class=\"fr-text--bold\">{{ 'stepper.nextStep' | dsfrI18n }}</span> {{ nextStepTitle }}\n  </p>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HeadingComponent } from '../../shared';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrStepperComponent } from './stepper.component';\n\n@NgModule({\n  exports: [DsfrStepperComponent],\n  imports: [CommonModule, HeadingComponent, DsfrI18nPipe, DsfrStepperComponent],\n})\nexport class DsfrStepperModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DsfrHeadingLevel, HeadingComponent, newUniqueId } from '../../shared';\nimport { ItemLinkComponent } from '../link/item-link.component';\nimport { DsfrSummary, DsfrSummaryLink } from './summary.model';\n\n@Component({\n  selector: 'dsfr-summary',\n  templateUrl: './summary.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, RouterModule, HeadingComponent, ItemLinkComponent],\n})\nexport class DsfrSummaryComponent {\n  /* Le titre du composant. Texte simple, utiliser le slot [heading] sinon. */\n  @Input() heading?: string;\n\n  /** Le niveau de titre devant être utilisé, une balise `p` sera utilisée si la propriété n'est pas renseignée. */\n  @Input() headingLevel?: DsfrHeadingLevel;\n\n  /** Les entrées du sommaire (required) */\n  @Input() entries: DsfrSummary = [];\n\n  /** Événement sur lien avec la valeur de l'ancre. */\n  @Output() entrySelect = new EventEmitter<string>();\n\n  /** @internal */ headingId = newUniqueId();\n\n  /**\n   * Emission de la valeur de l'ancre (fragment ou link) au clic sur un lien\n   * @internal\n   */\n  /** @internal */\n  onLinkSelect(entry: DsfrSummaryLink): void {\n    // on propage l'output, pas besoin de gérer ici le preventDefault, c'est géré en amont\n    if (entry.route) {\n      this.entrySelect.emit(entry.route);\n    }\n  }\n}\n","<nav class=\"fr-summary\" role=\"navigation\" [attr.aria-labelledby]=\"headingId\">\n  <edu-heading [headingId]=\"headingId\" customClass=\"fr-summary__title\" [level]=\"headingLevel\" defaultLevel=\"P\">\n    @if (heading) {\n      {{ heading }}\n    } @else {\n      <ng-content select=\"[heading]\"></ng-content>\n    }\n  </edu-heading>\n  <!-- TODO defaultLevel=\"H2\" en 2.0 pour être compatible avec le DSFR 1.9, 1.10, ... -->\n  <ng-container [ngTemplateOutlet]=\"summaryTemplate\" [ngTemplateOutletContext]=\"{ summary: entries }\"></ng-container>\n</nav>\n\n<ng-template #summaryTemplate let-summary=\"summary\">\n  <ol>\n    @for (entry of summary; track $index) {\n      <li>\n        <edu-item-link [item]=\"entry\" customClass=\"fr-summary__link\" (linkSelect)=\"onLinkSelect(entry)\"></edu-item-link>\n        @if (entry.subEntries?.length > 0) {\n          <ng-container\n            [ngTemplateOutlet]=\"summaryTemplate\"\n            [ngTemplateOutletContext]=\"{ summary: entry.subEntries }\"></ng-container>\n        }\n      </li>\n    }\n  </ol>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { HeadingComponent } from '../../shared';\nimport { ItemLinkComponent } from '../link/item-link.component';\nimport { DsfrSummaryComponent } from './summary.component';\n\n@NgModule({\n  exports: [DsfrSummaryComponent],\n  imports: [CommonModule, RouterModule, HeadingComponent, ItemLinkComponent, DsfrSummaryComponent],\n})\nexport class DsfrSummaryModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  booleanAttribute,\n  Component,\n  EventEmitter,\n  Input,\n  OnInit,\n  Output,\n  TemplateRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrOption } from '../../../shared';\nimport { DsfrI18nPipe } from '../../../shared/i18n/i18n.pipe';\nimport { DsfrPaginationComponent } from '../../pagination';\nimport { DsfrTableState } from '../table.model';\n\n/**\n * Composant pied de page du tableau\n * Contient trois éléments optionnel mais dans cet ordre :\n * - start: total de lignes, sélection du nombre de lignesn à afficher si pagination\n * - middle: composant de pagination commun dsfr-pagination\n * - end: template pour afficher des boutons d'actions agissant sur tout le tableau\n */\n@Component({\n  selector: 'dsfr-table-footer',\n  templateUrl: './table-footer.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, FormsModule, DsfrPaginationComponent, DsfrI18nPipe],\n})\nexport class DsfrTableFooterComponent implements OnInit {\n  /** Template optionnel afficher des boutons d'actions dans footer end */\n  @Input() footerActionsTemplate?: TemplateRef<void>;\n\n  /** Afficher la pagination */\n  @Input({ transform: booleanAttribute }) showPagination: boolean = false;\n\n  /** Afficher le total de lignes */\n  @Input({ transform: booleanAttribute }) showFooterResult: boolean = false;\n\n  /** Message personnalisé pour afficher le total de lignes */\n  @Input() footerResultsTemplate?: TemplateRef<void>;\n\n  /** Etat initial pour la pagination */\n  @Input() initialState?: DsfrTableState;\n\n  /** Nombre total d'éléments */\n  @Input() totalElements: number = 0;\n\n  /** Nombre total de pages */\n  @Input({ required: true }) totalPage!: number;\n\n  /** Page actuelle affichée (commence à 1) */\n  @Input() currentPage: any;\n\n  /** Options pour la sélection du nombre de lignes à afficher */\n  @Input() rowsPerPageOptions: DsfrOption[] = [];\n\n  /** Message affiché en cas de tableau vide ('Aucun résultat' par défaut) */\n  @Input() emptyResultsMessage?: string;\n  /** Désactiver la sélection du nombre de lignes à afficher */\n  @Input() disabledRowsPerPage?: boolean;\n  @Output() rowsPerPageChange: EventEmitter<number> = new EventEmitter(); // changement du nombre de lignes à afficher\n  @Output() pageSelect: EventEmitter<number> = new EventEmitter(); // changement de page\n\n  rowsPerPage: number = 10; // current page size selected\n\n  public ngOnInit(): void {\n    this.rowsPerPage =\n      this.initialState?.rowsPerPage ??\n      (this.rowsPerPageOptions && this.rowsPerPageOptions[0] ? this.rowsPerPageOptions[0].value : 10);\n    this.currentPage = this.initialState?.page ?? 1;\n  }\n\n  public onPageSelect(pageNumber: number): void {\n    this.pageSelect.emit(pageNumber);\n  }\n\n  public onChangeRowsPerPage(rowsPerPage: number): void {\n    this.rowsPerPage = rowsPerPage;\n    this.rowsPerPageChange.emit(this.rowsPerPage);\n  }\n}\n","@if ((showFooterResult || footerActionsTemplate) && !showPagination) {\n  <div class=\"fr-table__footer\">\n    <!-- Nombre de résultats total -->\n    <div class=\"fr-table__footer--start\">\n      @if (showFooterResult) {\n        <p class=\"fr-table__detail\">\n          <!-- Afficher le nombre de résultat  -->\n          @if (footerResultsTemplate) {\n            <ng-container *ngTemplateOutlet=\"footerResultsTemplate\"></ng-container>\n          } @else {\n            {{ totalElements }} {{ 'table.row' | dsfrI18n }}<ng-container *ngIf=\"totalElements > 1\">s</ng-container>\n          }\n        </p>\n      }\n      <!-- Boutons d'actions  -->\n      <div class=\"fr-table__footer--end\">\n        <ng-container *ngTemplateOutlet=\"footerActionsTemplate\"></ng-container>\n      </div>\n    </div>\n  </div>\n} @else if (showPagination) {\n  <dsfr-pagination\n    [pageCount]=\"totalPage\"\n    [rowsPerPage]=\"rowsPerPage\"\n    [rowsPerPageOptions]=\"rowsPerPageOptions\"\n    [totalElements]=\"totalElements\"\n    (rowsPerPageChange)=\"onChangeRowsPerPage($event)\"\n    [currentPage]=\"currentPage\"\n    (pageSelect)=\"onPageSelect($event)\">\n    <ng-template #totalElementsTemplate>\n      @if (footerResultsTemplate) {\n        <ng-container *ngTemplateOutlet=\"footerResultsTemplate\"></ng-container>\n      } @else {\n        {{ totalElements }} {{ 'table.row' | dsfrI18n }}<ng-container *ngIf=\"totalElements > 1\">s</ng-container>\n      }\n    </ng-template>\n    <ng-template #additionalTemplate>\n      <ng-container *ngTemplateOutlet=\"footerActionsTemplate\"></ng-container>\n    </ng-template>\n  </dsfr-pagination>\n}\n","/** ajouter ou supprimer une ligne d'une liste */\nexport function updateRowByField(row: any, list: any[], idField: string | null = null): void {\n  // recherche de la ligne selon si dataKey est défini ou par l'index sinon\n  const index: number = list.findIndex((r) => (idField ? r[idField] === row[idField] : r.index === row.index));\n\n  if (index !== -1) {\n    list.splice(index, 1); // suppression de la ligne\n    list.push(row); // ajout de la ligne\n  }\n}\n\n/**\n * Met à jour ou ajoute une propriété dans un objet.\n * @param obj - L'objet à modifier.\n * @param key - Le nom de la propriété à mettre à jour ou ajouter.\n * @param value - La nouvelle valeur à assigner à la propriété spécifiée.\n * @returns - La nouvelle référence de l'objet mis à jour avec la propriété modifiée ou ajoutée.\n */\nexport function updateOrAddProperty<T extends object>(obj: T, key: keyof T, value: T[keyof T]): T {\n  obj[key] = value;\n  return { ...obj };\n}\n\n/** Calcul du positionnement d'une cellule si la colonne est fixe à gauche (défaut) ou à droite */\nexport function setFixedColumnPosition(el: HTMLElement, fixedPosition: 'right' | 'left' = 'left'): boolean {\n  const row: HTMLElement | null = el.closest('tr');\n  if (!row) return false;\n\n  const cellsOnRow = Array.from(row.children) as HTMLElement[];\n  const index = cellsOnRow.indexOf(el);\n\n  if (fixedPosition === 'right') {\n    // Décalage = somme des largeurs des cellules à droite de la cellule courante\n    const offset = cellsOnRow.slice(index + 1).reduce((acc, cell) => acc + cell.getBoundingClientRect().width, 0);\n    el.style.right = `${offset}px`;\n    el.style.left = '';\n  } else {\n    // Décalage = somme des largeurs des cellules à gauche de la cellule courante\n    const offset = cellsOnRow.slice(0, index).reduce((acc, cell) => acc + cell.getBoundingClientRect().width, 0);\n    el.style.left = `${offset}px`;\n    el.style.right = '';\n  }\n\n  // Si dernier élément a etre replacé, on envoie l'evenement pour indiquer qu'il faut recalculer le positionnement de l'en-tête\n  if (!row.nextElementSibling) return true;\n  return false;\n}\n","import { computed, Injectable, Signal, signal, WritableSignal } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { DsfrSortColumn, DsfrTableOptions, DsfrTableState } from '../table.model';\nimport { updateOrAddProperty } from '../utils/table.utils';\n\n/**\n * Service pour la datatable\n * Gestion du rafraichissement des données\n */\n@Injectable()\nexport class DsfrDataTableService {\n  /* eslint-disable @typescript-eslint/member-ordering */\n\n  /** @internal Etat du tableau (tri, page courante, page size) */\n  readonly tableState: Signal<DsfrTableState> = computed(() => {\n    return {\n      page: this._currentPage(),\n      rowsPerPage: this._rowsPerPage(),\n      sort: this._activeSort(),\n    };\n  });\n\n  /** @internal Mise à jour des données. Appliquer le calcul du rendu des cellules en cas de colonnes fixed */\n  readonly isDataRendered: WritableSignal<boolean> = signal(false);\n\n  /** Page courante */\n  private readonly _currentPage = signal(1);\n\n  /** Tri courant */\n  private readonly _activeSort: WritableSignal<DsfrSortColumn | null> = signal(null);\n  readonly activeSort = this._activeSort.asReadonly();\n\n  /** Nombre de lignes à afficher par page */\n  private readonly _rowsPerPage = signal(10);\n  readonly rowsPerPage = this._rowsPerPage.asReadonly();\n\n  /** Données de la table */\n  private readonly _dataSubject = new Subject<any[]>();\n  readonly data$: Observable<any[]> = this._dataSubject.asObservable();\n  private currentData: any[] | undefined = undefined;\n\n  /** Options de la table */\n  private readonly _tableOptions: WritableSignal<DsfrTableOptions> = signal({});\n  readonly tableOptions = this._tableOptions.asReadonly();\n\n  /** Lignes sélectionnées */\n  private readonly _selectionSubject = new Subject<any[]>();\n  readonly selection$: Observable<any[]> = this._selectionSubject.asObservable();\n\n  /* eslint-enable @typescript-eslint/member-ordering */\n  /**\n   * Mise à jour des données avec rafraichissement du tableau\n   * @param newData nouvelles données du tableau\n   * @returns void\n   */\n  public refreshData(newData: any[]): void {\n    this.isDataRendered.set(false);\n    this.setData(newData);\n  }\n\n  /**\n   * L'affichage des cellules du tableau (calcul de position) est terminé\n   * @internal\n   */\n  public updateIsDataRendered(): void {\n    this.isDataRendered.set(true);\n  }\n\n  /**\n   * Forcer le rafraichissement du calcul de position des colonnes fixées\n   * par ex. si l'on souhaite recalculer après un redimensionnement de la fenêtre\n   */\n  public forceRenderFixedColums(): void {\n    this.isDataRendered.set(false);\n  }\n\n  /**\n   * Aller à une page donnée\n   * @param page\n   */\n  public goToPage(page: number): void {\n    this._currentPage.set(page);\n  }\n\n  /**\n   * Mise à jour des données apres un changement de rowsPerPage\n   * @param rowsPerPage\n   * @internal\n   */\n  public updatePagination(rowsPerPage: number): void {\n    this.isDataRendered.set(false);\n    this._rowsPerPage.set(rowsPerPage);\n  }\n\n  /**\n   * Trier la table\n   * @param sort DsfrSortColumn\n   */\n  public sortTable(sort: DsfrSortColumn): void {\n    this.isDataRendered.set(false);\n    this._activeSort.set(sort);\n  }\n\n  /**\n   * Mise à jour de l'état d'affichage de la table (tri, page courante, nombre de lignes par page)\n   * @param state\n   * @internal\n   */\n  public setState(state: DsfrTableState): void {\n    this.isDataRendered.set(false);\n\n    this._activeSort.set(state.sort ?? null);\n    this._currentPage.set(state.page ?? 1);\n    this._rowsPerPage.set(state.rowsPerPage ?? 10);\n  }\n\n  /**\n   * Met à jour une propriété spécifique de l'objet `tableOptions`.\n   * @param key Le nom de la propriété de l'interface `tableOptions` à mettre à jour.\n   * @param newValue La nouvelle valeur de la propriété spécifiée par `key`\n   * @returns void\n   */\n  public updateTableOptions(key: keyof DsfrTableOptions, newValue: any): void {\n    const newTableOptions = updateOrAddProperty(this._tableOptions(), key, newValue);\n    this.setTableOptions(newTableOptions);\n\n    if (key === 'selectable' && !newValue) {\n      this.setSelectedRows([]);\n    }\n\n    if ((key === 'selectable' || key === 'showSelectAll') && this.currentData) {\n      this.refreshData(this.currentData);\n    }\n  }\n\n  /**\n   * Sélectionner les lignes programmatiquement\n   * @param selectedRowIds la liste des identifiants des lignes qui seront sélectionnées\n   **/\n  public setSelectedRows(selectedRowIds: any[]): void {\n    this._selectionSubject.next(selectedRowIds);\n  }\n\n  /** @internal */\n  public setTableOptions(tableOptions: DsfrTableOptions): void {\n    this._tableOptions.set(tableOptions);\n  }\n\n  private setData(data: any[]): void {\n    this.isDataRendered.set(false);\n\n    this.currentData = data;\n    this._dataSubject.next(data);\n  }\n}\n","import {\n  booleanAttribute,\n  Component,\n  computed,\n  EventEmitter,\n  inject,\n  Input,\n  Output,\n  Signal,\n  signal,\n} from '@angular/core';\nimport { DsfrOption } from '../../../shared';\nimport { DsfrDataTableService } from '../service/datatable.service';\nimport { DsfrTablePaginationEvent, DsfrTableState } from '../table.model';\n\n/**\n * Classe abstraite gestion de la pagination du tableau\n * selon le nombre de lignes à afficher et nombre de pages\n */\n@Component({\n  template: '',\n})\nexport abstract class BasePaginatedTableComponent {\n  /** Etat initial de la table à appliquer (tri, page et nombre de lignes affichées par page) */\n  @Input() initialState?: DsfrTableState;\n\n  /** Afficher la pagination */\n  @Input({ transform: booleanAttribute }) pagination: boolean = false;\n\n  /** Activer le mode serveur (pagination, tri et sélection côté serveur) */\n  @Input({ transform: booleanAttribute }) serverSide: boolean = false;\n\n  /** Choix de taille de page (par défaut 10, 20, 50, 100). Pas d'affichage du select si non défini */\n  @Input()\n  rowsPerPageOptions: DsfrOption[] = [\n    { label: '10 lignes par page', value: 10 },\n    { label: '20 lignes par page', value: 20 },\n    { label: '50 lignes par page', value: 50 },\n    { label: '100 lignes par page', value: 100 },\n  ];\n\n  /** Changement de pagination (page affichée ou taille de page) */\n  @Output() paginationChange: EventEmitter<DsfrTablePaginationEvent> = new EventEmitter<{\n    currentPage: number;\n    rowsPerPage: number;\n  }>();\n\n  /** Etat modifié */\n  @Output() readonly stateChange: EventEmitter<DsfrTableState> = new EventEmitter<DsfrTableState>();\n\n  /** @internal Total résultats */\n  totalElements = signal(0);\n\n  /** @internal Total pages */\n  totalPage: Signal<number> = computed(() => {\n    if (this.totalElements() > 0 || !this.serverSide) {\n      return this.calculateTotalPage();\n    }\n\n    return 0;\n  });\n\n  /** @internal liste des éléments sélectionnables */\n  selectableRows: any[] = [];\n\n  /**@internal Service datatable pour rafraichissement des données */\n  public readonly dataTableService = inject(DsfrDataTableService);\n\n  private _serverResultsLength: number | undefined;\n\n  /** @internal */\n  get serverResultsLength(): number | undefined {\n    return this._serverResultsLength;\n  }\n\n  /** Total du nombre de résultats (utilisé si serverSide) */\n  @Input() set serverResultsLength(value: number) {\n    let currentPage = this.dataTableService.tableState().page;\n    this._serverResultsLength = value;\n\n    if (this.serverSide) {\n      this.totalElements.set(this._serverResultsLength);\n    }\n\n    if (currentPage > this.totalPage() && this.totalPage() > 0) {\n      // si le nombre de pages est inférieur a la page courante, aller à la dernière page\n      currentPage = this.totalPage();\n      this.onPageSelect(currentPage);\n    } else if (this.totalPage() === 0 && currentPage !== 1) {\n      // si une seule page, aller à la premiere page\n      this.onPageSelect(1);\n    }\n  }\n\n  /** Accès au service de la table */\n  public getService(): DsfrDataTableService {\n    return this.dataTableService;\n  }\n\n  /**\n   * Changement du nombre de lignes affichés par page\n   * calcul des pages et changement des lignes affichées\n   * @internal\n   */\n  public onRowsPerPageChange(rowsPerPage: number): void {\n    const currentPage: number = this.dataTableService.tableState().page;\n    this.dataTableService.updatePagination(rowsPerPage);\n\n    if (currentPage > this.totalPage()) {\n      this.onPageSelect(this.totalPage()); // aller a la derniere page si currentPage > totalPage\n    } else {\n      this.paginationChange.emit({\n        currentPage: currentPage,\n        rowsPerPage: this.dataTableService.tableState().rowsPerPage,\n      });\n    }\n  }\n\n  /**\n   * Au changement de page\n   * @param page numéro de page\n   * @internal\n   */\n  public onPageSelect(page: number): void {\n    this.dataTableService.goToPage(page);\n    this.paginationChange.emit({ currentPage: page, rowsPerPage: this.dataTableService.tableState().rowsPerPage });\n  }\n\n  /** Calcul du total de page selon le nombre total de résultats et le nombre de lignes affichées\n   * @internal\n   */\n  protected calculateTotalPage(): number {\n    const rowsPerPage = this.dataTableService.rowsPerPage();\n    return Math.ceil(this.totalElements() / rowsPerPage);\n  }\n\n  /**\n   * Après changement de page\n   * Mise a jour des données affichées selon l'offset et la taille de page\n   * @internal\n   * */\n  protected paginateData(rows: any, state: DsfrTableState): any[] {\n    if (!this.serverSide && this.totalElements() !== rows.length) {\n      this.totalElements.set(rows.length);\n    }\n\n    if (!state.page || !state.rowsPerPage) return [];\n\n    const offset = (state.page - 1) * state.rowsPerPage;\n    return rows.slice(offset, offset + state.rowsPerPage);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  booleanAttribute,\n  Component,\n  EventEmitter,\n  Input,\n  Output,\n  TemplateRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrI18nPipe } from '../../../shared/i18n/i18n.pipe';\nimport { DsfrSearchBarComponent } from '../../search-bar';\nimport { DsfrSegmentedControlComponent } from '../../segmented-control';\nimport { DsfrSegmentedControl } from '../../segmented-control/segmented-control.model';\n\n/**\n * Composant en-tête du tableau.\n * Il peut contenir quatre éléments optionnel mais dans cet ordre :\n * - le nombre de lignes sélectionnées\n * - une barre de recherche\n * - des boutons d’actions liés à la sélection de lignes\n * - un contrôle segmenté.\n */\n@Component({\n  selector: 'edu-table-header',\n  templateUrl: './table-header.component.html',\n  encapsulation: ViewEncapsulation.None,\n  styleUrls: ['table-header.component.scss'],\n  imports: [CommonModule, FormsModule, DsfrSegmentedControlComponent, DsfrSearchBarComponent, DsfrI18nPipe],\n})\nexport class EduTableHeaderComponent {\n  /** Template optionnel afficher des boutons d'actions dans le header */\n  @Input() headerActionsTemplate?: TemplateRef<void>;\n\n  /** Template pour personnaliser l'affichage du nombre de lignes sélectionnées */\n  @Input() countSelectedRowsTemplate?: TemplateRef<void>;\n\n  /** Nombre de lignes sélectionnées */\n  @Input() countSelectedRows?: number;\n\n  /** Afficher le changement de type d'affichage (tableau / liste) */\n  @Input({ transform: booleanAttribute }) showHeaderViews: boolean = false;\n\n  /** Contrôle segmenté contenant les types d'affichages (tableau / liste par défaut)  */\n  @Input() headerViewsOptions: DsfrSegmentedControl[] = [];\n\n  /** Affiche la barre de recherche dans le header */\n  @Input() showSearch = false;\n\n  /** Valeur du placeholder de l'input de recherche, si showSearch est `true`. */\n  @Input() searchInputPlaceholder?: string;\n\n  /** Label (pour les lecteurs d'écrans) de l'input de recherche. */\n  @Input() searchLabel?: string;\n\n  /**\n   * Valeur du title du bouton de la barre de recherche, si showSearch est `true`.\n   */\n  @Input() searchButtonTitle?: string;\n\n  /**\n   * Positionne la valeur de la barre de recherche recherche, si `showSearch` est `true`.\n   */\n  @Input() searchInputValue?: string;\n\n  /** Changement de type de vue */\n  @Output() viewSelect = new EventEmitter<string>();\n\n  /** Emet le texte lors de l'évènement keyup sur l'input de recherche.  */\n  @Output() searchChange = new EventEmitter<string>();\n\n  /** Emet le texte lors du clic sur le bouton \"rechercher\".  */\n  @Output() searchSelect: EventEmitter<string> = new EventEmitter<string>();\n\n  /**\n   * Permet de positionner la valeur intiale du champ de recherche (si utilisé)\n   *\n   * @deprecated (since 1.15) Utiliser `searchInputValue` à la place.\n   */\n  @Input() set searchInputInitialValue(value: string | undefined) {\n    this.searchInputValue = value;\n  }\n\n  /**\n   * Changement de type d'affichage (liste ou tableau)\n   * @internal */\n  public onViewSelect(value: string): void {\n    this.viewSelect.emit(value);\n  }\n\n  /** @internal */\n  onSearch(e: string) {\n    this.searchChange.emit(e);\n  }\n\n  /** @internal */\n  onSearchClick(e: string) {\n    this.searchSelect.emit(e);\n  }\n}\n","<div class=\"fr-table__header\">\n  <!-- Controle segmenté pour le changement de type d'affichage-->\n  @if (showHeaderViews) {\n    <div class=\"edu-table-segmented\">\n      <dsfr-segmented-control\n        legend=\"Type d'affichage\"\n        [legendSrOnly]=\"true\"\n        (segmentedControlSelect)=\"onViewSelect($event)\"\n        [segments]=\"headerViewsOptions\"></dsfr-segmented-control>\n    </div>\n  }\n\n  <!-- Nombre de lignes sélectionnées -->\n  @if (countSelectedRowsTemplate && countSelectedRows !== undefined) {\n    <p class=\"fr-table__detail\">\n      <ng-container *ngTemplateOutlet=\"countSelectedRowsTemplate\"></ng-container>\n    </p>\n  } @else if (countSelectedRows !== undefined) {\n    <p class=\"fr-table__detail\">\n      @if (countSelectedRows === 0) {\n        {{ 'table.noSelectedRows' | dsfrI18n }}\n      } @else if (countSelectedRows === 1) {\n        {{ countSelectedRows }} {{ 'table.oneSelectedRow' | dsfrI18n }}\n      } @else if (countSelectedRows && countSelectedRows > 1) {\n        {{ countSelectedRows }} {{ 'table.selectedRows' | dsfrI18n }}\n      }\n    </p>\n  }\n\n  <!-- Template barre de recherche -->\n  @if (showSearch) {\n    <div class=\"edu-table__search\">\n      <dsfr-search-bar\n        [label]=\"searchLabel\"\n        [placeholder]=\"searchInputPlaceholder\"\n        [buttonTitle]=\"searchButtonTitle\"\n        [value]=\"searchInputValue\"\n        (searchSelect)=\"onSearchClick($event)\"\n        (searchChange)=\"onSearch($event)\">\n      </dsfr-search-bar>\n    </div>\n  }\n\n  <!-- Template actions groupées -->\n  @if (headerActionsTemplate) {\n    <ng-container *ngTemplateOutlet=\"headerActionsTemplate\"></ng-container>\n  }\n</div>\n","import { afterNextRender, Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { DsfrDataTableService } from '../service/datatable.service';\nimport { DsfrCellOptions } from '../table.model';\nimport { setFixedColumnPosition } from '../utils/table.utils';\n\n/**\n * Directive affichage d'une cellule (alignements)\n */\n@Directive({\n  selector: '[dsfrCell]',\n  standalone: true,\n  host: {\n    '[class.fr-cell--multiline]': 'cell()?.allowWrap',\n    '[class.fr-cell--top]': 'cell()?.verticalAlign === \"top\"',\n    '[class.fr-cell--bottom]': 'cell()?.verticalAlign === \"bottom\"',\n    '[class.fr-cell--center]': 'cell()?.textAlign === \"center\"',\n    '[class.fr-cell--right]': 'cell()?.textAlign === \"right\"',\n    '[class.fr-cell--fixed]': 'cell()?.fixed',\n  },\n})\nexport class DsfrCellDirective {\n  cell = input.required<DsfrCellOptions>({ alias: 'dsfrCell' });\n\n  protected readonly element = inject(ElementRef);\n  private readonly dataTableService = inject(DsfrDataTableService);\n  private init: boolean = false;\n\n  constructor() {\n    // todo : fix au passage angular 20 avec un seul hook afterEveryRender\n    afterNextRender(() => {\n      const cell = this.cell();\n      const isDataRendered = this.dataTableService.isDataRendered();\n\n      this.init = false;\n      if (cell.fixed && !isDataRendered) {\n        this.calculateCellRender(true, isDataRendered);\n      }\n    });\n\n    effect(() => {\n      const cell = this.cell();\n      const isDataRendered = this.dataTableService.isDataRendered();\n\n      if (cell.fixed && !isDataRendered && this.init) {\n        this.calculateCellRender(false, isDataRendered);\n      }\n    });\n  }\n\n  /**\n   * Calcul de la position et taille des cellules en cas de colonnes fixes\n   * Double animation request pour bug webkit refresh\n   * Relancé à chaque changement de données\n   */\n  private calculateCellRender(onInit: boolean, isDataRendered: boolean): void {\n    requestAnimationFrame(() => {\n      requestAnimationFrame(() => {\n        const lastRowRendered = setFixedColumnPosition(\n          this.element.nativeElement as HTMLElement,\n          this.cell().fixedPosition,\n        );\n\n        if (lastRowRendered && !isDataRendered) {\n          this.dataTableService.updateIsDataRendered();\n        }\n\n        if (onInit) this.init = true;\n      });\n    });\n  }\n}\n","import { InjectionToken, Signal, TemplateRef } from '@angular/core';\n\nexport interface DsfrTableContext {\n  headerSummaryTemplate?: TemplateRef<void>;\n  countSelectedRows: number;\n  isAllSelected: Signal<boolean>;\n  tableId: string;\n  toggleSelectAll: () => void;\n  selectRow: (row: any) => void;\n  onSortChange: () => void;\n}\n\nexport const DSFR_TABLE_CONTEXT = new InjectionToken<DsfrTableContext>('DSFR_TABLE_CONTEXT');\n","import { Directive, effect, ElementRef, inject, input } from '@angular/core';\nimport { DsfrDataTableService } from '../service/datatable.service';\nimport { DSFR_TABLE_CONTEXT } from '../table.context';\nimport { DsfrColumn } from '../table.model';\nimport { setFixedColumnPosition } from '../utils/table.utils';\n\n/**\n * Directive ajout de style pour une colonne (taille, alignements)\n */\n@Directive({\n  selector: '[dsfrCol]',\n  standalone: true,\n  host: {\n    '[class.fr-cell--fixed]': 'col().fixed',\n    '[class.fr-cell--multiline]': 'col().allowWrap ?? allowWrap',\n    '[class.fr-cell--top]': 'col().verticalAlign === \"top\"',\n    '[class.fr-cell--bottom]': 'col().verticalAlign === \"bottom\"',\n    '[class.fr-cell--center]': 'col().textAlign === \"center\"',\n    '[class.fr-cell--right]': 'col().textAlign === \"right\"',\n    '[class.fr-col--xs]': 'col().minWidth === \"XS\"',\n    '[class.fr-col--sm]': 'col().minWidth === \"SM\"',\n    '[class.fr-col--md]': 'col().minWidth === \"MD\"',\n    '[class.fr-col--lg]': 'col().minWidth === \"LG\"',\n    '[attr.scope]': 'scope',\n  },\n})\nexport class DsfrColumnDirective {\n  col = input.required<DsfrColumn>({ alias: 'dsfrCol' });\n  allowWrap = input(false);\n\n  protected readonly dataTableService = inject(DsfrDataTableService);\n  protected readonly element = inject(ElementRef);\n  protected readonly table = inject(DSFR_TABLE_CONTEXT, { optional: false });\n\n  constructor() {\n    effect(() => {\n      const col = this.col();\n      const isDataRendered = this.dataTableService.isDataRendered();\n\n      // Calcul de la position des en-têtes en cas de colonne fixe, une fois toutes les cellules du tableau affichées\n      if (col.fixed && isDataRendered) {\n        setFixedColumnPosition(this.element.nativeElement as HTMLElement, col.fixedPosition);\n      }\n    });\n  }\n\n  // Ajout de l'attribut scope si ce n'est pas un tableau complexe (pas de summary)\n  protected get scope(): string | null {\n    return this.table.headerSummaryTemplate ? null : 'col';\n  }\n}\n","import {\n  ComponentRef,\n  Directive,\n  ElementRef,\n  EnvironmentInjector,\n  OnInit,\n  ViewContainerRef,\n  inject,\n  inputBinding,\n  outputBinding,\n} from '@angular/core';\nimport { DsfrI18nService, EduCheckboxLightComponent } from '../../../shared';\nimport { DSFR_TABLE_CONTEXT } from '../table.context';\n\n/**\n * Directive pour la checkbox d'en-tête de colonne (tout sélectionner/déselectionner)\n */\n@Directive({\n  selector: '[dsfrSelectAll]',\n  standalone: true,\n  host: {\n    // ajouter l'attribut scope si ce n'est pas un tableau complexe (pas de summary)\n    '[attr.scope]': 'scope',\n    '[class.fr-cell--fixed]': 'true',\n  },\n})\nexport class DsfrSelectAllDirective implements OnInit {\n  public componentRef!: ComponentRef<EduCheckboxLightComponent>;\n\n  private readonly table = inject(DSFR_TABLE_CONTEXT, { optional: false });\n\n  private readonly element = inject(ElementRef);\n  private readonly viewContainer = inject(ViewContainerRef);\n  private readonly injector = inject(EnvironmentInjector);\n  private readonly i18n = inject(DsfrI18nService);\n\n  // Ajout de l'attribut scope si ce n'est pas un tableau complexe (pas de summary)\n  protected get scope(): string | null {\n    return this.table.headerSummaryTemplate ? null : 'row';\n  }\n\n  public ngOnInit() {\n    this.componentRef = this.createCheckboxComponent();\n    this.element.nativeElement?.appendChild(this.componentRef.location.nativeElement);\n  }\n\n  private createCheckboxComponent(): ComponentRef<EduCheckboxLightComponent> {\n    return this.viewContainer.createComponent(EduCheckboxLightComponent, {\n      environmentInjector: this.injector,\n      bindings: [\n        inputBinding('labelSrOnly', () => true),\n        inputBinding('id', () => this.getCheckboxId()),\n        inputBinding('label', () => this.getCheckboxLabel()),\n        inputBinding('selected', () => this.table.isAllSelected()),\n        outputBinding('checkboxClick', () => this.table.toggleSelectAll()),\n      ],\n    });\n  }\n\n  private getCheckboxId(): string {\n    return 'table-select-checkbox-' + this.table.tableId + '-select-all';\n  }\n\n  private getCheckboxLabel(): string {\n    return this.table.isAllSelected() ? this.i18n.t('table.unselectAll') : this.i18n.t('table.selectAll');\n  }\n}\n","import { Directive, Input } from '@angular/core';\nimport { DsfrDataGroup } from '../table.model';\n\n/**\n * Directive group sur une ligne <tr> à l'intérieur d'un groupe\n * Gère les attributs aria nécessaires au treegrid\n */\n@Directive({\n  selector: '[dsfrRowGroup]',\n  standalone: true,\n  host: {\n    '[class.edu-row--group]': 'true',\n    '[attr.aria-level]': '2',\n    '[attr.aria-posinset]': '(index ?? 0) + 1 ',\n    '[attr.aria-setsize]': 'group?.rows?.length ?? 0',\n  },\n})\nexport class DsfrRowGroupDirective {\n  @Input() group?: DsfrDataGroup;\n  @Input() index?: number;\n}\n","import { ChangeDetectionStrategy, Component, input, ViewEncapsulation } from '@angular/core';\n\n/**\n * Composant d'affichage du bouton de tri pour une colonne (icônes flêche)\n */\n@Component({\n  selector: 'edu-expand-button-row',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <span class=\"tree-button {{ collapsed() ? 'fr-icon-arrow-right-s-line' : 'fr-icon-arrow-down-s-line' }}\"></span>\n  `,\n})\nexport class ExpandButtonRowComponent {\n  collapsed = input.required<boolean>();\n}\n","import {\n  ComponentRef,\n  Directive,\n  effect,\n  ElementRef,\n  inject,\n  input,\n  OnDestroy,\n  Renderer2,\n  ViewContainerRef,\n} from '@angular/core';\nimport { ExpandButtonRowComponent } from '../component/expand-button.component';\nimport { DsfrDataGroup } from '../table.model';\n\n/**\n * Directive group sur une ligne de groupe <tr>\n * Gère l'etat collapse/expand et les attributs aria nécessaires au treegrid\n */\n@Directive({\n  selector: '[dsfrRowGroupHeader]',\n  standalone: true,\n  host: {\n    '[class.edu-row--group-header]': 'true',\n    '[attr.aria-level]': '1',\n    '[attr.aria-posinset]': 'group().ariaPosinset ?? null',\n    '[attr.aria-setsize]': 'group().ariaSetsize ?? null',\n    '[attr.tabindex]': 'group().collapsed ? \"0\" : null',\n  },\n})\nexport class DsfrRowGroupHeaderDirective implements OnDestroy {\n  group = input.required<DsfrDataGroup>(); // le groupe de données complet\n\n  public componentRef: ComponentRef<ExpandButtonRowComponent> | undefined;\n\n  private firstTd: HTMLElement | undefined;\n  private _unlisten: { (): void }[] = [];\n  private readonly element = inject(ElementRef);\n  private readonly viewContainer = inject(ViewContainerRef);\n  private readonly renderer = inject(Renderer2);\n\n  constructor() {\n    effect(() => {\n      const group = this.group();\n      if (!group || !group.collapsed) return;\n      const collapsed = group.collapsed();\n\n      if (collapsed !== undefined && this.componentRef) {\n        this.updateExpansionButton(group);\n      } else if (collapsed !== undefined && !this.componentRef) {\n        this.createExpansionButton(group);\n      } else if (collapsed === undefined && this.componentRef) {\n        this.destroyButton();\n      }\n    });\n  }\n\n  public ngOnDestroy(): void {\n    this._unlisten.forEach((unlistenFunc) => unlistenFunc());\n    this.destroyButton();\n  }\n\n  private createExpansionButton(group: DsfrDataGroup) {\n    const firstTd: HTMLElement | undefined = this.element.nativeElement?.querySelector('td');\n    if (!firstTd || !group || !group.collapsed) return;\n    this.firstTd = firstTd;\n\n    this.componentRef = this.viewContainer.createComponent<ExpandButtonRowComponent>(ExpandButtonRowComponent);\n    this.componentRef.setInput('collapsed', group.collapsed()); // valeur initiale\n\n    // Ajout des évènements expand/collapse sur le premier <td>\n    this._unlisten.push(\n      this.renderer.listen(firstTd, 'click', () => {\n        group.collapsed!.update((c) => !c);\n        this.updateFirstCellAttributes(group);\n      }),\n\n      this.renderer.listen(firstTd, 'keydown', (e: KeyboardEvent) => {\n        if (e.key === 'Enter') {\n          group.collapsed!.update((c) => !c);\n          this.updateFirstCellAttributes(group);\n        }\n      }),\n    );\n\n    // Ajoute le bouton au début du premier <td>\n    const buttonEl = this.componentRef.location.nativeElement;\n    this.updateFirstCellAttributes(group);\n\n    this.renderer.insertBefore(firstTd, buttonEl, firstTd.firstChild);\n  }\n\n  private updateExpansionButton(group: DsfrDataGroup) {\n    if (this.componentRef?.instance && group.collapsed) {\n      this.componentRef.setInput('collapsed', group.collapsed()); // valeur initiale\n    }\n  }\n\n  private updateFirstCellAttributes(group: DsfrDataGroup) {\n    if (!this.firstTd) return;\n    this.firstTd.setAttribute('tabindex', '0');\n    this.firstTd.setAttribute('aria-expanded', group.collapsed!() ? 'false' : 'true');\n  }\n\n  private destroyButton(): void {\n    this.componentRef?.destroy();\n    this.componentRef = undefined;\n  }\n}\n","import {\n  ComponentRef,\n  Directive,\n  ElementRef,\n  EnvironmentInjector,\n  ViewContainerRef,\n  afterRenderEffect,\n  effect,\n  inject,\n  input,\n  inputBinding,\n  outputBinding,\n} from '@angular/core';\nimport { DsfrI18nService, EduCheckboxLightComponent } from '../../../shared';\nimport { DSFR_TABLE_CONTEXT } from '../table.context';\n\n/**\n * Directive checkbox sur la première cellule th (Selectionner/Déselectionner la ligne)\n */\n@Directive({\n  selector: '[dsfrSelectRow]',\n  standalone: true,\n  host: {\n    // ajouter l'attribut scope si ce n'est pas un tableau complexe (pas de summary)\n    '[attr.scope]': 'scope',\n    '[class.fr-cell--fixed]': 'true',\n  },\n})\nexport class DsfrSelectRowDirective {\n  readonly row = input<any>(undefined, { alias: 'dsfrSelectRow' });\n  readonly disableSelect = input(false);\n\n  private componentRef: ComponentRef<EduCheckboxLightComponent> | undefined;\n  private rowElement: HTMLElement | undefined;\n\n  private readonly element = inject(ElementRef);\n  private readonly viewContainer = inject(ViewContainerRef);\n  private readonly injector = inject(EnvironmentInjector);\n  private readonly i18n = inject(DsfrI18nService);\n\n  private readonly table = inject(DSFR_TABLE_CONTEXT, { optional: false });\n\n  constructor() {\n    // Mise a jour de aria-selected et style de la ligne à la sélection/déselection de la checkbox\n    afterRenderEffect(() => {\n      const row = this.row();\n      if (!row) return;\n\n      const checked = row.selected();\n\n      if (this.rowElement) {\n        this.rowElement.setAttribute('aria-selected', `${!!checked}`);\n        this.addRowHeightSyle();\n      }\n    });\n\n    // Création ou suppression du composant checkbox en cas de modification de disabledSelected\n    effect(() => {\n      const disabled: boolean = this.disableSelect();\n      if (!this.element.nativeElement) return;\n\n      if (!disabled && !this.componentRef) {\n        this.createCheckbox();\n      } else if (disabled && this.componentRef) {\n        const checked = this.row().selected();\n        if (checked) this.row().selected.set(false);\n        this.destroyCheckbox();\n      }\n    });\n  }\n\n  // Ajout de l'attribut scope si ce n'est pas un tableau complexe (pas de summary)\n  protected get scope(): string | null {\n    return this.table.headerSummaryTemplate ? null : 'row';\n  }\n\n  private createCheckbox() {\n    this.componentRef = this.createCheckboxComponent();\n    this.rowElement = this.element.nativeElement.closest('tr');\n\n    if (this.componentRef) {\n      const host = this.element.nativeElement;\n      this.rowElement = host.closest('tr');\n\n      host.insertBefore(this.componentRef.location.nativeElement, host.firstChild);\n\n      if (this.rowElement) {\n        const checked = !!this.row()?.selected();\n        this.rowElement.setAttribute('aria-selected', `${checked}`);\n        if (checked) this.addRowHeightSyle();\n      }\n    }\n  }\n\n  private destroyCheckbox() {\n    this.componentRef!.location.nativeElement.remove();\n    this.componentRef!.destroy();\n    this.componentRef = undefined;\n  }\n\n  private createCheckboxComponent(): ComponentRef<EduCheckboxLightComponent> {\n    return this.viewContainer.createComponent(EduCheckboxLightComponent, {\n      environmentInjector: this.injector,\n      bindings: [\n        inputBinding('labelSrOnly', () => true),\n        inputBinding('id', () => this.getCheckboxId()),\n        inputBinding('label', () => this.getCheckboxLabel()),\n        inputBinding('selected', () => this.row().selected()),\n        outputBinding('checkboxClick', () => this.table.selectRow(this.row())),\n      ],\n    });\n  }\n\n  /** Créer manuellement le style ajouté par le script DSFR à la sélection d'une ligne pour avoir les bordures bleues */\n  private addRowHeightSyle(): void {\n    const height = this.rowElement!.getBoundingClientRect().height + 2;\n    this.rowElement!.style.setProperty('--row-height', `${height}px`);\n  }\n\n  private getCheckboxId(): string {\n    return 'table-select-checkbox-' + this.table.tableId + '--' + this.row().index;\n  }\n\n  private getCheckboxLabel(): string {\n    return this.i18n.t('table.selectRow') + ' ' + this.row().index;\n  }\n}\n","import { Component, EventEmitter, input, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { DsfrI18nPipe } from '../../../shared/i18n/i18n.pipe';\n\n/**\n * Composant d'affichage du bouton de tri pour une colonne (icônes flêche)\n */\n@Component({\n  selector: 'edu-sort-button-header',\n  encapsulation: ViewEncapsulation.None,\n  imports: [DsfrI18nPipe],\n  styles: ['.fr-btn--sort {margin-left: 1rem}'], // fix margin alignement sort icon and text\n  template: `\n    <button\n      (click)=\"sortTable()\"\n      type=\"button\"\n      class=\"fr-btn--sort fr-btn fr-btn--sm\"\n      [class]=\"{\n        'fr-btn--sort-asc': ariaSort() === 'ascending',\n        'fr-btn--sort-desc': ariaSort() === 'descending',\n      }\">\n      {{ 'table.sortTableBy' | dsfrI18n }} {{ label ?? field }}\n    </button>\n  `,\n})\nexport class SortButtonHeaderComponent {\n  @Input({ required: true }) field!: string;\n  @Input() label?: string;\n  @Output() sortChanged = new EventEmitter<string>();\n\n  ariaSort = input<'ascending' | 'descending' | null>();\n\n  sortTable() {\n    this.sortChanged.emit(this.field);\n  }\n}\n","import {\n  ComponentRef,\n  computed,\n  Directive,\n  effect,\n  inject,\n  input,\n  OnDestroy,\n  OnInit,\n  Renderer2,\n  Signal,\n  ViewContainerRef,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { SortButtonHeaderComponent } from '../component/sort-button.component';\nimport { DsfrColumn, DsfrSortColumn } from '../table.model';\nimport { DsfrColumnDirective } from './column.directive';\n\n/**\n * Directive ajout du tri sur l'en-tête de colonne (icône et logique)\n */\n@Directive({\n  selector: '[dsfrColumn]',\n  standalone: true,\n  host: { '[attr.aria-sort]': 'ariaSort()' },\n})\nexport class DsfrSortColumnDirective extends DsfrColumnDirective implements OnInit, OnDestroy {\n  override col = input.required<DsfrColumn>({ alias: 'dsfrColumn' });\n\n  /**\n   * Calcul de la valeur de aria-sort sur la colonne selon le tri courant activeSort()\n   * @returns null / ascending / descending\n   */\n  ariaSort: Signal<string | null> = computed(() => {\n    const activeSort: DsfrSortColumn | null = this.dataTableService.activeSort();\n    const col = this.col();\n\n    if (activeSort && activeSort.field === col.field) {\n      return activeSort.order === 'ascending' ? 'ascending' : 'descending';\n    }\n\n    return null;\n  });\n\n  private componentRef: ComponentRef<SortButtonHeaderComponent> | undefined;\n  private subscription!: Subscription;\n\n  private readonly viewContainer = inject(ViewContainerRef);\n  private readonly renderer = inject(Renderer2);\n\n  constructor() {\n    super();\n    effect(() => {\n      if (this.componentRef && this.componentRef.instance) {\n        // a la modification de aria-sort sur le th, appliquer également sur le bouton de tri\n        this.componentRef.setInput('ariaSort', this.ariaSort());\n      }\n    });\n  }\n\n  public ngOnInit() {\n    if (this.col() && this.col().sortable) {\n      this.componentRef = this.viewContainer.createComponent<SortButtonHeaderComponent>(SortButtonHeaderComponent);\n      this.componentRef.instance.field = this.col().field;\n      this.componentRef.instance.label = this.col().label;\n\n      this.subscription = this.componentRef.instance.sortChanged.subscribe((field: string) => {\n        this.applySort(field);\n      });\n\n      this.addWrappingElement(this.element.nativeElement, this.componentRef.location.nativeElement);\n    }\n  }\n\n  public ngOnDestroy() {\n    this.subscription?.unsubscribe();\n  }\n\n  /**\n   * Appliquer le tri selon la colonne concernées et mise a jour de activeSort()\n   **/\n  private applySort(colId: string) {\n    const currentSort = this.dataTableService.activeSort();\n    const activeSort: DsfrSortColumn = {\n      field: colId,\n      order: currentSort?.field === colId && currentSort?.order === 'ascending' ? 'descending' : 'ascending',\n    };\n\n    this.dataTableService.sortTable(activeSort);\n    this.table.onSortChange(); // fixme\n  }\n\n  /**\n   * Ajouter une div wrapper fr-cell--sort autour des éléments pour style DSFR\n   * @param nativeElement composant <th>\n   * @param componentElement composant sort-buton\n   */\n  private addWrappingElement(nativeElement: HTMLElement, componentElement: HTMLElement) {\n    const wrapperDiv = this.renderer.createElement('div');\n    this.renderer.addClass(wrapperDiv, 'fr-cell--sort');\n\n    // Déplacer tous les enfants actuels du th dans le <div>\n    while (nativeElement.firstChild) {\n      this.renderer.appendChild(wrapperDiv, nativeElement.firstChild);\n    }\n\n    // Ajouter le <div> au <th>\n    this.renderer.appendChild(nativeElement, wrapperDiv);\n\n    // Ajouter le composant au <th>\n    this.renderer.appendChild(wrapperDiv, componentElement);\n  }\n}\n","export const FOCUSABLE_HTML_ELEMENTS = [\n  'a[href]',\n  'button',\n  'input',\n  'select',\n  'textarea',\n  'iframe',\n  'details',\n  '[tabindex]:not([tabindex=\"-1\"])',\n  '[contenteditable]',\n];\n\n/**\n * Index de la ligne contenant la cellule courante dans la liste de lignes de la table\n * -1 si aucune tr ou table n'est détecté\n */\nexport function getCurrentRowIndex(target: HTMLElement, theadWithInteractiveElt: boolean): number {\n  const row = target.closest('tr');\n  const table = row?.closest('table');\n\n  if (!row || !table) return -1;\n\n  const rows = table.querySelectorAll(theadWithInteractiveElt ? 'thead tr, tbody tr' : 'tbody tr');\n  return Array.from(rows).indexOf(row);\n}\n\n/**\n * Au changement de ligne\n * Positionne le focus sur la prochaine cellule selon la direction (-1 ligne précédente, 1 suivante)\n * Si la cellule possède un élément focusable, le focus sera directement sur cet élément\n */\nexport function moveFocusRow(\n  rowIndex: number,\n  cellIndex: number,\n  direction: number,\n  rows: NodeListOf<HTMLTableRowElement> | undefined,\n  position?: 'start' | 'end',\n): void {\n  if (!rows) return;\n\n  const rowsArray = Array.from(rows) as HTMLTableRowElement[];\n  let nextRowIndex = rowIndex + direction;\n\n  if (position === 'start') {\n    cellIndex = 0;\n    nextRowIndex = 0;\n  } else if (position === 'end') {\n    nextRowIndex = rowsArray.length - 1;\n    cellIndex = rowsArray[nextRowIndex].children.length - 1;\n  }\n\n  const nextRow = rowsArray[nextRowIndex];\n\n  if (nextRow) {\n    const nextCell = nextRow.children[cellIndex]\n      ? (nextRow.children[cellIndex] as HTMLElement)\n      : (nextRow.children[0] as HTMLElement);\n\n    setFocusCellOrFocusableElement(nextCell);\n  }\n}\n\n/**\n * Sur la même ligne\n * Positionne le focus sur la prochaine cellule selon la direction (-1 précédent, 1 suivant)\n * Si la cellule possède un élément focusable, le focus sera directement sur cet élément\n */\nexport function moveFocusCell(target: HTMLElement, direction: number, position?: 'start' | 'end'): void {\n  const parentCell = isCellElement(target) ? target : target.closest('td, th');\n  if (!parentCell) return;\n\n  const cells = parentCell.parentElement!.children;\n  let nextCellIndex: number | null = getNextCellIndex(cells, parentCell, direction, position);\n\n  if (nextCellIndex !== null && cells[nextCellIndex]) {\n    const nextCell = cells[nextCellIndex] as HTMLElement;\n    setFocusCellOrFocusableElement(nextCell);\n  }\n}\n\nexport function moveFocusToFirstParentCell(target: HTMLElement): void {\n  const cell: HTMLElement | null = target.closest('td, th');\n  if (cell) {\n    cell.focus();\n    cell.setAttribute('tabindex', '0');\n  }\n}\n\n/**\n * Si la cellule possède un élément focusable, le focus sera directement sur cet élément\n */\nfunction setFocusCellOrFocusableElement(nextCell: HTMLElement | undefined) {\n  if (!nextCell) return;\n  const focusableElement = findFirstFocusableElement(nextCell);\n\n  if (focusableElement) {\n    focusableElement.focus();\n  } else {\n    nextCell.focus();\n    nextCell.setAttribute('tabindex', '0');\n  }\n}\n\nfunction getNextCellIndex(\n  cells: HTMLCollection,\n  targetCell: Element,\n  direction: number,\n  position?: 'start' | 'end',\n): number | null {\n  if (position === 'start') return 0;\n  if (position === 'end') return cells.length - 1;\n\n  const currentIndex = Array.prototype.indexOf.call(cells, targetCell);\n  const nextIndex = currentIndex + direction;\n\n  return nextIndex >= 0 && nextIndex < cells.length ? nextIndex : null;\n}\n\nfunction isCellElement(element: HTMLElement) {\n  return element.tagName === 'TD' || element.tagName === 'TH';\n}\n\n/**\n * Renvoie le premier élément HTML focusable dans l'élément HTML donné. Sinon renvoie null.\n * https://developer.mozilla.org/fr/docs/Web/API/Document/querySelector\n */\nexport function findFirstFocusableElement(element: HTMLElement | undefined): HTMLElement | null | undefined {\n  const focusableElementsCssSelectors = FOCUSABLE_HTML_ELEMENTS.join(', ');\n  return element?.querySelector(focusableElementsCssSelectors);\n}\n\n/**\n * L'élément est un widget interactif qui nécessite l'utilisation des fleches et donc désactiver la nav grid\n * - input éditable ou  [contentEditable]\n * - select\n */\nexport function isEditableElement(element: HTMLElement): boolean {\n  if (element.isContentEditable) return true;\n  if (element instanceof HTMLInputElement) {\n    // https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#input_types\n    if (/text|email|number|password|search|tel|url/.test(element.type || '')) {\n      return !(element.disabled || element.readOnly);\n    }\n  }\n  if (element instanceof HTMLTextAreaElement) return !(element.disabled || element.readOnly);\n  if (element instanceof HTMLSelectElement) return !element.disabled;\n\n  return false;\n}\n","import { afterNextRender, Directive, ElementRef, inject, Input } from '@angular/core';\nimport {\n  findFirstFocusableElement,\n  getCurrentRowIndex,\n  isEditableElement,\n  moveFocusCell,\n  moveFocusRow,\n  moveFocusToFirstParentCell,\n} from '../utils/navigation-table.utils';\n\n/**\n * Directive navigation clavier sur la table role treegrid\n * https://www.w3.org/WAI/ARIA/apg/patterns/treegrid/examples/treegrid-1/\n * => scoTreeGridNavigation de sco-widgets\n */\n@Directive({\n  selector: '[dsfrTreeGridNavigation]',\n  standalone: true,\n})\nexport class DsfrTreeGridNavigationDirective {\n  @Input('dsfrTreeGridNavigation') role?: string;\n\n  tableHtml: HTMLElement | undefined;\n  tableRows: NodeListOf<HTMLTableRowElement> | undefined;\n\n  private observer: MutationObserver | undefined;\n  private hasInteractiveTheadElements: boolean = false;\n  private readonly _element = inject(ElementRef);\n\n  constructor() {\n    afterNextRender(() => {\n      if (this.role !== 'treegrid' && this.role !== 'grid') return;\n\n      this.tableHtml = this._element.nativeElement;\n      this.setFocusableRow();\n      this.observer = new MutationObserver(() => {\n        this.setFocusableRow();\n      });\n      if (this.tableHtml) {\n        this.observer.observe(this.tableHtml, { childList: true, subtree: true });\n      }\n    });\n  }\n\n  private setFocusableRow() {\n    if (!this.tableHtml) return;\n\n    // Si le thead contient des éléments interactifs => inclure dans la navigation calvier\n    const theadRows: NodeListOf<Element> = this.tableHtml.querySelectorAll('thead tr');\n    this.hasInteractiveTheadElements = this.hasInteractiveElementsOnHeaderRows(theadRows);\n\n    // Récupérer l'ensemble des ligne concernée(inclure le thead si nécessaire) par la navigation clavier\n    this.tableRows = !this.hasInteractiveTheadElements\n      ? this.tableHtml.querySelector('tbody')?.querySelectorAll('tr')\n      : this.tableHtml.querySelectorAll('tr');\n\n    this.tableRows?.forEach((row, i) => {\n      row.setAttribute('tabindex', '-1');\n      row.onkeydown = (e) => this.handleTreeGridKeydown(e); // ajouter event listener\n      this.setGridCellRole(row as HTMLElement, i === 0); // ajouter role=gridcell sur toutes les cellules\n    });\n  }\n\n  /**\n   * Les lignes du header de la table possèdent au moins un élément interactif qui doit prendre le focus\n   * @param theadRows lignes du header\n   */\n  private hasInteractiveElementsOnHeaderRows(theadRows: NodeListOf<Element> | undefined): boolean {\n    if (!theadRows || theadRows.length === 0) return false;\n\n    for (const row of Array.from(theadRows)) {\n      const cells = Array.from(row.querySelectorAll('th, td'));\n      const hasFocusable = cells.some((cell) => findFirstFocusableElement(cell as HTMLElement));\n      if (hasFocusable) return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Rendre les cellules focusables\n   */\n  private setGridCellRole(row: HTMLElement, isFirstRow: boolean): void {\n    const cells = row.querySelectorAll('td,th');\n\n    cells?.forEach((cell, i) => {\n      if (!cell.getAttribute('tabindex')) {\n        // Rendre focusable <td>,<th>. La premiere cellule focusable a tabindex 0\n        cell.setAttribute('tabindex', i === 0 && isFirstRow ? '0' : '-1');\n      }\n      if (cell.tagName === 'TD' && this.role === 'treegrid') {\n        // Ajout du rôle gridcell uniquement sur les td et en mode treegrid (non nécessaire en grid - WCAG)\n        cell.setAttribute('role', 'gridcell');\n      }\n    });\n  }\n\n  private handleTreeGridKeydown(event: KeyboardEvent): void {\n    if (!event.target) return;\n    const target = event.target as HTMLElement;\n\n    const cell = target.closest('td, th') as HTMLElement | null;\n    // index de cette cellule dans sa ligne\n    const currentCellIndex = cell ? Array.from(cell.parentElement!.children).indexOf(cell) : 0;\n    // index de cette ligne\n    const currentRowIndex = getCurrentRowIndex(target, this.hasInteractiveTheadElements);\n\n    if (isEditableElement(target)) {\n      this.toggleGridNavigationForEditable(event, target);\n      return;\n    }\n\n    switch (event.key) {\n      case 'ArrowDown':\n      case 'PageDown':\n        this.hasToMoveFocus(event, cell);\n        moveFocusRow(currentRowIndex, currentCellIndex, 1, this.tableRows);\n        break;\n      case 'ArrowUp':\n      case 'PageUp':\n        this.hasToMoveFocus(event, cell);\n        moveFocusRow(currentRowIndex, currentCellIndex, -1, this.tableRows);\n        break;\n      case 'ArrowRight':\n        this.hasToMoveFocus(event, cell);\n        moveFocusCell(target, 1);\n        break;\n      case 'ArrowLeft':\n        this.hasToMoveFocus(event, cell);\n        moveFocusCell(target, -1);\n        break;\n      case 'Home':\n        this.hasToMoveFocus(event, cell);\n        if (event.ctrlKey) {\n          moveFocusRow(currentRowIndex, currentCellIndex, 1, this.tableRows, 'start');\n        } else {\n          moveFocusCell(target, -1, 'start'); //Control + Home\tmoves focus to the first cell in the first row.\n        }\n        break;\n      case 'End':\n        this.hasToMoveFocus(event, cell);\n        if (event.ctrlKey) {\n          moveFocusRow(currentRowIndex, currentCellIndex, 1, this.tableRows, 'end');\n        } else {\n          moveFocusCell(target, -1, 'end'); //Control + End\tmoves focus to the last cell in the last row.\n        }\n        break;\n      case 'Escape':\n        this.hasToMoveFocus(event, cell);\n        if (target.tagName !== 'TD' && target.tagName !== 'TH') {\n          moveFocusToFirstParentCell(target);\n        }\n        break;\n      case 'Enter':\n      case 'Spacebar':\n      case ' ':\n        const focusableElement = findFirstFocusableElement(event.target as HTMLElement);\n        if (focusableElement) {\n          focusableElement?.focus();\n          // Remise à -1 du tabindex uniquement si la cellule contient un élément focusable\n          if (cell && cell.getAttribute('tabIndex') === '0') {\n            cell.setAttribute('tabIndex', '-1');\n          }\n        }\n        break;\n      default:\n        break;\n    }\n  }\n\n  /**\n   * Le focus change de cellule dans le tableau. Prevent default et la cellule précédente reprendre un tabIndex de -1\n   * @param event target courante\n   * @param currentCellFocused\n   */\n  private hasToMoveFocus(event: KeyboardEvent, currentCellFocused: HTMLElement | null) {\n    event.preventDefault();\n\n    if (\n      currentCellFocused &&\n      currentCellFocused.getAttribute('tabIndex') === '0' &&\n      !currentCellFocused.getAttribute('aria-expanded')\n    ) {\n      currentCellFocused.setAttribute('tabIndex', '-1');\n    }\n  }\n\n  /**\n   * En cas d'élément éditable dans une cellule, qui utilise les flèches pour l'édition\n   * La navigation dans la grid doit être désactivée/activée selon le focus de cet élément\n   * @param event keyboard event\n   * @param target element dans la cellule\n   */\n  private toggleGridNavigationForEditable(event: KeyboardEvent, target: HTMLElement): void {\n    switch (event.key) {\n      case 'Escape':\n      case 'Enter':\n        event.preventDefault();\n        moveFocusToFirstParentCell(target);\n        break;\n    }\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  ContentChild,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  signal,\n  Signal,\n  SimpleChanges,\n  TemplateRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { BehaviorSubject, combineLatest, map, Observable, Subject, takeUntil } from 'rxjs';\nimport { newUniqueId } from '../../shared';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { LoggerService } from '../../shared/services/logger.service';\nimport { DsfrSegmentedControl } from '../segmented-control/segmented-control.model';\nimport { BasePaginatedTableComponent } from './component/paginated-table.component';\nimport { DsfrTableFooterComponent } from './component/table-footer.component';\nimport { EduTableHeaderComponent } from './component/table-header.component';\nimport { DsfrCellDirective } from './directive/cell.directive';\nimport { DsfrColumnDirective } from './directive/column.directive';\nimport { DsfrSelectAllDirective } from './directive/header-select.directive';\nimport { DsfrRowGroupDirective } from './directive/row-group.directive';\nimport { DsfrRowGroupHeaderDirective } from './directive/row-header-group.directive';\nimport { DsfrSelectRowDirective } from './directive/row-select.directive';\nimport { DsfrSortColumnDirective } from './directive/sort-column.directive';\nimport { DsfrTreeGridNavigationDirective } from './directive/treegrid-navigation.directive';\nimport { DsfrDataTableService } from './service/datatable.service';\nimport { DSFR_TABLE_CONTEXT } from './table.context';\nimport {\n  DsfrColumn,\n  DsfrDataGroup,\n  DsfrRowGrouping,\n  DsfrRowOptions,\n  DsfrSortColumn,\n  DsfrTableBodyContext,\n  DsfrTableGroupContext,\n  DsfrTableGroupHeaderContext,\n  DsfrTableOptions,\n  DsfrTableSelectionEvent,\n  DsfrTableState,\n} from './table.model';\n@Component({\n  selector: 'dsfr-datatable',\n  templateUrl: './table.component.html',\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styleUrls: ['table.component.scss'],\n  providers: [\n    {\n      provide: DSFR_TABLE_CONTEXT,\n      useExisting: DsfrTableComponent,\n    },\n    {\n      provide: DsfrDataTableService,\n      useFactory: (parent = inject(DsfrDataTableService, { optional: true, skipSelf: true })) =>\n        parent ?? new DsfrDataTableService(),\n    },\n  ],\n  imports: [\n    CommonModule,\n    forwardRef(() => DsfrColumnDirective),\n    forwardRef(() => DsfrSortColumnDirective),\n    forwardRef(() => DsfrCellDirective),\n    forwardRef(() => DsfrSelectRowDirective),\n    forwardRef(() => DsfrSelectAllDirective),\n    DsfrTreeGridNavigationDirective,\n    DsfrTableFooterComponent,\n    DsfrRowGroupHeaderDirective,\n    DsfrRowGroupDirective,\n    EduTableHeaderComponent,\n    DsfrI18nPipe,\n  ],\n})\nexport class DsfrTableComponent extends BasePaginatedTableComponent implements OnInit, OnChanges, OnDestroy {\n  /** Template pour les groupes de boutons d'actions du header. DOIT contenir un dsfr-buttons-group */\n  @ContentChild('headerActionsTemplate', { static: true }) headerActionsTemplate?: TemplateRef<void>;\n\n  /** Template du résumé dans le cas d'un tableau complexe */\n  @ContentChild('headerSummaryTemplate', { static: true }) headerSummaryTemplate?: TemplateRef<void>;\n\n  /** Template pour personnaliser l'affichage du nombre de lignes sélectionnées */\n  @ContentChild('headerSelectedRowCountTemplate', { static: true }) headerSelectedRowCountTemplate?: TemplateRef<void>;\n\n  /** Template de l'en-tête des colonnes du tableau. (contenu du thead) */\n  @ContentChild('tableHeaderTemplate', { static: true }) tableHeaderTemplate?: TemplateRef<void>;\n\n  /** Template des lignes, row en paramètre (contenu du tbody) */\n  @ContentChild('tableBodyTemplate', { static: true }) tableBodyTemplate?: TemplateRef<DsfrTableBodyContext>;\n\n  /** Template du pied du tableau (contenu du tfoot) */\n  @ContentChild('tableFooterTemplate', { static: true }) tableFooterTemplate?: TemplateRef<void>;\n\n  /** Template d'une ligne d'en-tête de groupe en cas de groupBy */\n  @ContentChild('rowGroupHeaderTemplate', { static: true })\n  rowGroupHeaderTemplate?: TemplateRef<DsfrTableGroupHeaderContext>;\n\n  /** Template d'une ligne de contenu de groupe en cas de groupBy */\n  @ContentChild('rowGroupTemplate', { static: true }) rowGroupTemplate?: TemplateRef<DsfrTableGroupContext>;\n\n  /** Template personnalisé pour afficher le total de lignes */\n  @ContentChild('footerResultsTemplate', { static: true }) footerResultsTemplate?: TemplateRef<void>;\n\n  /** Template pour les groupes de boutons d'actions du footer */\n  @ContentChild('footerActionsTemplate', { static: true }) footerActionsTemplate?: TemplateRef<void>;\n\n  /** Template à afficher pendant le chargement des données */\n  @ContentChild('loadingTemplate', { static: true }) loadingTemplate?: TemplateRef<void>;\n\n  /** Template pour une vue alternative au tableau (ex. liste) */\n  @ContentChild('alternativeViewTemplate', { static: true }) alternativeViewTemplate?: TemplateRef<void>;\n\n  @Input() headerActionsTemplateRef?: TemplateRef<void>;\n  /** @internal */\n  @Input() headerSummaryTemplateRef?: TemplateRef<void>;\n  /** @internal */\n  @Input() headerSelectedRowCountTemplateRef?: TemplateRef<void>;\n  /** @internal */\n  @Input() tableHeaderTemplateRef?: TemplateRef<void>;\n  /** @internal */\n  @Input() tableFooterTemplateRef?: TemplateRef<void>;\n  /** @internal */\n  @Input() footerActionsTemplateRef?: TemplateRef<void>;\n  /** @internal */\n  @Input() footerResultsTemplateRef?: TemplateRef<void>;\n  /** @internal */\n  @Input() loadingTemplateRef?: TemplateRef<void>;\n  /** @internal */\n  @Input() alternativeViewTemplateRef?: TemplateRef<void>;\n\n  /** Identifiant de la table */\n  @Input() tableId: string = '';\n\n  /** Titre du tableau. Obligatoire sauf si labelledBy est renseigné. */\n  @Input() caption?: string;\n\n  /** Hauteur maximale de la table, nombre en pixels ou valeur en string. Le contenu supplémentaire provoque un scroll vertical */\n  @Input() fixedHeight?: number | string;\n\n  /** Rend les th sticky en haut du tableau. */\n  @Input() thSticky = false;\n\n  /** Le composant se bloquera au top de l'écran et prendra toute sa hauteur.*/\n  @Input() tableHeaderSticky = false;\n\n  /** Données */\n  @Input({ required: true }) data: any[] = [];\n\n  /** Propriété correspondant à l'identifiant unique de chaque donnée (recommandé) */\n  @Input() dataKey?: string;\n\n  /** Options d'affichage du tableau  */\n  @Input() tableOptions: DsfrTableOptions = {};\n\n  /** Options d'affichage des lignes. dataKey doit être défini */\n  @Input() rowsOptions?: DsfrRowOptions[];\n\n  /** Définition des colonnes */\n  @Input({ required: true }) columns!: DsfrColumn[];\n\n  /** Afficher le nombre de résultat total dans le footer */\n  @Input() showFooterResult = true;\n\n  /** Message affiché en cas de tableau vide ('Aucun résultat' par défaut) */\n  @Input() emptyResultsMessage?: string;\n\n  /** Indique que les données sont en cours de chargement */\n  @Input() loading = false;\n\n  /** Header: affiche la barre de recherche dans le header */\n  @Input() showSearch = false;\n\n  /**\n   * Valeur du placeholder de l'input de recherche, si showSearch est `true`.\n   */\n  @Input() searchInputPlaceholder?: string;\n\n  /** Label (pour les lecteurs d'écrans) de l'input de recherche. */\n  @Input() searchLabel?: string;\n\n  /** Valeur du title du bouton de la barre de recherche, si showSearch est `true`. */\n  @Input() searchButtonTitle?: string;\n\n  /** Valeur de la barre de recherche, si `showSearch` est à `true`. */\n  @Input() searchInputValue?: string;\n\n  /** Header: affiche le changement de type de vue (tableau / liste) */\n  @Input({ transform: booleanAttribute }) showHeaderViews = false;\n\n  /** Header: redéfinit les vues du contrôle segmenté (si changeDisplayType). Par défaut tableau/liste */\n  @Input() headerViewsOptions: DsfrSegmentedControl[] = [\n    {\n      label: 'Tableau',\n      value: 'TABLE',\n      checked: true,\n      icon: 'fr-icon-table-line',\n    },\n    {\n      label: 'Liste',\n      value: 'LIST',\n      icon: 'fr-icon-list-unordered',\n    },\n  ];\n\n  /** Liste des identifiants des lignes initialement sélectionnées */\n  @Input() initialSelection: any[] = [];\n\n  /** Configuration du regroupement des lignes dans la table */\n  @Input() groupBy?: DsfrRowGrouping;\n\n  /** Renvoie la colonne triée au changement de tri de la table */\n  @Output() readonly sortChange: EventEmitter<DsfrSortColumn | null> = new EventEmitter<DsfrSortColumn | null>();\n\n  /** Renvoie la vue sélectionnée au changement de vue (displayModes) */\n  @Output() readonly viewSelect: EventEmitter<string> = new EventEmitter<string>(); // ou displayList\n\n  /** Renvoie la valeur de l'input de la barre de recherche au changement.  */\n  @Output() readonly searchChange: EventEmitter<string> = new EventEmitter();\n\n  /** Renvoie la valeur de l'input de la barre de recherche au clic sur rechercher.  */\n  @Output() readonly searchSelect: EventEmitter<string> = new EventEmitter();\n\n  /** A la sélection d'une ligne, émet toutes les lignes sélectionnées et la ligne sélectionnée */\n  @Output() selectionChange: EventEmitter<DsfrTableSelectionEvent> = new EventEmitter<{\n    row: any;\n    selectedRows: any[];\n  }>();\n\n  /** Case à cocher tout sélectionner cochée ou décochée */\n  @Output() showSelectAllChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n  /** @internal pour permettre la mise a jour du select all en header */\n  isAllSelected = signal<boolean | undefined>(false);\n\n  /** @internal observable des données modifiées par l'état courant */\n  public displayedRows$!: Observable<any[]>;\n\n  /**@internal pas de choix de vue, ou vue table sélectionnée */\n  public showTableView: boolean = true;\n\n  /** @internal */\n  public countSelectedRows: number | undefined;\n\n  /** @internal Observable de l'état du tableau pour le rafraichissement des données */\n  tableState$ = toObservable(this.dataTableService.tableState);\n\n  /** @internal liste des différentes classes de la table */\n  tableClasses: Signal<string[] | []> = computed(() => {\n    const tableOptions: DsfrTableOptions | null = this.dataTableService.tableOptions();\n\n    if (tableOptions) {\n      return this.setTableClasses(tableOptions);\n    }\n\n    return [];\n  });\n\n  protected isSortable = false;\n\n  // données en entrée modifiées\n  private dataChanged$ = new BehaviorSubject<any[]>([]);\n  private notifyOnDestroy = new Subject<void>();\n\n  private readonly logger = inject(LoggerService);\n\n  private _displayedRows: any[] = []; // données affichées modifiées par l'état\n  private _selectedRows: any[] = []; // lignes sélectionnées\n\n  /** Récupérer les données couramment affichées dans le tableau */\n  public get displayedRows(): any[] {\n    return this._displayedRows;\n  }\n\n  /** Récupérer les groupes créés dans le tableau */\n  public get groups(): DsfrDataGroup[] {\n    if (!this.groupBy) return [];\n    return this.displayedRows.filter((r) => r.key);\n  }\n\n  /** Récupérer les données sélectionnées dans le tableau */\n  public get selectedRows(): any[] {\n    return this._selectedRows;\n  }\n\n  public ngOnInit(): void {\n    if (!this.tableId) {\n      this.tableId = newUniqueId();\n    }\n\n    this.dataTableService.setTableOptions(this.tableOptions); // application des options d'affichage du tableau\n\n    if (!this.serverSide) this.totalElements.set(this.data.length);\n\n    // Initialisation de l'état\n    if (this.initialState) {\n      this.dataTableService.setState(this.initialState);\n    } else if (this.rowsPerPageOptions[0].value !== 10) {\n      // La pagination par défaut n'est pas 10, initialisation de l'état sur la pagination correcte\n      this.initialState = { rowsPerPage: this.rowsPerPageOptions[0].value, sort: null, page: 1 };\n      this.dataTableService.setState(this.initialState);\n    }\n\n    this.dataTableService.selection$.pipe(takeUntil(this.notifyOnDestroy)).subscribe((selectedRows: any[]) => {\n      this.refreshSelection(selectedRows);\n    });\n\n    // Abonnement à la mise a jour des données\n    this.registerRefreshData();\n\n    // Initialisation des données\n    this.dataTableService.refreshData(this.data);\n\n    this.isSortable = this.hasSortableColumn();\n\n    if (!this.caption && !this.tableOptions?.ariaLabelledBy) {\n      this.logger.warn('dsfr-datatable : Renseigner le titre du tableau est obligatoire (caption ou labelledBy).');\n    }\n\n    if ((this.rowsOptions || (this.pagination && this.tableOptions?.selectable)) && !this.dataKey) {\n      this.logger.warn(\"dsfr-datatable : La propriété dataKey n'est pas définie.\");\n    }\n\n    if (this.serverSide && this.serverResultsLength === undefined) {\n      this.logger.warn('dsfr-datatable : En mode serveur serverResultsLength doit être renseigné.');\n    }\n  }\n\n  /**\n   * Au changement de data / rowsOptions / tableOptions\n   * Rafraichir les données et la vue\n   * @param changes\n   */\n  ngOnChanges(changes: SimpleChanges): void {\n    //  Ignorer le premier changement à l'initialisation (pas de double appel)\n    if ((changes.data && !changes.data.isFirstChange()) || (!changes.data && changes.rowsOptions)) {\n      this.dataTableService.refreshData(this.data); // rafraichir les données affichées\n    }\n\n    // Changement de tableOptions dynamiquement\n    if (changes.tableOptions && !changes.tableOptions.isFirstChange()) {\n      this.dataTableService.setTableOptions(this.tableOptions);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.notifyOnDestroy.next();\n    this.notifyOnDestroy.complete();\n  }\n\n  /**\n   * Affichage du tableau selon la colonne concernées et mise a jour des données affichées\n   * @internal\n   **/\n  public onSortChange() {\n    this.sortChange.emit(this.dataTableService.activeSort());\n  }\n\n  /**\n   * Dans le cas ou la directive selectAll n'est pas controlée par les sous directives dsfrSelectCell\n   * Mettre à jour manuellement la directive isAllSelected (par ex. depuis composant parent TreeTable)\n   * @param nbSelectedRows nombre de lignes couramment sélectionnées\n   * @param isAllSelected boolean\n   */\n  public manuallySetIsAllSelected(nbSelectedRows: number, isAllSelected: boolean) {\n    this.countSelectedRows = nbSelectedRows;\n\n    if (nbSelectedRows > 0 && !isAllSelected) {\n      this.isAllSelected.set(undefined);\n    } else {\n      this.isAllSelected.set(isAllSelected);\n    }\n  }\n\n  protected trackById(dataKey: string | undefined, index: number, item: any) {\n    return dataKey ? item[dataKey] : index;\n  }\n\n  protected onviewSelect(view: string): void {\n    this.showTableView = view === this.headerViewsOptions[0].value;\n    this.viewSelect.emit(view);\n  }\n\n  protected onsearchChange(search: string): void {\n    this.searchChange.emit(search);\n  }\n\n  protected onsearchSelect(search: string): void {\n    this.searchSelect.emit(search);\n  }\n\n  /**\n   * Initialisation de la table si sélection\n   * - calcul du nombre d'elements selectionnables\n   * - application de la sélection initiale\n   * - coche de isAllSelected si toutes les lignes sont sélectionnées\n   */\n  protected initSelectableTable(rows: any[]): void {\n    this.countSelectedRows = this.initialSelection?.length;\n    this.selectableRows = this.setSelectableRows(rows);\n\n    if (!this.dataKey || !this.selectableRows) return;\n    const key: string = this.dataKey;\n\n    // Premiere initialisation ou serverside\n    const isInit = this._selectedRows.length === 0 || this.serverSide;\n\n    if (this.countSelectedRows && isInit) {\n      this._selectedRows = this.selectableRows.filter((row) => this.initialSelection.includes(row[key]));\n    } else if (this._selectedRows.length > 0 && !this.serverSide) {\n      // Lignes déja sélectionnées (rafraichissement de la vue)\n      const selectableIds = new Set(this.selectableRows.map((r) => r[key]));\n      this._selectedRows = this._selectedRows.filter((selected) => selectableIds.has(selected[key]));\n    }\n\n    this._selectedRows.forEach((r) => r.selected.set(true));\n    this.isAllSelected.set(this.checkAllRowsSelected());\n  }\n\n  protected setSelectableRows(rows: any[]) {\n    return this.rowsOptions ? rows.filter((r) => !r.rowOptions || !r.rowOptions.disableSelect) : rows;\n  }\n  /** Sélection ou déselection des lignes à la sélection de la case à cocher en en-tête **/\n  protected toggleSelectAll() {\n    if (!this.dataKey) return;\n\n    if (this.tableOptions.selectionScope === 'currentPage' || this.serverSide) {\n      this.selectRowsOnCurrentPage(this.dataKey);\n    } else {\n      this.selectAllRows();\n    }\n\n    const isSelected = this.isAllSelected() === true;\n\n    for (const row of this.selectableRows) {\n      row.selected.set(isSelected); // mise a jour visuelle des checkboxes\n    }\n\n    this.countSelectedRows = this._selectedRows.length;\n\n    this.selectionChange.emit({ row: null, selectedRows: [...this._selectedRows] });\n    this.showSelectAllChange.emit(isSelected);\n  }\n\n  /** Sélection ou déselection d'une ligne  **/\n  protected selectRow(row: any) {\n    if (!this.dataKey) return;\n    const selectedIndex: number = this._selectedRows.findIndex((r) => r[this.dataKey!] === row[this.dataKey!]);\n\n    if (selectedIndex !== -1) {\n      this._selectedRows.splice(selectedIndex, 1); // suppression de la ligne\n    } else {\n      this._selectedRows.push(row); // ajout de la ligne\n    }\n\n    this.countSelectedRows = this._selectedRows.length;\n\n    row.selected.update((s: boolean) => !s);\n    this.isAllSelected.set(this.checkAllRowsSelected());\n\n    this.selectionChange.emit({ row: row, selectedRows: [...this._selectedRows] });\n  }\n\n  /**\n   * Sélectionne ou déselectionne toutes les lignes de la page courante\n   * N'agit pas sur la sélection/déselection des lignes des autres pages\n   * @param key datakey\n   */\n  private selectRowsOnCurrentPage(key: string) {\n    const currentSelectedIds = new Set(this._selectedRows.map((r) => r[key]));\n    const rowsNotSelected = this.selectableRows.filter((r) => !currentSelectedIds.has(r[key]));\n\n    const isAllSelectedOnPage = rowsNotSelected.length === 0;\n\n    if (isAllSelectedOnPage) {\n      const idsToRemove = new Set(this.selectableRows.map((r) => r[key]));\n      this._selectedRows = this._selectedRows.filter((r) => !idsToRemove.has(r[key]));\n    } else {\n      this._selectedRows = [...this._selectedRows, ...rowsNotSelected];\n    }\n\n    this.isAllSelected.set(!isAllSelectedOnPage);\n  }\n\n  /*** Sélectionne ou déselectionne toutes les lignes du tableau **/\n  private selectAllRows() {\n    const allSelected = this._selectedRows.length === this.selectableRows?.length;\n\n    this._selectedRows = allSelected ? [] : [...this.selectableRows];\n    this.isAllSelected.set(!allSelected);\n  }\n\n  /**\n   * Détermine l'état de la checkbox de sélection globale selon selectionScope.\n   * @returns true (tout), false (rien), undefined (partiel)\n   */\n  private checkAllRowsSelected(): boolean | undefined {\n    if (!this.dataKey || !this.countSelectedRows || this.countSelectedRows === 0) return false;\n\n    // Cas sélection par page\n    if (this.tableOptions.selectionScope === 'currentPage' || this.serverSide) {\n      const key = this.dataKey;\n      const selectedIds = new Set(this._selectedRows.map((r) => r[key]));\n      const countSelectedOnPage = this.selectableRows.filter((r) => selectedIds.has(r[key])).length;\n\n      if (countSelectedOnPage === this.selectableRows.length) return true;\n      return countSelectedOnPage === 0 ? false : undefined;\n    }\n\n    // Cas sélection globale\n    if (this.countSelectedRows >= this.selectableRows?.length) return true;\n\n    return undefined;\n  }\n\n  /** Mise a jour des classes de fr-table selon tableOptions */\n  private setTableClasses(tableOptions: DsfrTableOptions): string[] {\n    const classes: string[] = ['fr-table'];\n\n    if (tableOptions.bordered) classes.push('fr-table--bordered');\n    if (tableOptions.noScroll) classes.push('fr-table--no-scroll');\n    if (tableOptions.bottomCaption) classes.push('fr-table--caption-bottom');\n    if (this.tableOptions.allowWrap) classes.push('fr-table--multiline');\n    if (tableOptions.captionSrOnly) classes.push('fr-table--no-caption');\n    if (this.fixedHeight) {\n      classes.push('edu-fixed--height');\n      if (Number(this.fixedHeight)) this.fixedHeight = `${this.fixedHeight}px`;\n    }\n    if (this.thSticky) classes.push('edu-th--sticky');\n    if (this.tableHeaderSticky) {\n      classes.push('edu-table--sticky');\n      this.fixedHeight = \"'90vh'\";\n    }\n\n    // Size class\n    switch (tableOptions.cellSize) {\n      case 'SM':\n        classes.push('fr-table--sm');\n        break;\n      case 'LG':\n        classes.push('fr-table--lg');\n        break;\n\n      default:\n        break;\n    }\n\n    return classes;\n  }\n\n  /**\n   * Détermine si le tableau contient au moins une colonne triable\n   */\n  private hasSortableColumn(): boolean {\n    return !!this.columns.find((column) => column.sortable);\n  }\n\n  /** Fonction de tri : sortFunction de la colonne si définie ou par défaut sur du contenu texte simple */\n  private sortRows(rows: any[], state: DsfrTableState): any[] {\n    if (!state.sort?.field) return rows;\n\n    const { field, order } = state.sort;\n    const column = this.columns.find((c) => c.field === field);\n\n    // tri selon la fonction définie sur la colonne\n    if (column && column.sortFunction && typeof column.sortFunction === 'function') {\n      return rows.sort((a, b) => column.sortFunction!(a, b, order));\n    }\n\n    // tri par défaut\n\n    return rows.sort((a, b) => this.sortByDefault(a, b, field, order));\n  }\n\n  /**\n   * Abonnement à la mise a jour des données et au changement d'état pour rafraichir le tableau\n   */\n  private registerRefreshData(): void {\n    if (!this.serverSide) {\n      // Mise à jour des données lorsque refreshData appelé\n      this.dataTableService.data$.pipe(takeUntil(this.notifyOnDestroy)).subscribe((data) => {\n        this.dataChanged$.next(this.mapDataToRows(data));\n      });\n\n      // Mise à jour des lignes affichées si l'état a changé et/ou les données\n      this.displayedRows$ = combineLatest([this.dataChanged$, this.tableState$]).pipe(\n        map(([rows, state]) => this.applyStateToData(rows, state)),\n      );\n    } else {\n      // si serveur side, abonnement uniquement au changement des données (état géré par l'utilisateur en distant)\n      // et à dataTableService et non dataChanged pour ne pas déclencher deux fois l'event\n      this.displayedRows$ = this.dataTableService.data$.pipe(\n        takeUntil(this.notifyOnDestroy),\n        map((data) => this.mapDataToRows(data)),\n        map((rows) => this.groupRows(rows)), // grouper si groupBy renseigné\n      );\n\n      this.tableState$.pipe(takeUntil(this.notifyOnDestroy)).subscribe((state) => this.stateChange.emit(state));\n    }\n  }\n\n  /**\n   * Application de l'état sur les données affichées apres refresh data ou tri/pagination\n   * @param data données modifiées\n   * @param state état (tri, pagination, page size)\n   * @returns données à jour triées et paginées\n   */\n  private applyStateToData(data: any[], state?: DsfrTableState): any[] {\n    this.dataTableService.isDataRendered.set(false); // forcer le calcul du rendu des cellules en cas de fixed\n\n    if (this.groupBy && this.groupBy.key) {\n      data = data.sort((a, b) => this.sortByDefault(a, b, this.groupBy!.key, 'ascending'));\n    }\n\n    if (state) {\n      // application du tri\n      if (state.sort) {\n        data = this.sortRows(data, state);\n      }\n\n      this._displayedRows = data;\n\n      if (this.pagination) {\n        data = this.paginateData(data, state);\n      } else {\n        this.totalElements.set(this.data.length);\n      }\n    }\n\n    if (this.tableOptions.selectionScope === 'currentPage') {\n      this.selectableRows = this.setSelectableRows(data);\n      this.isAllSelected.set(this.checkAllRowsSelected());\n    }\n\n    return this.groupBy ? this.groupRows(data) : data;\n  }\n\n  /**\n   * Retourne les options de la ligne passée en paramètre, selon l'identifiant ou l'index\n   * */\n  private getRowOption(row: any): DsfrRowOptions | undefined {\n    if (!this.rowsOptions || !row) return undefined;\n    return this.dataKey ? this.rowsOptions.find((r) => r.id === row[this.dataKey!]) : undefined;\n  }\n\n  /**\n   * Map data au format lignes affichables et application de la sélection\n   * @param data\n   * @returns data avec informations d'affichage et index\n   */\n  private mapDataToRows(data: any[]): any[] {\n    const rows = data.map((row, i) => ({\n      ...row,\n      index: i,\n      selected: signal(!!this._selectedRows.find((r) => r.id === row.id)),\n      rowOptions: this.getRowOption(row),\n    }));\n\n    if (this.tableOptions?.selectable) {\n      this.initSelectableTable(rows);\n    }\n\n    this._displayedRows = rows;\n\n    return rows;\n  }\n\n  /** Mettre à jour la sélection lors de l'appel a la methode sur le service */\n  private refreshSelection(newSelectedRows: any[]) {\n    this.selectableRows.forEach((row) => {\n      if (row.selected()) {\n        row.selected.set(false);\n      }\n    });\n\n    if (this.dataKey) {\n      this._selectedRows = this.selectableRows.filter((row) => newSelectedRows.includes(row[this.dataKey!]));\n\n      this._selectedRows.forEach((row) => {\n        if (!row.selected()) {\n          row.selected.set(true);\n        }\n      });\n    }\n\n    this.countSelectedRows = this._selectedRows.length;\n    this.isAllSelected.set(this.checkAllRowsSelected());\n  }\n\n  /** Fonction de tri par défaut insensible à la casse et aux diacritiques */\n  private sortByDefault(a: any, b: any, field: string, order: 'ascending' | 'descending'): number {\n    let valueA = a[field] ?? ''; // Remplacer undefined par chaîne vide\n    let valueB = b[field] ?? '';\n\n    // Tri par défaut si data est défini (type de données complexe Node)\n    if (!valueA && !valueB && a.data && b.data) {\n      valueA = a.data[field] ?? '';\n      valueB = b.data[field] ?? '';\n    }\n\n    if (!isNaN(Number(valueA)) && !isNaN(Number(valueB))) {\n      return (Number(valueA) - Number(valueB)) * (order === 'ascending' ? 1 : -1);\n    }\n\n    return valueA === valueB ? 0 : valueA.localeCompare(valueB) * (order === 'ascending' ? 1 : -1);\n  }\n\n  /**\n   * Création des groupes selon groupBy\n   * @returns liste des données par groupes et lignes sans groupes\n   */\n  private groupRows(rows: any[]): any[] {\n    if (!this.groupBy) return rows;\n    const groups: DsfrDataGroup[] = [];\n    let countGroups = 1;\n\n    rows.forEach((row) => {\n      const currentKey = this.groupBy && this.groupBy.key ? row[this.groupBy.key] : undefined;\n\n      if (currentKey) {\n        let currentGroup = groups.find((g) => g.key === currentKey);\n        if (!currentGroup) {\n          currentGroup = {\n            key: currentKey,\n            rows: [],\n            ariaPosinset: countGroups,\n            total: 0,\n          };\n          if (this.groupBy?.expandable) currentGroup.collapsed = signal(!this.groupBy.expanded);\n          groups.push(currentGroup);\n          countGroups++;\n        }\n\n        currentGroup.rows.push(row);\n      } else {\n        groups.push(row);\n      }\n    });\n\n    // Calculer les totaux des groupes sans pagination\n    const counts = new Map<string, number>();\n    for (const row of this.data) {\n      const currentKey = row[this.groupBy.key];\n      if (currentKey) {\n        counts.set(currentKey, (counts.get(currentKey) ?? 0) + 1);\n      }\n    }\n\n    return groups.map((g) => ({ ...g, ariaSetsize: countGroups, total: counts.get(g.key) ?? 0 }));\n  }\n}\n","<div [class]=\"tableClasses()\">\n  <edu-table-header\n    (viewSelect)=\"onviewSelect($event)\"\n    [showHeaderViews]=\"showHeaderViews\"\n    [showSearch]=\"showSearch\"\n    [searchInputValue]=\"searchInputValue\"\n    [searchInputPlaceholder]=\"searchInputPlaceholder\"\n    [searchButtonTitle]=\"searchButtonTitle\"\n    [searchLabel]=\"searchLabel\"\n    (searchChange)=\"onsearchChange($event)\"\n    (searchSelect)=\"onsearchSelect($event)\"\n    [headerViewsOptions]=\"headerViewsOptions\"\n    [countSelectedRowsTemplate]=\"headerSelectedRowCountTemplateRef ?? headerSelectedRowCountTemplate\"\n    [headerActionsTemplate]=\"headerActionsTemplateRef ?? headerActionsTemplate\"\n    [countSelectedRows]=\"tableOptions.selectable ? countSelectedRows : undefined\">\n  </edu-table-header>\n  @if (showTableView) {\n    <div class=\"fr-table__wrapper\">\n      <div class=\"fr-table__container\">\n        <div class=\"fr-table__content\" [style.max-height]=\"fixedHeight ? fixedHeight : 'initial'\">\n          <!-- prettier-ignore -->\n          @if (!caption && totalElements() === 0) {\n              <span [id]=\"tableId + '-no-result-description'\" class=\"fr-sr-only\">{{ 'table.noResult' | dsfrI18n }}</span>\n          }\n          @if (!caption && isSortable) {\n            <span [id]=\"tableId + '-sort-explanation'\" class=\"fr-sr-only\">{{\n              'table.sortExplanation' | dsfrI18n\n            }}</span>\n          }\n          <table\n            [id]=\"tableId\"\n            [attr.role]=\"tableOptions.role ? tableOptions.role : null\"\n            [dsfrTreeGridNavigation]=\"tableOptions.role\"\n            [attr.aria-labelledby]=\"!caption && tableOptions.ariaLabelledBy ? tableOptions.ariaLabelledBy : null\"\n            [attr.aria-describedby]=\"\n              !caption\n                ? (totalElements() === 0 ? tableId + '-no-result-description ' : '') +\n                  (isSortable && totalElements() !== 0 ? tableId + '-sort-explanation ' : '') +\n                  (tableOptions.ariaDescribedBy ?? '')\n                : null\n            \">\n            @let resolveHeaderSummaryTemplate = headerSummaryTemplateRef ?? headerSummaryTemplate;\n            @if (caption || resolveHeaderSummaryTemplate) {\n              <caption>\n                {{\n                  caption\n                }}\n                @if (totalElements() === 0) {\n                  <span class=\"fr-sr-only\">({{ 'table.noResult' | dsfrI18n }})</span>\n                }\n                @if (isSortable && totalElements() !== 0) {\n                  <span class=\"fr-sr-only\">({{ 'table.sortExplanation' | dsfrI18n }})</span>\n                }\n                @if (resolveHeaderSummaryTemplate) {\n                  <div class=\"fr-table__caption__desc\">\n                    <ng-container *ngTemplateOutlet=\"resolveHeaderSummaryTemplate\"></ng-container>\n                  </div>\n                }\n              </caption>\n            }\n            <!-- Header ------------------------------------------------------------------------------------------------->\n            <thead>\n              <!-- Slot -->\n              @let resolveTableHeaderTemplate = tableHeaderTemplateRef ?? tableHeaderTemplate;\n\n              @if (resolveTableHeaderTemplate) {\n                <ng-container *ngTemplateOutlet=\"resolveTableHeaderTemplate\"></ng-container>\n              } @else {\n                <tr>\n                  @if (tableOptions.selectable && !tableOptions.showSelectAll) {\n                    <th class=\"fr-cell--fixed fr-col--xs\" role=\"columnheader\">\n                      <span class=\"fr-sr-only\"> {{ 'commons.select' | dsfrI18n }}</span>\n                    </th>\n                  } @else if (tableOptions.selectable && tableOptions.showSelectAll) {\n                    <th dsfrSelectAll></th>\n                  }\n                  @for (col of columns; track col.field) {\n                    <th\n                      [attr.colspan]=\"col.colspan\"\n                      id=\"{{ tableId }}-header-{{ col.field }}\"\n                      [dsfrColumn]=\"col\"\n                      scope=\"col\">\n                      @if (col.labelSrOnly) {\n                        <span class=\"fr-sr-only\">{{ col.label ?? col.field }}</span>\n                      } @else {\n                        {{ col.label ?? col.field }}\n                      }\n                    </th>\n                  }\n                </tr>\n              }\n            </thead>\n\n            <!-- Body ------------------------------------------------------------------------------------------------->\n            <tbody>\n              @if (groupBy) {\n                <!-- Affichages des groupes --------------------------------------------------------------------------->\n                @let rows = displayedRows$ | async;\n                @for (group of rows; let i = $index; track group.key) {\n                  @if (!group.rows) {\n                    <!-- Ligne sans groupe -->\n                    <ng-container\n                      [ngTemplateOutlet]=\"cellsDefaultTemplate\"\n                      [ngTemplateOutletContext]=\"{ row: group }\"></ng-container>\n                  } @else {\n                    <!-- Affichage de la ligne parent d'un groupe, expandable ou non -->\n                    <ng-container\n                      [ngTemplateOutlet]=\"displayRowGroupHeader\"\n                      [ngTemplateOutletContext]=\"{ group: group, index: i }\"></ng-container>\n\n                    @if (!groupBy.expandable || !group.collapsed()) {\n                      @for (row of group.rows; let j = $index; track trackById.bind(this, this.dataKey)(j, row)) {\n                        <!-- Affichage des lignes d'un groupe -->\n                        <ng-container\n                          [ngTemplateOutlet]=\"displayRowGroup\"\n                          [ngTemplateOutletContext]=\"{ group: group, index: j, row: row }\"></ng-container>\n                      }\n                    }\n                  }\n                }\n              } @else {\n                @for (row of displayedRows$ | async; track trackById.bind(this, this.dataKey)(i, row); let i = $index) {\n                  <!-- Affichages des lignes simples ------------------------------------------------------------------>\n                  @if (tableBodyTemplate) {\n                    <!-- Slot -->\n                    <ng-container\n                      *ngTemplateOutlet=\"\n                        tableBodyTemplate;\n                        context: { $implicit: row, index: i, rowOptions: row.rowOptions }\n                      \"></ng-container>\n                  } @else {\n                    <tr>\n                      <!-- Default -->\n                      <ng-container\n                        [ngTemplateOutlet]=\"cellsDefaultTemplate\"\n                        [ngTemplateOutletContext]=\"{ row: row }\"></ng-container>\n                    </tr>\n                  }\n                }\n              }\n              @if (!loading && totalElements() === 0) {\n                <tr>\n                  <td [attr.colspan]=\"columns.length + (tableOptions.selectable ? 1 : 0)\">\n                    {{ emptyResultsMessage ?? ('table.noResult' | dsfrI18n) }}\n                  </td>\n                </tr>\n              }\n            </tbody>\n            @let resolveTableFooterTemplate = tableFooterTemplateRef ?? tableFooterTemplate;\n\n            @if (resolveTableFooterTemplate) {\n              <tfoot>\n                <ng-container *ngTemplateOutlet=\"resolveTableFooterTemplate\"></ng-container>\n              </tfoot>\n            }\n          </table>\n          <!-- Afficher un template de chargement si défini -->\n          @let resolveLoadingTemplate = loadingTemplateRef ?? loadingTemplate;\n\n          @if (loading && resolveLoadingTemplate) {\n            <ng-container [ngTemplateOutlet]=\"resolveLoadingTemplate\"></ng-container>\n          }\n        </div>\n      </div>\n    </div>\n  } @else {\n    <ng-template [ngTemplateOutlet]=\"alternativeViewTemplateRef ?? this.alternativeViewTemplate\"></ng-template>\n  }\n\n  <!-- Footer -->\n  @let resolveFooterActionsTemplate = footerActionsTemplateRef ?? footerActionsTemplate;\n  @if (showFooterResult || pagination || resolveFooterActionsTemplate) {\n    <dsfr-table-footer\n      [initialState]=\"initialState\"\n      [rowsPerPageOptions]=\"rowsPerPageOptions\"\n      [currentPage]=\"dataTableService.tableState().page\"\n      (rowsPerPageChange)=\"onRowsPerPageChange($event)\"\n      (pageSelect)=\"onPageSelect($event)\"\n      [showPagination]=\"pagination\"\n      [disabledRowsPerPage]=\"totalElements() === 0\"\n      [totalPage]=\"totalPage()\"\n      [showFooterResult]=\"showFooterResult\"\n      [emptyResultsMessage]=\"emptyResultsMessage ?? ('table.noResult' | dsfrI18n)\"\n      [footerActionsTemplate]=\"resolveFooterActionsTemplate\"\n      [footerResultsTemplate]=\"footerResultsTemplateRef ?? this.footerResultsTemplate\"\n      [totalElements]=\"totalElements()\">\n    </dsfr-table-footer>\n  }\n</div>\n\n<!-- Template de la ligne parent d'un groupe -------------------------------------------------------------------------->\n<ng-template #displayRowGroupHeader let-group=\"group\" let-i=\"index\">\n  @if (rowGroupHeaderTemplate) {\n    <!-- Slot -->\n    <ng-container\n      [ngTemplateOutlet]=\"rowGroupHeaderTemplate\"\n      [ngTemplateOutletContext]=\"{ group: group, index: i }\"></ng-container>\n  } @else {\n    <!-- Default -->\n    <tr dsfrRowGroupHeader [group]=\"group\">\n      <td [attr.colspan]=\"columns.length + (tableOptions.selectable ? 2 : 1)\">\n        {{ group.key }}\n      </td>\n    </tr>\n  }\n</ng-template>\n\n<!-- Template de la ligne d'un groupe --------------------------------------------------------------------------------->\n<ng-template #displayRowGroup let-group=\"group\" let-i=\"index\" let-row=\"row\">\n  @if (rowGroupTemplate) {\n    <!-- Slot -->\n    <ng-container\n      [ngTemplateOutlet]=\"rowGroupTemplate\"\n      [ngTemplateOutletContext]=\"{ $implicit: row, group: group, index: i, row: row }\"></ng-container>\n  } @else {\n    <!-- Default -->\n    <tr dsfrRowGroup [index]=\"i\" [group]=\"group\">\n      <ng-container [ngTemplateOutlet]=\"cellsDefaultTemplate\" [ngTemplateOutletContext]=\"{ row: row }\"></ng-container>\n    </tr>\n  }\n</ng-template>\n\n<!-- Template par défaut des cellules -------------------------------------------------------------------------------->\n<ng-template #cellsDefaultTemplate let-row=\"row\">\n  <!-- afficher une cellule avec checkbox de selection -->\n  @if (tableOptions.selectable) {\n    <th [disableSelect]=\"row.rowOptions?.disableSelect\" [dsfrSelectRow]=\"row\">\n      @if (row.rowOptions?.disableSelect) {\n        <span class=\"fr-sr-only\">\n          {{ 'table.unselectable' | dsfrI18n }}\n        </span>\n      }\n    </th>\n  }\n  @for (col of columns; track col.field) {\n    @if (!col.formatFunction) {\n      <!-- Cellule non formatée -->\n      @if (row[col.field] !== undefined) {\n        <td [dsfrCell]=\"col\">{{ row[col.field] }}</td>\n      } @else {\n        <!-- Cellule vide non formatée -->\n        <td [dsfrCell]=\"col\">N/A</td>\n      }\n    } @else {\n      <!-- Cellule formatée -->\n      <td [dsfrCell]=\"col\">{{ col.formatFunction(row[col.field]) }}</td>\n    }\n  }\n</ng-template>\n","import { WritableSignal } from '@angular/core';\nimport { DsfrSize } from '../../shared';\n\n/**\n * Définit les tailles de cellules proposées par le DSFR.\n */\nexport enum DsfrCellSizeConst {\n  XS = 'XS',\n  SM = 'SM',\n  MD = 'MD',\n  LG = 'LG',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrCellSizeConst}.\n */\nexport type DsfrCellSize = `${DsfrCellSizeConst}`;\n\n/**\n * Modèle de tri d'une colonne.\n */\nexport interface DsfrSortColumn {\n  /**\n   * Permet de définir le sens du tri de la colonne (`ascending` par defaut).\n   */\n  order: 'descending' | 'ascending';\n  /**\n   * Propriété représentée par la colonne.\n   */\n  field: string;\n}\n\n/**\n * Représente l'état courant de la table (pagination et tri).\n */\nexport interface DsfrTableState {\n  /**\n   * Indique le numéro de page courante.\n   */\n  page: number;\n  /**\n   * Indique le nombre de lignes affichées par page.\n   */\n  rowsPerPage: number;\n  /**\n   * Décrit les modalités de tri d'une colonne.\n   */\n  sort: DsfrSortColumn | null;\n}\n\n/**\n * Décrit un évenement au changement de la pagination.\n */\nexport interface DsfrTablePaginationEvent {\n  /**\n   * Indique le numéro de la page courante.\n   */\n  currentPage: number;\n  /**\n   * Indique le nombre de lignes affichées par page.\n   */\n  rowsPerPage: number;\n}\n\n/**\n * Décrit un évenement au changement de la sélection.\n */\nexport interface DsfrTableSelectionEvent {\n  /**\n   * Fournit la ligne concernées par le changement de sélection.\n   */\n  row: any;\n  /**\n   * Indique les lignes actuellement sélectionées.\n   *\n   * (contiendra `row` lors d'une sélection et ne contiendra pas `row` lors d'une désélection)\n   */\n  selectedRows: any[];\n}\n\n/**\n * Décrit le modèle de présentation des options d'une cellule.\n */\nexport interface DsfrCellOptions {\n  /**\n   * Active le retour à la ligne.\n   */\n  allowWrap?: boolean;\n  /**\n   * La colonne est fixe.\n   */\n  fixed?: boolean;\n  /**\n   * Position en cas de colonne fixe, à gauche par défaut.\n   */\n  fixedPosition?: 'left' | 'right';\n  /**\n   * Alignement horizontal des cellules de la colonne, à gauche par défaut.\n   */\n  textAlign?: 'right' | 'center';\n  /**\n   * Alignement vertical des cellules de la colonne, centré par défaut.\n   */\n  verticalAlign?: 'top' | 'bottom';\n}\n\n/**\n * Décrit le modèle de présentation d'une colonne.\n */\nexport interface DsfrColumn extends DsfrCellOptions {\n  /**\n   * Propriété représentée par la colonne.\n   */\n  field: string;\n  /**\n   * Libellé affiché.\n   */\n  label?: string;\n  /**\n   *  La colonne est triable.\n   */\n  sortable?: boolean;\n  /**\n   * Attribut colspan.\n   */\n  colspan?: number;\n  /**\n   * Largeur minimale de la colonne, MD par défaut.\n   */\n  minWidth?: DsfrCellSize;\n  /**\n   * Ne pas afficher le libellé de la colonne.\n   */\n  labelSrOnly?: boolean;\n  /**\n   * Fonction personnalisée de tri.\n   */\n  sortFunction?: (a: any, b: any, order: 'ascending' | 'descending') => number;\n  /**\n   * Fonction de formatage du contenu d'une cellule.\n   */\n  formatFunction?: (cellValue: any) => string;\n}\n\n/**\n * Décrit le modèle de présentation des options d'une ligne.\n */\nexport interface DsfrRowOptions {\n  /**\n   * L'identifiant unique de la ligne.\n   */\n  id: string | number;\n  /**\n   * Permet d'indiquer que la ligne n'est pas sélectionnable.\n   */\n  disableSelect?: boolean;\n}\n\n/**\n * Décrit le modèle de présentation des options d'une table.\n */\nexport interface DsfrTableOptions {\n  /**\n   * Pas de scroll horizontal sur le tableau.\n   */\n  noScroll?: boolean;\n  /**\n   * Lignes sélectionnables.\n   */\n  selectable?: boolean;\n\n  /**\n   * La sélection concerne toutes les lignes (défaut) ou uniquement les lignes de la page courante.\n   */\n  selectionScope?: 'all' | 'currentPage';\n\n  /**\n   * Afficher une checkbox de sélection de toutes les lignes (selon selectionScope).\n   */\n  showSelectAll?: boolean;\n  /**\n   * Titre invisible (sr-only).\n   */\n  captionSrOnly?: boolean;\n  /**\n   * Positionne le titre au bas de la table.\n   */\n  bottomCaption?: boolean;\n  /**\n   * Taille des cellules du tableau (SM par défaut).\n   */\n  cellSize?: DsfrSize;\n  /**\n   * Affiche des bordures verticales.\n   */\n  bordered?: boolean;\n  /**\n   * Active le retour à la ligne automatique des éléments.\n   */\n  allowWrap?: boolean;\n  /**\n   * Elément correspondant au titre du tableau si caption n'est pas renseigné.\n   */\n  ariaLabelledBy?: string;\n  /**\n   * Elément correspondant à la description du tableau si caption n'est pas renseigné.\n   */\n  ariaDescribedBy?: string;\n  /**\n   * Ajoute l'attribut aria rôle à la table (ex. \"grid\").\n   */\n  role?: string;\n}\n\n/**\n *  Configuration du regroupement des lignes dans la table\n */\nexport interface DsfrRowGrouping {\n  /**\n   * Nom de la propriété du modèle de données utilisée pour former les groupes.\n   * Exemple : { key: 'category' }. Les lignes ayant la même valeur pour `category` seront regroupées ensemble.\n   */\n  key: string;\n  /**\n   * Définit si les groupes peuvent être repliés ou ouverts par l'utilisateur\n   */\n  expandable?: boolean;\n  /**\n   * Définit si les groupes sont ouverts  par défaut à l’initialisation.\n   */\n  expanded?: boolean;\n}\n\n/**\n * Représente un groupe de lignes\n * Chaque groupe correspond à une valeur unique de la propriété définie\n * par `DsfrRowGrouping.key`, et contient l’ensemble des lignes associées.\n */\nexport interface DsfrDataGroup {\n  /**\n   * Valeur de la propriété utilisée comme clé de regroupement.\n   */\n  key: string;\n  /**\n   * Ensemble des lignes appartenant à ce groupe.\n   */\n  rows: any[];\n  /**\n   * Indique si le groupe est actuellement replié (collapsed).\n   */\n  collapsed?: WritableSignal<boolean>;\n\n  /** Attribut calculé aria-posinset, index dans la liste */\n  ariaPosinset?: number;\n\n  /** Attribut calculé aria-setsize, nombre d'éléments */\n  ariaSetsize?: number;\n\n  /** Nombre total de résultats */\n  total: number;\n\n  /** Données supplémentaires du groupe */\n  data?: any;\n}\n\n/**\n * Interface utilisée pour le contexte du template tableBodyTemplate\n */\nexport interface DsfrTableBodyContext {\n  $implicit: any; // row courante\n  rowOptions: DsfrRowOptions;\n  index: number;\n}\n\n/**\n * Interface utilisée pour le contexte du template tableGroupHeaderTemplate\n */\nexport interface DsfrTableGroupHeaderContext {\n  group: DsfrDataGroup;\n  index: number;\n}\n\n/**\n * Interface utilisée pour le contexte du template tableGroupTemplate\n */\nexport interface DsfrTableGroupContext extends DsfrTableGroupHeaderContext {\n  row: any; // pour éviter breaking change, V2 supprimer et garder uniquement implicit\n  $implicit: any; // row courante\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { EduCheckboxLightComponent } from '../../shared';\nimport { SortButtonHeaderComponent } from './component/sort-button.component';\nimport { DsfrTableFooterComponent } from './component/table-footer.component';\nimport { EduTableHeaderComponent } from './component/table-header.component';\nimport { DsfrCellDirective } from './directive/cell.directive';\nimport { DsfrColumnDirective } from './directive/column.directive';\nimport { DsfrSelectAllDirective } from './directive/header-select.directive';\nimport { DsfrRowGroupDirective } from './directive/row-group.directive';\nimport { DsfrRowGroupHeaderDirective } from './directive/row-header-group.directive';\nimport { DsfrSelectRowDirective } from './directive/row-select.directive';\nimport { DsfrSortColumnDirective } from './directive/sort-column.directive';\nimport { DsfrTableComponent } from './table.component';\n@NgModule({\n  imports: [\n    CommonModule,\n    SortButtonHeaderComponent,\n    DsfrColumnDirective,\n    DsfrSortColumnDirective,\n    DsfrTableComponent,\n    DsfrSelectRowDirective,\n    EduCheckboxLightComponent,\n    DsfrCellDirective,\n    DsfrSelectAllDirective,\n    DsfrRowGroupDirective,\n    DsfrRowGroupHeaderDirective,\n    DsfrTableFooterComponent,\n    EduTableHeaderComponent,\n  ],\n  exports: [\n    DsfrColumnDirective,\n    DsfrSortColumnDirective,\n    DsfrCellDirective,\n    DsfrSelectRowDirective,\n    DsfrSelectAllDirective,\n    DsfrRowGroupDirective,\n    DsfrRowGroupHeaderDirective,\n    DsfrTableFooterComponent,\n    DsfrTableComponent,\n  ],\n})\nexport class DsfrDataTableModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n  TemplateRef,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { DsfrLink, newUniqueId } from '../../../shared';\nimport { DsfrLinkComponent } from '../../link';\n\ndeclare function dsfr(elem: HTMLElement): any;\n\n@Component({\n  selector: 'dsfr-tool-link-menu, dsfr-ext-toolsmenu, dsfrx-toolsmenu',\n  imports: [CommonModule, DsfrLinkComponent],\n  templateUrl: './tool-link-menu.component.html',\n  styleUrls: ['../dropdown-button.component.scss', './tool-link-menu.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class DsfrToolLinkMenuComponent implements AfterViewInit, OnInit, OnDestroy {\n  /** Identifiant du bouton du menu (généré si non renseigné) */\n  @Input() menuId?: string;\n\n  /** Libellé du bouton du menu déroulant */\n  @Input() labelMenu?: string;\n\n  /** Attribut aria-label du bouton du menu déroulant */\n  @Input() ariaLabelMenu?: string;\n\n  /** Désactiver le menu */\n  @Input({ transform: booleanAttribute }) disabled: boolean = false;\n\n  /* Icône sur le bouton du menu */\n  @Input() iconMenu?: string;\n\n  /** Liste des liens. Prioritaire sur le slot linksTemplate */\n  @Input() links: DsfrLink[] = [];\n\n  /** Ajouter une classe personnalisée pour le menu  */\n  @Input() customClass?: string;\n\n  /** Suppression de la bordure si false */\n  @Input() outline = true;\n\n  /** Contenu personnalisé du header du menu */\n  @ContentChild('headerTemplate', { static: true }) headerTemplate?: TemplateRef<void>;\n\n  /** Contenu personnalisé du footer du menu */\n  @ContentChild('footerTemplate', { static: true }) footerTemplate?: TemplateRef<void>;\n\n  /** Contenu personnalisé des liens du menu */\n  @ContentChild('linksTemplate', { static: true }) linksTemplate?: TemplateRef<void>;\n\n  /** Evènement émis au clic sur un lien */\n  @Output() readonly linkSelect = new EventEmitter<DsfrLink>();\n\n  /** Signale l'ouverture du menu. */\n  @Output() disclose = new EventEmitter<void>();\n\n  /** Signale la fermeture du menu. */\n  @Output() conceal = new EventEmitter<void>();\n\n  @ViewChild('collapseMenu') protected collapseMenu?: ElementRef<HTMLElement>;\n\n  private readonly renderer2: Renderer2 = inject(Renderer2);\n  private _unlisten: { (): void }[] = [];\n\n  public ngOnInit(): void {\n    this.menuId ??= newUniqueId();\n  }\n\n  /**\n   * Ecouter les events scripts dsfr conceal/disclose sur le menu\n   * conceal: uniquement apres une premiere ouverture (présence de fr-collapse--expanded)\n   */\n  public ngAfterViewInit(): void {\n    this._unlisten.push(\n      this.renderer2.listen(this.collapseMenu?.nativeElement, 'dsfr.conceal', () => {\n        if (this.collapseMenu?.nativeElement.className.includes('fr-collapse--expanded')) {\n          this.conceal.emit();\n        }\n      }),\n      this.renderer2.listen(this.collapseMenu?.nativeElement, 'dsfr.disclose', () => {\n        this.disclose.emit();\n      }),\n    );\n  }\n\n  public ngOnDestroy(): void {\n    this._unlisten.forEach((unlistenFunc) => unlistenFunc());\n  }\n\n  protected onLinkSelect(link: DsfrLink) {\n    if (!this.collapseMenu) return;\n\n    // déclenchement manuel de l'évènement, celui-ci n'est pas envoyé en cas de balise supplémentaire sur le <a>\n    dsfr(this.collapseMenu.nativeElement).collapse.conceal();\n    this.linkSelect.emit(link);\n  }\n}\n","<div class=\"fr-nav fr-nav__item edu-tool-link-menu\">\n  <!-- ajouter ariaLabel ?-->\n  <button\n    #btnMenu\n    [id]=\"menuId\"\n    type=\"button\"\n    class=\"edu-menu-dropdown__btn fr-btn--sm fr-btn--icon-left fr-btn {{ iconMenu ?? '' }}\"\n    [class.fr-btn--tertiary]=\"outline\"\n    [class.fr-btn--tertiary-no-outline]=\"!outline\"\n    [disabled]=\"disabled || null\"\n    [attr.aria-controls]=\"menuId + '-menu'\"\n    [attr.aria-label]=\"ariaLabelMenu ?? null\"\n    [attr.aria-expanded]=\"false\">\n    {{ labelMenu }}\n  </button>\n\n  <div #collapseMenu class=\"fr-collapse fr-menu\" [ngClass]=\"customClass\" [id]=\"menuId + '-menu'\">\n    <div class=\"fr-menu__list\">\n      <!-- Header  ------------------------------------------------------------------------>\n      @if (headerTemplate) {\n        <div class=\"edu-tool-link-menu__header\">\n          <!-- Affichage du slot header  -->\n          <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n        </div>\n      }\n\n      <!-- Liens  ------------------------------------------------------------------------->\n      @if (links && links.length > 0) {\n        <ul>\n          @for (link of links; track $index) {\n            <li>\n              <ng-container [ngTemplateOutlet]=\"linkTemplate\" [ngTemplateOutletContext]=\"{ link: link }\"></ng-container>\n            </li>\n          }\n        </ul>\n      } @else if (linksTemplate) {\n        <!-- Affichage du slot links -->\n        <ng-container *ngTemplateOutlet=\"linksTemplate\"></ng-container>\n      }\n\n      <!-- Footer  ----------------------------------------------------------------------->\n      @if (footerTemplate) {\n        <div class=\"edu-tool-link-menu__footer\">\n          <!-- Affichage du slot footer -->\n          <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n        </div>\n      }\n    </div>\n  </div>\n</div>\n\n<ng-template #linkTemplate let-link=\"link\">\n  <dsfr-link\n    [tooltipMessage]=\"link.tooltipMessage\"\n    [ariaLabel]=\"link.label ? link.ariaLabel : link.label\"\n    [ariaControls]=\"link.ariaControls\"\n    [link]=\"link.link\"\n    [label]=\"link.icon ? undefined : link.label\"\n    [linkTarget]=\"link.linkTarget\"\n    [route]=\"link.route\"\n    [customClass]=\"'fr-nav__link'\"\n    [routePath]=\"link.routerLink\"\n    [routerLinkActive]=\"link.routerLinkActive ?? ''\"\n    [routerLinkExtras]=\"link.routerLinkExtras\"\n    [mode]=\"link.mode\"\n    [ariaCurrent]=\"link.active\"\n    (linkSelect)=\"onLinkSelect(link)\"\n    [disabled]=\"disabled\">\n    <!-- Pour avoir a la fois un item actif et une icone, surcharger ici avec le slot -->\n    @if (link.icon) {\n      <i aria-hidden=\"true\" class=\"{{ link.icon }} edu-item-icon\"></i>\n      {{ link.label }}\n    }\n  </dsfr-link>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  Component,\n  ContentChild,\n  EventEmitter,\n  Input,\n  Output,\n  TemplateRef,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { DsfrLink } from '../../shared';\nimport { DsfrButtonComponent } from '../button';\nimport { DsfrToolLinkMenuComponent } from './component/tool-link-menu.component';\n\n@Component({\n  selector: 'dsfr-usermenu, dsfr-ext-profilemenu, dsfrx-profilemenu',\n  imports: [CommonModule, DsfrButtonComponent, DsfrToolLinkMenuComponent],\n  templateUrl: './usermenu.component.html',\n  styleUrls: ['./dropdown-button.component.scss', './usermenu.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class DsfrUserMenuComponent {\n  /** Identifiant du bouton du menu (généré si non renseigné) */\n  @Input() menuId?: string;\n\n  /** Libellé du bouton du menu déroulant */\n  @Input() labelMenu = 'Mon espace';\n\n  /** Attribut aria-label du bouton du menu déroulant */\n  @Input() ariaLabelMenu?: string;\n\n  /** Désactiver le menu */\n  @Input({ transform: booleanAttribute }) disabled: boolean = false;\n\n  /** Liste des liens. Prioritaire sur le slot linksUserTemplate */\n  @Input() links: DsfrLink[] = [];\n\n  /** Nom de l'utilisateur connecté affiché dans le header*/\n  @Input() userName?: string;\n\n  /** Détail d'information sur l'utilisateur connecté (ex. mail) affiché dans le header */\n  @Input() userDetails?: string;\n\n  /** Afficher un bouton de déconnexion en footer */\n  @Input() showLogout = true;\n\n  /** Suppression de la bordure si false */\n  @Input() outline = true;\n\n  /** Contenu personnalisé du header du menu */\n  @ContentChild('headerUserTemplate', { static: true }) headerUserTemplate?: TemplateRef<void>;\n\n  /** Contenu personnalisé du footer du menu */\n  @ContentChild('footerUserTemplate', { static: true }) footerUserTemplate?: TemplateRef<void>;\n\n  /** Contenu personnalisé des liens du menu */\n  @ContentChild('linksUserTemplate', { static: true }) linksUserTemplate?: TemplateRef<void>;\n\n  /** Evènement émis au clic sur un lien */\n  @Output() readonly linkSelect = new EventEmitter<DsfrLink>();\n\n  /** Signale l'ouverture du menu. */\n  @Output() readonly disclose = new EventEmitter<void>();\n\n  /** Signale la fermeture du menu. */\n  @Output() readonly conceal = new EventEmitter<void>();\n\n  /** Au clic sur le bouton de déconnexion  */\n  @Output() readonly logoutSelect = new EventEmitter<void>();\n\n  /**\n   * @deprecated Utiliser `linksUserTemplate` à la place.\n   */\n  @ContentChild('linksProfileTemplate', { static: true }) linksProfileTemplate?: TemplateRef<void>;\n\n  /**\n   * @deprecated Utiliser `footerUserTemplate` à la place.\n   */\n  @ContentChild('footerProfileTemplate', { static: true }) footerProfileTemplate?: TemplateRef<void>;\n\n  /**\n   * @deprecated Utiliser `headerUserTemplate` à la place.\n   */\n  @ContentChild('headerProfileTemplate', { static: true }) headerProfileTemplate?: TemplateRef<void>;\n\n  get resLinksTemplate(): TemplateRef<void> | undefined {\n    return this.linksUserTemplate ?? this.linksProfileTemplate;\n  }\n\n  get resFooterTemplate(): TemplateRef<void> | undefined {\n    return this.footerUserTemplate ?? this.footerProfileTemplate;\n  }\n\n  get resHeaderTemplate(): TemplateRef<void> | undefined {\n    return this.headerUserTemplate ?? this.headerProfileTemplate;\n  }\n\n  /**\n   * Nom de l'utilisateur connecté affiché dans le header\n   * @deprecated utiliser userName\n   */\n  @Input() set profileName(value: string) {\n    if (value) {\n      this.userName = value;\n    }\n  }\n\n  /**\n   * Détail d'information sur l'utilisateur connecté\n   * @deprecated utiliser userDetails\n   */\n  @Input() set profileDetails(value: string) {\n    if (value) {\n      this.userName = value;\n    }\n  }\n\n  protected onLogout(): void {\n    this.logoutSelect.emit();\n  }\n\n  protected onDisclose(): void {\n    this.disclose.emit();\n  }\n\n  protected onConceal(): void {\n    this.conceal.emit();\n  }\n\n  protected onLinkSelect(link: DsfrLink): void {\n    this.linkSelect.emit(link);\n  }\n}\n","<dsfr-tool-link-menu\n  [labelMenu]=\"labelMenu\"\n  [links]=\"links\"\n  [outline]=\"outline\"\n  [disabled]=\"disabled\"\n  [ariaLabelMenu]=\"ariaLabelMenu\"\n  (conceal)=\"onConceal()\"\n  (disclose)=\"onDisclose()\"\n  customClass=\"edu-usermenu\"\n  (linkSelect)=\"onLinkSelect($event)\"\n  iconMenu=\"fr-icon-account-circle-fill\"\n  [menuId]=\"menuId\">\n  <ng-template #headerTemplate>\n    @if (userName || userDetails) {\n      <p>\n        <span class=\"edu-tool-link-menu__desc\">{{ userName }}</span>\n        <br />\n        <span class=\"edu-tool-link-menu__detail\">{{ userDetails }}</span>\n      </p>\n    } @else if (headerUserTemplate) {\n      <!-- Affichage du slot header  -->\n      <ng-container *ngTemplateOutlet=\"resHeaderTemplate\"></ng-container>\n    }\n  </ng-template>\n  <ng-template #linksTemplate>\n    <ng-container *ngTemplateOutlet=\"resLinksTemplate\"></ng-container>\n  </ng-template>\n  <ng-template #footerTemplate>\n    @if (showLogout && !footerUserTemplate) {\n      <dsfr-button\n        label=\"Se déconnecter\"\n        icon=\"fr-icon-logout-box-r-line\"\n        iconPosition=\"left\"\n        (click)=\"onLogout()\"\n        variant=\"tertiary\"\n        buttonSize=\"SM\"></dsfr-button>\n    } @else if (footerUserTemplate) {\n      <!-- Affichage du slot footer -->\n      <ng-container *ngTemplateOutlet=\"resFooterTemplate\"></ng-container>\n    }\n  </ng-template>\n</dsfr-tool-link-menu>\n","import { KeyValue, KeyValuePipe } from '@angular/common';\n\n/**\n * Modèle de présentation d'une colonne.\n * @deprecated utiliser le nouveau composant de table\n */\nexport interface DsfrTableColumn {\n  /**\n   * La clé permettant la mise en correspondance avec les champs des lignes de données.\n   */\n  key: string;\n\n  /**\n   * Le libellé d'entête de la colonne.\n   */\n  heading: string;\n}\n\n/**\n * Modèle de présentation du composant Table.\n * @deprecated utiliser le nouveau composant de table\n */\nexport interface DsfrDataTable {\n  /**\n   * @deprecated Depuis 1.9.0, utiliser la propriété `columns` à la place.\n   */\n  titles?: {};\n\n  /**\n   * En-têtes des colonnes [{key: key1, title: title1}, {key: key2, title: title2}, ...]\n   */\n  columns?: DsfrTableColumn[];\n\n  /**\n   * Lignes de données correspondant aux collonnes  [{key1: data1-1, key2: data1-2,…}, ...]\n   */\n  rows: any[];\n  // selection : single or multiple\n}\n\n/**\n * Modèle de présentation INTERNE du composant table.\n *\n * @internal\n * @deprecated utiliser le nouveau composant de table\n */\nexport class EduTableModel {\n  columns: DsfrTableColumn[];\n  rows: any[];\n\n  constructor(data: DsfrDataTable, keyValuePipe: KeyValuePipe) {\n    this.rows = data.rows;\n    if (data.columns) {\n      this.columns = data.columns;\n    } else {\n      this.columns = keyValuePipe.transform(new Map(Object.entries(data.titles ?? {}))).map(\n        (t: KeyValue<any, any>) =>\n          <DsfrTableColumn>{\n            key: t.key,\n            heading: t.value,\n          },\n      );\n    }\n  }\n}\n","import { CommonModule, KeyValuePipe } from '@angular/common';\nimport { Component, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { DsfrI18nService } from '../../shared';\nimport { DsfrDataTable, EduTableModel } from './table-legacy.model';\n\n/**\n * @deprecated utiliser le nouveau composant de table\n */\n@Component({\n  selector: 'dsfr-table',\n  templateUrl: './table-legacy.component.html',\n  styleUrls: ['./table-legacy.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule],\n  providers: [KeyValuePipe],\n})\nexport class DsfrTableLegacyComponent {\n  /** Message si aucune donnée. */\n  @Input() noDataMessage: string;\n\n  /**\n   * Permet d'empêcher le scroll horizontal. Si le tableau no-scroll comporte trop de colonnes le tableau est coupé\n   * sur la droite (overflow hidden).\n   */\n  @Input() noScroll = false;\n\n  /**\n   * Permet de désactiver le scroll en fixant la largeur des colonnes du tableau. Les colonnes sont alors toutes de\n   * la même taille quelque soit leur contenu.\n   */\n  @Input() fixedLayout = false;\n\n  /** Titre au-dessus du tableau. */\n  @Input() caption?: string;\n\n  /** Permet de masquer (visuellement) le caption afin de l’utiliser uniquement dans le cadre de l’accessibilité. */\n  @Input() noCaption = false;\n\n  /** Permet de placer le caption en dessous du tableau plutôt qu’en haut. */\n  @Input() captionBottom = false;\n\n  /**\n   * Classes de personnalisation du tableau (ex : `fr-table--green-emeraude`).\n   */\n  @Input() customClass: string = '';\n\n  /** Classe(s) de personnalisation de l'entête. */\n  @Input() headerCustomClass?: string;\n\n  /** Permet d'ajouter des bordures aux lignes du tableau.  */\n  @Input() bordered = false;\n\n  /** @internal */\n  dataModel: EduTableModel = { columns: [], rows: [] };\n\n  private readonly i18n = inject(DsfrI18nService);\n  private readonly keyValuePipe = inject(KeyValuePipe);\n\n  constructor() {\n    this.noDataMessage = this.i18n.t('table.noData');\n  }\n\n  /** Modèle de données.  */\n  @Input()\n  public set data(data: DsfrDataTable) {\n    this.dataModel = new EduTableModel(data, this.keyValuePipe);\n  }\n\n  /** @internal */\n  hasRows(): boolean {\n    return !!this.dataModel && !!this.dataModel.rows && this.dataModel.rows.length > 0;\n  }\n}\n","@if (dataModel.columns !== [] && dataModel.rows !== []) {\n  <div\n    #dsfrTable\n    [class]=\"customClass\"\n    [ngClass]=\"{\n      'fr-table': true,\n      'fr-table--bordered': bordered,\n      'fr-table--no-scroll': noScroll,\n      'fr-table--layout-fixed': fixedLayout,\n      'fr-table--no-caption': noCaption,\n      'fr-table--caption-bottom': captionBottom,\n    }\">\n    <table>\n      @if (caption) {\n        <caption>\n          {{\n            caption\n          }}\n        </caption>\n      }\n      @if (!caption) {\n        <caption>\n          <ng-content select=\"[caption]\"></ng-content>\n        </caption>\n      }\n      <thead [ngClass]=\"headerCustomClass ? headerCustomClass : null\">\n        <tr>\n          @for (column of dataModel.columns; track column) {\n            <th scope=\"col\">{{ column.heading }}</th>\n          }\n        </tr>\n      </thead>\n      <tbody>\n        @for (row of dataModel.rows; track row) {\n          <tr>\n            @for (column of dataModel.columns; track column) {\n              <td>{{ row[column.key] }}</td>\n            }\n          </tr>\n        }\n        @if (!hasRows() && noDataMessage) {\n          <tr>\n            <td class=\"edu-td__nodata\" [attr.colspan]=\"dataModel.columns.length\">{{ noDataMessage }}</td>\n          </tr>\n        }\n      </tbody>\n    </table>\n  </div>\n}\n","import { CommonModule, KeyValuePipe } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrTableLegacyComponent } from './table-legacy.component';\n\n/**\n * @deprecated utiliser le nouveau composant de table\n */\n@NgModule({\n  exports: [DsfrTableLegacyComponent],\n  imports: [CommonModule, DsfrTableLegacyComponent],\n  providers: [KeyValuePipe],\n})\nexport class DsfrTableModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  signal,\n  viewChild,\n  ViewEncapsulation,\n  WritableSignal,\n} from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DsfrLink, newUniqueId } from '../../shared';\nimport { ItemLinkComponent } from '../link/item-link.component';\ndeclare function dsfr(elem: HTMLElement): any;\n\n@Component({\n  selector: 'dsfr-tabnav',\n  templateUrl: './tabnav.component.html',\n  encapsulation: ViewEncapsulation.None,\n  styleUrls: ['./tabnav.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [CommonModule, RouterModule, ItemLinkComponent],\n})\nexport class DsfrTabnavComponent {\n  /** Evénement émis suite à la sélection d'un lien  */\n  @Output() itemSelect = new EventEmitter<DsfrLink>();\n\n  /** Activer la selection automatique des items (si absence de routerLink) */\n  @Input() autoActive = true;\n\n  /** 👓 Ajoute un role navigation sur le container. Nécessite de spécifier ariaLabel ou ariaLabelledBy. */\n  @Input() roleNavigation = false;\n\n  /** 👓 En cas de role navigation, spécifier aria-label pour donner le contexte. */\n  @Input() ariaLabel?: string;\n\n  /** 👓 En cas de role navigation, spécifier aria-labelledby pour donner le contexte. */\n  @Input() ariaLabelledBy?: string;\n\n  /** En mode link/route, le menuActive est défini a partir de la propriété active */\n  protected readonly activeMenu = computed(() => {\n    return this.cloneMenu().find((m) => m.active);\n  });\n\n  /** Copie du menu */\n  protected cloneMenu: WritableSignal<DsfrLink[]> = signal([]);\n  protected menuId = `${newUniqueId()}--collapse`;\n\n  /** Référence vers le container du menu (element collapsable)*/\n  private _menuContainer = viewChild<ElementRef<HTMLElement>>('menuContainer');\n  private _menu: DsfrLink[] = [];\n\n  get menu(): DsfrLink[] {\n    return this._menu;\n  }\n\n  /** Menu contenant la liste de liens */\n  @Input() set menu(value: DsfrLink[]) {\n    this._menu = value;\n    if (this._menu) {\n      this.cloneMenu.set(this._menu);\n    }\n  }\n\n  /**\n   * Au clic sur un lien du menu\n   * - Mise a jour du lien actif en cas de autoactive\n   * - Fermeture du menu et émission de itemSelect\n   * */\n  protected onSelectItem(currentItem: DsfrLink): void {\n    if (this.autoActive && currentItem.route) {\n      const menu = this.cloneMenu().map((i) => ({\n        ...i,\n        active: currentItem.route === i.route,\n      }));\n      this.cloneMenu.set(menu);\n    }\n\n    this.closeMenuOnMobile();\n    this.itemSelect.emit(currentItem);\n  }\n\n  /**\n   * Force la fermeture du menu en mode mobile après une navigation\n   */\n  private closeMenuOnMobile() {\n    const el = this._menuContainer()?.nativeElement;\n    if (el) dsfr(el).collapse.conceal();\n  }\n}\n","<div\n  [attr.aria-labelledby]=\"ariaLabelledBy ?? null\"\n  [attr.aria-label]=\"ariaLabel ?? null\"\n  [attr.role]=\"roleNavigation ? 'navigation' : null\"\n  class=\"fr-sidemenu edu-tabnav\">\n  <div class=\"fr-sidemenu__inner\">\n    @if (activeMenu()) {\n      <!-- Affichage du bouton en mobile selon la prop active en cas de route -->\n      <button aria-expanded=\"false\" [attr.aria-controls]=\"menuId\" type=\"button\" class=\"fr-sidemenu__btn\">\n        {{ activeMenu()?.label }}\n      </button>\n    } @else {\n      <!-- Affichage du bouton en mobile selon routerLinkActive en cas de routerLink -->\n      @for (link of cloneMenu(); track $index) {\n        <div\n          class=\"fr-sidemenu__inner\"\n          [routerLink]=\"link.routerLink\"\n          #rla=\"routerLinkActive\"\n          routerLinkActive\n          [routerLinkActiveOptions]=\"link.routerLinkActiveOptions ?? { exact: true }\">\n          @if (rla.isActive) {\n            <button aria-expanded=\"false\" [attr.aria-controls]=\"menuId\" type=\"button\" class=\"fr-sidemenu__btn\">\n              {{ link.label }}\n            </button>\n          }\n        </div>\n      }\n    }\n    <div #menuContainer class=\"fr-collapse\" [attr.id]=\"menuId\">\n      <ul>\n        @for (link of cloneMenu(); track $index) {\n          <li>\n            <edu-item-link\n              [item]=\"link\"\n              [customClass]=\"'edu-tabnav__tab ' + (link.customClass ?? '')\"\n              (linkSelect)=\"onSelectItem(link)\"></edu-item-link>\n          </li>\n        }\n      </ul>\n    </div>\n  </div>\n</div>\n","import { IsActiveMatchOptions, NavigationExtras } from '@angular/router';\n\nexport const BUTTON_TAB_ID_PREFIX = 'buttontab-';\n\n/**\n * Description d'un onglet du composant.\n */\nexport interface EduTabHeader {\n  /**\n   * Label de l'onglet, obligatoire\n   */\n  label: string;\n\n  /**\n   * Lien composant vers onglet. Permet de sélectionner un onglet lorsqu'on sélectionne le path correspondant.\n   */\n  tabId: string;\n\n  /**\n   * Icône optionnelle de l'onglet.\n   */\n  icon?: string;\n\n  /**\n   * Permet de désactiver l'onglet.\n   */\n  disabled?: boolean;\n}\n\n/**\n * Description d'un onglet du composant.\n */\nexport interface DsfrTabRoute extends EduTabHeader {\n  /**\n   * Lien onglet vers composant. Path invoqué lorsque l'on clique sur un onglet.\n   */\n  path: string;\n\n  /** Options additionnelles de navigation pour le routerLink (queryParams, state etc.). */\n  routerLinkExtras?: NavigationExtras;\n\n  /** RouterLink : options qui déterminent si le lien est actif en cas de directive routerLink. */\n  routerLinkActiveOptions?: { exact: boolean } | IsActiveMatchOptions;\n}\n","import { booleanAttribute, Component, HostBinding, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { newUniqueId } from '../../shared';\nimport { BUTTON_TAB_ID_PREFIX, EduTabHeader } from './tabs.model';\n\nexport const DSFR_TAB_SELECTORS = 'dsfr-tab-panel, dsfr-tab';\n\n@Component({\n  selector: DSFR_TAB_SELECTORS,\n  templateUrl: './tab.component.html',\n  encapsulation: ViewEncapsulation.None,\n})\nexport class DsfrTabComponent implements OnInit, Required<EduTabHeader> {\n  /** Identifiant de l'onglet, obligatoire, généré si non fourni. */\n  @Input() tabId: string = '';\n\n  /** Titre de l'onglet, obligatoire. */\n  @Input({ required: true }) label!: string;\n\n  /** Nom de l'icône, l'icône est à gauche du libellé, optionnel. */\n  @Input() icon: string = '';\n\n  /** Permet de désactiver l'onglet. */\n  @Input({ transform: booleanAttribute }) disabled: boolean = false;\n\n  protected buttonId: string | undefined;\n\n  @HostBinding('id') get id() {\n    return this.tabId;\n  }\n\n  @HostBinding('attr.role') get attrRole() {\n    return 'tabpanel';\n  }\n\n  @HostBinding('attr.aria-labelledby') get attrLabelledBy() {\n    return this.buttonId;\n  }\n\n  @HostBinding('attr.tabindex') get attrTabindex() {\n    return '0';\n  }\n\n  @HostBinding('attr.data-tabid') get attrTabId() {\n    return this.tabId;\n  }\n\n  @HostBinding('attr.data-label') get attrLabel() {\n    return this.label;\n  }\n\n  @HostBinding('attr.data-iconClass') get attrIconClass() {\n    return this.icon || null;\n  }\n\n  @HostBinding('class') get class() {\n    return 'fr-tabs__panel';\n  }\n\n  @HostBinding('attr.disabled') get attrDisabled() {\n    return this.disabled;\n  }\n\n  /** @internal */\n  ngOnInit() {\n    if (!this.tabId) {\n      this.tabId = newUniqueId();\n    }\n    this.buttonId = BUTTON_TAB_ID_PREFIX + this.tabId;\n  }\n}\n","<ng-content></ng-content>\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  Input,\n  Output,\n  QueryList,\n  ViewEncapsulation,\n  inject,\n} from '@angular/core';\nimport { ActivatedRoute, NavigationExtras, Router, RouterModule } from '@angular/router';\nimport { newUniqueId } from '../../shared';\nimport { DsfrTabComponent } from './tab.component';\nimport { BUTTON_TAB_ID_PREFIX, DsfrTabRoute, EduTabHeader } from './tabs.model';\n\n@Component({\n  selector: 'dsfr-tabs',\n  templateUrl: './tabs.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, RouterModule],\n})\nexport class DsfrTabsComponent {\n  /**\n   * Attribut aria-label de la liste d'onglets.\n   */\n  @Input() tabsAriaLabel = \"Système d'onglets\";\n\n  /**\n   * Onglet sélectionné (commence à 0).\n   * Ne peut pas être utilisé quand on utilise l'input `routes`.\n   */\n  @Input() selectedTabIndex = 0;\n\n  /**\n   * Permet de positionner la largeur du viewport à 100% en mobile.\n   */\n  @Input() fullViewport = false;\n\n  /**\n   * Définition des routes si l'on souhaite utiliser `<router-outlet>`.\n   *\n   * @since 1.9.0\n   */\n  @Input() routes?: DsfrTabRoute[];\n\n  /**\n   * Émis lors de la sélection d'un onglet. La valeur émise correspond au `tabId` de l'onglet sélectionné.\n   */\n  @Output() tabSelect = new EventEmitter<string>();\n\n  /** @internal */\n  @ContentChildren(DsfrTabComponent) tabComponents!: QueryList<DsfrTabComponent>;\n\n  /** @internal */\n  routerTabId: string;\n\n  private readonly router = inject(Router, { optional: true });\n  private readonly activatedRoute = inject(ActivatedRoute, { optional: true });\n  private readonly elRef = inject(ElementRef);\n\n  constructor() {\n    this.routerTabId = newUniqueId();\n  }\n\n  get headers(): EduTabHeader[] {\n    return this.routes || this.tabComponents?.toArray();\n  }\n\n  private get tabsCount(): number {\n    return this.routes ? this.routes.length : this.tabComponents ? this.tabComponents.length : 0;\n  }\n\n  /** @internal */\n  getHeaderValue(header: EduTabHeader, key: string): any {\n    return header[<never>key];\n  }\n\n  /** @internal */\n  asRoute(header: EduTabHeader): DsfrTabRoute {\n    return <DsfrTabRoute>header;\n  }\n\n  /** @internal */\n  getIconClasses(tabHeader: EduTabHeader): string {\n    return !tabHeader.icon ? '' : `${tabHeader.icon} fr-tabs__tab--icon-left`;\n  }\n\n  /**\n   * [mode routes] Retourne l'identifiant unique du bouton de contrôle de l'onglet passé en paramètre.\n   *\n   * @internal\n   */\n  getButtonTabId(header: EduTabHeader) {\n    return BUTTON_TAB_ID_PREFIX + header.tabId;\n  }\n\n  /**\n   * [mode routes] Retourne l'identifiant unique du bouton de contrôle de l'onglet courant.\n   *\n   * @internal\n   */\n  getCurrentButtonTabId() {\n    return this.selectedTabIndex >= 0 ? BUTTON_TAB_ID_PREFIX + this.routes![this.selectedTabIndex].tabId : null;\n  }\n\n  /** @internal */\n  onSelect(event: MouseEvent, index: number) {\n    event.preventDefault();\n    event.stopPropagation();\n    this.selectedTabIndex = index;\n    this.tabSelect.emit(this.headers[this.selectedTabIndex].tabId);\n  }\n\n  /**\n   * Gestion de la navigation au clavier sans routes : emission de tabSelect\n   *  @internal\n   */\n  onRoutlessTabKeydown(event: KeyboardEvent, index: number) {\n    const newIndex = this.calculateNewIndex(event, index);\n\n    if (newIndex !== -1) {\n      this.tabSelect.emit(this.headers[newIndex].tabId);\n    }\n  }\n\n  /** @internal */\n  onRouterLinkActive(isActive: boolean, tabIndex: number) {\n    if (isActive) {\n      this.selectedTabIndex = tabIndex;\n    }\n  }\n\n  /**\n   * Gestion de la navigation au clavier en mode routes.\n   *\n   *  @internal\n   */\n  onButtonTabKeydown(event: KeyboardEvent, index: number): void {\n    // just in case\n    if (this.selectedTabIndex !== index) return;\n\n    const newIndex = this.calculateNewIndex(event, index);\n\n    if (newIndex > -1) {\n      this.performNavigation(newIndex);\n    }\n  }\n\n  private isFirstTab(index: number): boolean {\n    return index === 0;\n  }\n\n  private isLastTab(index: number): boolean {\n    return index === this.tabsCount - 1;\n  }\n\n  private performNavigation(newIndex: number) {\n    const route = this.routes![newIndex];\n    const extras: NavigationExtras = route.routerLinkExtras || { relativeTo: this.activatedRoute };\n    this.router?.navigate([route.path], extras);\n    this.elRef.nativeElement.querySelector('#' + this.getButtonTabId(route))?.focus();\n  }\n\n  private calculateNewIndex(event: KeyboardEvent, index: number): number {\n    let newIndex = -1;\n\n    switch (event.code) {\n      case 'ArrowLeft':\n        newIndex = this.isFirstTab(index) ? this.tabsCount - 1 : index - 1;\n        break;\n\n      case 'ArrowRight':\n        newIndex = this.isLastTab(index) ? 0 : index + 1;\n        break;\n\n      case 'Home':\n        newIndex = 0;\n        break;\n\n      case 'End':\n        newIndex = this.tabsCount - 1;\n        break;\n\n      default:\n        break;\n    }\n\n    return newIndex;\n  }\n}\n","<div class=\"fr-tabs\" [class.fr-tabs--viewport-width]=\"fullViewport\">\n  <ul class=\"fr-tabs__list\" role=\"tablist\" [attr.aria-label]=\"tabsAriaLabel\">\n    @for (header of headers; track $index; let index = $index) {\n      <li role=\"presentation\">\n        @if (!routes) {\n          <button\n            [attr.id]=\"getHeaderValue(header, 'buttonId') || null\"\n            type=\"button\"\n            role=\"tab\"\n            class=\"fr-tabs__tab\"\n            [class]=\"getIconClasses(header) || null\"\n            [attr.tabindex]=\"index === selectedTabIndex ? 0 : -1\"\n            [attr.aria-controls]=\"header?.tabId || null\"\n            [attr.aria-selected]=\"index === selectedTabIndex\"\n            [disabled]=\"header?.disabled || null\"\n            (keydown)=\"onRoutlessTabKeydown($event, index)\"\n            (click)=\"onSelect($event, index)\">\n            {{ header.label }}\n          </button>\n        } @else {\n          <button\n            [attr.id]=\"getButtonTabId(header)\"\n            type=\"button\"\n            role=\"tab\"\n            class=\"fr-tabs__tab\"\n            [class]=\"getIconClasses(header) || null\"\n            [attr.tabindex]=\"rla.isActive ? 0 : -1\"\n            [attr.aria-controls]=\"rla.isActive ? routerTabId : null\"\n            [attr.aria-selected]=\"rla.isActive\"\n            [disabled]=\"header?.disabled || null\"\n            [routerLink]=\"asRoute(header).path || null\"\n            routerLinkActive\n            [routerLinkActiveOptions]=\"asRoute(header).routerLinkActiveOptions ?? { exact: false }\"\n            [queryParams]=\"asRoute(header).routerLinkExtras?.queryParams\"\n            [fragment]=\"asRoute(header).routerLinkExtras?.fragment\"\n            [queryParamsHandling]=\"asRoute(header).routerLinkExtras?.queryParamsHandling\"\n            [preserveFragment]=\"asRoute(header).routerLinkExtras?.preserveFragment\"\n            [skipLocationChange]=\"asRoute(header).routerLinkExtras?.skipLocationChange\"\n            [replaceUrl]=\"asRoute(header).routerLinkExtras?.replaceUrl\"\n            [state]=\"asRoute(header).routerLinkExtras?.state\"\n            (isActiveChange)=\"onRouterLinkActive($event, index)\"\n            #rla=\"routerLinkActive\"\n            (click)=\"onSelect($event, index)\"\n            (keydown)=\"onButtonTabKeydown($event, index)\">\n            {{ header.label }}\n          </button>\n        }\n      </li>\n    }\n  </ul>\n  @if (!routes) {\n    <ng-content></ng-content>\n  } @else {\n    <div\n      [attr.id]=\"routerTabId\"\n      role=\"tabpanel\"\n      class=\"fr-tabs__panel fr-tabs__panel--selected\"\n      tabindex=\"0\"\n      [attr.aria-labelledby]=\"getCurrentButtonTabId()\">\n      <router-outlet></router-outlet>\n    </div>\n    @for (header of headers; track $index) {\n      <div [attr.aria-labelledby]=\"getCurrentButtonTabId()\"></div>\n    }\n  }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { DsfrTabComponent } from './tab.component';\nimport { DsfrTabsComponent } from './tabs.component';\n\n@NgModule({\n  imports: [CommonModule, RouterModule, DsfrTabComponent, DsfrTabsComponent],\n  exports: [DsfrTabComponent, DsfrTabsComponent],\n})\nexport class DsfrTabsModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  OnInit,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  DSFR_CONFIG_TOKEN,\n  DsfrConfig,\n  DsfrPanelBackgroundConst,\n  DsfrPanelBorderConst,\n  LinkDownloadComponent,\n  PictogramComponent,\n} from '../../shared';\nimport { BasePanelComponent } from '../../shared/components/base-panel/base-panel.component';\nimport { DsfrBadgesGroupComponent } from '../badges-group';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrTagsGroupComponent } from '../tags-group';\n\n@Component({\n  selector: 'dsfr-tile',\n  templateUrl: './tile.component.html',\n  styleUrls: ['./tile.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    CommonModule,\n    DsfrBadgesGroupComponent,\n    DsfrTagsGroupComponent,\n    DsfrLinkComponent,\n    LinkDownloadComponent,\n    PictogramComponent,\n  ],\n})\nexport class DsfrTileComponent extends BasePanelComponent implements AfterViewInit, OnInit {\n  /**\n   * Chemin vers le répertoire racine contenant les pictogrammes illustratifs DSFR.\n   */\n  @Input() artworkDirPath?: string;\n\n  /**\n   * Chemin relatif à artworkDirPath dénotant le fichier d'illustration à utiliser.\n   */\n  @Input() artworkFilePath?: string;\n\n  /** @deprecated (since 1.5.0) */\n  @Input() imageAlt?: string;\n\n  /** @deprecated (since 1.5.0) utiliser `artworkFilePath`. Path pour src d'image d'illustration. */\n  @Input() imagePath?: string;\n\n  /**\n   * Ce boolean permet de ne pas afficher d'icône (flèche).\n   */\n  @Input() noIcon = false;\n\n  /**\n   * Rotation d'une tuile sur breakpoint 'MD' ou 'LG' (au redimensionnement du contenu).\n   * 'fr-tile--horizontal@md|lg' si la tuile est verticale\n   * 'fr-tile--vertical@md|lg' si la tuile est horizontale\n   */\n  @Input() rotateOn: 'MD' | 'LG' | undefined = undefined;\n\n  /** @deprecated utiliser `customBackground`. Active le fond de la tuile en gris clair. */\n  @Input() useGreyBackground: boolean = false;\n\n  /** Remplace le lien du bouton de download par un markup de bouton */\n  @Input() isDownloadButton = false;\n\n  /**\n   * Permet la gestion programmatique d'une navigation initiée au click sur le tile si l'input 'route' est valorisé.\n   * La valeur de la propriété 'route' sera transmise.\n   */\n  @Output() tileSelect = new EventEmitter<string>();\n\n  protected readonly DsfrPanelBackground = DsfrPanelBackgroundConst;\n  protected readonly DsfrPanelBorder = DsfrPanelBorderConst;\n\n  private readonly config = inject<DsfrConfig>(DSFR_CONFIG_TOKEN);\n  private readonly _elementRef = inject(ElementRef);\n\n  constructor() {\n    super();\n  }\n\n  protected get tileClasses(): Record<string, boolean> {\n    return {\n      'fr-enlarge-link': this.enlargeLink && this.hasLink(),\n      'fr-enlarge-button': this.enlargeButton,\n\n      'fr-tile--download': this.download,\n\n      'fr-tile--grey': this.customBackground === this.DsfrPanelBackground.GREY || this.useGreyBackground,\n      'fr-tile--no-background': this.customBackground === this.DsfrPanelBackground.TRANSPARENT,\n\n      'fr-tile--horizontal': this.horizontal,\n\n      'fr-tile--no-border': this.customBorder === this.DsfrPanelBorder.NO_BORDER,\n      'fr-tile--shadow': this.customBorder === this.DsfrPanelBorder.SHADOW,\n\n      'fr-tile--no-icon': this.noIcon,\n\n      'fr-tile--vertical@md': this.horizontal && this.rotateOn === 'MD',\n      'fr-tile--vertical@lg': this.horizontal && this.rotateOn === 'LG',\n    };\n  }\n\n  /** @deprecated (since 1.9.0) utiliser `detailBottom` à la place */\n  @Input() set detail(value: string) {\n    this.detailBottom = value;\n  }\n\n  ngOnInit(): void {\n    if (this.artworkDirPath === undefined && this.config.artworkDirPath) {\n      this.artworkDirPath = this.config.artworkDirPath;\n    }\n  }\n\n  ngAfterViewInit(): void {\n    // Supprimer les <p> detail et description si ils sont vides\n    // fixme : problème pour détecter que le slot est vide dans le template et ne pas afficher le <p>\n    this.removeEmptyElement(this._elementRef.nativeElement?.querySelector('.fr-tile__detail'));\n    this.removeEmptyElement(this._elementRef.nativeElement?.querySelector('.fr-tile__desc'));\n  }\n\n  /**\n   * Dans le cas d'une route, un événement `(routeSelect)` est émis avec la valeur de la route et\n   * l'événement initial n'est pas propagé.\n   *\n   * @internal\n   */\n  onLinkSelect() {\n    // on propage l'output, pas besoin de gérer ici un éventuel preventDefault si usage de route, c'est géré en amont\n    if (this.route) {\n      this.tileSelect.emit(this.route);\n    }\n  }\n\n  private removeEmptyElement(el: HTMLElement) {\n    if (el && !el.textContent && el.children?.length === 0) {\n      el.remove();\n    }\n  }\n}\n","<div class=\"fr-tile\" [ngClass]=\"tileClasses\">\n  <!-- Body -->\n  <div class=\"fr-tile__body\">\n    <div class=\"fr-tile__content\">\n      <ng-container *ngTemplateOutlet=\"tileHeadingTemplate\"></ng-container>\n      @if (descriptionMarkup === 'p') {\n        <p class=\"fr-tile__desc\">\n          @if (description) {\n            {{ description }}\n          } @else {\n            <ng-content select=\"[desc]\"></ng-content>\n          }\n        </p>\n      } @else {\n        <div class=\"fr-tile__desc\">\n          @if (description) {\n            {{ description }}\n          } @else {\n            <ng-content select=\"[desc]\"></ng-content>\n          }\n        </div>\n      }\n\n      <p class=\"fr-tile__detail\">\n        @if (detailBottom) {\n          {{ detailBottom }}\n        } @else {\n          <ng-content select=\"[detail]\"></ng-content>\n        }\n      </p>\n\n      @if ((badges && badges.length) || (tags && tags.length)) {\n        <div class=\"fr-tile__start\">\n          @if (badges) {\n            <dsfr-badges-group [badges]=\"badges\"></dsfr-badges-group>\n          }\n          @if (tags && !badges.length) {\n            <dsfr-tags-group [tags]=\"tags\"></dsfr-tags-group>\n          }\n        </div>\n      }\n    </div>\n  </div>\n\n  <!--TODO : Deprecated image à retirer en 2.0 -->\n  @if (imagePath && !artworkFilePath && !download) {\n    <div class=\"fr-tile__img\">\n      <img [src]=\"imagePath\" class=\"fr-responsive-img\" [attr.alt]=\"imageAlt\" />\n      <!-- L'alternative de l'image (attribut alt) doit à priori rester vide car l'image est illustrative et ne doit pas être restituée aux technologies d’assistance. Vous pouvez toutefois remplir l'alternative si vous estimer qu'elle apporte une information essentielle à la compréhension du contenu non présente dans le texte -->\n    </div>\n  }\n\n  <!-- Header --------------------------------------------------------------------------------------------------------->\n  @if (artworkFilePath || download) {\n    <div class=\"fr-tile__header\">\n      <div class=\"fr-tile__pictogram\">\n        <edu-pictogram\n          [artworkDirPath]=\"artworkDirPath ?? ''\"\n          [artworkFilePath]=\"artworkFilePath ?? ''\"\n          [download]=\"download\"></edu-pictogram>\n      </div>\n    </div>\n  }\n</div>\n\n<!-- Templates ----------------------------------------------------------------------------------------------------- -->\n\n<ng-template #tileHeadingTemplate>\n  @switch (headingLevel) {\n    @case ('H2') {\n      <h2 class=\"fr-tile__title\">\n        <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n      </h2>\n    }\n    @default {\n      <h3 class=\"fr-tile__title\">\n        <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n      </h3>\n    }\n    @case ('H4') {\n      <h4 class=\"fr-tile__title\">\n        <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n      </h4>\n    }\n    @case ('H5') {\n      <h5 class=\"fr-tile__title\">\n        <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n      </h5>\n    }\n    @case ('H6') {\n      <h6 class=\"fr-tile__title\">\n        <ng-container *ngTemplateOutlet=\"headingTemplate\"></ng-container>\n      </h6>\n    }\n  }\n</ng-template>\n\n<ng-template #headingTemplate>\n  <!-- Definition des templates directement ici pour une projection du slot correcte (pas de else)-->\n\n  <!-- Titre simple -------------------------------------------------------->\n  @if (!hasLink()) {\n    @if (heading) {\n      {{ heading }}\n    } @else {\n      <ng-container *ngTemplateOutlet=\"headingTemplateSlot\"></ng-container>\n    }\n  }\n\n  <!-- Lien  --------------------------------------------------------------->\n  @if (hasLink()) {\n    <!-- Lien sans téléchargement -->\n    @if (!download) {\n      <dsfr-link\n        [customClass]=\"'edu-link'\"\n        [ariaLabel]=\"ariaLabel ?? ''\"\n        [disabled]=\"disabled\"\n        [label]=\"heading ?? ''\"\n        [link]=\"link\"\n        [linkTarget]=\"linkTarget\"\n        [route]=\"route\"\n        [routePath]=\"routePath\"\n        [routerLinkActive]=\"routerLinkActive ?? ''\"\n        [routerLinkExtras]=\"routerLinkExtras\"\n        [mode]=\"enlargeButton ? 'button' : 'link'\"\n        (linkSelect)=\"onLinkSelect()\">\n        @if (!heading) {\n          <ng-container *ngTemplateOutlet=\"headingTemplateSlot\"></ng-container>\n        }\n      </dsfr-link>\n    } @else {\n      <!-- Lien de téléchargement -->\n      <edu-link-download\n        [item]=\"itemLink\"\n        [downloadDirect]=\"downloadDirect\"\n        [downloadAssessFile]=\"downloadAssessFile\"\n        [linkTarget]=\"linkTarget\"\n        [langCode]=\"downloadLangCode ?? ''\"\n        [isButton]=\"isDownloadButton\"\n        (linkSelect)=\"onLinkSelect()\"></edu-link-download>\n    }\n  }\n</ng-template>\n\n<!-- Template séparé pour avoir une seule définition du select heading (DO NOT DELETE) -->\n<ng-template #headingTemplateSlot>\n  <ng-content select=\"[heading]\"></ng-content>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { LinkDownloadComponent, PictogramComponent } from '../../shared';\nimport { DsfrBadgesGroupComponent } from '../badges-group';\nimport { DsfrLinkComponent } from '../link';\nimport { DsfrTagsGroupComponent } from '../tags-group';\nimport { DsfrTileComponent } from './tile.component';\n\n@NgModule({\n  exports: [DsfrTileComponent],\n  imports: [\n    CommonModule,\n    DsfrBadgesGroupComponent,\n    DsfrTagsGroupComponent,\n    DsfrLinkComponent,\n    LinkDownloadComponent,\n    PictogramComponent,\n    DsfrTileComponent,\n  ],\n})\nexport class DsfrTileModule {}\n","import { Component, Directive, ElementRef, inject, Input, ViewContainerRef } from '@angular/core';\nimport { ComponentRef } from 'react';\nimport { newUniqueId } from '../../shared';\n\n@Component({\n  selector: 'edu-tooltip',\n  template: `<span class=\"fr-tooltip fr-placement\" [id]=\"tooltipId\" role=\"tooltip\" [innerHTML]=\"message\"></span>`,\n  imports: [],\n})\nclass TooltipComponent {\n  message: string | undefined;\n  tooltipId = newUniqueId();\n}\n\n@Directive({\n  selector: '[tooltip]:not(dsfr-tooltip-button)',\n  standalone: true,\n})\nexport class DsfrTooltipDirective {\n  private tooltipComponent: TooltipComponent;\n  private readonly elementRef = inject(ElementRef<HTMLElement>);\n  private readonly viewContainer = inject(ViewContainerRef);\n\n  constructor() {\n    const tooltipRef = this.viewContainer.createComponent<TooltipComponent>(TooltipComponent);\n\n    // @ts-ignore\n    this.tooltipComponent = (<ComponentRef<TooltipComponent>>tooltipRef).instance;\n\n    // Tooltip id\n    const nativeElt = this.elementRef.nativeElement;\n    nativeElt.setAttribute('aria-describedby', this.tooltipComponent.tooltipId);\n\n    // Message textuel\n    const message = nativeElt.getAttribute('tooltip');\n    if (message) this.tooltip = message;\n  }\n\n  @Input() set tooltip(value: string) {\n    this.tooltipComponent.message = value;\n  }\n}\n","import { Component, Input, ViewEncapsulation, inject } from '@angular/core';\nimport { DsfrI18nService, newUniqueId } from '../../shared';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\n\n@Component({\n  selector: 'dsfr-tooltip-button',\n  templateUrl: './tooltip-button.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [DsfrI18nPipe],\n})\nexport class DsfrTooltipButtonComponent {\n  /**\n   * La valeur du tooltip.\n   */\n  @Input({ required: true }) tooltip!: string;\n\n  /** @internal */\n  tooltipId = newUniqueId();\n\n  protected readonly i18n = inject(DsfrI18nService);\n}\n","<button type=\"button\" class=\"fr-btn--tooltip fr-btn\" [attr.aria-describedby]=\"tooltipId\">\n  {{ 'tooltip.button.label' | dsfrI18n }}\n</button>\n<span class=\"fr-tooltip fr-placement\" [id]=\"tooltipId\" role=\"tooltip\" [innerHTML]=\"tooltip\"></span>\n","/**\n * Définit les types des inputs supportés par le DSFR.\n */\nexport enum DsfrInputTypeConst {\n  DATE = 'date',\n  DATE_TIME_LOCAL = 'datetime-local',\n  EMAIL = 'email',\n  NUMBER = 'number',\n  PASSWORD = 'password',\n  SEARCH = 'search',\n  TEL = 'tel',\n  TEXT = 'text',\n  TEXTAREA = 'textarea',\n  TIME = 'time',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrInputTypeConst}.\n */\nexport type DsfrInputType = `${DsfrInputTypeConst}`;\n\n/**\n * L'attribut universel 'inputmode' est un attribut à valeur contrainte qui fournit une indication au navigateur quant\n * au type de donnée qui peut être saisi par l'utilisateur lors de l'édition de l'élément ou de son contenu.\n * Lorsque cet attribut n'est pas explicitement défini, sa valeur par défaut est \"text\", ce qui indique que c'est du\n * texte qui sera saisi et qu'un clavier standard devrait être utilisé.\n * Cf. https://developer.mozilla.org/fr/docs/Web/HTML/Global_attributes/inputmode\n */\nexport enum DsfrInputModeConst {\n  /** Aucun clavier virtuel ne doit être affiché. Cette valeur s'avère utile lorsque l'application ou le site web implémente son propre outil de saisie. */\n  NONE = 'none',\n  /** C'est du texte qui sera saisi et un clavier dans la locale de l'utilisateur pourra être affiché. */\n  TEXT = 'text',\n  /**\n   * C'est un nombre décimal qui sera saisi. Le clavier affiché peut contenir des chiffres et le séparateur décimal\n   * de la locale de l'utilisateur. Attention, selon les appareils, le signe moins (-) peut ne pas être présent.\n   */\n  DECIMAL = 'decimal',\n\n  /**\n   * C'est un nombre entier qui sera saisi. Le clavier affiché peut contenir les chiffres de 0 à 9. Attention, selon\n   * les appareils, le signe moins (-) peut ne pas être présent.\n   */\n  NUMERIC = 'numeric',\n\n  /**\n   * C'est un numéro de téléphone qui sera saisi. Le clavier affiché pourra être celui d'un téléphone avec les chiffres\n   * allant de 0 à 9, l'astérisque et le dièse. Pour les champs de formulaire où il faut saisir un numéro de téléphone,\n   * on utilisera plutôt <input type=\"tel\">.\n   */\n  TEL = 'tel',\n\n  /**\n   * L'élément éditable sert à la recherche. Le clavier affiché sera optimisé pour une recherche (par exemple, la\n   * touche Entrée pourra être indiquée avec le mot-clé « Rechercher »).\n   */\n  SEARCH = 'search',\n\n  /**\n   * C'est une adresse électronique qui sera saisie. Le clavier affiché pourra être optimisé pour la saisie d'adresses\n   * email (généralement, on aura le caractère @ et d'autres éléments). Pour les champs de formulaire où il faut saisir\n   * une adresse électronique, on utilisera plutôt <input type=\"email\">.\n   */\n  EMAIL = 'email',\n  /**\n   * C'est une URL qui sera saisie. Le clavier affiché pourra être optimisé pour la saisie d'URL. Ainsi, la touche pour\n   * la barre oblique pourra être plus accessible, le clavier pourra proposer un accès à l'historique des URL utilisées,\n   * etc. Pour les champs de formulaire où il faut saisir une URL, on utilisera plutôt <input type=\"url\">.\n   */\n  URL = 'url',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrInputModeConst}.\n */\nexport type DsfrInputMode = `${DsfrInputModeConst}`;\n","import { booleanAttribute, Component, computed, EventEmitter, HostListener, input, Input, Output } from '@angular/core';\nimport { DefaultControlComponent, DsfrSeverity, DsfrSeverityConst } from '../../shared';\nimport { DsfrInputMode, DsfrInputType, DsfrInputTypeConst } from './form-input.model';\n\nconst INPUT_TYPE_TO_MODE = {\n  'date': '',\n  'datetime-local': '',\n  'email': 'email',\n  'number': 'numeric',\n  'password': '',\n  'search': 'search',\n  'tel': 'tel',\n  'text': '',\n  'textarea': '',\n  'time': '',\n};\n\n/**\n * BaseInputComponent n'embarque que les propriétés d'un input Html\n */\n@Component({\n  template: '',\n})\nexport abstract class BaseInputComponent extends DefaultControlComponent<string> {\n  /**\n   * Correspond à l'attribut `autocomplete`,\n   * cf. [definition](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/autocomplete) <br />\n   * Ex : email, name, etc.\n   */\n  @Input() autocomplete?: string;\n\n  /**\n   * 👓 Correspond à l'attribut `aria-autocomplete`,\n   * cf. [definition](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-autocomplete).\n   *  Ex : `ariaAutocomplete=\"list\"`.\n   * Valeur par défaut `undefined` (n'apparait pas comme attribut dans l'html).\n   *\n   * @since 1.4\n   */\n  @Input() ariaAutocomplete?: string;\n\n  /**\n   * 👓 Correspond à l'attribut `aria-expanded`,\n   * cf. [definition](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-expanded).\n   * Valeur par défaut `undefined` (n'apparait pas comme attribut dans l'html).\n   *\n   * @since 1.4\n   */\n  @Input() ariaExpanded?: boolean;\n\n  /**\n   * 👓 Correspond à l'attribut `aria-label`,\n   * cf. [definition](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-label).\n   * Valeur par défaut `undefined` (n'apparait pas comme attribut dans l'html).\n   */\n  @Input() ariaLabel?: string;\n\n  /**\n   * 👓 Correspond à l'attribut `aria-invalid`,\n   * cf. [definition](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-invalid).\n   * Valeur par défaut `undefined` (n'apparait pas comme attribut dans l'html).\n   */\n  @Input() ariaInvalid?: string;\n\n  /**\n   * 👓 Correspond à l'attribut `role`,\n   * cf. [definition](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/role).\n   * Valeur par défaut `undefined` (n'apparait pas comme attribut dans l'html).\n   */\n  @Input() inputRole?: string;\n\n  /**\n   * Une chaîne de caractères, on ou off, qui indique si la correction automatique est activée.\n   * [Safari uniquement](https://developer.mozilla.org/fr/docs/Web/HTML/Element/input#autocorrect).\n   *\n   * @since 1.6\n   */\n  @Input() autoCorrect = true;\n\n  /**\n   * Indique si le champ est obligatoire ou non, faux par défaut.\n   */\n  @Input() required = false;\n\n  /**\n   * Placeholder de l'input.\n   */\n  @Input() placeholder?: string;\n\n  /**\n   * Attribut min de l'input.\n   */\n  @Input() min?: string;\n\n  /**\n   * Attribut max de l'input.\n   */\n  @Input() max?: string;\n\n  /**\n   * Attribut minLength de l'input.\n   */\n  @Input() minLength?: number;\n\n  /**\n   * Attribut maxLength de l'input.\n   */\n  @Input() maxLength?: number;\n\n  /**\n   * Attribut spellcheck pour surcharger la vérification de la correction orthographique\n   */\n  @Input({ transform: booleanAttribute }) spellCheck?: boolean;\n\n  /**\n   * Ajoute un icon à droite dans le champ de saisie.\n   */\n  @Input() icon?: string;\n\n  /**\n   * Pattern de l'input.\n   */\n  @Input() pattern?: string;\n\n  /**\n   * Ajout d'un style spécifique, permet par exemple de la limiter la largeur d'un input.\n   */\n  @Input() customClass?: string;\n\n  /**\n   * Change la mise en page d'un input accompagné d'un bouton.\n   */\n  @Input() inputWrapMode: 'addon' | 'action' = 'addon';\n\n  /** Attribut readonly de l'input */\n  @Input({ transform: booleanAttribute }) readonly?: boolean;\n\n  /**\n   * Émet un événement, si la propriété `pattern` est définie, à chaque changement de la valeur de l'input avec\n   * une valeur booléenne indiquant si le `pattern` est validé ou non.\n   */\n  @Output() patternValueChange = new EventEmitter<boolean>();\n\n  /**\n   * L'input mode est initialisé par défaut en fonction du type de l'input, 'decimal', 'url' ne sont pas traité pour\n   * l'instant.\n   * @internal\n   */\n  inputMode: DsfrInputMode | undefined;\n\n  /**\n   * Représente la sévérité du message.\n   * @deprecated (since 1.12.0) utiliser messageSeverity à la place\n   * @internal\n   */\n  severity = input<DsfrSeverity>();\n\n  /**\n   * Surcharge severityViewModel de DefaultControlComponent pour garder rétrocompatibilité avec\n   * la propriété dépréciée severity\n   * V2 supprimer\n   * @internal */\n  override severityViewModel = computed<DsfrSeverity | undefined>(() => {\n    const message = this.messageViewModel();\n\n    if (!message?.length) return undefined;\n\n    if (this.error()) return DsfrSeverityConst.ERROR;\n    if (this.valid()) return DsfrSeverityConst.VALID;\n    if (this.severity()) return this.severity();\n\n    return this.messageSeverity();\n  });\n\n  /**\n   * Attribut utilisés par les composants héritant de la class BaseInput afin d'afficher des messages d'erreurs relatif\n   * à une validation interne spécifique au composant.\n   */\n  protected internalError: undefined | string[] = undefined;\n\n  private _type: DsfrInputType = DsfrInputTypeConst.TEXT;\n\n  get type(): DsfrInputType {\n    return this._type;\n  }\n\n  /** @deprecated (since 1.11.0) use placeholder instead (all lowercase) */\n  get placeHolder(): string | undefined {\n    return this.placeholder;\n  }\n\n  /**\n   * Type de l'input, 'text' par défaut.\n   */\n  @Input() set type(value: DsfrInputType) {\n    this._type = value;\n    this.inputMode = <DsfrInputMode>INPUT_TYPE_TO_MODE[this._type] || undefined;\n  }\n\n  /**\n   * 👓 Correspond à l'attribut `role`,   *\n   * @deprecated (since 1.15.1) utiliser inputRole à la place\n   */\n  @Input() set role(value: string) {\n    if (value) this.inputRole = value;\n  }\n\n  /** @deprecated (since 1.11.0) use placeholder instead (all lowercase) */\n  @Input() set placeHolder(value: string) {\n    this.placeholder = value;\n  }\n\n  /**\n   * À l'écoute de la valeur afin d'émettre un événement dans le cas où on a un pattern.\n   * @internal\n   */\n  @HostListener('input')\n  onPatternValueChange() {\n    if (!this.pattern) return;\n    const isValid = new RegExp('^' + this.pattern + '$').test(this.value!);\n    this.patternValueChange.emit(isValid);\n  }\n\n  /** @internal */\n  isNumber() {\n    return this.type === DsfrInputTypeConst.NUMBER;\n  }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { DsfrButtonType, DsfrButtonVariant, isStringEmptyOrNull } from '../../shared';\nimport { BaseInputComponent } from './base-input.component';\n\n/**\n * BaseInputComboComponent ajoute la possibilité d'avoir un bouton sur le côté de l'input\n */\n@Component({\n  template: '',\n})\nexport abstract class BaseInputComboComponent extends BaseInputComponent {\n  /** [accessibilité] Spécifie le libellé qui sera retranscrit par les narrateurs d'écran. */\n  @Input() buttonAriaLabel?: string;\n\n  /**\n   * Permet de désactiver le bouton d'action, 'false' par défaut.\n   */\n  @Input() buttonDisabled = false;\n\n  /**\n   * Crée un combo champ + bouton si buttonIcon est renseigné\n   */\n  @Input() buttonIcon?: string; // undefined car peut être créé à partir de DsfrButton (composant name par exemple)\n\n  /**\n   * Crée un combo champ + bouton si buttonLabel est renseigné\n   */\n  @Input() buttonLabel?: string;\n\n  /**\n   * Tooltip message sur le bouton s'il y a lieu.\n   */\n  @Input() buttonTooltipMessage?: string;\n\n  /**\n   * Type du button,'button' par défaut.\n   */\n  @Input() buttonType: DsfrButtonType = 'button';\n\n  /** Style du bouton, 'primary' par défaut. */\n  @Input() buttonVariant: DsfrButtonVariant = 'primary';\n\n  /**\n   * [accessibilité] Permet de masquer visuellement le libellé du bouton en le laissant accessible aux dispositifs d'assistance.\n   *\n   * A utiliser pour le bouton si  icône seule.\n   */\n  @Input() buttonLabelSrOnly: boolean = false;\n\n  /**\n   * Emission de l'événement si le type du bouton est != de `submit`.\n   */\n  @Output() buttonSelect = new EventEmitter<Event>();\n\n  /** @internal */\n  hasButton(): boolean {\n    return !isStringEmptyOrNull(this.buttonLabel) || this.buttonIcon !== undefined;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, Input, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DsfrButtonComponent } from '../../components';\nimport { InputGroupComponent, isStringEmptyOrNull } from '../../shared';\nimport { EduHintComponent } from '../../shared/components/input-group/hint.component';\nimport { BaseInputComboComponent } from './base-input-combo.component';\nimport { DsfrInputTypeConst } from './form-input.model';\n\n@Component({\n  selector: 'dsfr-form-input',\n  templateUrl: './form-input.component.html',\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DsfrFormInputComponent),\n      multi: true,\n    },\n  ],\n  imports: [CommonModule, FormsModule, DsfrButtonComponent, InputGroupComponent, EduHintComponent],\n  // Fix CSS DSFR : supprimer margin top en cas de label caché visuellement (labelSrOnly)\n  styles: ['.fr-label.fr-sr-only + .fr-input,.fr-label.fr-sr-only + .fr-input-wrap { margin-top: 0}'],\n})\nexport class DsfrFormInputComponent extends BaseInputComboComponent {\n  /**\n   * Type 'textarea' : nombre de lignes.\n   */\n  @Input() rows?: number;\n\n  /**\n   * Cache le label visuellement en le laissant disponible aux lecteurs d'écran.\n   */\n  @Input() labelSrOnly = false;\n\n  /**\n   * @deprecated (since 1.2) utiliser `customClass` à la place.\n   * Largeur de l'input, `'100%'` par défaut, `'10rem'` par défaut pour un type date.\n   */\n  @Input() width?: string;\n\n  /** @deprecated since 1.2 use `type` instead. */\n  get textarea(): boolean {\n    return this.isTextArea();\n  }\n\n  /** @deprecated (@since 1.2) utiliser `type` à la place. */\n  @Input() set textarea(value: boolean) {\n    this.type = value ? DsfrInputTypeConst.TEXTAREA : DsfrInputTypeConst.TEXT;\n  }\n\n  protected isTextArea() {\n    return this.type === DsfrInputTypeConst.TEXTAREA;\n  }\n\n  protected hasInputWrap(): boolean {\n    return this.hasButton() || !isStringEmptyOrNull(this.icon);\n  }\n\n  protected getWrapClasses(): Record<string, boolean> {\n    const hasButton = this.hasButton();\n\n    const classes: Record<string, boolean> = {\n      'fr-input-wrap': true,\n      'fr-input-wrap--addon': hasButton && this.inputWrapMode === 'addon',\n      'fr-input-wrap--action': hasButton && this.inputWrapMode === 'action',\n    };\n\n    if (this.icon) {\n      classes[this.icon] = true;\n    }\n\n    return classes;\n  }\n\n  protected onButtonClick(event: Event) {\n    if (this.buttonType != 'submit') this.buttonSelect.emit(event);\n  }\n}\n","<edu-input-group\n  [messagesGroupId]=\"messagesGroupId\"\n  [disabled]=\"disabled\"\n  [message]=\"messageViewModel()\"\n  [messageSeverity]=\"severityViewModel()\"\n  [internalError]=\"internalError\">\n  <label class=\"fr-label\" [class.fr-sr-only]=\"labelSrOnly\" [for]=\"inputId\">\n    @if (label) {\n      {{ label }}\n    } @else {\n      <ng-content select=\"[label]\"></ng-content>\n    }\n    @if (hint) {\n      <edu-hint-form [hint]=\"hint\"></edu-hint-form>\n    }\n  </label>\n  @if (!isTextArea()) {\n    @if (!hasInputWrap()) {\n      <ng-container [ngTemplateOutlet]=\"inputTemplate\"></ng-container>\n    } @else {\n      <div [class]=\"getWrapClasses()\">\n        <ng-container *ngTemplateOutlet=\"inputTemplate\"></ng-container>\n        @if (hasButton()) {\n          <dsfr-button\n            [ariaLabel]=\"buttonAriaLabel\"\n            [disabled]=\"buttonDisabled\"\n            [icon]=\"buttonIcon\"\n            [label]=\"buttonLabel\"\n            [tooltipMessage]=\"buttonTooltipMessage\"\n            [type]=\"buttonType\"\n            [variant]=\"buttonVariant\"\n            [labelSrOnly]=\"buttonLabelSrOnly\"\n            (click)=\"onButtonClick($event)\"></dsfr-button>\n        }\n      </div>\n    }\n  } @else {\n    <textarea\n      class=\"fr-input\"\n      [ngClass]=\"customClass || null\"\n      [id]=\"inputId\"\n      [attr.name]=\"name || null\"\n      [disabled]=\"disabled\"\n      [required]=\"required\"\n      [attr.placeholder]=\"placeholder || null\"\n      [attr.maxlength]=\"maxLength || null\"\n      [attr.minlength]=\"minLength || null\"\n      [attr.autocomplete]=\"autocomplete || null\"\n      [attr.aria-describedby]=\"combinedAriaDescribedBy()\"\n      [attr.aria-disabled]=\"disabled || null\"\n      [attr.aria-label]=\"ariaLabel || null\"\n      [attr.aria-invalid]=\"ariaInvalid || null\"\n      [attr.aria-required]=\"required || null\"\n      [attr.spellcheck]=\"spellCheck || null\"\n      [readOnly]=\"readonly\"\n      [(ngModel)]=\"value\"\n      [ngStyle]=\"width ? { width: width } : {}\"\n      (blur)=\"onBlur()\"\n      [attr.rows]=\"rows || null\"></textarea>\n  }\n</edu-input-group>\n\n<!-- Templates -------------------------------------------------------------------------------------------------------->\n\n<!-- Template input -->\n<ng-template #inputTemplate>\n  <input\n    class=\"fr-input\"\n    [ngClass]=\"customClass || null\"\n    [attr.autocomplete]=\"autocomplete || null\"\n    [attr.aria-autocomplete]=\"ariaAutocomplete || null\"\n    [attr.aria-describedby]=\"combinedAriaDescribedBy()\"\n    [attr.aria-disabled]=\"disabled || null\"\n    [attr.aria-expanded]=\"ariaExpanded !== undefined ? ariaExpanded : null\"\n    [attr.aria-label]=\"ariaLabel || null\"\n    [attr.aria-invalid]=\"ariaInvalid || null\"\n    [readOnly]=\"readonly\"\n    [attr.aria-required]=\"required || null\"\n    [attr.role]=\"inputRole || null\"\n    [attr.inputmode]=\"inputMode || null\"\n    [attr.autocorrect]=\"autoCorrect ? null : 'off'\"\n    [(ngModel)]=\"value\"\n    [id]=\"inputId\"\n    [attr.name]=\"name || null\"\n    [attr.type]=\"type || null\"\n    [disabled]=\"disabled\"\n    [required]=\"required\"\n    [attr.pattern]=\"pattern || null\"\n    [attr.placeholder]=\"placeholder || null\"\n    [attr.min]=\"min || null\"\n    [attr.max]=\"max || null\"\n    [attr.maxlength]=\"maxLength || null\"\n    (blur)=\"onBlur()\"\n    [attr.minLength]=\"minLength || null\"\n    [attr.spellcheck]=\"spellCheck || null\"\n    [ngStyle]=\"width ? { width: width } : {}\" />\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrButtonComponent } from '../../components';\nimport { InputGroupComponent } from '../../shared';\nimport { DsfrFormInputComponent } from './form-input.component';\n\n@NgModule({\n  exports: [DsfrFormInputComponent],\n  imports: [CommonModule, FormsModule, DsfrButtonComponent, InputGroupComponent, DsfrFormInputComponent],\n})\nexport class DsfrFormInputModule {}\n","const PATTERN_EMAIL = '^[\\\\w\\\\d._%+-]+@[\\\\w\\\\d.-]+\\\\.[\\\\w]{2,4}$'; // https://www.abstractapi.com/guides/angular-email-validation + majuscules\n\nexport function isEmailValid(value: string | undefined, pattern?: string): boolean {\n  if (!value) return false;\n\n  const regexp = new RegExp(pattern ? pattern : PATTERN_EMAIL);\n  return regexp.test(value);\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  forwardRef,\n  HostListener,\n  inject,\n  OnInit,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  AbstractControl,\n  FormsModule,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator,\n} from '@angular/forms';\nimport { DsfrButtonComponent } from '../../components';\nimport { DsfrI18nService, InputGroupComponent } from '../../shared';\nimport { EduHintComponent } from '../../shared/components/input-group/hint.component';\nimport { DsfrFormInputComponent, DsfrInputTypeConst } from '../form-input';\nimport { isEmailValid } from './email-utils';\n\n/**\n * Saisie d'une adresse email, si la valeur saisie est validée, elle est transformée en minuscules.\n */\n@Component({\n  selector: 'dsfr-form-email',\n  templateUrl: '../form-input/form-input.component.html',\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DsfrFormEmailComponent),\n      multi: true,\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => DsfrFormEmailComponent),\n      multi: true,\n    },\n  ],\n  imports: [CommonModule, FormsModule, InputGroupComponent, DsfrButtonComponent, EduHintComponent],\n})\nexport class DsfrFormEmailComponent extends DsfrFormInputComponent implements OnInit, AfterViewInit, Validator {\n  protected _invalidMessage: string = '';\n\n  private readonly elementRef = inject(ElementRef);\n  private readonly i18n = inject(DsfrI18nService);\n  private hasInternalError = false;\n\n  /**\n   * La mise à jour du modèle interne n'est effectuée que lorsque l'utilisateur quitte le champ, de même pour la mise\n   * en erreur le cas échéant.\n   *\n   * @internal\n   */\n  @HostListener('change')\n  onFocusOut() {\n    if (!this.isValid()) {\n      this.showInternalErrorMessage();\n    } else {\n      this.clearInternalErrorMessage();\n    }\n  }\n\n  /**\n   * Vrai si l'email est valide.\n   *\n   * @internal\n   */\n  isValid(): boolean {\n    if (this.value === '' || this.value === null || this.value === undefined) {\n      return true;\n    }\n\n    return isEmailValid(this.value, this.pattern);\n  }\n\n  /** @internal*/\n  override ngOnInit() {\n    super.ngOnInit();\n    this._invalidMessage = this.i18n.t('email.error');\n    this.type = DsfrInputTypeConst.EMAIL;\n    this.spellCheck = false;\n    this.hint ??= this.i18n.t('email.hint');\n    this.autocomplete = 'email'; // @since 1.6\n    this.autoCorrect = false; // @since 1.6\n  }\n\n  /**\n   * Fix: appliquer le label par défaut uniquement si le slot label n'est pas renseigné\n   * slot label non renseigné => le label 'fr-label' ne possede aucun enfant ou seulement la description additionnelle\n   */\n  ngAfterViewInit() {\n    const firstElementChild = this.elementRef.nativeElement?.querySelector('.fr-label').firstElementChild;\n\n    if (!firstElementChild || [...firstElementChild.classList].includes('fr-hint-text')) {\n      this.label ??= this.i18n.t('email.label');\n    }\n  }\n\n  validate(control: AbstractControl): ValidationErrors | null {\n    if (!control.touched) {\n      return null;\n    } else if (this.isValid()) {\n      return this.clearInternalErrorMessage();\n    } else {\n      return this.showInternalErrorMessage();\n    }\n  }\n\n  /**\n   * Affiche le message d'erreur interne.\n   */\n  private showInternalErrorMessage(): ValidationErrors {\n    if (this.hasInternalError) {\n      return { isEmailInvalid: true };\n    }\n\n    this.internalError = [this._invalidMessage];\n    this.hasInternalError = true;\n    return { isEmailInvalid: true };\n  }\n\n  /**\n   * Reset du message d'erreur interne.\n   */\n  private clearInternalErrorMessage(): null {\n    this.internalError = undefined;\n    this.hasInternalError = false;\n    return null;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrButtonComponent } from '../../components';\nimport { InputGroupComponent } from '../../shared';\nimport { DsfrFormEmailComponent } from './form-email.component';\n\n@NgModule({\n  exports: [DsfrFormEmailComponent],\n  imports: [CommonModule, FormsModule, InputGroupComponent, DsfrButtonComponent, DsfrFormEmailComponent],\n})\nexport class DsfrFormEmailModule {}\n","/**\n * Définit les réseaux sociaux supportés par le composant `Follow`.\n */\nexport enum DsfrFollowNameConst {\n  DAILYMOTION = 'dailymotion',\n  FACEBOOK = 'facebook',\n  GITHUB = 'github',\n  INSTAGRAM = 'instagram',\n  LINKEDIN = 'linkedin',\n  MASTODON = 'mastodon',\n  SNAPCHAT = 'snapchat',\n  TELEGRAM = 'telegram',\n  TIKTOK = 'tiktok',\n  TWITCH = 'twitch',\n  TWITTER = 'twitter',\n  X = 'twitter-x',\n  VIMEO = 'vimeo',\n  YOUTUBE = 'youtube',\n  BLUESKY = 'bluesky',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrFollowNameConst}.\n */\nexport type DsfrFollowName = `${DsfrFollowNameConst}`;\n\n/**\n * Définit les modalités de communication supportés par le composant `Follow`.\n */\nexport enum DsfrFollowTypeConst {\n  NETWORKS = 'networks',\n  NEWSLETTER = 'newsletter',\n  NEWSLETTER_MAIL = 'newsletter-mail',\n  NEWSLETTER_NETWORKS = 'newsletter-networks',\n  NEWSLETTER_NETWORKS_MAIL = 'newsletter-networks-mail',\n}\n\n/**\n * Type union correspondant aux valeurs de l'enum {@link DsfrFollowTypeConst}.\n */\nexport type DsfrFollowType = `${DsfrFollowTypeConst}`;\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrI18nPipe, DsfrLinkTarget } from '../../../shared';\nimport { DsfrFollowName, DsfrFollowNameConst } from '../follow.model';\n\n@Component({\n  selector: 'dsfr-follow-link',\n  templateUrl: './follow-link.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, FormsModule, DsfrI18nPipe],\n})\nexport class DsfrFollowLinkComponent {\n  /** Lien obligatoire. */\n  @Input({ required: true }) link!: string;\n\n  /** Target optionnelle, target html par défaut si non renseigné. */\n  @Input() target?: DsfrLinkTarget;\n\n  private _name!: DsfrFollowName;\n\n  get name(): DsfrFollowName {\n    return this._name;\n  }\n\n  /** La propriété 'name' est obligatoire et doit être sélectionnée dans une liste énumérée. */\n  @Input() set name(value: DsfrFollowName) {\n    if (value === DsfrFollowNameConst.TWITTER) {\n      this._name = DsfrFollowNameConst.X;\n    } else {\n      this._name = value;\n    }\n  }\n}\n","<a\n  [class]=\"'fr-btn--' + name.toLowerCase() + ' fr-btn'\"\n  [href]=\"link\"\n  [attr.target]=\"target || null\"\n  [title]=\"(name + ' - ' + ('follow.newWindow' | dsfrI18n)).toLowerCase()\">\n  {{ name }}\n</a>\n","import { CommonModule } from '@angular/common';\nimport {\n  afterRenderEffect,\n  Component,\n  contentChildren,\n  ElementRef,\n  EventEmitter,\n  inject,\n  Input,\n  Output,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrFormEmailComponent } from '../../forms/form-email';\nimport { DomUtils, DsfrHeadingLevel, DsfrHeadingLevelConst, DsfrI18nPipe, DsfrI18nService } from '../../shared';\nimport { DsfrFollowLinkComponent } from './follow-link/follow-link.component';\nimport { DsfrFollowType, DsfrFollowTypeConst } from './follow.model';\n\n@Component({\n  selector: 'dsfr-follow',\n  templateUrl: './follow.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, FormsModule, DsfrFormEmailComponent, DsfrI18nPipe],\n})\nexport class DsfrFollowComponent {\n  /** @internal */\n  @ViewChild(DsfrFormEmailComponent) emailComponent?: DsfrFormEmailComponent;\n\n  /**\n   * Niveau du titre, h2 par défaut\n   */\n  @Input() headingLevel: DsfrHeadingLevel = DsfrHeadingLevelConst.H2;\n\n  /** Description (pour certains types seulement) optionnelle. */\n  @Input() description = '';\n\n  /** Email par défaut. */\n  @Input() email = '';\n\n  /** Message d'erreur concernant l'email. */\n  @Input() emailError = '';\n\n  /** Indique que l'inscription a bien été prise en compte. */\n  @Input() registered = false;\n\n  /** Type du composant, réseaux sociaux seuls par défaut  */\n  @Input() type: DsfrFollowType = DsfrFollowTypeConst.NETWORKS;\n\n  /** Abonnement si l'adresse est valide. */\n  @Output() subscribe = new EventEmitter<string>();\n\n  /* Tous les types possibles du composant. */\n  protected followType = DsfrFollowTypeConst;\n\n  protected readonly i18n = inject(DsfrI18nService);\n\n  private readonly _elementRef = inject(ElementRef);\n\n  private followLinksElements = contentChildren(DsfrFollowLinkComponent, { read: ElementRef });\n\n  /** @internal */\n  constructor() {\n    this.type = DsfrFollowTypeConst.NETWORKS;\n\n    afterRenderEffect(() => {\n      this.surroundLinksWithLi();\n    });\n  }\n\n  /** @internal */\n  onSubscribe(email: string) {\n    if (this.emailComponent?.isValid()) {\n      this.subscribe.emit(email);\n    }\n  }\n\n  /* Entoure chaque composant follow par une balise <li> si nécessaire */\n  private surroundLinksWithLi(): void {\n    DomUtils.surroundElementsWithLi(this._elementRef, this.followLinksElements());\n  }\n}\n","<div class=\"fr-follow\">\n  <div class=\"fr-container\">\n    <div class=\"fr-grid-row\">\n      @switch (type) {\n        @case (followType.NETWORKS) {\n          <div class=\"fr-col-12\">\n            <ng-container [ngTemplateOutlet]=\"networksTemplate\"></ng-container>\n          </div>\n        }\n        @case (followType.NEWSLETTER) {\n          <div class=\"fr-col-12\">\n            <ng-container [ngTemplateOutlet]=\"newsletterTemplate\"></ng-container>\n          </div>\n        }\n        @case (followType.NEWSLETTER_MAIL) {\n          <div class=\"fr-col-12\">\n            <ng-container [ngTemplateOutlet]=\"newsletterWithMailTemplate\"></ng-container>\n          </div>\n        }\n        @case (followType.NEWSLETTER_NETWORKS) {\n          <ng-container [ngTemplateOutlet]=\"newsletterAndNetworksTemplate\"></ng-container>\n        }\n        @case (followType.NEWSLETTER_NETWORKS_MAIL) {\n          <ng-container [ngTemplateOutlet]=\"networksAndNewsletterWithMailTemplate\"></ng-container>\n        }\n      }\n    </div>\n  </div>\n</div>\n\n<!-- Réseaux sociaux seuls -->\n<ng-template #networksTemplate>\n  <div class=\"fr-follow__social\">\n    <ng-container\n      [ngTemplateOutlet]=\"heading\"\n      [ngTemplateOutletContext]=\"{ heading: 'follow.networks.heading' | dsfrI18n }\"></ng-container>\n    <ul class=\"fr-btns-group\">\n      <ng-content></ng-content>\n    </ul>\n  </div>\n</ng-template>\n\n<!-- Lettre d'info seule -->\n<ng-template #newsletterTemplate>\n  <div class=\"fr-follow__newsletter\">\n    <div>\n      <ng-container\n        [ngTemplateOutlet]=\"heading\"\n        [ngTemplateOutletContext]=\"{ heading: 'follow.newsletter.heading' | dsfrI18n }\"></ng-container>\n      @if (description) {\n        <p class=\"fr-text--sm\" [innerHTML]=\"description\"></p>\n      }\n    </div>\n    <div>\n      <ul class=\"fr-btns-group fr-btns-group--inline-md\">\n        <li>\n          <button type=\"button\" class=\"fr-btn\" [title]=\"'follow.newsletter.button.title' | dsfrI18n\">\n            {{ 'follow.newsletter.button.label' | dsfrI18n }}\n          </button>\n        </li>\n      </ul>\n    </div>\n  </div>\n</ng-template>\n\n<!-- Lettre d'info seule avec formulaire -->\n<ng-template #newsletterWithMailTemplate>\n  <div class=\"fr-follow__newsletter\">\n    <div>\n      <ng-container\n        [ngTemplateOutlet]=\"heading\"\n        [ngTemplateOutletContext]=\"{ heading: 'follow.newsletter.heading' }\"></ng-container>\n      @if (description) {\n        <p class=\"fr-text--sm\" [innerHTML]=\"description\"></p>\n      }\n    </div>\n    <div>\n      @if (registered) {\n        <div class=\"fr-alert fr-alert--success\">\n          <p>{{ 'follow.newsletter.registration.success' | dsfrI18n }}</p>\n        </div>\n      } @else {\n        <dsfr-form-email\n          [value]=\"email\"\n          [buttonLabel]=\"'follow.newsletter.button.label' | dsfrI18n\"\n          [buttonTooltipMessage]=\"'follow.newsletter.button.title' | dsfrI18n\"\n          buttonType=\"button\"\n          [placeholder]=\"'follow.newsletter.input.placeholder' | dsfrI18n\"\n          [title]=\"'follow.newsletter.input.placeholder' | dsfrI18n\"\n          [error]=\"emailError\"\n          (buttonSelect)=\"onSubscribe(email)\"></dsfr-form-email>\n        <p class=\"fr-hint-text\" [innerHTML]=\"'follow.newsletter.input.hint' | dsfrI18n\"></p>\n      }\n    </div>\n  </div>\n</ng-template>\n\n<!-- Réseaux sociaux et Lettre d'info mise en avant -->\n<ng-template #newsletterAndNetworksTemplate>\n  <div class=\"fr-col-12 fr-col-md-8\">\n    <ng-container *ngTemplateOutlet=\"newsletterTemplate\"></ng-container>\n  </div>\n  <div class=\"fr-col-12 fr-col-md-4\">\n    <ng-container *ngTemplateOutlet=\"networksTemplate\"></ng-container>\n  </div>\n</ng-template>\n\n<!-- Réseaux sociaux et Lettre d'info avec formulaire -->\n<ng-template #networksAndNewsletterWithMailTemplate>\n  <div class=\"fr-col-12 fr-col-md-8\">\n    <ng-container *ngTemplateOutlet=\"newsletterWithMailTemplate\"></ng-container>\n  </div>\n  <div class=\"fr-col-12 fr-col-md-4\">\n    <ng-container *ngTemplateOutlet=\"networksTemplate\"></ng-container>\n  </div>\n</ng-template>\n\n<!-- Heading -->\n<ng-template #heading let-heading=\"heading\">\n  @switch (headingLevel) {\n    @case ('H3') {\n      <h3 class=\"fr-h5\" [innerHtml]=\"heading\"></h3>\n    }\n    @case ('H4') {\n      <h4 class=\"fr-h5\" [innerHtml]=\"heading\"></h4>\n    }\n    @case ('H5') {\n      <h5 class=\"fr-h5\" [innerHtml]=\"heading\"></h5>\n    }\n    @case ('H6') {\n      <h6 class=\"fr-h5\" [innerHtml]=\"heading\"></h6>\n    }\n    @default {\n      <h2 class=\"fr-h5\" [innerHtml]=\"heading\"></h2>\n    }\n  }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrFormEmailComponent } from '../../forms/form-email';\nimport { InputGroupComponent } from '../../shared';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrFollowLinkComponent } from './follow-link/follow-link.component';\nimport { DsfrFollowComponent } from './follow.component';\n\n@NgModule({\n  exports: [DsfrFollowComponent, DsfrFollowLinkComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    DsfrFormEmailComponent,\n    InputGroupComponent,\n    DsfrI18nPipe,\n    DsfrFollowComponent,\n    DsfrFollowLinkComponent,\n  ],\n})\nexport class DsfrFollowModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, ElementRef, forwardRef, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DefaultControlComponent, DsfrSeverityConst } from '../../shared';\nimport { EduMessageSeverityDirective } from '../../shared/directives/message-severity.directive';\n\n@Component({\n  selector: 'dsfr-form-checkbox',\n  templateUrl: './form-checkbox.component.html',\n  styleUrls: ['./form-checkbox.component.scss'],\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DsfrFormCheckboxComponent),\n      multi: true,\n    },\n  ],\n  imports: [CommonModule, FormsModule, EduMessageSeverityDirective],\n})\n/*\n * - fix 1.6 : La div messages est toujours présente même dans un groupe (cf. DSFR 1.9)\n */\nexport class DsfrFormCheckboxComponent extends DefaultControlComponent<boolean> implements OnInit {\n  /**\n   * Cache le label visuellement en le laissant disponible aux lecteurs d'écran.\n   */\n  @Input() labelSrOnly = false;\n\n  /** Ajouter l'attribut 'aria-invalid' sur le champ de formulaire.\n   */\n  @Input() ariaInvalid?: string;\n\n  /**\n   * Donne une taille de 16px au lieu de 24px.\n   */\n  @Input() small = false;\n\n  protected defaultChecked: boolean | undefined; // Initialisé à la première valeur de 'value'. Permet de positionner l'attribut 'checked'\n\n  protected groupClasses = computed(() => {\n    const severity = this.severityViewModel();\n    const message = this.messageViewModel();\n\n    return {\n      'fr-checkbox-group--error': message && severity === DsfrSeverityConst.ERROR,\n      'fr-checkbox-group--valid':\n        message && (severity === DsfrSeverityConst.VALID || severity === DsfrSeverityConst.SUCCESS),\n      'fr-checkbox-group--sm': this.small,\n      'ngx-checkbox-group--sr-only': this.labelSrOnly,\n    };\n  });\n\n  private readonly elementRef = inject(ElementRef);\n\n  constructor() {\n    super();\n    this.value = false;\n  }\n\n  /** @since 1.5 */\n  get checked(): boolean {\n    return this.value ?? false;\n  }\n\n  /** @since 1.5 */\n  get indeterminateState(): boolean {\n    const nativeElt = this.elementRef.nativeElement;\n    const checkbox = nativeElt.querySelector('input');\n    return checkbox.indeterminate;\n  }\n\n  /** @since 1.4 */\n  @Input() set indeterminate(value: boolean) {\n    const nativeElt = this.elementRef.nativeElement;\n    const checkbox = nativeElt.querySelector('input');\n    if (value === true || value === false) {\n      checkbox.indeterminate = value;\n    }\n  }\n  /** @internal */\n  override ngOnInit() {\n    super.ngOnInit();\n    this.defaultChecked = super.value ?? false;\n  }\n}\n","<div class=\"fr-checkbox-group\" [ngClass]=\"groupClasses()\">\n  <input\n    [attr.aria-describedby]=\"combinedAriaDescribedBy()\"\n    type=\"checkbox\"\n    [id]=\"inputId\"\n    [attr.name]=\"name || null\"\n    (blur)=\"onBlur()\"\n    [disabled]=\"disabled\"\n    [attr.checked]=\"defaultChecked || null\"\n    [attr.aria-invalid]=\"ariaInvalid || null\"\n    [(ngModel)]=\"value\" />\n  <label class=\"fr-label\" [for]=\"inputId\">\n    @if (labelSrOnly) {\n      <span class=\"fr-sr-only\">\n        <ng-container [ngTemplateOutlet]=\"labelTemplate\"></ng-container>\n      </span>\n    } @else {\n      <ng-container [ngTemplateOutlet]=\"labelTemplate\"></ng-container>\n    }\n\n    @if (hint) {\n      <span class=\"fr-hint-text\" [ngClass]=\"{ 'fr-sr-only': labelSrOnly }\">{{ hint }}</span>\n    }\n  </label>\n  <div class=\"fr-messages-group\" [id]=\"messagesGroupId\" aria-live=\"polite\">\n    @if (messageViewModel()) {\n      <p class=\"fr-message\" [eduMessageSeverity]=\"severityViewModel()\">\n        {{ messageViewModel() }}\n      </p>\n    }\n  </div>\n</div>\n\n<ng-template #labelTemplate>\n  @if (label) {\n    {{ label }}\n  } @else {\n    <ng-content select=\"[label]\"></ng-content>\n  }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrFormCheckboxComponent } from './form-checkbox.component';\n\n@NgModule({\n  exports: [DsfrFormCheckboxComponent],\n  imports: [CommonModule, FormsModule, DsfrFormCheckboxComponent],\n})\nexport class DsfrFormCheckboxModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, forwardRef, Input, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DefaultRadioComponent } from '../default-radio.component';\nimport { DsfrFormFieldsetComponent, DsfrFormFieldsetElementDirective } from '../fieldset';\nimport { DsfrRadio } from './form-radio.model';\n\n@Component({\n  selector: 'dsfr-form-radio',\n  templateUrl: './form-radio.component.html',\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DsfrFormRadioComponent),\n      multi: true,\n    },\n  ],\n  imports: [CommonModule, FormsModule, DsfrFormFieldsetComponent, DsfrFormFieldsetElementDirective],\n})\nexport class DsfrFormRadioComponent extends DefaultRadioComponent {\n  /**\n   * Le modèle de présentation permettant de transmettre la liste des radios.\n   */\n  @Input() options!: DsfrRadio[]; // FIXME V2 options en required (a la suppression de radios)\n\n  /**\n   * Réduit la taille du radio à 16px (au lieu de 24px).\n   */\n  @Input() small = false;\n\n  /**\n   * Cache la legend visuellement en la laissant disponible aux lecteurs d'écran.\n   */\n  @Input() legendSrOnly = false;\n\n  /**\n   * @deprecated (since 1.1.0), utiliser la propriété options à la place.\n   */\n  @Input() set radios(options: DsfrRadio[]) {\n    this.options = options;\n  }\n}\n","<dsfr-fieldset\n  [fieldsetId]=\"inputId\"\n  [legend]=\"label\"\n  [legendRegular]=\"legendRegular\"\n  [legendSrOnly]=\"legendSrOnly\"\n  [hint]=\"hint ?? ''\"\n  [inline]=\"inline\"\n  [disabled]=\"disabled\"\n  [message]=\"messageViewModel()\"\n  [messageSeverity]=\"severityViewModel()\">\n  @if (!label) {\n    <ng-container legend>\n      <ng-content select=\"[legend]\"></ng-content>\n    </ng-container>\n  }\n  @for (radio of options; track i; let i = $index) {\n    <div *fieldsetElement class=\"fr-radio-group\" [ngClass]=\"{ 'fr-radio-group--sm': small }\">\n      <!--\n      On bind à la fois la propriété et l'attribut 'name' pour contourner le bug suivant: https://github.com/angular/angular/issues/11757\n      cf. issue#360\n      -->\n      <input\n        type=\"radio\"\n        [attr.id]=\"getRadioId(i)\"\n        [name]=\"name!\"\n        [value]=\"radio.value\"\n        [(ngModel)]=\"value\"\n        [disabled]=\"disabled || !!radio.disabled\"\n        (blur)=\"onBlur()\"\n        [attr.name]=\"name\"\n        [attr.aria-invalid]=\"ariaInvalid || null\"\n        [required]=\"required\" />\n      <label\n        class=\"fr-label\"\n        [for]=\"getRadioId(i)\"\n        [innerHTML]=\"radio.label + (radio.hint ? '<span class=\\'fr-hint-text\\'>' + radio.hint + '</span>' : '')\">\n      </label>\n    </div>\n  }\n</dsfr-fieldset>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrFormFieldsetComponent } from '../fieldset';\nimport { DsfrFormRadioComponent } from './form-radio.component';\n\n@NgModule({\n  exports: [DsfrFormRadioComponent],\n  imports: [CommonModule, FormsModule, DsfrFormFieldsetComponent, DsfrFormRadioComponent],\n})\nexport class DsfrFormRadioModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, forwardRef, Input, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DefaultControlComponent, DsfrI18nPipe, DsfrSeverityConst, DsfrSize, DsfrSizeConst } from '../../shared';\nimport { EduHintComponent } from '../../shared/components/input-group/hint.component';\nimport { EduMessageSeverityDirective } from '../../shared/directives/message-severity.directive';\n\n@Component({\n  selector: 'dsfr-range, dsfr-form-range',\n  templateUrl: './form-range.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, FormsModule, EduHintComponent, DsfrI18nPipe, EduMessageSeverityDirective],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DsfrRangeComponent),\n      multi: true,\n    },\n  ],\n})\nexport class DsfrRangeComponent extends DefaultControlComponent<number | [number, number]> {\n  /** Valeur minimale possible */\n  @Input() min: number = 0;\n\n  /** Valeur max possible */\n  @Input() max: number = 100;\n\n  /** Ne pas afficher le minimum et le maximum  */\n  @Input() hideMinMax: boolean = false;\n\n  /** Incrément que doit suivre la valeur (1 par défaut)  */\n  @Input() step?: number;\n\n  /**\n   * Taille du curseur (SM et MD possibles, MD par défaut)\n   */\n  @Input() rangeSize: DsfrSize = DsfrSizeConst.MD;\n\n  /** Préfixe affiché avant les valeurs  */\n  @Input() prefix?: string;\n\n  /** Suffixe affiché après les valeurs  */\n  @Input() suffix?: string;\n\n  /** Désactiver le curseur */\n  @Input() override disabled: boolean = false;\n\n  /**\n   * Dans le cas du curseur double, si on souhaite un aria-labelledBy commun à la place des aria-label\n   *\n   * @deprecated (since 1.19.0)\n   */\n  @Input() ariaLabelledBy?: string;\n\n  /** @internal Curseur double  */\n  double: boolean = false;\n\n  protected groupClasses = computed(() => {\n    const severity = this.severityViewModel();\n    const message = this.messageViewModel();\n\n    return {\n      'fr-range-group--disabled': this.disabled,\n      'fr-range-group--error': message && severity === DsfrSeverityConst.ERROR,\n      'fr-range-group--valid':\n        message && (severity === DsfrSeverityConst.SUCCESS || severity === DsfrSeverityConst.VALID),\n      'fr-range-group--info': message && severity === DsfrSeverityConst.INFO,\n      'edu-fieldset--warning': message && severity === DsfrSeverityConst.WARNING,\n    };\n  });\n\n  constructor() {\n    super();\n  }\n\n  /**\n   * Taille du curseur (SM et MD possibles, MD par défaut)\n   *\n   * @deprecated since(1.15.0) utiliser 'rangeSize' à la place\n   */\n  get size(): DsfrSize {\n    return this.rangeSize;\n  }\n\n  get hintId() {\n    return this.inputId + '-hint-text';\n  }\n\n  /**\n   * Taille du curseur (SM et MD possibles, MD par défaut)\n   *\n   * @deprecated since(1.15.0) utiliser 'rangeSize' à la place\n   */\n  @Input() set size(value: DsfrSize) {\n    this.rangeSize = value;\n  }\n\n  /**@internal */\n  isDouble(): boolean {\n    return Array.isArray(this.value);\n  }\n\n  /** @internal */\n  isSmall(): boolean {\n    return this.size == DsfrSizeConst.SM;\n  }\n\n  /** @internal */\n  getValue(index: number) {\n    return Array.isArray(this.value) ? this.value[index] : undefined;\n  }\n\n  /** @internal */\n  onInputChange(index: number, value: number) {\n    if (Array.isArray(this.value)) {\n      this.value[index] = value;\n    }\n  }\n}\n","<div\n  class=\"fr-range-group\"\n  id=\"{{ inputId }}-group\"\n  [ngClass]=\"groupClasses()\"\n  [attr.role]=\"isDouble() ? 'group' : null\"\n  [attr.aria-labelledby]=\"inputId + '-label'\">\n  <label id=\"{{ inputId }}-label\" class=\"fr-label\" [for]=\"isDouble() ? null : inputId\">\n    <!-- Label obligatoire  -->\n    @if (label) {\n      {{ label }}\n    } @else {\n      <ng-content></ng-content>\n    }\n\n    @if (hint) {\n      <edu-hint-form [hint]=\"hint\"></edu-hint-form>\n    }\n  </label>\n\n  <div\n    class=\"fr-range\"\n    [attr.data-fr-prefix]=\"prefix\"\n    [attr.data-fr-suffix]=\"suffix\"\n    [ngClass]=\"{ 'fr-range--double': isDouble(), 'fr-range--sm': isSmall(), 'fr-range--step': step }\">\n    <span class=\"fr-range__output\">{{ value }}</span>\n\n    @if (!isDouble()) {\n      <ng-container *ngTemplateOutlet=\"singleCursor\"></ng-container>\n    } @else {\n      <ng-container *ngTemplateOutlet=\"doubleCursor\"></ng-container>\n    }\n\n    @if (!hideMinMax) {\n      <span class=\"fr-range__min\" aria-hidden=\"true\">\n        {{ min }}\n      </span>\n      <span class=\"fr-range__max\" aria-hidden=\"true\">\n        {{ max }}\n      </span>\n    }\n  </div>\n\n  <div class=\"fr-messages-group\" id=\"{{ inputId }}-messages\" aria-live=\"polite\">\n    @if (messageViewModel()) {\n      <p class=\"fr-message\" [eduMessageSeverity]=\"severityViewModel()\">\n        {{ messageViewModel() }}\n      </p>\n    }\n  </div>\n</div>\n\n<ng-template #singleCursor>\n  <input\n    id=\"{{ inputId }}\"\n    name=\"{{ inputId }}\"\n    type=\"range\"\n    min=\"{{ min }}\"\n    max=\"{{ max }}\"\n    [disabled]=\"disabled\"\n    (blur)=\"onBlur()\"\n    [attr.value]=\"value\"\n    [(ngModel)]=\"value\"\n    [attr.aria-describedby]=\"messageViewModel() ? inputId + '-messages' : null\"\n    [attr.step]=\"step\" />\n</ng-template>\n\n<ng-template #doubleCursor>\n  <input\n    id=\"{{ inputId }}\"\n    name=\"{{ inputId }}\"\n    type=\"range\"\n    [attr.aria-label]=\"ariaLabelledBy ? null : ('range.labelMin' | dsfrI18n)\"\n    [attr.aria-labelledby]=\"ariaLabelledBy ?? null\"\n    min=\"{{ min }}\"\n    max=\"{{ max }}\"\n    [disabled]=\"disabled\"\n    (blur)=\"onBlur()\"\n    [attr.value]=\"getValue(0)\"\n    [ngModel]=\"getValue(0)\"\n    (ngModelChange)=\"onInputChange(0, $event)\"\n    [attr.aria-describedby]=\"messageViewModel() ? inputId + '-messages' : null\" />\n\n  <input\n    id=\"{{ inputId }}-2\"\n    name=\"{{ inputId }}-2\"\n    type=\"range\"\n    [attr.aria-label]=\"ariaLabelledBy ? null : ('range.labelMax' | dsfrI18n)\"\n    [attr.aria-labelledby]=\"ariaLabelledBy ?? null\"\n    max=\"{{ max }}\"\n    [disabled]=\"disabled\"\n    [attr.value]=\"getValue(1)\"\n    [ngModel]=\"getValue(1)\"\n    (blur)=\"onBlur()\"\n    (ngModelChange)=\"onInputChange(1, $event)\"\n    [attr.aria-describedby]=\"messageViewModel() ? inputId + '-messages' : null\" />\n</ng-template>\n","const REGEXP_PHONE_NUMBER = /^\\(?(\\+\\d{2})?\\)?\\s?0?(\\d(\\s?\\d{2}){4})$/;\n\n/**\n * Teste si le numéro de téléphone correspond au pattern (soit celui de l'input, soit un pattern par défaut)\n */\nexport function isPhoneNumberValid(value: string | undefined, pattern?: string): boolean {\n  if (!value) return false;\n\n  const regexp = pattern ? new RegExp(pattern) : REGEXP_PHONE_NUMBER;\n  const matchArr = regexp.exec(value);\n  return matchArr ? true : false;\n}\n\n/**\n * Formatage du n° de téléphone.\n * Le formatage ne se fait que dans le cas où on utilise le pattern par défaut\n */\nexport function formatPhoneNumber(value: string | undefined, pattern?: string): string {\n  if (!value) return '';\n  if (pattern) return value;\n\n  const regexp = REGEXP_PHONE_NUMBER;\n  const matchArr = regexp.exec(value);\n  if (!matchArr) return value;\n\n  let num = value;\n  let country = matchArr[1];\n  num = matchArr[2].replace(/ /g, '');\n  num = num.replace(/(\\d)(\\d{2})(\\d{2})(\\d{2})(\\d{2})/, '$1 $2 $3 $4 $5');\n  num = country ? `(${country}) ${num}` : `0${num}`;\n  return num;\n}\n","import { CommonModule } from '@angular/common';\nimport { AfterViewInit, Component, ElementRef, forwardRef, HostListener, inject, OnInit } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DsfrButtonComponent } from '../../components';\nimport { DsfrI18nService, InputGroupComponent } from '../../shared';\nimport { EduHintComponent } from '../../shared/components/input-group/hint.component';\nimport { DsfrFormInputComponent } from '../form-input';\nimport { DsfrInputTypeConst } from '../form-input/form-input.model';\nimport { formatPhoneNumber, isPhoneNumberValid } from './phone-number-utils';\n\n@Component({\n  selector: 'dsfr-form-tel',\n  templateUrl: '../form-input/form-input.component.html',\n  imports: [CommonModule, FormsModule, InputGroupComponent, DsfrButtonComponent, EduHintComponent],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DsfrFormTelComponent),\n      multi: true,\n    },\n  ],\n})\n\n/**\n * Saisie d'un n° de téléphone et reformatage (sauf dans le cas d'utilisation d'un pattern)\n * @since 1.3.0\n */\nexport class DsfrFormTelComponent extends DsfrFormInputComponent implements OnInit, AfterViewInit {\n  protected errorMessage: string = '';\n\n  private readonly elementRef = inject(ElementRef);\n  private readonly i18n = inject(DsfrI18nService);\n\n  /**\n   * Au fil de la saisie, on ne vérifie le n° de téléphone que s'il y avait déjà une erreur.\n   * @internal */\n  @HostListener('input') onInput() {\n    if (this.internalError && this.internalError?.length > 0) {\n      this.handleValidation();\n    }\n  }\n\n  /**\n   * Vérification au commit de la valeur.\n   *\n   * cf. https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/change_event\n   * @internal */\n  @HostListener('change') onChange() {\n    this.validAndFormatPattern();\n  }\n\n  /** @internal*/\n  override ngOnInit() {\n    super.ngOnInit();\n    this.errorMessage = this.i18n.t('tel.error');\n    this.type = DsfrInputTypeConst.TEL;\n    this.spellCheck = false;\n    this.hint ??= this.i18n.t('tel.hint');\n\n    this.validAndFormatPattern();\n  }\n\n  /**\n   * Fix: appliquer le label par défaut uniquement si le slot label n'est pas renseigné\n   * slot label non renseigné => le label 'fr-label' ne possede aucun enfant ou seulement la description additionnelle\n   */\n  ngAfterViewInit() {\n    const firstElementChild = this.elementRef.nativeElement?.querySelector('.fr-label').firstElementChild;\n\n    if (!firstElementChild || [...firstElementChild.classList].includes('fr-hint-text')) {\n      this.label ??= this.i18n.t('tel.label');\n    }\n  }\n\n  /** @internal */\n  override writeValue(value: string | undefined): void {\n    super.writeValue(value);\n\n    this.validAndFormatPattern();\n  }\n\n  protected validAndFormatPattern() {\n    const isValid = this.handleValidation();\n\n    if (isValid && !this.pattern) {\n      this.value = formatPhoneNumber(this.value);\n    }\n  }\n\n  /**\n   * Méthode validation, positionne la propriété error s'il y a lieu.\n   */\n  protected validate(): boolean {\n    if (this.value === undefined || this.value === null || this.value === '') {\n      return true;\n    }\n\n    return isPhoneNumberValid(this.value, this.pattern);\n  }\n\n  /**\n   * Vérifie la validité de l'input en fonction de l'erreur interne possible\n   *\n   * @returns un booléen en fonction de l'absence d'erreur interne\n   */\n  private handleValidation(): boolean {\n    const isValid = this.validate();\n\n    this.internalError = isValid ? undefined : [this.errorMessage];\n    return isValid;\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  booleanAttribute,\n  Component,\n  computed,\n  forwardRef,\n  inject,\n  Input,\n  Signal,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n  DefaultControlComponent,\n  DsfrI18nService,\n  DsfrPosition,\n  DsfrPositionConst,\n  DsfrSeverityConst,\n} from '../../shared';\nimport { EduMessageSeverityDirective } from '../../shared/directives/message-severity.directive';\n\n@Component({\n  selector: 'dsfr-form-toggle',\n  templateUrl: './form-toggle.component.html',\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DsfrFormToggleComponent),\n      multi: true,\n    },\n  ],\n  imports: [CommonModule, FormsModule, EduMessageSeverityDirective],\n})\nexport class DsfrFormToggleComponent extends DefaultControlComponent<boolean> {\n  /** Position du libellé, à droite par défaut.\n   * @deprecated 1.14.1 La version avec libellé à gauche est dépréciée et ne doit plus être utilisée (accessibilité)\n   */\n  @Input() labelPosition: DsfrPosition = DsfrPositionConst.RIGHT;\n\n  /**\n   * Cache le label visuellement en le laissant disponible aux lecteurs d'écran.\n   */\n  @Input() labelSrOnly = false;\n\n  /**\n   * Ajouter l'attribut 'aria-invalid' sur le champ de formulaire.\n   */\n  @Input() ariaInvalid?: string;\n\n  /**\n   * Permet d'afficher le libellé, court, décrivant l'état de l’interrupteur (activé / désactivé), placé en dessous du\n   * switch. Il est affiché par défaut, il est conseillé de le mettre afin de faciliter la compréhension de\n   * l’utilisateur - Optionnel.\n   */\n  @Input() showStatusLabel = true;\n\n  /**\n   * Propriété permettant de surcharger le libellé, court, dénotant l'état checked du toggle, sans avoir à passer\n   * par le fichier d'internationalisation.\n   */\n  @Input() checkedStatusLabel?: string;\n\n  /**\n   * Propriété permettant de surcharger le libellé court dénotant l'état checked du toggle, sans avoir à passer\n   * par le fichier d'internationalisation.\n   */\n  @Input() uncheckedStatusLabel?: string;\n\n  /**\n   * Affiche un séparateur horizontal sous le composant.\n   * Ne devrait être utilisé que dans le cadre d'un toggles-group.\n   */\n  @Input({ transform: booleanAttribute }) showSeparator: boolean = false;\n\n  /** @internal */\n  override combinedAriaDescribedBy: Signal<string | null> = computed(() => {\n    const ids: string[] = [];\n\n    if (this.ariaDescribedBy()) ids.push(this.ariaDescribedBy()!);\n    if (this.hint) ids.push(this.hintId);\n    ids.push(this.messagesGroupId); // toujours présent meme si aucun message\n\n    return ids.length ? ids.join(' ') : null;\n  });\n\n  protected groupClasses = computed(() => {\n    const severity = this.severityViewModel();\n    const message = this.messageViewModel();\n\n    return {\n      'fr-toggle--label-left': this.labelPosition === 'left',\n      'fr-toggle--border-bottom': this.showSeparator,\n      'fr-toggle--error': message && severity === DsfrSeverityConst.ERROR,\n      'fr-toggle--valid': message && (severity === DsfrSeverityConst.VALID || severity === DsfrSeverityConst.SUCCESS),\n    };\n  });\n\n  private readonly i18n = inject(DsfrI18nService);\n\n  constructor() {\n    super();\n  }\n\n  get hintId() {\n    return this.inputId + '-hint';\n  }\n\n  /** @deprecated since 1.12 use showStatus instead */\n  get showCheckedHint(): boolean {\n    return this.showStatusLabel;\n  }\n\n  /** @deprecated since 1.12 use checkedLabel instead */\n  get checkedHintLabel(): string | undefined {\n    return this.checkedStatusLabel;\n  }\n\n  /** @deprecated since 1.12 use uncheckedLabel instead */\n  get uncheckedHintLabel(): string | undefined {\n    return this.uncheckedStatusLabel;\n  }\n\n  /** @deprecated since 1.12 use showStatus instead */\n  @Input() set showCheckedHint(value: boolean) {\n    this.showStatusLabel = value;\n  }\n\n  /** @deprecated since 1.12 use checkedLabel instead */\n  @Input() set checkedHintLabel(value: string) {\n    this.checkedStatusLabel = value;\n  }\n\n  /** @deprecated since 1.12 use uncheckedLabel instead */\n  @Input() set uncheckedHintLabel(value: string) {\n    this.uncheckedStatusLabel = value;\n  }\n\n  /**\n   * Permet d'initialiser de forcer la valeur initiale à une valeur booléenne\n   * @internal\n   */\n  override writeValue(value: boolean | undefined) {\n    super.writeValue(value ?? false);\n  }\n\n  /**\n   * @ignore\n   */\n  getDataLabelChecked(): string | null {\n    return this.showStatusLabel ? this.checkedStatusLabel || this.i18n.t('toggle.dataLabelChecked') : null;\n  }\n\n  /**\n   * @ignore\n   */\n  getDataLabelUnchecked(): string | null {\n    return this.showStatusLabel ? this.uncheckedStatusLabel || this.i18n.t('toggle.dataLabelUnchecked') : null;\n  }\n}\n","<div class=\"fr-toggle\" [ngClass]=\"groupClasses()\">\n  <input\n    type=\"checkbox\"\n    class=\"fr-toggle__input\"\n    [id]=\"inputId\"\n    [attr.name]=\"name ? name : null\"\n    [attr.aria-describedby]=\"combinedAriaDescribedBy()\"\n    [disabled]=\"disabled\"\n    [attr.checked]=\"value ? true : null\"\n    [attr.aria-invalid]=\"ariaInvalid || null\"\n    (blur)=\"onBlur()\"\n    [(ngModel)]=\"value\" />\n  <label\n    class=\"fr-toggle__label\"\n    [for]=\"inputId\"\n    [attr.data-fr-checked-label]=\"getDataLabelChecked()\"\n    [attr.data-fr-unchecked-label]=\"getDataLabelUnchecked()\">\n    @if (labelSrOnly) {\n      <span class=\"fr-sr-only\">\n        <ng-container [ngTemplateOutlet]=\"labelTemplate\"></ng-container>\n      </span>\n    } @else {\n      <ng-container [ngTemplateOutlet]=\"labelTemplate\"></ng-container>\n    }\n  </label>\n  @if (hint) {\n    <p [id]=\"hintId\" class=\"fr-hint-text\">{{ hint }}</p>\n  }\n  <!-- messages -->\n  <div class=\"fr-messages-group\" [id]=\"messagesGroupId\" aria-live=\"polite\">\n    <!-- prettier-ignore -->\n    @if (messageViewModel()) {\n      <p class=\"fr-message\"\n       [eduMessageSeverity]=\"severityViewModel()\"\n      >{{ messageViewModel() }}</p>\n    }\n  </div>\n</div>\n\n<ng-template #labelTemplate>\n  @if (label) {\n    {{ label }}\n  } @else {\n    <ng-content></ng-content>\n  }\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrFormToggleComponent } from './form-toggle.component';\n\n@NgModule({\n  exports: [DsfrFormToggleComponent],\n  imports: [CommonModule, FormsModule, DsfrFormToggleComponent],\n})\nexport class DsfrFormToggleModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  afterRenderEffect,\n  Component,\n  contentChildren,\n  ElementRef,\n  inject,\n  Input,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { DomUtils } from '../../shared';\nimport { DsfrFormFieldsetComponent, DsfrFormFieldsetElementDirective } from '../fieldset';\nimport { BaseFieldsetComponent } from '../fieldset/base-fieldset.component';\nimport { DsfrFormToggleComponent } from '../form-toggle';\n\n@Component({\n  selector: 'dsfr-form-toggles-group',\n  templateUrl: './form-toggles-group.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, DsfrFormFieldsetComponent, DsfrFormFieldsetElementDirective],\n})\nexport class DsfrFormTogglesGroupComponent extends BaseFieldsetComponent {\n  private readonly _elementRef = inject(ElementRef);\n\n  private _showSeparators = true;\n\n  private togglesElements = contentChildren(DsfrFormToggleComponent, { read: ElementRef });\n  private toggles = contentChildren(DsfrFormToggleComponent);\n\n  constructor() {\n    super();\n\n    afterRenderEffect(() => {\n      this.surroundButtonsWithLi();\n    });\n  }\n\n  get showSeparators(): boolean {\n    return this._showSeparators;\n  }\n\n  /** Permet de masquer la bordure horizontale séparant les toggles dans le groupe. */\n  @Input() set showSeparators(value: boolean) {\n    this._showSeparators = value;\n    this.updateTogglesBorderBottom();\n  }\n\n  /* Entoure chaque composant toggle par une balise <li> si nécessaire */\n  private surroundButtonsWithLi(): void {\n    DomUtils.surroundElementsWithLi(this._elementRef, this.togglesElements());\n  }\n\n  private updateTogglesBorderBottom() {\n    if (this.toggles()) {\n      this.toggles().forEach((t) => (t.showSeparator = this.showSeparators));\n    }\n  }\n}\n","<dsfr-fieldset\n  [fieldsetId]=\"fieldsetId\"\n  [legend]=\"legend\"\n  [legendRegular]=\"legendRegular\"\n  [legendSrOnly]=\"legendSrOnly\"\n  [hint]=\"hint\"\n  [disabled]=\"disabled()\"\n  [error]=\"error()\"\n  [valid]=\"valid()\"\n  [message]=\"message()\"\n  [messageSeverity]=\"messageSeverity()\">\n  @if (!legend) {\n    <ng-container legend>\n      <ng-content select=\"[legend]\"></ng-content>\n    </ng-container>\n  }\n\n  <ul *fieldsetElement class=\"fr-toggle__list\">\n    <ng-content></ng-content>\n  </ul>\n</dsfr-fieldset>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrFormFieldsetComponent } from '../fieldset';\nimport { DsfrFormToggleComponent } from '../form-toggle';\nimport { DsfrFormTogglesGroupComponent } from './form-toggles-group.component';\n\n@NgModule({\n  exports: [DsfrFormTogglesGroupComponent],\n  imports: [CommonModule, DsfrFormToggleComponent, DsfrFormFieldsetComponent, DsfrFormTogglesGroupComponent],\n})\nexport class DsfrFormTogglesGroupModule {}\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  computed,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  Renderer2,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DefaultControlComponent, DsfrI18nService, DsfrSeverityConst } from '../../shared';\nimport { EduHintComponent } from '../../shared/components/input-group/hint.component';\nimport { EduMessageSeverityDirective } from '../../shared/directives/message-severity.directive';\n\n@Component({\n  selector: 'dsfr-form-upload, dsfr-upload',\n  templateUrl: './upload.component.html',\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DsfrUploadComponent),\n      multi: true,\n    },\n  ],\n  imports: [CommonModule, FormsModule, EduHintComponent, EduMessageSeverityDirective],\n  // Fix CSS DSFR : supprimer margin top en cas de label caché visuellement (labelSrOnly)\n  styles: ['.fr-label.fr-sr-only + .fr-upload { margin-top: 0}'],\n})\nexport class DsfrUploadComponent extends DefaultControlComponent<any> implements OnInit, OnChanges {\n  /** @internal */\n  @ViewChild('inputFile', { static: true }) inputFile?: ElementRef;\n\n  /**\n   * Cache le label visuellement en le laissant disponible aux lecteurs d'écran.\n   */\n  @Input() labelSrOnly = false;\n\n  /**\n   * Ajouter l'attribut 'aria-invalid' sur le champ de formulaire.\n   */\n  @Input() ariaInvalid?: string;\n\n  /** Permet l'ajout de plusieurs fichiers à la fois. */\n  @Input() multiple = false;\n\n  /**\n   * Spécifie un filtre pour les types de fichiers que l'utilisateur peut sélectionner.\n   *\n   * @since 1.9.0\n   */\n  @Input() accept?: string;\n\n  /** Evénement émis à la sélection d'un ou plusieurs fichiers. */\n  @Output()\n  fileSelect = new EventEmitter<FileList>();\n\n  /** Evénement émis lorsque l'utilisateur annule la sélection. */\n  @Output()\n  fileCancel = new EventEmitter<FileList>();\n\n  protected groupClasses = computed(() => {\n    const severity = this.severityViewModel();\n    const message = this.messageViewModel();\n\n    return {\n      'fr-upload-group--error': message && severity === DsfrSeverityConst.ERROR,\n      'fr-upload-group--valid': message && severity === DsfrSeverityConst.VALID,\n      'fr-upload-group--disabled': this.disabled,\n    };\n  });\n\n  private readonly _renderer = inject(Renderer2);\n  private readonly i18n = inject(DsfrI18nService);\n\n  /** @deprecated (since 1.4.0) utiliser hint à la place. */\n  get description(): string | undefined | string[] {\n    return this.hint;\n  }\n\n  /**\n   * Description pour l'upload (précise les contraintes au niveau du ou des fichiers attendus : format, poids attendus, nombre de fichiers possible…).\n   *\n   * @deprecated (since 1.4.0) utiliser hint à la place.\n   *\n   * @internal\n   */\n  @Input() set description(value: string | string[] | undefined) {\n    this.hint = value;\n  }\n\n  /**\n   * Surcharge permettant de gérer la mise à jour du DOM.\n   *\n   * @internal\n   */\n  override writeValue(value: any | undefined): void {\n    // afin de se prémunir des initialisations avec une chaîne de caractères (vide ou pas) il faut s'assurer du type\n    // d'argument transmis en entrée et forcer la chaîne vide le cas échéant\n    const isTypeFileList = Object.prototype.toString.call(value).includes(FileList.name);\n    if (!isTypeFileList) {\n      value = '';\n    }\n    super.writeValue(value);\n    if (this.inputFile) {\n      if (isTypeFileList && value?.length) {\n        this._renderer.setProperty(this.inputFile.nativeElement, 'files', value);\n      } else {\n        this._renderer.setProperty(this.inputFile.nativeElement, 'value', '');\n        this._renderer.setProperty(this.inputFile.nativeElement, 'files', null);\n      }\n    }\n  }\n\n  /** @internal */\n  override ngOnInit() {\n    super.ngOnInit();\n    this.name ??= 'file-upload'; // 'file-upload' est la valeur statique jusqu'en 1.3\n  }\n\n  /** @internal */\n  ngOnChanges({ label, hint }: SimpleChanges) {\n    if (label) this.label ||= this.i18n.t('upload.label'); // default\n    if (hint) this.hint ||= this.i18n.t('upload.hint'); // default\n  }\n\n  /**\n   * Permet de programmatiquement réinitialiser le champ après une sélection de fichier(s).\n   */\n  reset() {\n    if (this.inputFile) this.inputFile.nativeElement.value = '';\n  }\n\n  /** @internal */\n  onCancel() {\n    this.fileCancel.emit();\n  }\n\n  /** @internal */\n  onFileChange(event: Event) {\n    const target = <HTMLInputElement>event.target;\n    this.value = target.files ?? undefined;\n    if (this.value) this.fileSelect.emit(this.value);\n    this.fnOnTouched(); // touched est envoyé uniquement a la validation d'un fichier\n  }\n}\n","<div class=\"fr-upload-group\" [ngClass]=\"groupClasses()\">\n  <label class=\"fr-label\" [class.fr-sr-only]=\"labelSrOnly\" [for]=\"inputId\"\n    >{{ label }}\n    @if (hint) {\n      <edu-hint-form [hint]=\"hint\"></edu-hint-form>\n    }\n  </label>\n  <!--\n      On bind à la fois la propriété et l'attribut 'name' pour contourner le bug suivant: https://github.com/angular/angular/issues/11757\n      cf. issue#360\n      -->\n  <input\n    #inputFile\n    class=\"fr-upload\"\n    type=\"file\"\n    [id]=\"inputId || null\"\n    [name]=\"name || null\"\n    [attr.name]=\"name || null\"\n    [multiple]=\"multiple\"\n    [attr.accept]=\"accept || null\"\n    [disabled]=\"disabled\"\n    [attr.aria-describedby]=\"combinedAriaDescribedBy()\"\n    [attr.aria-invalid]=\"ariaInvalid || null\"\n    (change)=\"onFileChange($event)\"\n    (cancel)=\"onCancel()\" />\n\n  <!-- messages -->\n  <div class=\"fr-messages-group\" [id]=\"messagesGroupId\" aria-live=\"polite\">\n    <!-- prettier-ignore -->\n    @if (messageViewModel()) {\n      <p class=\"fr-message\"\n       [eduMessageSeverity]=\"severityViewModel()\"\n      >{{ messageViewModel() }}</p>\n    }\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrUploadComponent } from './upload.component';\n\n@NgModule({\n  exports: [DsfrUploadComponent],\n  imports: [CommonModule, FormsModule, DsfrUploadComponent],\n})\nexport class DsfrUploadModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NavigationExtras } from '@angular/router';\nimport { DsfrLinkComponent } from '../../components';\nimport { DefaultControlComponent, DsfrI18nPipe, DsfrLinkTarget, DsfrSeverityConst, newUniqueId } from '../../shared';\nimport { EduHintComponent } from '../../shared/components/input-group/hint.component';\nimport { EduMessageSeverityDirective } from '../../shared/directives/message-severity.directive';\nimport { DsfrFormPasswordValidationRule } from './form-password.model';\n\n@Component({\n  selector: 'dsfr-form-password',\n  templateUrl: './form-password.component.html',\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: DsfrFormPasswordComponent,\n      multi: true,\n    },\n  ],\n  imports: [CommonModule, FormsModule, DsfrLinkComponent, DsfrI18nPipe, EduMessageSeverityDirective, EduHintComponent],\n})\nexport class DsfrFormPasswordComponent extends DefaultControlComponent<string> implements OnInit {\n  /** @since 1.6 'current-password' par défaut */\n  @Input() autocomplete = 'current-password';\n\n  /**\n   * Cache le label visuellement en le laissant disponible aux lecteurs d'écran.\n   */\n  @Input() labelSrOnly = false;\n\n  /**\n   * Indique si le champ est obligatoire ou non, faux par défaut.\n   */\n  @Input() required = false;\n\n  /**\n   * Liste des règles de sécurisation du mot de passe, valides ou en erreur - Optionnel.\n   * Sous la forme [{message: '', onError: false}]\n   */\n  @Input() validationRules?: DsfrFormPasswordValidationRule[];\n\n  /** Url de récupération du mot de passe (optionnel) */\n  @Input() recoveryLink?: string;\n\n  /** Target du lien. Target par défaut de l'application si la propriété est non renseignée. */\n  @Input() recoveryTargetLink?: DsfrLinkTarget;\n\n  /** Path angular géré en tant que directive routerLink. Exclusif avec link et route. Prioritaire sur route. */\n  @Input() recoveryRouterLink?: string | string[];\n\n  /** RouterLink: classe utilisée pour la directive routerLink active. */\n  @Input() recoveryRouterLinkActive?: string | string[];\n\n  /** RouterLink: valeurs additionnelles de navigation pour le routerLink (queryParams, state etc.) */\n  @Input() recoveryRouterLinkExtras?: NavigationExtras;\n\n  /** Path interne. Exclusif avec link et routerLink */\n  @Input() recoveryRoute?: string;\n\n  /**\n   * 👓 Correspond à l'attribut `aria-invalid`,\n   * cf. [definition](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Attributes/aria-invalid).\n   * Valeur par défaut `undefined` (n'apparait pas comme attribut dans l'html).\n   */\n  @Input() ariaInvalid?: string;\n\n  /** Propage l'évènement Event du DOM à la sélection d'un lien. */\n  @Output() recoveryRouteSelect = new EventEmitter<string>();\n\n  /** @internal */ checkboxId: string = '';\n\n  protected groupClasses = computed(() => {\n    const severity = this.severityViewModel();\n    const message = this.messageViewModel();\n\n    return {\n      'fr-sr-only': this.labelSrOnly,\n      'fr-input-group--error': message && severity === DsfrSeverityConst.ERROR,\n      'fr-input-group--valid':\n        message && (severity === DsfrSeverityConst.SUCCESS || severity === DsfrSeverityConst.VALID),\n      'fr-input-group--info': message && severity === DsfrSeverityConst.INFO,\n      'fr-input-group--warning': message && severity === DsfrSeverityConst.WARNING,\n    };\n  });\n\n  /** @internal */\n  constructor() {\n    super();\n  }\n\n  /** @internal */\n  override ngOnInit() {\n    super.ngOnInit();\n    this.checkboxId = newUniqueId();\n  }\n\n  /** @internal */\n  hasRecovery(): string | string[] | undefined {\n    return this.recoveryLink || this.recoveryRoute || this.recoveryRouterLink;\n  }\n\n  /** @internal */\n  onRecovery(): void {\n    if (this.recoveryRoute) {\n      this.recoveryRouteSelect.emit(this.recoveryRoute);\n    }\n  }\n\n  /** @internal */\n  hasMessages(): boolean {\n    return !!(this.validationRules && this.validationRules.length > 0);\n  }\n}\n","<div class=\"fr-password\">\n  <label class=\"fr-label\" [ngClass]=\"groupClasses()\" [for]=\"inputId\">\n    @if (label) {\n      {{ label }}\n    } @else {\n      <ng-content select=\"[label]\"></ng-content>\n    }\n    @if (hint) {\n      <edu-hint-form [hint]=\"hint\"></edu-hint-form>\n    }\n  </label>\n\n  <div class=\"fr-input-wrap\">\n    <input\n      class=\"fr-password__input fr-input\"\n      autocapitalize=\"off\"\n      autocorrect=\"off\"\n      [attr.aria-describedby]=\"hasMessages() ? messagesGroupId : null\"\n      [attr.aria-invalid]=\"ariaInvalid || null\"\n      [attr.aria-required]=\"required || null\"\n      [required]=\"required\"\n      [(ngModel)]=\"value\"\n      [disabled]=\"disabled\"\n      (blur)=\"onBlur()\"\n      [attr.name]=\"name || null\"\n      [autocomplete]=\"autocomplete\"\n      [id]=\"inputId\"\n      type=\"password\" />\n  </div>\n\n  <div class=\"fr-messages-group\" [id]=\"messagesGroupId\" aria-live=\"polite\">\n    <!-- prettier-ignore -->\n    @if (messageViewModel()) {\n      <p\n        class=\"fr-message\"\n         [eduMessageSeverity]=\"severityViewModel()\"\n        >{{ messageViewModel() }}</p>\n    }\n\n    @if (hasMessages()) {\n      <p class=\"fr-message\">{{ 'password.message' | dsfrI18n }}</p>\n    }\n\n    @if (validationRules && validationRules.length > 0) {\n      <ul class=\"fr-raw-list\">\n        @for (rule of validationRules; track i; let i = $index) {\n          @if (rule.onError) {\n            <li class=\"fr-message fr-message--error\" id=\"password-{{ this.inputId }}-input-message-error-{{ i }}\">\n              {{ rule.message }}<span class=\"fr-sr-only\">&nbsp;-&nbsp;{{ 'password.invalidCriteria' | dsfrI18n }}</span>\n            </li>\n          } @else if (rule.onError === false) {\n            <li class=\"fr-message fr-message--valid\" id=\"password-{{ this.inputId }}-input-message-valid-{{ i }}\">\n              {{ rule.message }}<span class=\"fr-sr-only\">&nbsp;-&nbsp;{{ 'password.validCriteria' | dsfrI18n }}</span>\n            </li>\n          } @else if (rule.onError === undefined) {\n            <li class=\"fr-message fr-message--info\" id=\"password-{{ this.inputId }}-input-message-info-{{ i }}\">\n              {{ rule.message }}\n            </li>\n          }\n        }\n      </ul>\n    }\n  </div>\n\n  <div class=\"fr-password__checkbox fr-checkbox-group fr-checkbox-group--sm\">\n    <input [attr.aria-label]=\"'password.aria.label' | dsfrI18n\" [id]=\"checkboxId\" type=\"checkbox\" />\n    <!-- fr--password utilisé sur la démo DSFR et permet de fixer le padding avec la checkbox mais illogique -->\n    <label class=\"fr--password__checkbox fr-label\" [for]=\"checkboxId\">\n      {{ 'password.show' | dsfrI18n }}\n    </label>\n  </div>\n\n  @if (hasRecovery()) {\n    <p>\n      <dsfr-link\n        [link]=\"recoveryLink\"\n        [linkTarget]=\"recoveryTargetLink\"\n        [route]=\"recoveryRoute\"\n        [routePath]=\"recoveryRouterLink\"\n        [routerLinkActive]=\"recoveryRouterLinkActive ?? ''\"\n        [routerLinkExtras]=\"recoveryRouterLinkExtras\"\n        (linkSelect)=\"onRecovery()\"\n        >{{ 'password.forgotPassword' | dsfrI18n }}</dsfr-link\n      >\n    </p>\n  }\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrLinkComponent } from '../../components';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrFormPasswordComponent } from './form-password.component';\n\n@NgModule({\n  exports: [DsfrFormPasswordComponent],\n  imports: [CommonModule, FormsModule, DsfrLinkComponent, DsfrI18nPipe, DsfrFormPasswordComponent],\n})\nexport class DsfrFormPasswordModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output, ViewChild, booleanAttribute, inject } from '@angular/core';\nimport { FormBuilder, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { NavigationExtras } from '@angular/router';\nimport {\n  DsfrAlertComponent,\n  DsfrButtonComponent,\n  DsfrButtonsGroupComponent,\n  DsfrFranceConnectComponent,\n} from '../../components';\nimport { DsfrFormFieldsetComponent, DsfrFormFieldsetElementDirective } from '../../forms/fieldset';\nimport { DsfrFormCheckboxComponent } from '../../forms/form-checkbox';\nimport { DsfrFormEmailComponent } from '../../forms/form-email';\nimport { DsfrFormPasswordComponent } from '../../forms/form-password';\nimport { LocalStorage, StorageEnum, isOnBrowser } from '../../shared';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrLogin } from './login.model';\n\n@Component({\n  selector: 'dsfr-login',\n  templateUrl: './login.component.html',\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    DsfrFranceConnectComponent,\n    DsfrFormEmailComponent,\n    DsfrFormPasswordComponent,\n    DsfrFormFieldsetComponent,\n    DsfrFormCheckboxComponent,\n    DsfrButtonComponent,\n    DsfrButtonsGroupComponent,\n    DsfrAlertComponent,\n    DsfrI18nPipe,\n    DsfrFormFieldsetElementDirective,\n  ],\n})\nexport class DsfrLoginComponent implements OnInit {\n  /** @internal */ @ViewChild(DsfrFormEmailComponent) emailComponent?: DsfrFormEmailComponent;\n\n  /**Label du champ email (\"Identifiant\" par défaut) */\n  @Input() labelEmail?: string;\n\n  /** Surcharger le texte de description additionnel du champ email */\n  @Input() hintEmail?: string;\n\n  /**\n   * Indique une erreur de connexion. Message de l'erreur.\n   */\n  @Input() error?: string;\n\n  /** Url de récupération du mot de passe (optionnel) */\n  @Input() recoveryLink?: string;\n\n  /** Path interne. Exclusif avec link et routerLink */\n  @Input() recoveryRoute?: string;\n\n  /** Path angular géré en tant que directive routerLink. */\n  @Input() recoveryRouterLink?: string | string[];\n\n  /** RouterLink : classe utilisée pour la directive routerLink active. */\n  @Input() recoveryRouterLinkActive?: string | string[];\n\n  /** RouterLink : valeurs additionnelles de navigation pour le routerLink (queryParams, state, etc.) */\n  @Input() recoveryRouterLinkExtras?: NavigationExtras;\n\n  /** Se souvenir de l'utilisateur. */\n  @Input() rememberMe = false;\n\n  /** Utilisation de FranceConnect+ (qui est plus sécurisé). */\n  @Input({ transform: booleanAttribute }) secure: boolean = false;\n\n  /** Nom du service. */\n  @Input() service?: string;\n\n  /** Demande de connexion via FranceConnect. */\n  @Output() franceConnectSelect: EventEmitter<void> = new EventEmitter<void>();\n\n  /** Evénement lorsque le mot de passe change. */\n  @Output() passwordChange: EventEmitter<string> = new EventEmitter<string>();\n\n  /** Emission de `recoveryRoute` s'il y a lieu. */\n  @Output() recoveryRouteSelect: EventEmitter<string> = new EventEmitter<string>();\n\n  /** Demande de connexion avec en paramètre : '{login : string ; password : string}'. */\n  @Output() signinSelect: EventEmitter<DsfrLogin> = new EventEmitter<DsfrLogin>();\n\n  /** Demande de création de compte */\n  @Output() signupSelect: EventEmitter<void> = new EventEmitter<void>();\n  /**@internal */ loginFormGroup: FormGroup;\n\n  protected password: string = ''; // Password de l'utilisateur.\n  protected login: string = ''; // Email de l'utilisateur.\n\n  private readonly fb = inject(FormBuilder);\n\n  constructor() {\n    this.loginFormGroup = this.fb.group({\n      login: ['', Validators.required],\n      password: ['', Validators.required],\n      rememberMe: false,\n    });\n  }\n\n  ngOnInit(): void {\n    if (isOnBrowser()) {\n      this.rememberMe ??= Boolean(LocalStorage.get(StorageEnum.REMEMBER_ME));\n      if (this.rememberMe) this.login ??= LocalStorage.get(StorageEnum.LOGIN) ?? '';\n    }\n\n    this.setControlValue('login', this.login);\n    this.setControlValue('password', this.password);\n    this.setControlValue('rememberMe', this.rememberMe);\n  }\n\n  protected onFranceConnect() {\n    this.franceConnectSelect.emit();\n  }\n\n  /**\n   * Inscription, on laisse le développeur faire ce qu'il veut dans ce cas.\n   */\n  protected onSignUp() {\n    this.signupSelect.emit();\n  }\n\n  /** Connexion */\n  protected onSignIn() {\n    if (!this.isFormLoginValid()) return; // Ce qui ne peut pas arriver\n    const login = this.getControlValue('login');\n    const password = this.getControlValue('password');\n    const rememberMe = this.getControlValue('rememberMe');\n\n    // localStorage\n    this.saveToLocalStorage(rememberMe, login);\n\n    // Event\n    this.signinSelect.emit({ login: login, password: password, rememberMe: rememberMe });\n  }\n\n  protected onPasswordChange(value: string) {\n    this.passwordChange.emit(value);\n  }\n\n  protected onRecoveryRouteSelect(route: string) {\n    this.recoveryRouteSelect.emit(route);\n  }\n\n  protected isFormLoginValid() {\n    return this.loginFormGroup.valid && this.emailComponent?.isValid();\n  }\n\n  private setControlValue(name: string, value: any): void {\n    this.loginFormGroup.controls[name]?.setValue(value);\n  }\n\n  private getControlValue(name: string): any {\n    return this.loginFormGroup.controls[name]?.value;\n  }\n\n  private saveToLocalStorage(rememberMe: boolean, login: string): void {\n    if (this.rememberMe) {\n      LocalStorage.set(StorageEnum.REMEMBER_ME, String(rememberMe));\n      LocalStorage.set(StorageEnum.LOGIN, login);\n    } else {\n      LocalStorage.remove(StorageEnum.REMEMBER_ME);\n      LocalStorage.remove(StorageEnum.LOGIN);\n    }\n  }\n}\n","<div class=\"fr-container fr-container--fluid fr-mb-md-14v\">\n  <div class=\"fr-grid-row fr-grid-row--gutters fr-grid-row--center\">\n    <div class=\"fr-col-12 fr-col-md-8 fr-col-lg-6\">\n      <!-- BUG: classe fr-background-alt--grey inexistante côté DSFR 1.11 mais utilisé dans leur template -->\n      <div class=\"fr-container fr-background-alt--grey fr-px-md-0 fr-pt-10v fr-pt-md-14v fr-pb-6v fr-pb-md-10v\">\n        <div class=\"fr-grid-row fr-grid-row--gutters fr-grid-row--center\">\n          <div class=\"fr-col-12 fr-col-md-9 fr-col-lg-8\">\n            <!-- Heading h4 ------------------------------------------------------------------------------------------->\n            <h1 class=\"fr-h4\">{{ ('login.heading' | dsfrI18n) + service }}</h1>\n            <!-- France Connect h5 ------------------------------------------------------------------------------------>\n            <div class=\"fr-mb-6v\">\n              <h2 class=\"fr-h5\">{{ 'login.franceConnect.heading' | dsfrI18n }}</h2>\n              <dsfr-franceconnect [secure]=\"secure\" (franceConnectSelect)=\"onFranceConnect()\"></dsfr-franceconnect>\n            </div>\n            <p class=\"fr-hr-or\">{{ 'login.or' | dsfrI18n }}</p>\n            <!-- Formulaire de login h5 ------------------------------------------------------------------------------->\n            <div>\n              <form [formGroup]=\"loginFormGroup\" (ngSubmit)=\"onSignIn()\">\n                <dsfr-fieldset>\n                  <h2 class=\"fr-h5\" legend>{{ 'login.account.heading' | dsfrI18n }}</h2>\n                  <dsfr-fieldset\n                    *fieldsetElement\n                    [legend]=\"'login.account.srOnly.label' | dsfrI18n\"\n                    [legendSrOnly]=\"true\"\n                    [messageSeverity]=\"'error'\"\n                    [message]=\"error\">\n                    @if (error) {\n                      <dsfr-alert *fieldsetElement severity=\"error\" alertSize=\"SM\" [message]=\"error\"></dsfr-alert>\n                    }\n                    <!-- Email ---------------------------------------------------------------------------------------->\n                    <dsfr-form-email\n                      *fieldsetElement\n                      formControlName=\"login\"\n                      autofocus\n                      [required]=\"true\"\n                      [hint]=\"hintEmail ?? ('email.hint' | dsfrI18n)\"\n                      [label]=\"labelEmail ?? ('login.account.email.label' | dsfrI18n)\"></dsfr-form-email>\n                    <!-- Password ------------------------------------------------------------------------------------->\n                    <dsfr-form-password\n                      *fieldsetElement\n                      formControlName=\"password\"\n                      [recoveryLink]=\"recoveryLink\"\n                      [recoveryRoute]=\"recoveryRoute\"\n                      [recoveryRouterLink]=\"recoveryRouterLink\"\n                      [recoveryRouterLinkActive]=\"recoveryRouterLinkActive\"\n                      [label]=\"'login.account.password.label' | dsfrI18n\"\n                      [recoveryRouterLinkExtras]=\"recoveryRouterLinkExtras\"\n                      (ngModelChange)=\"onPasswordChange($event)\"\n                      (recoveryRouteSelect)=\"onRecoveryRouteSelect($event)\"></dsfr-form-password>\n                  </dsfr-fieldset>\n                  <!-- Remember Me ------------------------------------------------------------------------------------>\n                  <dsfr-form-checkbox\n                    *fieldsetElement\n                    formControlName=\"rememberMe\"\n                    [small]=\"true\"\n                    [label]=\"'login.account.rememberMe.label' | dsfrI18n\"></dsfr-form-checkbox>\n                  <!-- Bouton de login -------------------------------------------------------------------------------->\n                  <dsfr-buttons-group *fieldsetElement>\n                    <dsfr-button\n                      type=\"submit\"\n                      customClass=\"fr-mt-2v\"\n                      [label]=\"'login.account.button.label' | dsfrI18n\"\n                      [disabled]=\"!isFormLoginValid()\"></dsfr-button>\n                  </dsfr-buttons-group>\n                </dsfr-fieldset>\n              </form>\n            </div>\n            <hr />\n            <!-- Création de compte h5 -------------------------------------------------------------------------------->\n            <h2 class=\"fr-h5\">{{ 'login.noAccount.heading' | dsfrI18n }}</h2>\n            <dsfr-buttons-group>\n              <dsfr-button\n                variant=\"secondary\"\n                [label]=\"'login.noAccount.button.label' | dsfrI18n\"\n                (click)=\"onSignUp()\"></dsfr-button>\n            </dsfr-buttons-group>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, inject, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';\nimport { DsfrButtonComponent, DsfrButtonsGroupComponent } from '../../components';\nimport { DsfrHeadingLevel, DsfrI18nPipe } from '../../shared';\nimport { DSFR_CONFIG_TOKEN } from '../../shared/config/config-token';\nimport { DsfrConfig } from '../../shared/config/config.model';\n\n@Component({\n  selector: 'dsfr-response',\n  templateUrl: './response.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [CommonModule, DsfrButtonComponent, DsfrButtonsGroupComponent, DsfrI18nPipe],\n})\nexport class DsfrResponseComponent implements OnInit {\n  /**\n   * Titre de la page (par défaut : 'Erreur inattendue').\n   */\n  @Input() heading?: string;\n\n  /** Le niveau de titre devant être utilisé. */\n  @Input() headingLevel?: DsfrHeadingLevel;\n\n  /**\n   * Type d'erreur (404, 500,...).\n   */\n  @Input() error = 500;\n\n  /**\n   * Description de la page (par défaut: 'Essayez de rafraichir la page ou bien ressayez plus tard.').\n   */\n  @Input() description?: string;\n\n  /**\n   * Détail de la page (par défaut : 'Désolé, le service rencontre un problème, nous travaillons pour le résoudre le plus rapidement possible.').\n   */\n  @Input() detail?: string;\n\n  /**\n   * Conditionne l'affichage du bouton contactez-nous.\n   */\n  @Input() showContact = true;\n  /**\n   * Conditionne l'affichage du bouton page d'accueil'.\n   */\n  @Input() showBackToHome = false;\n\n  /**\n   * Chemin vers le répertoire exposant les pictogrammes illustratifs DSFR.\n   */\n  @Input() artworkDirPath?: string;\n\n  /**\n   * Chemin de l'image.\n   */\n  @Input() imagePath?: string;\n\n  /**\n   * Texte alternatif de l'image.\n   */\n  @Input() imageAlt?: string;\n\n  /**\n   * Indique que le bouton contact est cliqué.\n   */\n  @Output() contactSelect: EventEmitter<string> = new EventEmitter();\n  /**\n   * Indique que le bouton page d'accueil est cliqué.\n   */\n  @Output() backToHomeSelect: EventEmitter<string> = new EventEmitter();\n\n  protected noFirstNameModel: boolean = false;\n  private readonly config = inject<DsfrConfig>(DSFR_CONFIG_TOKEN);\n\n  constructor() {}\n\n  get pictoPath(): string | undefined {\n    return this.artworkDirPath;\n  }\n\n  /**\n   * Chemin des pictogrammes (du composant display) renseigné par le développeur.\n   *\n   * Note: ce chemin doit permettre de récupérer directement les fichiers SVG suivants : moon.svg, sun.svg, system.svg\n   *\n   * @deprecated Use `artworkDirPath` instead.\n   */\n  @Input() set pictoPath(path: string) {\n    this.artworkDirPath = path;\n  }\n\n  ngOnInit(): void {\n    if (this.artworkDirPath === undefined && this.config.artworkDirPath) {\n      this.artworkDirPath = this.config.artworkDirPath;\n    }\n  }\n\n  protected onContact(): void {\n    this.contactSelect.emit();\n  }\n\n  protected onHome(): void {\n    this.backToHomeSelect.emit();\n  }\n}\n\n/**\n * @deprecated use DsfrResponseComponent instead\n */\n@Component({\n  selector: 'dsfr-page-response',\n  templateUrl: './response.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [DsfrButtonComponent, DsfrButtonsGroupComponent, DsfrI18nPipe, CommonModule],\n})\nexport class DsfrPageResponseComponent extends DsfrResponseComponent {}\n","<div class=\"fr-container\">\n  <div\n    class=\"fr-my-7w fr-mt-md-12w fr-mb-md-10w fr-grid-row fr-grid-row--gutters fr-grid-row--middle fr-grid-row--center\">\n    <div class=\"fr-py-0 fr-col-12 fr-col-md-6\">\n      <!-- Titre du contenu -->\n      <ng-container>\n        <ng-container *ngTemplateOutlet=\"dsfrPageResponseHeading\"></ng-container>\n      </ng-container>\n      <p class=\"fr-text--sm fr-mb-3w\">Erreur {{ error }}</p>\n      <p class=\"fr-text--lead fr-mb-3w\">\n        {{ description ?? 'pageResponse.description' | dsfrI18n }}\n      </p>\n      <p class=\"fr-text--sm fr-mb-5w\">\n        {{ detail ?? ('pageResponse.detail' | dsfrI18n) }}\n      </p>\n      <dsfr-buttons-group *ngIf=\"showBackToHome || showContact\" inline=\"always\">\n        <dsfr-button\n          type=\"button\"\n          *ngIf=\"showBackToHome\"\n          label=\"Page d'accueil\"\n          variant=\"primary\"\n          (click)=\"onHome()\"></dsfr-button>\n        <dsfr-button\n          type=\"button\"\n          *ngIf=\"showContact\"\n          [label]=\"'response.contactUs' | dsfrI18n\"\n          variant=\"secondary\"\n          (click)=\"onContact()\"></dsfr-button>\n      </dsfr-buttons-group>\n    </div>\n    <div class=\"fr-col-12 fr-col-md-3 fr-col-offset-md-1 fr-px-6w fr-px-md-0 fr-py-0\">\n      @if (imagePath) {\n        <img class=\"fr-responsive-img\" [src]=\"imagePath\" [attr.alt]=\"imageAlt\" />\n      } @else {\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          class=\"fr-responsive-img fr-artwork\"\n          aria-hidden=\"true\"\n          width=\"160\"\n          height=\"200\"\n          viewBox=\"0 0 160 200\"\n          data-fr-js-ratio=\"true\">\n          <use class=\"fr-artwork-motif\" [attr.href]=\"pictoPath + '/background/ovoid.svg#artwork-motif'\"></use>\n          <use class=\"fr-artwork-motif\" [attr.href]=\"pictoPath + '/background/ovoid.svg#artwork-background'\"></use>\n          <g transform=\"translate(40, 60)\">\n            <use\n              class=\"fr-artwork-decorative\"\n              [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-decorative'\"></use>\n            <use\n              class=\"fr-artwork-minor\"\n              [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-minor'\"></use>\n            <use\n              class=\"fr-artwork-major\"\n              [attr.href]=\"pictoPath + '/pictograms/system/technical-error.svg#artwork-major'\"></use>\n          </g>\n        </svg>\n      }\n    </div>\n  </div>\n</div>\n\n<ng-template #dsfrPageResponseHeading>\n  <ng-container [ngSwitch]=\"headingLevel\">\n    <h1 *ngSwitchDefault>{{ heading }}</h1>\n    <h2 *ngSwitchCase=\"'H2'\">{{ heading ?? ('pageResponse.heading' | dsfrI18n) }}</h2>\n    <h3 *ngSwitchCase=\"'H3'\">{{ heading ?? ('pageResponse.heading' | dsfrI18n) }}</h3>\n    <h4 *ngSwitchCase=\"'H4'\">{{ heading ?? ('pageResponse.heading' | dsfrI18n) }}</h4>\n    <h5 *ngSwitchCase=\"'H5'\">{{ heading ?? ('pageResponse.heading' | dsfrI18n) }}</h5>\n    <h6 *ngSwitchCase=\"'H6'\">{{ heading ?? ('pageResponse.heading' | dsfrI18n) }}</h6>\n  </ng-container>\n</ng-template>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { DsfrButtonModule } from '../../components/button';\nimport { DsfrButtonsGroupModule } from '../../components/buttons-group';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrPageResponseComponent, DsfrResponseComponent } from './response.component';\n\n@NgModule({\n  exports: [DsfrResponseComponent],\n  imports: [CommonModule, DsfrButtonModule, DsfrButtonsGroupModule, DsfrI18nPipe, DsfrResponseComponent],\n})\nexport class DsfrResponseModule {}\n\n/**\n * @deprecated use DsfrResponseModule instead\n */\n@NgModule({\n  exports: [DsfrPageResponseComponent],\n  imports: [CommonModule, DsfrButtonModule, DsfrButtonsGroupModule, DsfrI18nPipe, DsfrPageResponseComponent],\n})\nexport class DsfrPageResponseModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, Input, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrFormFieldsetComponent, DsfrFormFieldsetElementDirective, DsfrFormInputComponent } from '../../forms';\nimport { DsfrInputText } from '../../shared/models/input.model';\n\nexport interface DsfrAddressDetails {\n  /** Data du champs \"numéro\" */\n  number?: DsfrInputText;\n  /** Data du champs \"voie\" */\n  street?: DsfrInputText;\n  /** Data du champs \"Bâtiment\" */\n  building?: DsfrInputText;\n  /** Data du champs \"Immeuble\" */\n  block?: DsfrInputText;\n  /** Data du champs \"Escalier\" */\n  stare?: DsfrInputText;\n  /** Data du champs \"numéro d'appartement\" */\n  apartment?: DsfrInputText;\n}\n\n@Component({\n  selector: 'dsfr-address',\n  templateUrl: './address.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    CommonModule,\n    DsfrFormFieldsetComponent,\n    DsfrFormInputComponent,\n    FormsModule,\n    DsfrFormFieldsetElementDirective,\n  ],\n})\nexport class DsfrAddressComponent {\n  /**\n   * Légende du fieldset.\n   */\n  @Input() legend = 'Adresse postale';\n\n  /**\n   * Data du champs adresse.\n   */\n  @Input({ required: true }) address!: DsfrInputText;\n\n  /**\n   * Data du champs complément d'adresse (optionnel).\n   */\n  @Input() addressSupplement?: DsfrInputText;\n\n  /**\n   * Data des champs complément d'adresse (\"Numéro\", \"Voie\", \"Bâtiment\", \"Immeuble\", \"Escalier\", \"Numéro d'appartement\").\n   */\n  @Input() addressDetails?: DsfrAddressDetails;\n  /**\n   * Data du champs code postal.\n   */\n  @Input({ required: true }) zipCode!: DsfrInputText;\n  /**\n   * Data du champs ville.\n   */\n  @Input({ required: true }) city!: DsfrInputText;\n  /**\n   * Data du champs lieux-dit/commune déléguée ou boîte postale.\n   */\n  @Input() locality?: DsfrInputText;\n}\n","<dsfr-fieldset [legend]=\"legend\" [legendSrOnly]=\"true\">\n  @if (!addressDetails) {\n    <dsfr-form-input\n      *fieldsetElement\n      [name]=\"address.name || 'address-line1'\"\n      [label]=\"address.label || 'Adresse'\"\n      [hint]=\"address.hint || 'Indication : numéro et voie'\"\n      [autocomplete]=\"address.autoComplete ?? ''\"\n      [message]=\"address.message\"\n      [messageSeverity]=\"address.messageSeverity\"\n      [required]=\"address.required ?? false\"\n      [inputId]=\"address.id ?? ''\"\n      [disabled]=\"address.disabled ?? false\"\n      [(ngModel)]=\"address.value\"></dsfr-form-input>\n\n    @if (addressSupplement) {\n      <dsfr-form-input\n        *fieldsetElement\n        [name]=\"addressSupplement.name || 'address-line2'\"\n        [label]=\"addressSupplement.label || 'Complément d\\'adresse (optionnel)'\"\n        [hint]=\"addressSupplement.hint || 'Indication : bâtiment, immeuble, escalier et numéro d\\’appartement'\"\n        [autocomplete]=\"addressSupplement.autoComplete ?? ''\"\n        [message]=\"addressSupplement.message\"\n        [messageSeverity]=\"addressSupplement.messageSeverity\"\n        [required]=\"addressSupplement.required ?? false\"\n        [inputId]=\"addressSupplement.id ?? ''\"\n        [disabled]=\"addressSupplement.disabled ?? false\"\n        [(ngModel)]=\"addressSupplement.value\"></dsfr-form-input>\n    }\n  }\n\n  @if (addressDetails) {\n    @if (addressDetails.number) {\n      <dsfr-form-input\n        *fieldsetElement=\"'fr-fieldset__element--inline fr-fieldset__element--inline-grow fr-fieldset__element--number'\"\n        [name]=\"addressDetails.number.name || 'number'\"\n        [label]=\"addressDetails.number.label || 'Numéro'\"\n        [hint]=\"addressDetails.number.hint\"\n        [autocomplete]=\"addressDetails.number.autoComplete ?? ''\"\n        [message]=\"addressDetails.number.message\"\n        [messageSeverity]=\"addressDetails.number.messageSeverity\"\n        [required]=\"addressDetails.number.required ?? false\"\n        [inputId]=\"addressDetails.number.id ?? ''\"\n        [disabled]=\"addressDetails.number.disabled ?? false\"\n        [(ngModel)]=\"addressDetails.number.value\"></dsfr-form-input>\n    }\n\n    @if (addressDetails.street) {\n      <dsfr-form-input\n        *fieldsetElement=\"'fr-fieldset__element--inline fr-fieldset__element--inline-grow'\"\n        [name]=\"addressDetails.street.name || 'street'\"\n        [label]=\"addressDetails.street.label || 'Voie'\"\n        [hint]=\"addressDetails.street.hint\"\n        [autocomplete]=\"addressDetails.street.autoComplete ?? ''\"\n        [message]=\"addressDetails.street.message\"\n        [messageSeverity]=\"addressDetails.street.messageSeverity\"\n        [required]=\"addressDetails.street.required ?? false\"\n        [inputId]=\"addressDetails.street.id ?? ''\"\n        [disabled]=\"addressDetails.street.disabled ?? false\"\n        [(ngModel)]=\"addressDetails.street.value\"></dsfr-form-input>\n    }\n\n    @if (addressDetails.building) {\n      <dsfr-form-input\n        *fieldsetElement\n        [name]=\"addressDetails.building.name || 'building'\"\n        [label]=\"addressDetails.building.label || 'Bâtiment'\"\n        [hint]=\"addressDetails.building.hint\"\n        [autocomplete]=\"addressDetails.building.autoComplete ?? ''\"\n        [message]=\"addressDetails.building.message\"\n        [messageSeverity]=\"addressDetails.building.messageSeverity\"\n        [required]=\"addressDetails.building.required ?? false\"\n        [inputId]=\"addressDetails.building.id ?? ''\"\n        [disabled]=\"addressDetails.building.disabled ?? false\"\n        [(ngModel)]=\"addressDetails.building.value\"></dsfr-form-input>\n    }\n\n    @if (addressDetails.block) {\n      <dsfr-form-input\n        *fieldsetElement\n        [name]=\"addressDetails.block.name || 'block'\"\n        [label]=\"addressDetails.block.label || 'Immeuble'\"\n        [hint]=\"addressDetails.block.hint\"\n        [autocomplete]=\"addressDetails.block.autoComplete ?? ''\"\n        [message]=\"addressDetails.block.message\"\n        [messageSeverity]=\"addressDetails.block.messageSeverity\"\n        [required]=\"addressDetails.block.required ?? false\"\n        [inputId]=\"addressDetails.block.id ?? ''\"\n        [disabled]=\"addressDetails.block.disabled ?? false\"\n        [(ngModel)]=\"addressDetails.block.value\"></dsfr-form-input>\n    }\n\n    @if (addressDetails.stare) {\n      <dsfr-form-input\n        *fieldsetElement\n        [name]=\"addressDetails.stare.name || 'stare'\"\n        [label]=\"addressDetails.stare.label || 'Escalier'\"\n        [hint]=\"addressDetails.stare.hint\"\n        [autocomplete]=\"addressDetails.stare.autoComplete ?? ''\"\n        [message]=\"addressDetails.stare.message\"\n        [messageSeverity]=\"addressDetails.stare.messageSeverity\"\n        [required]=\"addressDetails.stare.required ?? false\"\n        [inputId]=\"addressDetails.stare.id ?? ''\"\n        [disabled]=\"addressDetails.stare.disabled ?? false\"\n        [(ngModel)]=\"addressDetails.stare.value\"></dsfr-form-input>\n    }\n\n    @if (addressDetails.apartment) {\n      <dsfr-form-input\n        *fieldsetElement\n        [name]=\"addressDetails.apartment.name || 'apartment'\"\n        [label]=\"addressDetails.apartment.label || 'Numéro d\\'appartement'\"\n        [hint]=\"addressDetails.apartment.hint\"\n        [autocomplete]=\"addressDetails.apartment.autoComplete ?? ''\"\n        [message]=\"addressDetails.apartment.messageSeverity\"\n        [messageSeverity]=\"addressDetails.apartment.messageSeverity\"\n        [required]=\"addressDetails.apartment.required ?? false\"\n        [inputId]=\"addressDetails.apartment.id ?? ''\"\n        [disabled]=\"addressDetails.apartment.disabled ?? false\"\n        [(ngModel)]=\"addressDetails.apartment.value\"></dsfr-form-input>\n    }\n  }\n\n  @if (locality) {\n    <dsfr-form-input\n      *fieldsetElement\n      [name]=\"locality.name || 'address-level3'\"\n      [label]=\"locality.label || 'Lieu-dit, commune déléguée ou boîte postale'\"\n      [hint]=\"locality.hint\"\n      [autocomplete]=\"locality.autoComplete ?? ''\"\n      [message]=\"locality.message\"\n      [messageSeverity]=\"locality.messageSeverity\"\n      [required]=\"locality.required ?? false\"\n      [inputId]=\"locality.id ?? ''\"\n      [disabled]=\"locality.disabled ?? false\"\n      [(ngModel)]=\"locality.value\"></dsfr-form-input>\n  }\n\n  <dsfr-form-input\n    *fieldsetElement=\"'fr-fieldset__element--inline fr-fieldset__element--postal'\"\n    [name]=\"zipCode.name || 'postal-code'\"\n    [label]=\"zipCode.label || 'Code postal'\"\n    [hint]=\"zipCode.hint || 'Format attendu : 5 chiffres'\"\n    [autocomplete]=\"zipCode.autoComplete ?? ''\"\n    [message]=\"zipCode.message ?? ''\"\n    [messageSeverity]=\"zipCode.messageSeverity\"\n    [required]=\"zipCode.required ?? false\"\n    [inputId]=\"zipCode.id ?? ''\"\n    [disabled]=\"zipCode.disabled ?? false\"\n    [(ngModel)]=\"zipCode.value\"></dsfr-form-input>\n\n  <!-- BUG Classe 'fr-fieldset__element--inline@md' inconnue en DSFR 1.10.0 -->\n  <dsfr-form-input\n    *fieldsetElement=\"'fr-fieldset__element--inline@md fr-fieldset__element--inline-grow'\"\n    [name]=\"city.name || 'address-level2'\"\n    [label]=\"city.label || 'Ville ou commune'\"\n    [hint]=\"city.hint || 'Exemple : Montpellier'\"\n    [autocomplete]=\"city.autoComplete ?? ''\"\n    [message]=\"city.message\"\n    [messageSeverity]=\"city.messageSeverity\"\n    [required]=\"city.required ?? false\"\n    [inputId]=\"city.id ?? ''\"\n    [disabled]=\"city.disabled ?? false\"\n    [(ngModel)]=\"city.value\"></dsfr-form-input>\n</dsfr-fieldset>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrFormInputComponent } from '../../forms';\nimport { DsfrFormFieldsetComponent } from '../../forms/fieldset';\nimport { DsfrAddressComponent } from './address.component';\n\n@NgModule({\n  exports: [DsfrAddressComponent],\n  imports: [CommonModule, DsfrFormFieldsetComponent, DsfrFormInputComponent, FormsModule, DsfrAddressComponent],\n})\nexport class DsfrAddressModule {}\n","import { LoggerService } from '../../shared/services/logger.service';\nimport { DateUtils } from '../../shared/utils/date-utils';\n\nexport const DATE_ERROR = {\n  INVALID_FORMAT_DAY: 'err_invalid_format_day',\n  INVALID_FORMAT_MONTH: 'err_invalid_format_month',\n  INVALID_FORMAT_YEAR: 'err_invalid_format_year',\n  INVALID_DAY: 'err_invalid_day',\n  INVALID_MONTH: 'err_invalid_month',\n  INVALID_DATE: 'err_invalid_date',\n  REQUIRED: 'err_required',\n};\n\n/**\n * Cette classe représente les valeurs saisies par un utilisateur sur 3 champs distincts, jour, mois année.\n * 🔥 Bien que ces propriétés soient en théorie des nombres, à l'exécution, on reçoit des strings.\n * - Chaque valeur est initialisée à `undefined` mais peut aussi avoir la valeur \"\" (chaine vide).\n * 👆 Par défaut la date est une date UTC.\n * L'objectif de la classe est de :\n * - Gérer des dates saisies par l'utilisateur, potentiellement avec des valeurs `undefined` ou \"\"\n * - Manipuler les mois de 1 à 12 (et non de 0 à 11)\n * - D'encapsuler l'api [Date](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Date) et plus tard l'API Temporal\n */\nexport class DateModel {\n  // Une date est le nombre de millisecondes écoulées depuis le premier janvier 1970 sur l'échelle UTC (idem epoch UNIX)\n  // On distingue les dates relatives au temps universal coordonné (UTC) du temps de la machine de l'utilisateur.\n  fullYear: number | undefined;\n  monthNum: number | undefined;\n  dayNum: number | undefined;\n  hourNum: number | undefined;\n\n  constructor(fullYear?: number, monthNum?: number, dayNum?: number, hourNum: number = 0) {\n    this.fullYear = fullYear;\n    this.monthNum = monthNum;\n    this.dayNum = dayNum;\n    this.hourNum = hourNum;\n  }\n\n  private get month(): number {\n    return this.monthNum ? this.monthNum - 1 : -1;\n  }\n\n  /**\n   * @param value : 3 formes basiques pour utiliser la méthode\n   * - string : Une chaîne de caractères qui représente une date, selon le format reconnu par la méthode `Date.parse()` (ex : '04 Dec 1995 00:12:00 GMT')\n   * - number : Une valeur entière qui représente le nombre de millisecondes depuis le premier janvier 1970\n   * - date : Un objet de type date\n   */\n  static of(value: string | number | Date | undefined | null, loggerService: LoggerService | any): DateModel {\n    const date = DateUtils.dateUtcOfWithHours(value);\n\n    if (!date && typeof value === 'string') {\n      loggerService.warn(`La date '${value}' n'est pas valide`);\n    }\n\n    if (!date) {\n      return new DateModel();\n    } else {\n      return new DateModel(date.getFullYear(), date.getMonth() + 1, date.getDate(), date.getHours());\n    }\n  }\n\n  isValid(): boolean {\n    const date = new Date(this.fullYear!, this.month!, this.dayNum);\n\n    // Nécessaire car les années à deux digits sont prises en compte comme des dates de format 19XX\n    if (DateUtils.isTwoDigitsYear(this.fullYear!)) {\n      date.setFullYear(this.fullYear!);\n    }\n\n    return (\n      date.getFullYear() === Number(this.fullYear) &&\n      date.getMonth() === Number(this.month) &&\n      date.getDate() === Number(this.dayNum)\n    );\n  }\n\n  toDate(hourTimezoneOffset?: number): Date | undefined {\n    let date = undefined;\n    let fullYear = Number(this.fullYear);\n    let monthNum = Number(this.monthNum);\n    let dayNum = Number(this.dayNum);\n    let hourNum = Number(this.hourNum);\n\n    // on vérifie quand même qu'on a bien affaire à des nombres\n    if (\n      fullYear !== null &&\n      fullYear !== undefined &&\n      monthNum !== null &&\n      monthNum !== undefined &&\n      dayNum !== null &&\n      dayNum !== undefined &&\n      hourNum !== null &&\n      hourNum !== undefined &&\n      !isNaN(fullYear) &&\n      !isNaN(monthNum) &&\n      !isNaN(dayNum) &&\n      !isNaN(hourNum) &&\n      1 <= monthNum &&\n      monthNum <= 12 &&\n      1 <= dayNum &&\n      dayNum <= 31\n    ) {\n      const hourToOutput = hourTimezoneOffset ?? hourNum;\n\n      const dateWithoutTwoDigitsProblems = DateUtils.createDate(\n        fullYear,\n        this.month,\n        dayNum,\n        hourToOutput,\n        typeof hourTimezoneOffset === 'number',\n      );\n\n      date = this.isValid() ? dateWithoutTwoDigitsProblems : undefined;\n    }\n\n    return date;\n  }\n\n  /**\n   * Valide le model.\n   * @param required indique si la date est requise ou non\n   * @return une liste de codes d'erreur ou tableau vide\n   */\n  validate(required = false): string[] {\n    const errors = [];\n    const dayNum = this.dayNum;\n    const monthNum = this.monthNum;\n    const fullYear = this.fullYear;\n\n    // Format\n    if (!this.isNumber(dayNum) || !this.isNumber(monthNum) || !this.isNumber(fullYear)) {\n      if (!this.isNumber(dayNum)) {\n        errors.push(DATE_ERROR.INVALID_FORMAT_DAY);\n      }\n      if (!this.isNumber(monthNum)) {\n        errors.push(DATE_ERROR.INVALID_FORMAT_MONTH);\n      }\n      if (!this.isNumber(fullYear)) {\n        errors.push(DATE_ERROR.INVALID_FORMAT_YEAR);\n      }\n    } else {\n      // Erreur sur le jour, le mois\n      if (dayNum && (dayNum < 1 || dayNum > 31)) errors.push(DATE_ERROR.INVALID_DAY);\n      if (monthNum && (monthNum < 1 || monthNum > 12)) errors.push(DATE_ERROR.INVALID_MONTH);\n    }\n\n    // All touched : erreur sur la date elle-même\n    if (errors.length === 0 && this.allTouched()) {\n      // Tous les champs sont remplis, on vérifie la date\n      if (this.allFilled()) {\n        if (!this.isValid()) errors.push(DATE_ERROR.INVALID_DATE);\n      }\n      // Au moins 1 champ n'est pas rempli\n      else {\n        if (required) errors.push(DATE_ERROR.REQUIRED);\n      }\n    }\n\n    return errors;\n  }\n\n  private allTouched(): boolean {\n    return this.fullYear !== undefined && this.monthNum !== undefined && this.dayNum !== undefined;\n  }\n\n  private allFilled(): boolean {\n    return !!this.dayNum && !!this.monthNum && !!this.fullYear;\n  }\n\n  /** @return true si undefined ou number */\n  private isNumber(value: any) {\n    return value === undefined || !isNaN(value);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  booleanAttribute,\n  Component,\n  EventEmitter,\n  forwardRef,\n  inject,\n  Input,\n  Output,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {\n  AbstractControl,\n  FormsModule,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator,\n} from '@angular/forms';\nimport { DsfrFormFieldsetComponent, DsfrFormFieldsetElementDirective, DsfrFormInputComponent } from '../../forms';\nimport { DefaultValueAccessorComponent, DsfrI18nPipe, DsfrI18nService, DsfrSeverity } from '../../shared';\nimport { LoggerService } from '../../shared/services/logger.service';\nimport { DateModel } from './date.model';\n\nconst PATH_ERR_I18N = {\n  err_invalid_format_day: 'date.error.invalid.format_day',\n  err_invalid_format_month: 'date.error.invalid.format_month',\n  err_invalid_format_year: 'date.error.invalid.format_year',\n  err_invalid_day: 'date.error.invalid.day',\n  err_invalid_month: 'date.error.invalid.month',\n  err_invalid_date: 'date.error.invalid.date',\n  err_required: 'date.error.required',\n};\n\n@Component({\n  selector: 'dsfr-date',\n  templateUrl: './date.component.html',\n  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DsfrDateComponent),\n      multi: true,\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => DsfrDateComponent),\n      multi: true,\n    },\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    DsfrFormFieldsetComponent,\n    DsfrFormInputComponent,\n    DsfrI18nPipe,\n    DsfrFormFieldsetElementDirective,\n  ],\n})\nexport class DsfrDateComponent extends DefaultValueAccessorComponent<Date> implements Validator {\n  /**\n   * Indique si les champs de saisie doivent être auto-complétés à partir de la date de naissance de l'utilisateur.\n   */\n  @Input() autocomplete = false;\n\n  /**\n   * Positionne le champ en statut `ERROR` avec le message indiqué.\n   * @deprecated (since 1.15) utiliser message/messageSeverity à la place\n   */\n  @Input() error?: string | string[];\n\n  /**\n   * Texte(s) de description additionnel(s).\n   */\n  @Input() hint?: string | string[];\n\n  /**\n   * Légende du fieldset.\n   */\n  @Input() legend?: string;\n\n  /**\n   * Indique si la date est obligatoire.\n   */\n  @Input({ transform: booleanAttribute }) required = false;\n\n  /** Attribut readonly de l'input */\n  @Input({ transform: booleanAttribute }) readonly?: boolean;\n\n  /** Permet de rétablir une graisse standard sur la légende. */\n  @Input({ transform: booleanAttribute }) legendRegular: boolean = false;\n\n  /**\n   * Message d'information lié au composant\n   */\n  @Input() message: string | string[] | undefined = undefined;\n\n  /**\n   * Représente la sévérité du message.\n   */\n  @Input() messageSeverity?: DsfrSeverity;\n\n  /**\n   * Positionne le champ en statut `VALID` avec le message indiqué.\n   * @deprecated (since 1.15) utiliser message/messageSeverity à la place\n   */\n  @Input() valid: string | undefined = undefined;\n\n  /**\n   * Signale le changement de date.\n   */\n  // Certainement inutile vs ngModelChange, à voir !\n  @Output() dateChange: EventEmitter<Date> = new EventEmitter();\n\n  /** @internal */ dateModel = new DateModel(); // View-Model\n  /** @internal */ validationErrors: ValidationErrors | null = null;\n\n  protected readonly i18n = inject(DsfrI18nService);\n  private readonly logger = inject(LoggerService);\n\n  get internalError(): string[] | undefined {\n    const internalError =\n      this.validationErrors === null ? [] : this.validationErrors.map((err: {}) => Object.values(err)[0]);\n    return internalError.length > 0 ? internalError : undefined;\n  }\n\n  // Sur changement de la date, on réécrit jour mois année\n  /** @internal */\n  override writeValue(value: Date | undefined) {\n    // Bien que la value soit de type date, le développeur peut, à notre insu, nous envoyer une chaine ou un nombre (comme Storybook), ex : Date.now()\n    this.dateModel = DateModel.of(value, this.logger);\n    super.writeValue(this.dateModel.toDate());\n    this.validationErrors = this.internalValidate(); // la validation doit être rejouée sur une modification programmatique\n\n    this.dateChange.emit(this.value);\n  }\n\n  // Sur changement du modèle, c.-à-d. jour, mois ou année, on récrit la date\n  /** @internal */\n  onFocusOut() {\n    const { fullYear, monthNum, dayNum } = this.dateModel;\n    const hourTimezoneOffset = new Date(fullYear!, monthNum! - 1, dayNum!).getTimezoneOffset() / 60;\n\n    this.validationErrors = this.internalValidate();\n    this.value = this.dateModel.toDate(hourTimezoneOffset);\n    this.dateChange.emit(this.value);\n  }\n\n  /** @internal */\n  registerOnValidatorChange(fn: () => void): void {\n    this.fnOnValidatorChange = fn;\n  }\n\n  /** @internal */\n  validate(control: AbstractControl): ValidationErrors | null {\n    return this.internalValidate();\n  }\n\n  /** Permet de stocker la fonction pouvant être appelée pour forcer une revalidation. */\n  private fnOnValidatorChange = () => {};\n\n  /**\n   * Valide le composant et retourne ValidationErrors\n   */\n  private internalValidate(): ValidationErrors | null {\n    const errors = this.dateModel.validate(this.required);\n\n    // Pas d'erreur, on retourne null\n    if (errors.length === 0) return null;\n\n    // On transforme la liste des codes d'erreur en ValidationErrors\n    return errors.map((codeErr) => {\n      // @ts-ignore\n      const pathErr = PATH_ERR_I18N[codeErr];\n      const labelErr = this.i18n.t(pathErr);\n      const validationErr = {};\n      // @ts-ignore\n      validationErr[codeErr] = labelErr;\n      return validationErr;\n    });\n  }\n}\n","<dsfr-fieldset\n  [disabled]=\"disabled\"\n  [legend]=\"legend\"\n  [legendRegular]=\"legendRegular\"\n  [hint]=\"hint\"\n  [error]=\"error\"\n  [valid]=\"valid\"\n  [message]=\"message\"\n  [messageSeverity]=\"messageSeverity\"\n  [internalError]=\"internalError\">\n  <!-- Day -->\n  <dsfr-form-input\n    *fieldsetElement=\"'fr-fieldset__element--inline fr-fieldset__element--number'\"\n    [label]=\"'date.day.label' | dsfrI18n\"\n    [maxLength]=\"2\"\n    [hint]=\"'date.day.hint' | dsfrI18n\"\n    [autocomplete]=\"autocomplete ? 'bday-day' : undefined\"\n    [required]=\"required\"\n    [disabled]=\"disabled\"\n    [readonly]=\"readonly\"\n    [(ngModel)]=\"dateModel.dayNum\"\n    (focusout)=\"onFocusOut()\"></dsfr-form-input>\n  <!-- Month -->\n  <dsfr-form-input\n    *fieldsetElement=\"'fr-fieldset__element--inline fr-fieldset__element--number'\"\n    [label]=\"'date.month.label' | dsfrI18n\"\n    [maxLength]=\"2\"\n    [hint]=\"'date.month.hint' | dsfrI18n\"\n    [autocomplete]=\"autocomplete ? 'bday-month' : undefined\"\n    [required]=\"required\"\n    [disabled]=\"disabled\"\n    [readonly]=\"readonly\"\n    [(ngModel)]=\"dateModel.monthNum\"\n    (focusout)=\"onFocusOut()\"></dsfr-form-input>\n  <!-- Year -->\n  <dsfr-form-input\n    *fieldsetElement=\"'fr-fieldset__element--inline fr-fieldset__element--inline-grow fr-fieldset__element--year'\"\n    [label]=\"'date.year.label' | dsfrI18n\"\n    [maxLength]=\"4\"\n    [hint]=\"'date.year.hint' | dsfrI18n\"\n    [autocomplete]=\"autocomplete ? 'bday-year' : undefined\"\n    [required]=\"required\"\n    [disabled]=\"disabled\"\n    [readonly]=\"readonly\"\n    [(ngModel)]=\"dateModel.fullYear\"\n    (focusout)=\"onFocusOut()\"></dsfr-form-input>\n</dsfr-fieldset>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrFormInputComponent } from '../../forms';\nimport { DsfrFormFieldsetComponent } from '../../forms/fieldset';\nimport { DsfrI18nPipe } from '../../shared/i18n/i18n.pipe';\nimport { DsfrDateComponent } from './date.component';\n\n@NgModule({\n  exports: [DsfrDateComponent],\n  imports: [\n    CommonModule,\n    FormsModule,\n    DsfrFormFieldsetComponent,\n    DsfrFormInputComponent,\n    DsfrI18nPipe,\n    DsfrDateComponent,\n  ],\n})\nexport class DsfrDateModule {}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrButtonComponent } from '../../components';\nimport {\n  DsfrFormCheckboxComponent,\n  DsfrFormFieldsetComponent,\n  DsfrFormFieldsetElementDirective,\n  DsfrFormInputComponent,\n} from '../../forms';\nimport { DsfrFormSelectComponent } from '../../forms/form-select';\nimport { DsfrI18nPipe } from '../../shared';\nimport { DsfrInputText } from '../../shared/models/input.model';\nimport { DsfrSelect } from '../../shared/models/select.model';\n\n@Component({\n  selector: 'dsfr-name',\n  templateUrl: './name.component.html',\n  encapsulation: ViewEncapsulation.None,\n  imports: [\n    CommonModule,\n    DsfrFormFieldsetComponent,\n    DsfrFormInputComponent,\n    DsfrFormCheckboxComponent,\n    DsfrButtonComponent,\n    DsfrFormSelectComponent,\n    FormsModule,\n    DsfrFormFieldsetElementDirective,\n    DsfrI18nPipe,\n  ],\n})\nexport class DsfrNameComponent {\n  /**\n   * Légende du fieldset.\n   */\n  @Input() legend?: string;\n\n  /**\n   * Data du champ name.\n   */\n  @Input({ required: true }) lastName!: DsfrInputText;\n\n  /**\n   * Permet d'indiquer un nom d'usage (optionnel).\n   */\n  @Input() usualName?: DsfrInputText;\n\n  /**\n   * Data du champ firstname.\n   */\n  @Input({ required: true }) firstNames!: DsfrInputText[];\n\n  /**\n   * Permet d'afficher l'option \"Je n'ai pas de prénom\".\n   */\n  @Input() noFirstName = false;\n\n  /**\n   * Permet d'afficher un bouton qui ajoute un nouveau champ de de saisi pour un prénom additionnel.\n   */\n  @Input() addFirstName = false;\n\n  /**\n   * Data du selecteur de pays (optionnel).\n   */\n  @Input() country?: DsfrSelect;\n\n  /**\n   * Notifie que l'utilisateur a cliqué sur le bouton d'ajout de prénom.\n   */\n  @Output() addFirstNameSelect: EventEmitter<string> = new EventEmitter();\n\n  /**\n   * Notifie la suppression d'un prénom additionnel (le tableau 'firstnames' devrait être mis à jour en conséquence).\n   */\n  @Output() deleteFirstNameSelect: EventEmitter<number> = new EventEmitter();\n\n  protected noFirstNameModel: boolean = false;\n\n  protected onAddFirstNameInput(): void {\n    this.addFirstNameSelect.emit();\n  }\n\n  protected onDeleteFirstNameInput(index: number): void {\n    this.deleteFirstNameSelect.emit(index);\n  }\n}\n","<dsfr-fieldset [legend]=\"'name.legend' | dsfrI18n\" [legendSrOnly]=\"true\">\n  @if (country) {\n    <dsfr-form-select\n      *fieldsetElement\n      [label]=\"country.label || 'name.country.label' | dsfrI18n\"\n      [placeholder]=\"country.placeHolder || 'name.country.placeholder' | dsfrI18n\"\n      [options]=\"country.options ?? []\"\n      [(ngModel)]=\"country.value\"></dsfr-form-select>\n  }\n\n  <dsfr-form-input\n    *fieldsetElement\n    [name]=\"lastName.name || 'family-name'\"\n    [spellcheck]=\"false\"\n    [label]=\"lastName.label || 'name.lastname' | dsfrI18n\"\n    [autocomplete]=\"'family-name'\"\n    [(ngModel)]=\"lastName.value\"></dsfr-form-input>\n\n  @if (usualName) {\n    <dsfr-form-input\n      *fieldsetElement\n      [name]=\"usualName.name || 'married-name'\"\n      [spellcheck]=\"false\"\n      [autocomplete]=\"'family-name'\"\n      [label]=\"usualName.label || 'name.usualName.label' | dsfrI18n\"\n      [hint]=\"usualName.hint || 'name.usualName.hint' | dsfrI18n\"\n      [(ngModel)]=\"usualName.value\"></dsfr-form-input>\n  }\n\n  @if (!noFirstName) {\n    @for (item of firstNames; track index; let index = $index) {\n      <dsfr-form-input\n        *fieldsetElement\n        [name]=\"item.name || 'given-name' + index\"\n        [spellcheck]=\"false\"\n        [autocomplete]=\"'given-name'\"\n        [label]=\"item.label || 'name.firstname' | dsfrI18n\"\n        [(ngModel)]=\"item.value\"></dsfr-form-input>\n    }\n\n    @if (addFirstName) {\n      <dsfr-button\n        *fieldsetElement\n        [label]=\"'name.addFirstName' | dsfrI18n\"\n        iconPosition=\"left\"\n        variant=\"tertiary\"\n        buttonSize=\"SM\"\n        icon=\"fr-icon-add-line\"\n        [disabled]=\"noFirstNameModel === true\"\n        (click)=\"onAddFirstNameInput()\"></dsfr-button>\n    }\n  }\n\n  @if (noFirstName) {\n    <dsfr-fieldset *fieldsetElement [legend]=\"'name.legendFirstName' | dsfrI18n\" [legendSrOnly]=\"true\">\n      @for (item of firstNames; track index; let index = $index) {\n        @if (index === 0) {\n          <dsfr-form-input\n            *fieldsetElement\n            [disabled]=\"item.disabled || noFirstNameModel === true\"\n            [name]=\"item.name || 'given-name' + index\"\n            [spellcheck]=\"false\"\n            [autocomplete]=\"'given-name'\"\n            [label]=\"item.label || 'name.firstname' | dsfrI18n\"\n            [(ngModel)]=\"item.value\"></dsfr-form-input>\n        }\n        @if (index > 0) {\n          <dsfr-form-input\n            *fieldsetElement\n            [disabled]=\"item.disabled || noFirstNameModel === true\"\n            [name]=\"item.name || 'given-name' + index\"\n            [spellcheck]=\"false\"\n            [autocomplete]=\"'given-name'\"\n            [label]=\"item.label || 'name.firstname' | dsfrI18n\"\n            inputWrapMode=\"action\"\n            [buttonIcon]=\"index !== 0 ? 'fr-icon-delete-line' : undefined\"\n            buttonVariant=\"tertiary\"\n            (buttonSelect)=\"onDeleteFirstNameInput(index)\"\n            [(ngModel)]=\"item.value\"></dsfr-form-input>\n        }\n      }\n\n      @if (addFirstName) {\n        <dsfr-button\n          *fieldsetElement\n          [label]=\"'name.addFirstName' | dsfrI18n\"\n          iconPosition=\"left\"\n          variant=\"tertiary\"\n          buttonSize=\"SM\"\n          icon=\"fr-icon-add-line\"\n          [disabled]=\"noFirstNameModel === true\"\n          (click)=\"onAddFirstNameInput()\"></dsfr-button>\n      }\n\n      <dsfr-form-checkbox\n        *fieldsetElement\n        [small]=\"true\"\n        name=\"firstname-disabled\"\n        [label]=\"'name.noFirstName' | dsfrI18n\"\n        [(ngModel)]=\"noFirstNameModel\"></dsfr-form-checkbox>\n    </dsfr-fieldset>\n  }\n</dsfr-fieldset>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DsfrButtonComponent } from '../../components/button';\nimport { DsfrFormCheckboxComponent, DsfrFormInputComponent } from '../../forms';\nimport { DsfrFormFieldsetComponent } from '../../forms/fieldset';\nimport { DsfrFormSelectComponent } from '../../forms/form-select';\nimport { DsfrNameComponent } from './name.component';\n\n@NgModule({\n  exports: [DsfrNameComponent],\n  imports: [\n    CommonModule,\n    DsfrFormFieldsetComponent,\n    DsfrFormInputComponent,\n    DsfrFormCheckboxComponent,\n    DsfrButtonComponent,\n    DsfrFormSelectComponent,\n    FormsModule,\n    DsfrNameComponent,\n  ],\n})\nexport class DsfrNameModule {}\n","/* Public API Surface of ngx-dsfr */\nexport * from './lib/components';\nexport * from './lib/components/follow'; // Ici afin d'éviter une erreur de dépendances cycliques pendant la compilation\nexport * from './lib/forms';\nexport * from './lib/forms/form-email'; // Ici afin d'éviter une erreur de dépendances cycliques pendant la compilation\nexport * from './lib/forms/form-password'; // Ici afin d'éviter une erreur de dépendances cycliques pendant la compilation\nexport * from './lib/forms/form-select'; // Ici afin d'éviter une erreur de dépendances cycliques pendant la compilation\nexport * from './lib/pages';\nexport * from './lib/patterns';\n\n// shared\nexport * from './lib/shared';\n\n// Utilisé par les extensions (en plus des modèles)\nexport * from './lib/shared/components/default-control.component';\nexport * from './lib/shared/components/default-value-accessor.component';\nexport * from './lib/shared/components/input-group';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuidv4","i1.LoggerService","i1.LangService","i1","i3.DsfrTranslateComponent","i2"],"mappings":"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"}