diff --git a/.gitignore b/.gitignore index fa521c8340c0eb82e104836a6cccc468454aecdc..7150380558a29773048fe2d5a71f8a05de4474cc 100644 --- a/.gitignore +++ b/.gitignore @@ -62,6 +62,5 @@ package-lock.json /projects # Storybook -documentation.json /storybook-static documentation.json \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index d752ff031bad2249c816d185a7b5f1b488b044eb..b966268f9bc416cb2ffbb7ab060489cf309d0192 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -36,7 +36,6 @@ "covid", "demarch", "facebook", - "friday", "grandlyon", "instagram", "linkedin", @@ -44,24 +43,23 @@ "metropole", "Metropole", "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday", "NOSONAR", "onespace", "orientator", "Orientator", "personaloffer", "Rés'in", - "saturday", - "smedium", - "sunday", - "thursday", "toastr", - "tuesday", "ultrawide", "unclickable", - "unclickable", - "wednesday", + "smedium", "xsmall", - "xxsmall", - "xsmall" + "xxsmall" ] } diff --git a/src/app/carto/carto.component.scss b/src/app/carto/carto.component.scss index 2f9f9fc3e9539a89674eb74b7f62d0b251b3f693..dc0f37e3a5faec7fa2a44fc9618beb76f1188603 100644 --- a/src/app/carto/carto.component.scss +++ b/src/app/carto/carto.component.scss @@ -17,7 +17,7 @@ } .height-100 { - height: 100%; + height: calc(100vh - #{$header-height} - #{$orientation-progressBarAndButtons}); } .panes-container { diff --git a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html index 900f88917b378b3bf8e2af041b6219fc241bd389..15cfca06aa3c372cbb1c0828e9b21511b10abca1 100644 --- a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html +++ b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.html @@ -49,7 +49,7 @@ </div> </div> <div class="form-group" fxLayout="column"> - <label for="structureMail">Email de votre structure<sup class="footnote-nb">1</sup></label> + <label for="structureMail">Email de votre structure</label> <p class="notRequired">Facultatif</p> <div fxLayout="row" fxLayoutGap="13px"> <input @@ -74,7 +74,7 @@ </div> </div> <div class="form-group" fxLayout="column"> - <label for="structurePhone">Téléphone de votre structure<sup class="footnote-nb">1</sup></label> + <label for="structurePhone">Téléphone de votre structure</label> <p class="notRequired">Facultatif</p> <div fxLayout="row" fxLayoutGap="13px"> <input @@ -99,8 +99,4 @@ </div> </div> </form> - <p class="footnote"> - <sup class="footnote-nb">1</sup> Un moyen de communication (email et/ou téléphone) est obligatoire pour valider - cette étape - </p> </div> diff --git a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.scss b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.scss index 197f472eabc10823c2f3be9e6c524647084f7409..088c84851ae0da02312b9a873b229fef528d9c7c 100644 --- a/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.scss +++ b/src/app/form/orientation-form-view/global-components/structure-orientator/structure-orientator.component.scss @@ -56,12 +56,3 @@ .notRequired { margin-bottom: 0; } - -sup { - color: red; - font-size: $font-size-xxsmall; -} -.footnote { - margin-top: 2em; - font-size: $font-size-xmsmall; -} diff --git a/src/app/login/login.component.html b/src/app/login/login.component.html index 93cd11c4f64e0291270c7de00a7adb17bd138347..41a6f8b7b144eb82110022b95db4bb429e1f1138 100644 --- a/src/app/login/login.component.html +++ b/src/app/login/login.component.html @@ -17,6 +17,12 @@ </svg> </div> <div *ngIf="authFailed" class="incorrectId">Identifiant ou mot de passe invalide</div> + <div *ngIf="isUnverifiedEmail" class="incorrectId"> + Votre email n'a jamais été validé. + <a tabindex="0" (click)="resendConfirmationEmail()" (keyup.enter)="resendConfirmationEmail()" + >Renvoyer l'email de confirmation</a + > + </div> </div> <div class="form-group password" fxLayout="column"> <label for="password">Mot de passe</label> diff --git a/src/app/login/login.component.ts b/src/app/login/login.component.ts index db47a53afbf8b67a547cd0233509f1976e80cb5d..7dddb5660d0be2ea913a21f9a7ac3e7bde8b7fdd 100644 --- a/src/app/login/login.component.ts +++ b/src/app/login/login.component.ts @@ -1,12 +1,11 @@ import { Component, OnInit } from '@angular/core'; import { AbstractControl, UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; import { ActivatedRoute, Router, UrlSegment } from '@angular/router'; -import { combineLatest } from 'rxjs'; -import { first, map } from 'rxjs/operators'; +import { combineLatest, lastValueFrom } from 'rxjs'; +import { map } from 'rxjs/operators'; import { Structure } from '../models/structure.model'; -import { User } from '../models/user.model'; import { AuthService } from '../services/auth.service'; -import { StructureService } from '../services/structure.service'; +import { NotificationService } from '../services/notification.service'; import { ButtonType } from '../shared/components/button/buttonType.enum'; import { CustomRegExp } from '../utils/CustomRegExp'; @@ -20,6 +19,7 @@ export class LoginComponent implements OnInit { public loading = false; public submitted = false; public authFailed = false; + public isUnverifiedEmail = false; public isShowPassword = false; public buttonTypeEnum = ButtonType; public isWelcome = false; @@ -35,7 +35,7 @@ export class LoginComponent implements OnInit { private router: Router, private authService: AuthService, private activatedRoute: ActivatedRoute, - private structureService: StructureService + private notificationService: NotificationService ) {} ngOnInit(): void { @@ -77,7 +77,7 @@ export class LoginComponent implements OnInit { this.router.navigate(['/reset-password']); } - public onSubmit(): void { + public async onSubmit(): Promise<void> { this.submitted = true; // stop here if form is invalid @@ -85,26 +85,28 @@ export class LoginComponent implements OnInit { return; } this.loading = true; - this.authService - .login(this.f.email.value, this.f.password.value) - .pipe(first()) - .subscribe( - () => { - if (this.isWelcome) { - this.router.navigateByUrl('form/profile'); - } else { - if (this.returnUrl) { - this.router.navigateByUrl(this.returnUrl); - } else { - this.router.navigateByUrl('news'); - } - } - }, - () => { - this.loading = false; - this.authFailed = true; + this.authFailed = false; + this.isUnverifiedEmail = false; + try { + await lastValueFrom(this.authService.login(this.f.email.value, this.f.password.value)); + + if (this.isWelcome) { + this.router.navigateByUrl('form/profile'); + } else { + if (this.returnUrl) { + this.router.navigateByUrl(this.returnUrl); + } else { + this.router.navigateByUrl('news'); } - ); + } + } catch (e) { + this.loading = false; + if (e.status == 418) { + this.isUnverifiedEmail = true; + } else { + this.authFailed = true; + } + } } public toggleShowPassword(): void { @@ -114,34 +116,35 @@ export class LoginComponent implements OnInit { this.router.navigateByUrl('form/account'); } - private sendVerification(): void { - this.authService.verifyUser(this.userId, this.token).subscribe( - (user: User) => { - if (user.structuresLink[0]) { - this.structureService.getStructure(user.structuresLink[0]).subscribe( - (structure) => { - structure.accountVerified = true; - this.structure = structure; - this.structureService.updateStructureAfterOwnerVerify(structure._id, user).subscribe( - () => { - this.verificationSuccess = true; - }, - () => { - this.verificationIssue = true; - } - ); - }, - () => { - this.verificationIssue = true; - } + public resendConfirmationEmail(): void { + this.isUnverifiedEmail = false; + this.loading = true; + this.authService.resendEmail(this.f.email.value, this.f.password.value).subscribe({ + next: () => { + this.loading = false; + this.notificationService.showSuccess(`L'email de confirmation a été renvoyé à ${this.f.email.value}`); + }, + error: (error) => { + this.loading = false; + if (error.status === 401) { + this.authFailed = true; + this.notificationService.showError( + `Identifiant ou mot de passe invalide`, + `L'email de confirmation n'a pas pu être renvoyé` ); } else { - this.verificationSuccess = true; + console.log(`L'email de confirmation n'a pas pu être renvoyé: ${error.message}`); + this.notificationService.showErrorPleaseRetry(`L'email de confirmation n'a pas pu être renvoyé`); } }, - () => { + }); + } + + private sendVerification(): void { + this.authService.verifyUser(this.userId, this.token).subscribe({ + error: () => { this.verificationIssue = true; - } - ); + }, + }); } } diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index ccde5794d142cbcc5454374ed24c93a63da04f35..093bfe6da41196b6d4748356a9e84975cde5f099 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -78,8 +78,12 @@ export class AuthService { ); } - public verifyUser(userId: string, token: string): Observable<any> { - return this.http.post(`api/users/verify/${userId}`, null, { + public resendEmail(email: string, password: string): Observable<User> { + return this.http.post<User>(`api/auth/resendEmail`, { email, password }); + } + + public verifyUser(userId: string, token: string): Observable<User> { + return this.http.post<User>(`api/users/verify/${userId}`, null, { params: { token }, }); } diff --git a/src/app/services/structure.service.ts b/src/app/services/structure.service.ts index 5985adb4467de2b7cc0033d36d72505f4a62fdc6..a61619bced479fae33ada321bae56a930072b155 100644 --- a/src/app/services/structure.service.ts +++ b/src/app/services/structure.service.ts @@ -16,12 +16,6 @@ export class StructureService { private readonly baseUrl = 'api/structures'; constructor(private http: HttpClient) {} - public updateStructureAfterOwnerVerify(idStructure: string, user: User): Observable<any> { - const emailUser = user.email; - return this.http - .put(`${this.baseUrl}/updateAfterOwnerVerify/${idStructure}`, { emailUser }) - .pipe(map((item: Structure) => new Structure(item))); - } public createStructure(structure: Structure, profile: User): Observable<Structure> { const userEmail = profile.email; return this.http diff --git a/src/app/shared/components/index.ts b/src/app/shared/components/index.ts index b667d33672dc1d109d78e331afc7f0544b35a140..be60de5977958cd6076f4e843331bc8908d9d695 100644 --- a/src/app/shared/components/index.ts +++ b/src/app/shared/components/index.ts @@ -21,6 +21,8 @@ import { SvgIconComponent } from './svg-icon/svg-icon.component'; import { TextInputModalComponent } from './text-input-modal/text-input-modal.component'; import { TrainingTypePickerComponent } from './training-type-picker/training-type-picker.component'; import { ButtonV3Component } from './v3/button/button.component'; +import { CheckboxV3Component } from './v3/checkbox/checkbox.component'; +import { LabelCheckboxV3Component } from './v3/label-checkbox/label-checkbox.component'; import { TagItemV3Component } from './v3/tag/tag-item/tag-item.component'; // tslint:disable-next-line: max-line-length @@ -31,9 +33,11 @@ export { ButtonComponent, ButtonV3Component, CheckboxFormComponent, + CheckboxV3Component, CustomModalComponent, HourPickerComponent, InformationStepComponent, + LabelCheckboxV3Component, LogoCardComponent, ModalConfirmationComponent, PasswordFormComponent, @@ -47,7 +51,7 @@ export { SvgIconComponent, TagItemV3Component, TextInputModalComponent, - TrainingTypePickerComponent + TrainingTypePickerComponent, }; // tslint:disable-next-line:variable-name @@ -76,4 +80,6 @@ export const SharedComponents = [ ProgressBarComponent, StructurePublicTargetComponent, TagItemV3Component, + CheckboxV3Component, + LabelCheckboxV3Component, ]; diff --git a/src/app/shared/components/v3/checkbox/check-grey.svg b/src/app/shared/components/v3/checkbox/check-grey.svg new file mode 100644 index 0000000000000000000000000000000000000000..abf9e0b21985ed7ebe495e6e27eee69008f4be09 --- /dev/null +++ b/src/app/shared/components/v3/checkbox/check-grey.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M6.66668 10.1147L12.7947 3.98599L13.738 4.92866L6.66668 12L2.42401 7.75733L3.36668 6.81466L6.66668 10.1147Z" fill="#696969"/> +</svg> diff --git a/src/app/shared/components/v3/checkbox/check.svg b/src/app/shared/components/v3/checkbox/check.svg new file mode 100644 index 0000000000000000000000000000000000000000..f83484aa5ea134b2c8ded5aa266f9e91a5cc1239 --- /dev/null +++ b/src/app/shared/components/v3/checkbox/check.svg @@ -0,0 +1,3 @@ +<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path fill-rule="evenodd" clip-rule="evenodd" d="M6.66668 10.1147L12.7947 3.98599L13.738 4.92866L6.66668 12L2.42401 7.75733L3.36668 6.81466L6.66668 10.1147Z" fill="white"/> +</svg> diff --git a/src/app/shared/components/v3/checkbox/checkbox.component.html b/src/app/shared/components/v3/checkbox/checkbox.component.html new file mode 100644 index 0000000000000000000000000000000000000000..22a577d95a99e09a9ccfab4726b09ea106d01252 --- /dev/null +++ b/src/app/shared/components/v3/checkbox/checkbox.component.html @@ -0,0 +1,8 @@ +<input + type="checkbox" + [id]="id" + [ngClass]="classes" + [checked]="checked" + [disabled]="disabled" + (click)="action.emit($event)" +/> diff --git a/src/app/shared/components/v3/checkbox/checkbox.component.scss b/src/app/shared/components/v3/checkbox/checkbox.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..ae11ca617cd85dc94dea94fecaa30bd9850b978d --- /dev/null +++ b/src/app/shared/components/v3/checkbox/checkbox.component.scss @@ -0,0 +1,45 @@ +@import 'color'; + +input { + appearance: none; + border-radius: 4px; + transition: all 0.2s ease-in-out; + background-color: $white; + border: 1px solid $grey-1; + cursor: pointer; + + &.medium { + width: 24px; + height: 24px; + } + &.small { + width: 16px; + height: 16px; + } + + &:checked { + background-color: $grey-1; + background-image: url('./check.svg'); + stroke: $white; + background-repeat: no-repeat; + background-position: center center; + background-size: 16px 16px; + &:disabled { + background-color: $grey-6; + background-image: url('./check-grey.svg'); + } + // transition: background-image 2s ease; + } + + &:focus-visible { + outline-offset: 2px; + outline: 2px solid $blue-focus; + } + + &:not(.checked) { + &:disabled { + cursor: not-allowed; + border: 1px solid $grey-6; + } + } +} diff --git a/src/app/shared/components/v3/checkbox/checkbox.component.ts b/src/app/shared/components/v3/checkbox/checkbox.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..970c81eeaa3576dea17e22ad0769cd01a5fe9a4f --- /dev/null +++ b/src/app/shared/components/v3/checkbox/checkbox.component.ts @@ -0,0 +1,25 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +@Component({ + selector: 'app-v3-checkbox', + templateUrl: './checkbox.component.html', + styleUrls: ['./checkbox.component.scss'], +}) +export class CheckboxV3Component { + /** HTML id associated with for */ + @Input() id: string; + + /** Checked ? */ + @Input() checked: boolean; + + /** What size should the checkbox be ? */ + @Input() size?: 'small' | 'medium' = 'medium'; + + @Input() disabled?: boolean; + + @Output() action = new EventEmitter<Event>(); + + public get classes(): string[] { + return [this.size]; + } +} diff --git a/src/app/shared/components/v3/checkbox/checkbox.stories.ts b/src/app/shared/components/v3/checkbox/checkbox.stories.ts new file mode 100644 index 0000000000000000000000000000000000000000..b0bcd19b7fe33f8b9375cbacdc9bc09dab5b487a --- /dev/null +++ b/src/app/shared/components/v3/checkbox/checkbox.stories.ts @@ -0,0 +1,57 @@ +import { CommonModule } from '@angular/common'; +import type { Meta, StoryObj } from '@storybook/angular'; +import { moduleMetadata } from '@storybook/angular'; +import { SvgIconComponent } from '../../svg-icon/svg-icon.component'; +import { CheckboxV3Component } from './checkbox.component'; + +// More on how to set up stories at: https://storybook.js.org/docs/angular/writing-stories/introduction +const meta: Meta<CheckboxV3Component> = { + title: 'Components/Checkbox', + component: CheckboxV3Component, + tags: ['autodocs'], + decorators: [ + moduleMetadata({ + declarations: [SvgIconComponent], + imports: [CommonModule], + }), + ], + argTypes: {}, +}; + +export default meta; +type Story = StoryObj<CheckboxV3Component>; + +export const CheckBoxSmall: Story = { + args: { + checked: true, + size: 'small', + }, +}; + +export const CheckboxMedium: Story = { + args: { + checked: false, + size: 'medium', + }, +}; + +export const CheckboxMediumChecked: Story = { + args: { + ...CheckboxMedium.args, + checked: true, + }, +}; + +export const DisabledNotChecked: Story = { + args: { + disabled: true, + checked: false, + }, +}; + +export const DisabledChecked: Story = { + args: { + disabled: true, + checked: true, + }, +}; diff --git a/src/app/shared/components/v3/label-checkbox/label-checkbox.component.html b/src/app/shared/components/v3/label-checkbox/label-checkbox.component.html new file mode 100644 index 0000000000000000000000000000000000000000..e1527edb99758efd723f07186f8ae7028bbf99af --- /dev/null +++ b/src/app/shared/components/v3/label-checkbox/label-checkbox.component.html @@ -0,0 +1,17 @@ +<div> + <div class="row"> + <app-v3-checkbox [id]="for" [size]="'small'" [checked]="checked" (action)="action.emit($event)" /> + <label [for]="for">{{ label }}</label> + </div> + + <div class="row"> + <div class="empty"></div> + <span class="description">{{ description }}</span> + </div> + + <div *ngIf="status && statusText" class="row"> + <img *ngIf="status === 'error'" src="assets/ico/error.svg" alt="" /> + <img *ngIf="status === 'success'" src="assets/ico/success.svg" alt="" /> + <span class="stateText" [ngClass]="status"> {{ statusText }}</span> + </div> +</div> diff --git a/src/app/shared/components/v3/label-checkbox/label-checkbox.component.scss b/src/app/shared/components/v3/label-checkbox/label-checkbox.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..d2a00a44cbf5348981c7e12e0861ec491667d015 --- /dev/null +++ b/src/app/shared/components/v3/label-checkbox/label-checkbox.component.scss @@ -0,0 +1,39 @@ +@import 'color'; +@import 'typography'; + +.row { + display: flex; + gap: 8px; + &:nth-child(3) { + margin-top: 12px; + } + + .empty { + width: 23px; + } +} + +label { + line-height: 24px; + font-size: $font-size-xsmall; + color: $grey-1; + cursor: pointer; + user-select: none; + grid-column-start: 2; +} + +.description { + color: $grey-3; + font-size: $font-size-xxsmall; + grid-column-start: 2; +} + +.stateText { + font-size: $font-size-xxsmall; + &.success { + color: $green-success; + } + &.error { + color: $red-error; + } +} diff --git a/src/app/shared/components/v3/label-checkbox/label-checkbox.component.ts b/src/app/shared/components/v3/label-checkbox/label-checkbox.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..026c5063aa5ac4158d9eb62cdb3133f98e0eccb5 --- /dev/null +++ b/src/app/shared/components/v3/label-checkbox/label-checkbox.component.ts @@ -0,0 +1,27 @@ +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +@Component({ + selector: 'app-v3-label-checkbox', + templateUrl: './label-checkbox.component.html', + styleUrls: ['./label-checkbox.component.scss'], +}) +export class LabelCheckboxV3Component { + /** Label text to display */ + @Input() label: string; + + /** HTML for that will control checkbox */ + @Input() for: string; + + @Input() checked: boolean; + + /** Additional label description */ + @Input() description?: string; + + /** What additional data should be displayed ? error or success */ + @Input() status?: 'error' | 'success'; + + /** Additional text to display on error or success */ + @Input() statusText?: string; + + @Output() action = new EventEmitter<Event>(); +} diff --git a/src/app/shared/components/v3/label-checkbox/label-checkbox.stories.ts b/src/app/shared/components/v3/label-checkbox/label-checkbox.stories.ts new file mode 100644 index 0000000000000000000000000000000000000000..4d816b80c6ddbd1145fcc86844974f0ecce9d414 --- /dev/null +++ b/src/app/shared/components/v3/label-checkbox/label-checkbox.stories.ts @@ -0,0 +1,65 @@ +import { CommonModule } from '@angular/common'; +import type { Meta, StoryObj } from '@storybook/angular'; +import { moduleMetadata } from '@storybook/angular'; +import { SvgIconComponent } from '../../svg-icon/svg-icon.component'; +import { CheckboxV3Component } from '../checkbox/checkbox.component'; +import { LabelCheckboxV3Component } from './label-checkbox.component'; + +// More on how to set up stories at: https://storybook.js.org/docs/angular/writing-stories/introduction +const meta: Meta<LabelCheckboxV3Component> = { + title: 'Components/Label checkbox', + component: LabelCheckboxV3Component, + tags: ['autodocs'], + decorators: [ + moduleMetadata({ + declarations: [SvgIconComponent, CheckboxV3Component], + imports: [CommonModule], + }), + ], + argTypes: {}, +}; + +export default meta; +type Story = StoryObj<LabelCheckboxV3Component>; + +export const Label: Story = { + args: { + label: 'Label case à cocher', + for: 'check1', + checked: false, + }, +}; + +export const LabelChecked: Story = { + args: { + label: 'Label case à cocher', + for: 'check2', + checked: true, + }, +}; + +export const LabelDescribed: Story = { + args: { + ...Label.args, + for: 'check3', + description: 'Texte de description additionnel', + }, +}; + +export const LabelSuccess: Story = { + args: { + ...LabelDescribed.args, + for: 'check4', + status: 'success', + statusText: 'Texte de succès', + }, +}; + +export const LabelError: Story = { + args: { + ...LabelDescribed.args, + for: 'check5', + status: 'error', + statusText: "Texte d'erreur", + }, +}; diff --git a/src/assets/scss/_color.scss b/src/assets/scss/_color.scss index 774ec09d69fc57d7a9729d46ad0d9bfcea5a89f0..4326cb27def3f43fdc347a28bdc521e60e211a85 100644 --- a/src/assets/scss/_color.scss +++ b/src/assets/scss/_color.scss @@ -8,16 +8,13 @@ $grey-3: #696969; $grey-3-15: #33333326; $grey-3-20: #33333333; // 4 should be something else -// 4 should be something else $grey-4: #bdbdbd; $grey-5: #bdbdbd; $grey-6: #dedede; $grey-7: #f4f4f4; // 8 should be something else -// 8 should be something else $grey-8: #f8f8f8; $grey-9: #f8f8f8; -$grey-9: #f8f8f8; /* REDS */ $red: #da3635; $red-20: #da363533; // main red with 20% opacity diff --git a/src/assets/scss/_ghost.scss b/src/assets/scss/_ghost.scss index 072843f02f9e1489f3cd5c0848f3600063212140..bfb9c6aeab3b387144e92a0dea8beb4bfe947afe 100644 --- a/src/assets/scss/_ghost.scss +++ b/src/assets/scss/_ghost.scss @@ -28,6 +28,9 @@ $margin-post: 20px; > div > * + * { margin-top: 1em; } + figure { + margin: 1em 0 0 0; + } } .gh-canvas { display: grid; diff --git a/src/assets/scss/_layout.scss b/src/assets/scss/_layout.scss index 4eb047c441ccd15cd9048a4195ac63c35cb1336a..d311193145fd8827881507f3932858f9b9ae149e 100644 --- a/src/assets/scss/_layout.scss +++ b/src/assets/scss/_layout.scss @@ -4,3 +4,4 @@ $header-height-phone: 70px; $footer-height-phone: 75px; $header-post-height: 180px; $content-desktop-width: 980px; +$orientation-progressBarAndButtons: 119px; diff --git a/src/stories/button.component.ts b/src/stories/button.component.ts index e7a804aa53129f3feb13442823957ef6183d81f2..cea6dd4cd42d91a21dcc653c3f3423363d8f69f9 100644 --- a/src/stories/button.component.ts +++ b/src/stories/button.component.ts @@ -1,5 +1,5 @@ import { CommonModule } from '@angular/common'; -import { Component, Input, Output, EventEmitter } from '@angular/core'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; @Component({ selector: 'storybook-button', diff --git a/src/stories/header.component.ts b/src/stories/header.component.ts index 1e63bf2165679b4cca8a0c48b220eabc16714c36..690529c784a150648b793a3f82e426e7a80a52e8 100644 --- a/src/stories/header.component.ts +++ b/src/stories/header.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, Output, EventEmitter } from '@angular/core'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; import type { User } from './User'; @Component({