mirror of
https://github.com/adam-benyekkou/my_portfolio.git
synced 2026-01-15 20:20:09 +00:00
Refactored detail-block into shared component
This commit is contained in:
@@ -125,44 +125,6 @@
|
|||||||
text-shadow: 0 1px 2px rgba(0,0,0,0.1);
|
text-shadow: 0 1px 2px rgba(0,0,0,0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Detail Blocks */
|
|
||||||
.detail-block {
|
|
||||||
margin-bottom: var(--card-gap);
|
|
||||||
padding: 0.25rem;
|
|
||||||
border-left: 2px solid transparent;
|
|
||||||
transition: border-color 0.3s ease, padding-left 0.3s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-block:hover {
|
|
||||||
border-left-color: var(--color-nier-accent);
|
|
||||||
padding-left: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-label {
|
|
||||||
font-family: var(--font-terminal);
|
|
||||||
font-size: 0.75rem;
|
|
||||||
color: var(--color-nier-text-dark);
|
|
||||||
font-weight: 500;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 0.05em;
|
|
||||||
display: block;
|
|
||||||
margin-bottom: 0.25rem;
|
|
||||||
opacity: 0.8;
|
|
||||||
transition: opacity 0.3s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-block:hover .detail-label {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-value {
|
|
||||||
font-family: var(--font-noto-jp);
|
|
||||||
color: var(--color-nier-text-dark);
|
|
||||||
font-size: 0.85rem;
|
|
||||||
line-height: 1.4;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Tech Stack Section */
|
/* Tech Stack Section */
|
||||||
.tech-section {
|
.tech-section {
|
||||||
margin-top: var(--card-gap);
|
margin-top: var(--card-gap);
|
||||||
|
|||||||
@@ -13,15 +13,8 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div class="experience-body">
|
<div class="experience-body">
|
||||||
<div class="detail-block">
|
<app-detail-block label="PROGRAM:" [value]="training.classification"/>
|
||||||
<span class="detail-label">PROGRAM:</span>
|
<app-detail-block label="INSTITUTION:" [value]="training.timeline"/>
|
||||||
<span class="detail-value">{{ training.classification }}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-block">
|
|
||||||
<span class="detail-label">INSTITUTION:</span>
|
|
||||||
<span class="detail-value">{{ training.timeline }}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tech-section">
|
<div class="tech-section">
|
||||||
<div class="detail-label">CURRICULUM:</div>
|
<div class="detail-label">CURRICULUM:</div>
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import { Component, signal } from '@angular/core';
|
import { Component, signal } from '@angular/core';
|
||||||
import { type Experience } from '../../../../shared/models/experience.model';
|
import { type Experience } from '../../../../shared/models/experience.model';
|
||||||
|
import { DetailBlockComponent } from '../shared/detail-block/detail-block.component';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-column-education-info',
|
selector: 'app-column-education-info',
|
||||||
imports: [],
|
imports: [DetailBlockComponent],
|
||||||
templateUrl: './column-education-info.component.html',
|
templateUrl: './column-education-info.component.html',
|
||||||
styleUrl: './column-education-info.component.css',
|
styleUrl: './column-education-info.component.css',
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -150,44 +150,6 @@
|
|||||||
color: var(--color-nier-text-light);
|
color: var(--color-nier-text-light);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Detail Blocks */
|
|
||||||
.detail-block {
|
|
||||||
margin-bottom: var(--card-gap);
|
|
||||||
padding: 0.25rem;
|
|
||||||
border-left: 2px solid transparent;
|
|
||||||
transition: border-color 0.3s ease, padding-left 0.3s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-block:hover {
|
|
||||||
border-left-color: var(--color-nier-accent);
|
|
||||||
padding-left: 0.5rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-label {
|
|
||||||
font-family: var(--font-terminal);
|
|
||||||
font-size: 0.75rem;
|
|
||||||
color: var(--color-nier-text-dark);
|
|
||||||
font-weight: 500;
|
|
||||||
text-transform: uppercase;
|
|
||||||
letter-spacing: 0.05em;
|
|
||||||
display: block;
|
|
||||||
margin-bottom: 0.25rem;
|
|
||||||
opacity: 0.8;
|
|
||||||
transition: opacity 0.3s ease;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-block:hover .detail-label {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.detail-value {
|
|
||||||
font-family: var(--font-noto-jp);
|
|
||||||
color: var(--color-nier-text-dark);
|
|
||||||
font-size: 0.85rem;
|
|
||||||
line-height: 1.4;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Tech Stack Section */
|
/* Tech Stack Section */
|
||||||
.tech-section {
|
.tech-section {
|
||||||
margin-top: var(--card-gap);
|
margin-top: var(--card-gap);
|
||||||
|
|||||||
@@ -22,15 +22,8 @@
|
|||||||
</header>
|
</header>
|
||||||
|
|
||||||
<div class="experience-body">
|
<div class="experience-body">
|
||||||
<div class="detail-block">
|
<app-detail-block label="CLASSIFICATION:" [value]="experience.classification"/>
|
||||||
<span class="detail-label">CLASSIFICATION:</span>
|
<app-detail-block label="TIMELINE:" [value]="experience.timeline"/>
|
||||||
<span class="detail-value">{{ experience.classification }}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="detail-block">
|
|
||||||
<span class="detail-label">TIMELINE:</span>
|
|
||||||
<span class="detail-value">{{ experience.timeline }}</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="tech-section">
|
<div class="tech-section">
|
||||||
<div class="detail-label">TECH_STACK:</div>
|
<div class="detail-label">TECH_STACK:</div>
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
import { Component, signal } from '@angular/core';
|
import { Component, signal } from '@angular/core';
|
||||||
import { Experience } from '../../../../shared/models/experience.model';
|
import { Experience } from '../../../../shared/models/experience.model';
|
||||||
|
import { DetailBlockComponent } from '../shared/detail-block/detail-block.component';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-column-professional-info',
|
selector: 'app-column-professional-info',
|
||||||
imports: [],
|
imports: [DetailBlockComponent],
|
||||||
templateUrl: './column-professional-info.component.html',
|
templateUrl: './column-professional-info.component.html',
|
||||||
styleUrl: './column-professional-info.component.css',
|
styleUrl: './column-professional-info.component.css',
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
.detail-block {
|
||||||
|
margin-bottom: var(--card-gap);
|
||||||
|
padding: 0.25rem;
|
||||||
|
border-left: 2px solid transparent;
|
||||||
|
transition: border-color 0.3s ease, padding-left 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-block:hover {
|
||||||
|
border-left-color: var(--color-nier-accent);
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-label {
|
||||||
|
font-family: var(--font-terminal);
|
||||||
|
font-size: 0.75rem;
|
||||||
|
color: var(--color-nier-text-dark);
|
||||||
|
font-weight: 500;
|
||||||
|
text-transform: uppercase;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 0.25rem;
|
||||||
|
opacity: 0.8;
|
||||||
|
transition: opacity 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-block:hover .detail-label {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.detail-value {
|
||||||
|
font-family: var(--font-noto-jp);
|
||||||
|
color: var(--color-nier-text-dark);
|
||||||
|
font-size: 0.85rem;
|
||||||
|
line-height: 1.4;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<div class="detail-block">
|
||||||
|
<span class="detail-label">{{ label()}}</span>
|
||||||
|
<span class="detail-value">{{ value() }}</span>
|
||||||
|
</div>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import { Component, input } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-detail-block',
|
||||||
|
imports: [],
|
||||||
|
templateUrl: './detail-block.component.html',
|
||||||
|
styleUrl: './detail-block.component.css',
|
||||||
|
})
|
||||||
|
export class DetailBlockComponent {
|
||||||
|
label = input<string>();
|
||||||
|
value = input<string>();
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
<p>info-card works!</p>
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-info-card',
|
||||||
|
imports: [],
|
||||||
|
templateUrl: './info-card.component.html',
|
||||||
|
styleUrl: './info-card.component.css'
|
||||||
|
})
|
||||||
|
export class InfoCardComponent {
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user