diff --git a/angular.json b/angular.json index dda8b7a..e369ac7 100644 --- a/angular.json +++ b/angular.json @@ -5,6 +5,11 @@ "projects": { "sdg": { "projectType": "library", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, "root": "packages/sdg", "sourceRoot": "packages/sdg", "prefix": "sdg", @@ -28,10 +33,7 @@ "builder": "@angular-devkit/build-angular:karma", "options": { "tsConfig": "packages/sdg/tsconfig.spec.json", - "polyfills": [ - "zone.js", - "zone.js/testing" - ], + "polyfills": ["zone.js", "zone.js/testing"], "codeCoverage": true, "progress": true } diff --git a/packages/sdg/src/lib/button/button.component.spec.ts b/packages/sdg/src/lib/button/button.component.spec.ts new file mode 100644 index 0000000..6bf5a00 --- /dev/null +++ b/packages/sdg/src/lib/button/button.component.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TEST_CONFIG } from '../../test-config'; +import { ButtonComponent } from './button.component'; + +describe('ButtonComponent', () => { + let component: ButtonComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ButtonComponent], + providers: [...TEST_CONFIG.providers!] + }).compileComponents(); + + fixture = TestBed.createComponent(ButtonComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/sdg/src/lib/button/button.component.ts b/packages/sdg/src/lib/button/button.component.ts new file mode 100644 index 0000000..643a91c --- /dev/null +++ b/packages/sdg/src/lib/button/button.component.ts @@ -0,0 +1,107 @@ +import { Component, Directive, input, output } from '@angular/core'; +import { MatButtonModule } from '@angular/material/button'; + +type ButtonColor = 'primary' | 'accent' | 'warn'; + +@Directive() +class ButtonBase { + color = input(); + disableRipple = input(); + + click = output(); + + handleClick(event: Event) { + event.stopImmediatePropagation(); + this.click.emit(); + } +} + +@Component({ + selector: 'sdg-button-icon', + standalone: true, + imports: [MatButtonModule], + styleUrl: './button.scss', + template: ` + + ` +}) +export class IconButtonComponent extends ButtonBase {} + +@Component({ + selector: 'sdg-button-raised', + standalone: true, + imports: [MatButtonModule], + styleUrl: './button.scss', + template: ` + + ` +}) +export class ButtonRaisedComponent extends ButtonBase {} + +@Component({ + selector: 'sdg-button-flat', + standalone: true, + imports: [MatButtonModule], + styleUrl: './button.scss', + template: ` + + ` +}) +export class ButtonFlatComponent extends ButtonBase {} + +@Component({ + selector: 'sdg-button-stroked', + standalone: true, + imports: [MatButtonModule], + styleUrl: './button.scss', + template: ` + + ` +}) +export class ButtonStrokedComponent extends ButtonBase {} + +@Component({ + selector: 'sdg-button', + standalone: true, + imports: [MatButtonModule], + styleUrl: './button.scss', + template: ` + + ` +}) +export class ButtonComponent extends ButtonBase {} diff --git a/packages/sdg/src/lib/button/button.scss b/packages/sdg/src/lib/button/button.scss new file mode 100644 index 0000000..49be42e --- /dev/null +++ b/packages/sdg/src/lib/button/button.scss @@ -0,0 +1,7 @@ +:host { + pointer-events: none; +} + +button { + pointer-events: all; +} diff --git a/packages/sdg/src/lib/button/index.ts b/packages/sdg/src/lib/button/index.ts new file mode 100644 index 0000000..643ee81 --- /dev/null +++ b/packages/sdg/src/lib/button/index.ts @@ -0,0 +1 @@ +export * from './button.component'; diff --git a/packages/sdg/src/public-api.ts b/packages/sdg/src/public-api.ts index 34fe700..ed330ee 100644 --- a/packages/sdg/src/public-api.ts +++ b/packages/sdg/src/public-api.ts @@ -3,6 +3,7 @@ */ export * from './lib/breadcrumb'; +export * from './lib/button'; export * from './lib/header'; export * from './lib/navigation'; export * from './lib/screen'; diff --git a/projects/demo/src/app/pages/components/showcases/button/button.component.html b/projects/demo/src/app/pages/components/showcases/button/button.component.html index cbb84d6..c5a5daf 100644 --- a/projects/demo/src/app/pages/components/showcases/button/button.component.html +++ b/projects/demo/src/app/pages/components/showcases/button/button.component.html @@ -11,15 +11,6 @@ /> du Système de design gouvernemental.

-

- Le concept de bouton est basé sur le - - . Voici quelques uns des types de boutons. -

- - - - + Raised + Stroked + Basic + Flat

@@ -38,15 +35,27 @@ "color" tout en respectant le thème de l'application.

- - - + Primaire + Accent + Avertissement

Pour répliquer l'exemple du SDG:

- - - - + Principal + Secondaire + Tertiaire + Avertissement diff --git a/projects/demo/src/app/pages/components/showcases/button/button.component.scss b/projects/demo/src/app/pages/components/showcases/button/button.component.scss index 1b0daa2..a69adb6 100644 --- a/projects/demo/src/app/pages/components/showcases/button/button.component.scss +++ b/projects/demo/src/app/pages/components/showcases/button/button.component.scss @@ -1,5 +1,5 @@ .button-types { - button { + ::ng-deep button { margin-right: 16px; } } diff --git a/projects/demo/src/app/pages/components/showcases/button/button.component.ts b/projects/demo/src/app/pages/components/showcases/button/button.component.ts index 1b67d21..f280cd2 100644 --- a/projects/demo/src/app/pages/components/showcases/button/button.component.ts +++ b/projects/demo/src/app/pages/components/showcases/button/button.component.ts @@ -1,5 +1,11 @@ import { Component } from '@angular/core'; -import { MatButton } from '@angular/material/button'; + +import { + ButtonComponent, + ButtonFlatComponent, + ButtonRaisedComponent, + ButtonStrokedComponent +} from '@igo2/sdg'; import { ExampleViewerComponent } from '../../../../components/example-viewer/example-viewer.component'; import { ExternalLinkComponent } from '../../../../components/external-link/external-link.component'; @@ -7,8 +13,19 @@ import { ExternalLinkComponent } from '../../../../components/external-link/exte @Component({ selector: 'app-button', standalone: true, - imports: [ExampleViewerComponent, MatButton, ExternalLinkComponent], + imports: [ + ExampleViewerComponent, + ButtonComponent, + ButtonStrokedComponent, + ButtonRaisedComponent, + ButtonFlatComponent, + ExternalLinkComponent + ], templateUrl: './button.component.html', styleUrl: './button.component.scss' }) -export class ButtonDemoComponent {} +export class ButtonDemoComponent { + handleClick() { + alert('Button clicked!'); + } +}