diff --git a/package-lock.json b/package-lock.json index 8c704cd..b38dea8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,8 +20,11 @@ "@angular/platform-server": "^15.1.0", "@angular/router": "^15.1.0", "@nguniversal/express-engine": "^15.1.0", + "@types/chart.js": "^2.9.37", + "chart.js": "^4.2.1", "express": "^4.15.2", "ngx-device-detector": "^5.0.1", + "pocketbase": "^0.11.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.12.0" @@ -2838,6 +2841,11 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", @@ -3950,6 +3958,14 @@ "@types/node": "*" } }, + "node_modules/@types/chart.js": { + "version": "2.9.37", + "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.37.tgz", + "integrity": "sha512-9bosRfHhkXxKYfrw94EmyDQcdjMaQPkU1fH2tDxu8DWXxf1mjzWQAV4laJF51ZbC2ycYwNDvIm1rGez8Bug0vg==", + "dependencies": { + "moment": "^2.10.2" + } + }, "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -5764,6 +5780,17 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "node_modules/chart.js": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.2.1.tgz", + "integrity": "sha512-6YbpQ0nt3NovAgOzbkSSeeAQu/3za1319dPUQTXn9WcOpywM8rGKxJHrhS8V8xEkAlk8YhEfjbuAPfUyp6jIsw==", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": "^7.0.0" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -9902,6 +9929,14 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -10897,6 +10932,11 @@ "node": ">=8" } }, + "node_modules/pocketbase": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/pocketbase/-/pocketbase-0.11.0.tgz", + "integrity": "sha512-nCH3xZoE4oNSWwvjCGOUkuxrZYwzmzEtgW1QrlrV6yPsc9E4D86NDHqXVtnjX7nOLB91FxsiJkZhhlO725yH7g==" + }, "node_modules/portscanner": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", @@ -15510,6 +15550,11 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, "@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", @@ -16523,6 +16568,14 @@ "@types/node": "*" } }, + "@types/chart.js": { + "version": "2.9.37", + "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.37.tgz", + "integrity": "sha512-9bosRfHhkXxKYfrw94EmyDQcdjMaQPkU1fH2tDxu8DWXxf1mjzWQAV4laJF51ZbC2ycYwNDvIm1rGez8Bug0vg==", + "requires": { + "moment": "^2.10.2" + } + }, "@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", @@ -17979,6 +18032,14 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "chart.js": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.2.1.tgz", + "integrity": "sha512-6YbpQ0nt3NovAgOzbkSSeeAQu/3za1319dPUQTXn9WcOpywM8rGKxJHrhS8V8xEkAlk8YhEfjbuAPfUyp6jIsw==", + "requires": { + "@kurkle/color": "^0.3.0" + } + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -21150,6 +21211,11 @@ "minimist": "^1.2.6" } }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -21906,6 +21972,11 @@ "find-up": "^4.0.0" } }, + "pocketbase": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/pocketbase/-/pocketbase-0.11.0.tgz", + "integrity": "sha512-nCH3xZoE4oNSWwvjCGOUkuxrZYwzmzEtgW1QrlrV6yPsc9E4D86NDHqXVtnjX7nOLB91FxsiJkZhhlO725yH7g==" + }, "portscanner": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", diff --git a/package.json b/package.json index 734b21f..ca82e65 100644 --- a/package.json +++ b/package.json @@ -26,8 +26,11 @@ "@angular/platform-server": "^15.1.0", "@angular/router": "^15.1.0", "@nguniversal/express-engine": "^15.1.0", + "@types/chart.js": "^2.9.37", + "chart.js": "^4.2.1", "express": "^4.15.2", "ngx-device-detector": "^5.0.1", + "pocketbase": "^0.11.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.12.0" diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index f5671db..e410f49 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -1,9 +1,13 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import {HomeComponent} from "./sites/home/home.component"; +import {ProjectsComponent} from "./sites/projects/projects.component"; +import {TechnologiesComponent} from "./sites/technologies/technologies.component"; const routes: Routes = [ {path: "", component: HomeComponent}, + {path: "projects", component: ProjectsComponent}, + {path: "technologies", component: TechnologiesComponent}, {path: "**", pathMatch: "full", redirectTo: ""} ]; diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 6a0720a..0395a20 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -5,26 +5,42 @@ import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { NavigationComponent } from './components/navigation/navigation.component'; -import {MatSidenavModule} from "@angular/material/sidenav"; import {MatIconModule} from "@angular/material/icon"; import {MatButtonModule} from "@angular/material/button"; import { HomeComponent } from './sites/home/home.component'; import { FeaturedProjectsPipe } from './pipes/featured-projects.pipe'; +import { ProjectsComponent } from './sites/projects/projects.component'; +import {MatTooltipModule} from "@angular/material/tooltip"; +import { FancyButtonComponent } from './components/fancy-button/fancy-button.component'; +import { ProjectComponent } from './components/project/project.component'; +import { TechnologiesComponent } from './sites/technologies/technologies.component'; +import { TechnologyComponent } from './components/technology/technology.component'; +import { LanguagesPipe } from './pipes/languages.pipe'; +import { FrameworksPipe } from './pipes/frameworks.pipe'; +import { SkillsPipe } from './pipes/skills.pipe'; @NgModule({ declarations: [ AppComponent, NavigationComponent, HomeComponent, - FeaturedProjectsPipe + FeaturedProjectsPipe, + ProjectsComponent, + FancyButtonComponent, + ProjectComponent, + TechnologiesComponent, + TechnologyComponent, + LanguagesPipe, + FrameworksPipe, + SkillsPipe ], imports: [ BrowserModule.withServerTransition({appId: 'serverApp'}), AppRoutingModule, BrowserAnimationsModule, - MatSidenavModule, MatIconModule, - MatButtonModule + MatButtonModule, + MatTooltipModule ], providers: [], bootstrap: [AppComponent] diff --git a/src/app/components/fancy-button/fancy-button.component.html b/src/app/components/fancy-button/fancy-button.component.html new file mode 100644 index 0000000..ab215c5 --- /dev/null +++ b/src/app/components/fancy-button/fancy-button.component.html @@ -0,0 +1,4 @@ + + {{label}} + {{label}} + diff --git a/src/app/components/fancy-button/fancy-button.component.scss b/src/app/components/fancy-button/fancy-button.component.scss new file mode 100644 index 0000000..37b00b6 --- /dev/null +++ b/src/app/components/fancy-button/fancy-button.component.scss @@ -0,0 +1,54 @@ +$text-move: hover-text-move 300ms forwards ease-out; + +.button { + display: flex; + flex-direction: column; + gap: 5px; + text-align: center; + + width: max-content; + height: 40px; + padding-inline: 15px; + border: 1px solid #FFF; + border-radius: 20px; + text-decoration: none; + font-size: 13px; + + .text-1 { + margin-top: 12px; + } + + .text-2 { + opacity: 0; + } + + &:hover { + .text-1 { + animation: hover-text 250ms forwards ease-out reverse, $text-move; + } + + .text-2 { + animation: hover-text 300ms forwards ease-out, $text-move; + } + } +} + +@keyframes hover-text { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes hover-text-move { + from { + transform: translateY(0); + } + + to { + transform: translateY(-20px); + } +} diff --git a/src/app/components/fancy-button/fancy-button.component.ts b/src/app/components/fancy-button/fancy-button.component.ts new file mode 100644 index 0000000..3488a95 --- /dev/null +++ b/src/app/components/fancy-button/fancy-button.component.ts @@ -0,0 +1,13 @@ +import {Component, Input} from '@angular/core'; + +@Component({ + selector: 'fancy-button', + templateUrl: './fancy-button.component.html', + styleUrls: ['./fancy-button.component.scss'] +}) +export class FancyButtonComponent { + + @Input('href') link: string | undefined; + @Input('label') label: string | undefined; + +} diff --git a/src/app/components/project/project.component.html b/src/app/components/project/project.component.html new file mode 100644 index 0000000..0fdd158 --- /dev/null +++ b/src/app/components/project/project.component.html @@ -0,0 +1,14 @@ +