diff --git a/packages/sdg/src/lib/sequential-links/index.ts b/packages/sdg/src/lib/sequential-links/index.ts
new file mode 100644
index 0000000..022dbd0
--- /dev/null
+++ b/packages/sdg/src/lib/sequential-links/index.ts
@@ -0,0 +1,2 @@
+export * from './sequential-links.component';
+export * from './sequential-links.interface';
diff --git a/packages/sdg/src/lib/sequential-links/sequential-links.component.html b/packages/sdg/src/lib/sequential-links/sequential-links.component.html
new file mode 100644
index 0000000..6194d63
--- /dev/null
+++ b/packages/sdg/src/lib/sequential-links/sequential-links.component.html
@@ -0,0 +1,20 @@
+
+ @if (previous()) {
+
+
arrow_left_alt
+
+
Précédent
+
{{ previous()?.text }}
+
+
+ }
+ @if (next()) {
+
+
arrow_right_alt
+
+
Suivant
+
{{ next()?.text }}
+
+
+ }
+
diff --git a/packages/sdg/src/lib/sequential-links/sequential-links.component.scss b/packages/sdg/src/lib/sequential-links/sequential-links.component.scss
new file mode 100644
index 0000000..b2bb440
--- /dev/null
+++ b/packages/sdg/src/lib/sequential-links/sequential-links.component.scss
@@ -0,0 +1,51 @@
+@use 'sass:map';
+@use '../core/theme/colors';
+
+.container {
+ display: flex;
+ flex-flow: column;
+ min-height: 88px;
+}
+
+.arrow {
+ font-variation-settings: 'wght' 350;
+}
+
+.link {
+ display: flex;
+ padding: 16px 16px 16px 8px;
+ column-gap: 8px;
+ border-top: 1px solid colors.$grey-light;
+ cursor: pointer;
+
+ &:hover {
+ background-color: colors.$grey-pale;
+
+ .text {
+ text-decoration: underline;
+ }
+ }
+
+ &:focus {
+ outline: solid 2px colors.$blue-light;
+ outline-offset: 0;
+ }
+
+ &:last-of-type {
+ border-bottom: 1px solid colors.$grey-light;
+ }
+}
+
+.content {
+ display: flex;
+ flex-flow: column;
+ row-gap: 8px;
+}
+
+.text {
+ color: colors.$blue-piv;
+}
+
+p {
+ margin: 0px;
+}
diff --git a/packages/sdg/src/lib/sequential-links/sequential-links.component.spec.ts b/packages/sdg/src/lib/sequential-links/sequential-links.component.spec.ts
new file mode 100644
index 0000000..27a0fd2
--- /dev/null
+++ b/packages/sdg/src/lib/sequential-links/sequential-links.component.spec.ts
@@ -0,0 +1,24 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { TEST_CONFIG } from '../../test-config';
+import { SequentialLinksComponent } from './sequential-links.component';
+
+describe('SequentialLinksComponent', () => {
+ let component: SequentialLinksComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [SequentialLinksComponent],
+ providers: [...TEST_CONFIG.providers!]
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(SequentialLinksComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/packages/sdg/src/lib/sequential-links/sequential-links.component.ts b/packages/sdg/src/lib/sequential-links/sequential-links.component.ts
new file mode 100644
index 0000000..3ecbfd8
--- /dev/null
+++ b/packages/sdg/src/lib/sequential-links/sequential-links.component.ts
@@ -0,0 +1,30 @@
+import { NgFor, NgIf } from '@angular/common';
+import { ChangeDetectionStrategy, Component, input } from '@angular/core';
+import { MatIconModule } from '@angular/material/icon';
+import { ActivatedRoute, Router, RouterLink } from '@angular/router';
+
+import { SequentialLink } from './sequential-links.interface';
+
+@Component({
+ selector: 'sdg-sequential-links',
+ standalone: true,
+ imports: [NgIf, NgFor, MatIconModule, RouterLink],
+ changeDetection: ChangeDetectionStrategy.OnPush,
+ templateUrl: './sequential-links.component.html',
+ styleUrls: ['./sequential-links.component.scss']
+})
+export class SequentialLinksComponent {
+ constructor(
+ private router: Router,
+ private activatedRoute: ActivatedRoute
+ ) {}
+
+ previous = input();
+ next = input();
+ isHandset = input();
+
+ goToLink(url: string) {
+ console.log(url);
+ this.router.navigate(['../', url], { relativeTo: this.activatedRoute });
+ }
+}
diff --git a/packages/sdg/src/lib/sequential-links/sequential-links.interface.ts b/packages/sdg/src/lib/sequential-links/sequential-links.interface.ts
new file mode 100644
index 0000000..01e855b
--- /dev/null
+++ b/packages/sdg/src/lib/sequential-links/sequential-links.interface.ts
@@ -0,0 +1,4 @@
+export interface SequentialLink {
+ text: string;
+ url: string;
+}
diff --git a/packages/sdg/src/public-api.ts b/packages/sdg/src/public-api.ts
index 34fe700..39deacc 100644
--- a/packages/sdg/src/public-api.ts
+++ b/packages/sdg/src/public-api.ts
@@ -10,3 +10,4 @@ export * from './lib/alert';
export * from './lib/notice';
export * from './lib/tile';
export * from './lib/consult';
+export * from './lib/sequential-links';
diff --git a/projects/demo/src/app/pages/components/showcases/sequential-links/sequential-links.component.html b/projects/demo/src/app/pages/components/showcases/sequential-links/sequential-links.component.html
new file mode 100644
index 0000000..03561cf
--- /dev/null
+++ b/projects/demo/src/app/pages/components/showcases/sequential-links/sequential-links.component.html
@@ -0,0 +1,24 @@
+
+ Les liens séquentiels sont des liens permettant de naviguer vers une
+ page de contenu suivante ou précédente. Pour plus d'information, voir les
+
+
+ du Système de design gouvernemental.
+
+
+
+
+
diff --git a/projects/demo/src/app/pages/components/showcases/sequential-links/sequential-links.component.scss b/projects/demo/src/app/pages/components/showcases/sequential-links/sequential-links.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/projects/demo/src/app/pages/components/showcases/sequential-links/sequential-links.component.spec.ts b/projects/demo/src/app/pages/components/showcases/sequential-links/sequential-links.component.spec.ts
new file mode 100644
index 0000000..0b15498
--- /dev/null
+++ b/projects/demo/src/app/pages/components/showcases/sequential-links/sequential-links.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { TEST_CONFIG } from 'projects/demo/src/test-config';
+
+import { SequentialLinksDemoComponent } from './sequential-links.component';
+
+describe('SequentialLinksDemoComponent', () => {
+ let component: SequentialLinksDemoComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [SequentialLinksDemoComponent],
+ providers: [...TEST_CONFIG.providers!]
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(SequentialLinksDemoComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/projects/demo/src/app/pages/components/showcases/sequential-links/sequential-links.component.ts b/projects/demo/src/app/pages/components/showcases/sequential-links/sequential-links.component.ts
new file mode 100644
index 0000000..1b354e0
--- /dev/null
+++ b/projects/demo/src/app/pages/components/showcases/sequential-links/sequential-links.component.ts
@@ -0,0 +1,38 @@
+import { Component, Signal } from '@angular/core';
+
+import { NoticeComponent, SequentialLink } from '@igo2/sdg';
+
+import { SequentialLinksComponent } from '../../../../../../../../packages/sdg/src/lib/sequential-links/sequential-links.component';
+import { AppService } from '../../../../app.service';
+import { ExampleViewerComponent } from '../../../../components/example-viewer/example-viewer.component';
+import { ExternalLinkComponent } from '../../../../components/external-link/external-link.component';
+
+@Component({
+ selector: 'app-sequential-links',
+ standalone: true,
+ imports: [
+ ExampleViewerComponent,
+ ExternalLinkComponent,
+ NoticeComponent,
+ SequentialLinksComponent
+ ],
+ templateUrl: './sequential-links.component.html',
+ styleUrl: './sequential-links.component.scss'
+})
+export class SequentialLinksDemoComponent {
+ constructor(private appService: AppService) {}
+
+ previous: SequentialLink = {
+ text: "Fil d'Ariane",
+ url: 'fil-ariane'
+ };
+
+ next: SequentialLink = {
+ text: 'Tuile',
+ url: 'tuile'
+ };
+
+ get isHandset(): Signal {
+ return this.appService.isHandset;
+ }
+}
diff --git a/projects/demo/src/app/pages/components/showcases/showcases.routes.ts b/projects/demo/src/app/pages/components/showcases/showcases.routes.ts
index 098b87c..3139aa4 100644
--- a/projects/demo/src/app/pages/components/showcases/showcases.routes.ts
+++ b/projects/demo/src/app/pages/components/showcases/showcases.routes.ts
@@ -34,6 +34,14 @@ export const routes: INavigationRoutes = [
(m) => m.BreadcrumbDemoComponent
)
},
+ {
+ path: 'liens-sequentiels',
+ title: 'Liens séquentiels',
+ loadComponent: () =>
+ import('./sequential-links/sequential-links.component').then(
+ (m) => m.SequentialLinksDemoComponent
+ )
+ },
{
path: 'tuile',
title: 'Tuile',