feat(web): multiple feature
This commit is contained in:
@@ -70,6 +70,17 @@
|
||||
"optimization": false,
|
||||
"extractLicenses": false,
|
||||
"sourceMap": true
|
||||
},
|
||||
"local": {
|
||||
"fileReplacements": [
|
||||
{
|
||||
"replace": "src/environments/environment.ts",
|
||||
"with": "src/environments/environment.local.ts"
|
||||
}
|
||||
],
|
||||
"optimization": false,
|
||||
"extractLicenses": false,
|
||||
"sourceMap": true
|
||||
}
|
||||
},
|
||||
|
||||
@@ -83,6 +94,9 @@
|
||||
},
|
||||
"development": {
|
||||
"buildTarget": "frontend:build:development"
|
||||
},
|
||||
"local": {
|
||||
"buildTarget": "frontend:build:local"
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": "development"
|
||||
|
||||
@@ -24,6 +24,10 @@ export const routes: Routes = [
|
||||
{
|
||||
path: 'contact',
|
||||
loadChildren: () => import('./features/contact/contact.routes').then(m => m.CONTACT_ROUTES)
|
||||
},
|
||||
{
|
||||
path: '',
|
||||
loadChildren: () => import('./features/legal/legal.routes').then(m => m.LEGAL_ROUTES)
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
<span class="brand">3D fab</span>
|
||||
<p class="copyright">© 2026 3D fab.</p>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="col links">
|
||||
<a routerLink="/privacy">{{ 'FOOTER.PRIVACY' | translate }}</a>
|
||||
<a routerLink="/terms">{{ 'FOOTER.TERMS' | translate }}</a>
|
||||
<a routerLink="/about">{{ 'FOOTER.CONTACT' | translate }}</a>
|
||||
<a routerLink="/contact">{{ 'FOOTER.CONTACT' | translate }}</a>
|
||||
</div>
|
||||
|
||||
<div class="col social">
|
||||
|
||||
12
frontend/src/app/features/legal/legal.routes.ts
Normal file
12
frontend/src/app/features/legal/legal.routes.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { Routes } from '@angular/router';
|
||||
|
||||
export const LEGAL_ROUTES: Routes = [
|
||||
{
|
||||
path: 'privacy',
|
||||
loadComponent: () => import('./privacy/privacy.component').then(m => m.PrivacyComponent)
|
||||
},
|
||||
{
|
||||
path: 'terms',
|
||||
loadComponent: () => import('./terms/terms.component').then(m => m.TermsComponent)
|
||||
}
|
||||
];
|
||||
@@ -0,0 +1,17 @@
|
||||
<section class="legal-page">
|
||||
<div class="container narrow">
|
||||
<h1>{{ 'LEGAL.PRIVACY_TITLE' | translate }}</h1>
|
||||
<div class="content">
|
||||
<p class="intro">{{ 'LEGAL.LAST_UPDATE' | translate }}: February 2026</p>
|
||||
|
||||
<h2>{{ 'LEGAL.PRIVACY.SECTION_1' | translate }}</h2>
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
|
||||
|
||||
<h2>{{ 'LEGAL.PRIVACY.SECTION_2' | translate }}</h2>
|
||||
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
|
||||
|
||||
<h2>{{ 'LEGAL.PRIVACY.SECTION_3' | translate }}</h2>
|
||||
<p>Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -0,0 +1,37 @@
|
||||
.legal-page {
|
||||
padding: 6rem 0;
|
||||
min-height: 70vh;
|
||||
|
||||
.narrow {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 3rem;
|
||||
margin-bottom: 3rem;
|
||||
color: var(--color-text-main);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
margin-top: 2.5rem;
|
||||
margin-bottom: 1rem;
|
||||
color: var(--color-text-main);
|
||||
}
|
||||
|
||||
.intro {
|
||||
color: var(--color-text-muted);
|
||||
font-size: 0.9rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.content {
|
||||
line-height: 1.8;
|
||||
color: var(--color-text-main);
|
||||
|
||||
p {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
frontend/src/app/features/legal/privacy/privacy.component.ts
Normal file
11
frontend/src/app/features/legal/privacy/privacy.component.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-privacy',
|
||||
standalone: true,
|
||||
imports: [TranslateModule],
|
||||
templateUrl: './privacy.component.html',
|
||||
styleUrl: './privacy.component.scss'
|
||||
})
|
||||
export class PrivacyComponent {}
|
||||
18
frontend/src/app/features/legal/terms/terms.component.html
Normal file
18
frontend/src/app/features/legal/terms/terms.component.html
Normal file
@@ -0,0 +1,18 @@
|
||||
<section class="legal-page">
|
||||
<div class="container narrow">
|
||||
<h1>{{ 'LEGAL.TERMS_TITLE' | translate }}</h1>
|
||||
<div class="content">
|
||||
<p class="intro">{{ 'LEGAL.LAST_UPDATE' | translate }}: February 2026</p>
|
||||
|
||||
<h2>{{ 'LEGAL.TERMS.SECTION_1' | translate }}</h2>
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
|
||||
|
||||
<h2>{{ 'LEGAL.TERMS.SECTION_2' | translate }}</h2>
|
||||
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
|
||||
|
||||
<h2>{{ 'LEGAL.TERMS.SECTION_3' | translate }}</h2>
|
||||
<p>I prodotti personalizzati e realizzati su misura tramite stampa 3D non sono soggetti al diritto di recesso, a meno di difetti di fabbricazione evidenti o errori rispetto al file fornito.</p>
|
||||
<p>In caso di problemi, vi preghiamo di contattarci entro 14 giorni dalla ricezione per valutare una sostituzione o un rimborso parziale.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
37
frontend/src/app/features/legal/terms/terms.component.scss
Normal file
37
frontend/src/app/features/legal/terms/terms.component.scss
Normal file
@@ -0,0 +1,37 @@
|
||||
.legal-page {
|
||||
padding: 6rem 0;
|
||||
min-height: 70vh;
|
||||
|
||||
.narrow {
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 3rem;
|
||||
margin-bottom: 3rem;
|
||||
color: var(--color-text-main);
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.5rem;
|
||||
margin-top: 2.5rem;
|
||||
margin-bottom: 1rem;
|
||||
color: var(--color-text-main);
|
||||
}
|
||||
|
||||
.intro {
|
||||
color: var(--color-text-muted);
|
||||
font-size: 0.9rem;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.content {
|
||||
line-height: 1.8;
|
||||
color: var(--color-text-main);
|
||||
|
||||
p {
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
frontend/src/app/features/legal/terms/terms.component.ts
Normal file
11
frontend/src/app/features/legal/terms/terms.component.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { Component } from '@angular/core';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
|
||||
@Component({
|
||||
selector: 'app-terms',
|
||||
standalone: true,
|
||||
imports: [TranslateModule],
|
||||
templateUrl: './terms.component.html',
|
||||
styleUrl: './terms.component.scss'
|
||||
})
|
||||
export class TermsComponent {}
|
||||
@@ -103,6 +103,21 @@
|
||||
"ADDRESS_BIENNE": "Bienne Office, Switzerland",
|
||||
"CONTACT_US": "Contact Us"
|
||||
},
|
||||
"LEGAL": {
|
||||
"PRIVACY_TITLE": "Privacy Policy",
|
||||
"TERMS_TITLE": "Terms and Conditions",
|
||||
"LAST_UPDATE": "Last update",
|
||||
"PRIVACY": {
|
||||
"SECTION_1": "1. Data Collection",
|
||||
"SECTION_2": "2. Purpose of Processing",
|
||||
"SECTION_3": "3. Cookies and Tracking"
|
||||
},
|
||||
"TERMS": {
|
||||
"SECTION_1": "1. Terms of Use",
|
||||
"SECTION_2": "2. Orders and Payments",
|
||||
"SECTION_3": "3. Refunds and Returns"
|
||||
}
|
||||
},
|
||||
"CONTACT": {
|
||||
"TITLE": "Contact Us",
|
||||
"SEND": "Send Message",
|
||||
|
||||
@@ -82,6 +82,21 @@
|
||||
"ADDRESS_BIENNE": "Sede Bienne, Svizzera",
|
||||
"CONTACT_US": "Contattaci"
|
||||
},
|
||||
"LEGAL": {
|
||||
"PRIVACY_TITLE": "Privacy Policy",
|
||||
"TERMS_TITLE": "Termini e Condizioni",
|
||||
"LAST_UPDATE": "Ultimo aggiornamento",
|
||||
"PRIVACY": {
|
||||
"SECTION_1": "1. Raccolta dei Dati",
|
||||
"SECTION_2": "2. Finalità del Trattamento",
|
||||
"SECTION_3": "3. Cookie e Tracciamento"
|
||||
},
|
||||
"TERMS": {
|
||||
"SECTION_1": "1. Condizioni d'Uso",
|
||||
"SECTION_2": "2. Ordini e Pagamenti",
|
||||
"SECTION_3": "3. Rimborsi e Resi"
|
||||
}
|
||||
},
|
||||
"CONTACT": {
|
||||
"TITLE": "Contattaci",
|
||||
"SEND": "Invia Messaggio",
|
||||
|
||||
Reference in New Issue
Block a user