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()) { + + } + @if (next()) { + + } +
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',