Merge pull request #4 from Myxelium/re-style

Re-style and re-organize
This commit is contained in:
2024-10-28 01:17:14 +01:00
committed by GitHub
25 changed files with 330 additions and 229 deletions

View File

@@ -1,5 +1,7 @@
<app-header></app-header> <div class="darkmode">
<div class="main-content"> <app-header></app-header>
<div class="main-content">
<router-outlet></router-outlet> <router-outlet></router-outlet>
</div>
<app-footer></app-footer>
</div> </div>
<app-footer></app-footer>

View File

@@ -2,3 +2,21 @@
display: flex; display: flex;
justify-content: center; justify-content: center;
} }
::ng-deep {
.p-panel {
border-radius: unset !important;
}
.p-panel-header {
background: unset !important;
}
.p-fileupload-header {
background: unset !important;
}
.p-fileupload {
background: unset !important;
}
}

View File

@@ -16,6 +16,9 @@ export class AppComponent {
title = 'tools'; title = 'tools';
constructor(private config: PrimeNGConfig) { constructor(private config: PrimeNGConfig) {
this.config.theme.set({ preset: Lara }); this.config.theme.set({
preset: Lara,
darkModeSelector: '.darkmode'
});
} }
} }

View File

@@ -7,7 +7,7 @@ import { TextToCronComponent } from '../tools/client-side/text-to-cron/text-to-c
import { DdsToPngComponent } from '../tools/client-side/dds-to-png/dds-to-png.component'; import { DdsToPngComponent } from '../tools/client-side/dds-to-png/dds-to-png.component';
import { ImageConverterComponent } from '../tools/server-side/image-converter/image-converter.component'; import { ImageConverterComponent } from '../tools/server-side/image-converter/image-converter.component';
import { WordCounterComponent } from '../tools/client-side/word-counter/word-counter.component'; import { WordCounterComponent } from '../tools/client-side/word-counter/word-counter.component';
import { ColorPickerComponent } from '../tools/client-side/color-picker/color-picker/color-picker.component'; import { ColorPickerComponent } from '../tools/client-side/color-picker/color-picker.component';
export const routes: Routes = [ export const routes: Routes = [
{ {

View File

@@ -1,5 +1,5 @@
<p-megamenu [model]="items"> <p-megamenu [model]="items">
<ng-template pTemplate="start"> <ng-template pTemplate="start">
<img class="logotype" src="../../assets/logo-full-orange-beta.png" alt="logo" /> <img [ngClass]="{'logotype': true, 'darkMode': !isDarkMode}" src="../../assets/logo-full-orange-beta.png" alt="logo" />
</ng-template> </ng-template>
</p-megamenu> </p-megamenu>

View File

@@ -1,3 +1,12 @@
.logotype { .logotype {
width: 140px; width: 140px;
} }
.darkMode {
filter: invert(1);
}
::ng-deep .p-megamenu-col-12 {
flex-direction: row !important;
display: flex !important;
}

View File

@@ -14,21 +14,20 @@ import { AvatarModule } from 'primeng/avatar';
}) })
export class HeaderComponent implements OnInit { export class HeaderComponent implements OnInit {
items: MegaMenuItem[] | undefined; items: MegaMenuItem[] | undefined;
isDarkMode: boolean = true;
ngOnInit() { ngOnInit() {
this.isDarkMode = window?.matchMedia?.('(prefers-color-scheme:dark)')?.matches;
this.items = [ this.items = [
{ {
label: 'Text Tools', label: 'Tools',
icon: 'pi pi-box', icon: 'pi pi-wrench',
items: [ items: [
[ [
{ {
label: 'Text Tools',
items: [ items: [
{
label: 'Ascii to text',
routerLink: 'ascii-to-text',
routerLinkActiveOptions: { exact: true }
},
{ {
label: 'Text counter', label: 'Text counter',
routerLink: 'text-counter', routerLink: 'text-counter',
@@ -39,11 +38,6 @@ export class HeaderComponent implements OnInit {
routerLink: 'guid', routerLink: 'guid',
routerLinkActiveOptions: { exact: true } routerLinkActiveOptions: { exact: true }
}, },
{
label: 'Base64 Converter',
routerLink: 'base64-converter',
routerLinkActiveOptions: { exact: true }
},
{ {
label: 'Jwt decoder', label: 'Jwt decoder',
routerLink: 'jwt-decoder', routerLink: 'jwt-decoder',
@@ -53,14 +47,18 @@ export class HeaderComponent implements OnInit {
label: 'Text to Cron Expression', label: 'Text to Cron Expression',
routerLink: 'text-to-cron', routerLink: 'text-to-cron',
routerLinkActiveOptions: { exact: true } routerLinkActiveOptions: { exact: true }
}
],
}, },
{
label: 'Media Tools',
items: [
{ {
label: 'Color picker', label: 'Color picker',
routerLink: 'color-picker', routerLink: 'color-picker',
routerLinkActiveOptions: { exact: true } routerLinkActiveOptions: { exact: true }
} }
], ]
} }
] ]
] ]
@@ -71,6 +69,7 @@ export class HeaderComponent implements OnInit {
items: [ items: [
[ [
{ {
label: 'Convert',
items: [ items: [
{ {
label: 'DDS to PNG', label: 'DDS to PNG',
@@ -81,6 +80,16 @@ export class HeaderComponent implements OnInit {
label: 'Image Converter', label: 'Image Converter',
routerLink: 'image-converter', routerLink: 'image-converter',
routerLinkActiveOptions: { exact: true } routerLinkActiveOptions: { exact: true }
},
{
label: 'Base64 Converter',
routerLink: 'base64-converter',
routerLinkActiveOptions: { exact: true }
},
{
label: 'Ascii to text',
routerLink: 'ascii-to-text',
routerLinkActiveOptions: { exact: true }
} }
] ]
} }

View File

@@ -1,5 +1,4 @@
<div class="card flex justify-center"> <page [header]="title">
<p-panel [header]="title">
<ng-template pTemplate="header"> <ng-template pTemplate="header">
<p-tag *ngIf="isBeta" severity="warn" value="Beta"></p-tag> <p-tag *ngIf="isBeta" severity="warn" value="Beta"></p-tag>
</ng-template> </ng-template>
@@ -20,5 +19,4 @@
[value]="bottomValue" [value]="bottomValue"
[placeholder]="bottomPlaceholder"> [placeholder]="bottomPlaceholder">
</textarea> </textarea>
</p-panel> </page>
</div>

View File

@@ -1,10 +1,5 @@
:host {
display: flex;
justify-content: center;
margin-top: 20px;
width: 96vw;
.icon { .icon {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: center; justify-content: center;
@@ -14,15 +9,8 @@
i { i {
transform: rotate(90deg); transform: rotate(90deg);
} }
} }
.wrapper {
.card {
display: flex;
flex-direction: column;
width: 1140px;
}
.wrapper {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 1140px; width: 1140px;
@@ -37,9 +25,9 @@
width: 30vw; width: 30vw;
} }
} }
} }
textarea { textarea {
width: 100%; width: 100%;
height: 175px; height: 175px;
padding: 12px 20px; padding: 12px 20px;
@@ -49,14 +37,13 @@
resize: none; resize: none;
background-color: var(--primary-contrast); background-color: var(--primary-contrast);
color: var(--text-color) color: var(--text-color)
} }
::ng-deep .p-panel-header { ::ng-deep .p-panel-header {
justify-content: unset !important; justify-content: unset !important;
* { * {
margin-right: 5px; margin-right: 5px;
} }
}
} }

View File

@@ -5,6 +5,7 @@ import { FloatLabelModule } from 'primeng/floatlabel';
import { InputTextareaModule } from 'primeng/inputtextarea'; import { InputTextareaModule } from 'primeng/inputtextarea';
import { PanelModule } from 'primeng/panel'; import { PanelModule } from 'primeng/panel';
import { TagModule } from 'primeng/tag'; import { TagModule } from 'primeng/tag';
import { PageComponent } from '../page/page.component';
@Component({ @Component({
selector: 'app-dual-textarea', selector: 'app-dual-textarea',
@@ -17,7 +18,8 @@ import { TagModule } from 'primeng/tag';
FormsModule, FormsModule,
PanelModule, PanelModule,
CommonModule, CommonModule,
TagModule TagModule,
PageComponent
] ]
}) })

View File

@@ -0,0 +1,5 @@
<div class="card">
<p-panel [header]="header">
<ng-content></ng-content>
</p-panel>
</div>

View File

@@ -0,0 +1,20 @@
:host {
display: flex;
justify-content: center;
margin-top: 20px;
width: 96vw;
.card {
display: flex;
flex-direction: column;
width: 1140px;
}
::ng-deep .p-panel-header {
justify-content: unset !important;
* {
margin-right: 5px;
}
}
}

View File

@@ -0,0 +1,28 @@
/* tslint:disable:no-unused-variable */
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';
import { PageComponent } from './page.component';
describe('PageComponent', () => {
let component: PageComponent;
let fixture: ComponentFixture<PageComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ PageComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PageComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

View File

@@ -0,0 +1,13 @@
import { Component, Input, OnInit } from '@angular/core';
import { PanelModule } from 'primeng/panel';
@Component({
selector: 'page',
templateUrl: './page.component.html',
styleUrls: ['./page.component.scss'],
standalone: true,
imports: [PanelModule]
})
export class PageComponent {
@Input() header: string = '';
}

View File

@@ -1,5 +1,4 @@
<div class="card flex justify-center"> <page [header]="title">
<p-panel [header]="title">
<ng-template pTemplate="header"> <ng-template pTemplate="header">
<p-tag *ngIf="isBeta" severity="warn" value="Beta"></p-tag> <p-tag *ngIf="isBeta" severity="warn" value="Beta"></p-tag>
</ng-template> </ng-template>
@@ -72,5 +71,4 @@
</tr> </tr>
</ng-template> </ng-template>
</p-table> </p-table>
</p-panel> </page>
</div>

View File

@@ -1,26 +1,13 @@
:host { .conversion {
display: flex;
justify-content: center;
margin-top: 20px;
width: 96vw;
.card {
display: flex;
flex-direction: column;
width: 1140px;
}
.conversion {
display: flex; display: flex;
justify-content: center; justify-content: center;
margin-top: 1rem; margin-top: 1rem;
} }
::ng-deep .p-panel-header { ::ng-deep .p-panel-header {
justify-content: unset !important; justify-content: unset !important;
* { * {
margin-right: 5px; margin-right: 5px;
} }
}
} }

View File

@@ -9,6 +9,7 @@ import { AutoCompleteCompleteEvent, AutoCompleteModule, AutoCompleteSelectEvent
import { BadgeModule } from 'primeng/badge'; import { BadgeModule } from 'primeng/badge';
import { HttpHeaders } from '@angular/common/http'; import { HttpHeaders } from '@angular/common/http';
import { TagModule } from 'primeng/tag'; import { TagModule } from 'primeng/tag';
import { PageComponent } from '../page/page.component';
interface ProcessedFile { interface ProcessedFile {
name: string; name: string;
@@ -30,7 +31,8 @@ interface ProcessedFile {
TableModule, TableModule,
AutoCompleteModule, AutoCompleteModule,
BadgeModule, BadgeModule,
TagModule TagModule,
PageComponent
] ]
}) })
export class FileConverterComponent implements OnInit { export class FileConverterComponent implements OnInit {

View File

@@ -9,3 +9,17 @@ body .p-component
font-weight: 304; font-weight: 304;
font-style: normal; font-style: normal;
} }
* {
border-radius: unset !important;
}
.p-megamenu {
background: unset !important;
}
.p-megamenu-overlay {
background: var(--p-surface-800) !important;
border: unset !important;
border-radius: unset !important;
}

View File

@@ -0,0 +1,7 @@
<page header="Color Picker">
<div class="color-picker">
<label for="color-input">Choose Color:</label>
<input #colorPicker type="color" id="color-input" [formControl]="colorControl" (input)="onColorChange(colorPicker.value)" />
<input #colorText type="text" [formControl]="colorControl" (input)="onColorChange(colorText.value)" />
</div>
</page>

View File

@@ -0,0 +1,19 @@
.color-picker {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
}
.color-picker input[type="color"] {
width: 50px;
height: 50px;
border: none;
cursor: pointer;
}
.color-picker input[type="text"] {
padding: 5px;
font-size: 16px;
width: 100px;
}

View File

@@ -3,6 +3,7 @@ import { Component } from '@angular/core';
import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
import { ButtonModule } from 'primeng/button'; import { ButtonModule } from 'primeng/button';
import { InputTextModule } from 'primeng/inputtext'; import { InputTextModule } from 'primeng/inputtext';
import { PageComponent } from '../../../app/shared/page/page.component';
@Component({ @Component({
selector: 'app-color-picker', selector: 'app-color-picker',
@@ -12,7 +13,8 @@ import { InputTextModule } from 'primeng/inputtext';
FormsModule, FormsModule,
InputTextModule, InputTextModule,
ButtonModule, ButtonModule,
ReactiveFormsModule ReactiveFormsModule,
PageComponent
], ],
templateUrl: './color-picker.component.html', templateUrl: './color-picker.component.html',
styleUrl: './color-picker.component.scss' styleUrl: './color-picker.component.scss'

View File

@@ -1,5 +0,0 @@
<div class="color-picker">
<label for="color-input">Choose Color:</label>
<input #colorPicker type="color" id="color-input" [formControl]="colorControl" (input)="onColorChange(colorPicker.value)" />
<input #colorText type="text" [formControl]="colorControl" (input)="onColorChange(colorText.value)" />
</div>

View File

@@ -1,18 +0,0 @@
.color-picker {
display: flex;
align-items: center;
gap: 10px;
}
.color-picker input[type="color"] {
width: 50px;
height: 50px;
border: none;
cursor: pointer;
}
.color-picker input[type="text"] {
padding: 5px;
font-size: 16px;
width: 100px;
}

View File

@@ -1,3 +1,4 @@
<!-- Custom design, no page component -->
<p-panel header="Guid Generator"> <p-panel header="Guid Generator">
<div> <div>
<div *ngFor="let setting of settings" class="guid-row"> <div *ngFor="let setting of settings" class="guid-row">