From 500a56e429f986000532fbd660fba42913ad43d5 Mon Sep 17 00:00:00 2001 From: wagonsoftware Date: Wed, 2 Nov 2022 23:31:50 +0300 Subject: [PATCH] avatar base --- .../ui/src/lib/avatar/avatar.component.html | 1 + .../ui/src/lib/avatar/avatar.component.scss | 24 ++++++++++++++ .../src/lib/avatar/avatar.component.spec.ts | 23 +++++++++++++ .../ui/src/lib/avatar/avatar.component.ts | 33 +++++++++++++++++++ .../ui/src/lib/avatar/avatar.interface.ts | 1 + projects/ui/src/lib/avatar/avatar.module.ts | 18 ++++++++++ .../ui/src/lib/popup/popup.component.html | 2 +- .../ui/src/lib/popup/popup.component.scss | 9 +++-- projects/ui/src/lib/popup/popup.component.ts | 8 ++++- projects/ui/src/lib/ui.module.ts | 5 ++- .../ui/src/lib/utils/string-hash-to-hsl.ts | 21 ++++++++++++ projects/ui/src/public-api.ts | 1 + .../main/main-menu/main-menu.component.scss | 1 + .../main/main-root/main-root.component.scss | 2 +- .../sections/game-page/game-page.component.ts | 2 +- .../components/sandbox/sandbox.component.html | 5 +++ 16 files changed, 149 insertions(+), 7 deletions(-) create mode 100644 projects/ui/src/lib/avatar/avatar.component.html create mode 100644 projects/ui/src/lib/avatar/avatar.component.scss create mode 100644 projects/ui/src/lib/avatar/avatar.component.spec.ts create mode 100644 projects/ui/src/lib/avatar/avatar.component.ts create mode 100644 projects/ui/src/lib/avatar/avatar.interface.ts create mode 100644 projects/ui/src/lib/avatar/avatar.module.ts create mode 100644 projects/ui/src/lib/utils/string-hash-to-hsl.ts diff --git a/projects/ui/src/lib/avatar/avatar.component.html b/projects/ui/src/lib/avatar/avatar.component.html new file mode 100644 index 0000000..8e248f9 --- /dev/null +++ b/projects/ui/src/lib/avatar/avatar.component.html @@ -0,0 +1 @@ +{{shortUsername}} diff --git a/projects/ui/src/lib/avatar/avatar.component.scss b/projects/ui/src/lib/avatar/avatar.component.scss new file mode 100644 index 0000000..3f12b54 --- /dev/null +++ b/projects/ui/src/lib/avatar/avatar.component.scss @@ -0,0 +1,24 @@ +:host { + display: block; + aspect-ratio: 1/1; + text-transform: uppercase; + color: #000; + display: flex; + justify-content: center; + align-items: center; + width: var(--local-size, 50px); + font-size: var(--local-size); + + &[data-size="default"] { + --local-size: 50px; + } + &[data-size="small"] { + --local-size: 50px; + } + &[data-size="medium"] { + --local-size: 50px; + } + &[data-size="large"] { + --local-size: 50px; + } +} diff --git a/projects/ui/src/lib/avatar/avatar.component.spec.ts b/projects/ui/src/lib/avatar/avatar.component.spec.ts new file mode 100644 index 0000000..1e7da96 --- /dev/null +++ b/projects/ui/src/lib/avatar/avatar.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { AvatarComponent } from './avatar.component'; + +describe('AvatarComponent', () => { + let component: AvatarComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ AvatarComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(AvatarComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/projects/ui/src/lib/avatar/avatar.component.ts b/projects/ui/src/lib/avatar/avatar.component.ts new file mode 100644 index 0000000..d1da9d1 --- /dev/null +++ b/projects/ui/src/lib/avatar/avatar.component.ts @@ -0,0 +1,33 @@ +import { Component, HostBinding, Input, OnInit } from '@angular/core'; +import { stringHashToHsl } from '../utils/string-hash-to-hsl'; +import { AvatarSize } from './avatar.interface'; + +@Component({ + selector: 'skirda-avatar', + templateUrl: './avatar.component.html', + styleUrls: ['./avatar.component.scss'], +}) +export class AvatarComponent implements OnInit { + @Input() username: string = 'username'; + @Input() size: AvatarSize = 'default'; + + constructor() {} + + ngOnInit(): void {} + + @HostBinding('style.background-color') + get color() { + return stringHashToHsl(this.username); + } + + @HostBinding('data-size') + get avatarSize() { + return `${this.size}px`; + } + + get shortUsername() { + let array = this.username.split(' '); + if (array.length >= 2) return array[0].charAt(0) + array[1].charAt(0); + else return this.username.charAt(0); + } +} diff --git a/projects/ui/src/lib/avatar/avatar.interface.ts b/projects/ui/src/lib/avatar/avatar.interface.ts new file mode 100644 index 0000000..dbc2d79 --- /dev/null +++ b/projects/ui/src/lib/avatar/avatar.interface.ts @@ -0,0 +1 @@ +export type AvatarSize = 'default' | 'small' | 'medium' | 'large'; diff --git a/projects/ui/src/lib/avatar/avatar.module.ts b/projects/ui/src/lib/avatar/avatar.module.ts new file mode 100644 index 0000000..fc6dc9c --- /dev/null +++ b/projects/ui/src/lib/avatar/avatar.module.ts @@ -0,0 +1,18 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { AvatarComponent } from './avatar.component'; + + + +@NgModule({ + declarations: [ + AvatarComponent + ], + imports: [ + CommonModule + ], + exports: [ + AvatarComponent + ] +}) +export class AvatarModule { } diff --git a/projects/ui/src/lib/popup/popup.component.html b/projects/ui/src/lib/popup/popup.component.html index 38b82e6..bb95076 100644 --- a/projects/ui/src/lib/popup/popup.component.html +++ b/projects/ui/src/lib/popup/popup.component.html @@ -1,4 +1,4 @@ -