mirror of
https://github.com/Polaris-Entertainment/bytefy.git
synced 2026-07-07 16:15:09 +00:00
Re-style and re-organize
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
|
<div class="darkmode">
|
||||||
<app-header></app-header>
|
<app-header></app-header>
|
||||||
<div class="main-content">
|
<div class="main-content">
|
||||||
<router-outlet></router-outlet>
|
<router-outlet></router-outlet>
|
||||||
</div>
|
</div>
|
||||||
<app-footer></app-footer>
|
<app-footer></app-footer>
|
||||||
|
</div>
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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'
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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 = [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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 }
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
|
||||||
@@ -1,8 +1,3 @@
|
|||||||
:host {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
margin-top: 20px;
|
|
||||||
width: 96vw;
|
|
||||||
|
|
||||||
.icon {
|
.icon {
|
||||||
display: flex;
|
display: flex;
|
||||||
@@ -15,13 +10,6 @@
|
|||||||
transform: rotate(90deg);
|
transform: rotate(90deg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.card {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
width: 1140px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wrapper {
|
.wrapper {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
@@ -59,4 +47,3 @@
|
|||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -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
|
||||||
]
|
]
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
5
tools/src/app/shared/page/page.component.html
Normal file
5
tools/src/app/shared/page/page.component.html
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<div class="card">
|
||||||
|
<p-panel [header]="header">
|
||||||
|
<ng-content></ng-content>
|
||||||
|
</p-panel>
|
||||||
|
</div>
|
||||||
20
tools/src/app/shared/page/page.component.scss
Normal file
20
tools/src/app/shared/page/page.component.scss
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
28
tools/src/app/shared/page/page.component.spec.ts
Normal file
28
tools/src/app/shared/page/page.component.spec.ts
Normal 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();
|
||||||
|
});
|
||||||
|
});
|
||||||
13
tools/src/app/shared/page/page.component.ts
Normal file
13
tools/src/app/shared/page/page.component.ts
Normal 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 = '';
|
||||||
|
}
|
||||||
@@ -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>
|
|
||||||
@@ -1,15 +1,3 @@
|
|||||||
:host {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
margin-top: 20px;
|
|
||||||
width: 96vw;
|
|
||||||
|
|
||||||
.card {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
width: 1140px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.conversion {
|
.conversion {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -23,4 +11,3 @@
|
|||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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>
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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'
|
||||||
@@ -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>
|
|
||||||
@@ -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;
|
|
||||||
}
|
|
||||||
@@ -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">
|
||||||
|
|||||||
Reference in New Issue
Block a user