From 3443a39ab3a6182053c7bfadc24759d7e088a25a Mon Sep 17 00:00:00 2001 From: Joe Arndt Date: Mon, 23 Feb 2026 22:39:10 -0600 Subject: [PATCH 01/18] page scaffolding and theme change --- src/app/app.html | 6 +++- src/app/app.routes.ts | 10 ++++++ src/app/app.scss | 14 +++----- src/app/app.ts | 33 ++++++++++++++++--- .../{divider.html => divider.component.html} | 0 .../{divider.scss => divider.component.scss} | 0 .../components/divider/divider.component.ts | 9 +++++ src/app/components/divider/divider.ts | 9 ----- .../expense-list/expense-list.component.scss | 3 +- .../expense-list/expense-list.component.ts | 4 +-- src/app/pages/home/home-page.component.html | 6 +--- src/app/pages/home/home-page.component.scss | 7 ++++ src/app/pages/home/home-page.component.ts | 7 ++-- .../metadata/metadata-page.component.html | 3 ++ .../metadata/metadata-page.component.scss | 0 .../pages/metadata/metadata-page.component.ts | 9 +++++ .../settings/settings-page.component.html | 3 ++ .../settings/settings-page.component.scss | 0 .../pages/settings/settings-page.component.ts | 9 +++++ src/styles.scss | 2 +- 20 files changed, 95 insertions(+), 39 deletions(-) rename src/app/components/divider/{divider.html => divider.component.html} (100%) rename src/app/components/divider/{divider.scss => divider.component.scss} (100%) create mode 100644 src/app/components/divider/divider.component.ts delete mode 100644 src/app/components/divider/divider.ts create mode 100644 src/app/pages/metadata/metadata-page.component.html create mode 100644 src/app/pages/metadata/metadata-page.component.scss create mode 100644 src/app/pages/metadata/metadata-page.component.ts create mode 100644 src/app/pages/settings/settings-page.component.html create mode 100644 src/app/pages/settings/settings-page.component.scss create mode 100644 src/app/pages/settings/settings-page.component.ts diff --git a/src/app/app.html b/src/app/app.html index c065c67..524c63f 100644 --- a/src/app/app.html +++ b/src/app/app.html @@ -1,7 +1,11 @@

Common Cents

-

The common sense expense tracker.

+
+ @for (link of navLinks(); track link) { + {{ link.text }} + } +
diff --git a/src/app/app.routes.ts b/src/app/app.routes.ts index 5a89bba..a891794 100644 --- a/src/app/app.routes.ts +++ b/src/app/app.routes.ts @@ -1,6 +1,8 @@ import { Routes } from '@angular/router'; import { ExpensePage } from './pages/expenses/expense-page.component'; import { HomePage } from './pages/home/home-page.component'; +import { MetadataPageComponent } from './pages/metadata/metadata-page.component'; +import { SettingsPageComponent } from './pages/settings/settings-page.component'; export const routes: Routes = [ { @@ -10,5 +12,13 @@ export const routes: Routes = [ { path: 'expenses', component: ExpensePage + }, + { + path: 'metadata', + component: MetadataPageComponent + }, + { + path: 'settings', + component: SettingsPageComponent } ]; diff --git a/src/app/app.scss b/src/app/app.scss index 46d0307..330ac4b 100644 --- a/src/app/app.scss +++ b/src/app/app.scss @@ -14,19 +14,13 @@ } h1 { - font-size: 3.125rem; + font-size: 2.5rem; line-height: 100%; letter-spacing: -0.125rem; - font-weight: 500; + font-weight: 400; margin: 0; - font-family: sans-serif; } -h2 { - font-size: 1.2rem; - line-height: 100%; - font-weight: 500; - margin: 0; - font-family: sans-serif; - font-style: italic; +.app-navigation { + display: flex; } diff --git a/src/app/app.ts b/src/app/app.ts index 68f4f4a..a9619ac 100644 --- a/src/app/app.ts +++ b/src/app/app.ts @@ -1,11 +1,36 @@ -import { Component } from '@angular/core'; +import { Component, signal } from '@angular/core'; import { RouterOutlet } from '@angular/router'; -import { Divider } from './components/divider/divider'; +import { DividerComponent } from './components/divider/divider.component'; +import { MatButton } from '@angular/material/button'; + +interface NavLink { + text: string; + href: string; +} @Component({ selector: 'app-root', - imports: [RouterOutlet, Divider], + imports: [RouterOutlet, DividerComponent, MatButton], templateUrl: './app.html', styleUrl: './app.scss' }) -export class App { } +export class App { + public navLinks = signal([ + { + text: 'Home', + href: '/' + }, + { + text: 'Expenses', + href: '/expenses' + }, + { + text: 'Metadata', + href: '/metadata' + }, + { + text: 'Settings', + href: '/settings' + } + ]); +} diff --git a/src/app/components/divider/divider.html b/src/app/components/divider/divider.component.html similarity index 100% rename from src/app/components/divider/divider.html rename to src/app/components/divider/divider.component.html diff --git a/src/app/components/divider/divider.scss b/src/app/components/divider/divider.component.scss similarity index 100% rename from src/app/components/divider/divider.scss rename to src/app/components/divider/divider.component.scss diff --git a/src/app/components/divider/divider.component.ts b/src/app/components/divider/divider.component.ts new file mode 100644 index 0000000..1c18680 --- /dev/null +++ b/src/app/components/divider/divider.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-divider', + imports: [], + templateUrl: './divider.component.html', + styleUrl: './divider.component.scss' +}) +export class DividerComponent { } diff --git a/src/app/components/divider/divider.ts b/src/app/components/divider/divider.ts deleted file mode 100644 index fb197c5..0000000 --- a/src/app/components/divider/divider.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-divider', - imports: [], - templateUrl: './divider.html', - styleUrl: './divider.scss' -}) -export class Divider { } diff --git a/src/app/components/expense-list/expense-list.component.scss b/src/app/components/expense-list/expense-list.component.scss index 1b125f4..f6d8b5f 100644 --- a/src/app/components/expense-list/expense-list.component.scss +++ b/src/app/components/expense-list/expense-list.component.scss @@ -12,9 +12,8 @@ p { font-size: 1.8rem; line-height: 100%; - font-weight: 200; + font-weight: 400; margin: 0; - font-family: sans-serif; } app-divider { diff --git a/src/app/components/expense-list/expense-list.component.ts b/src/app/components/expense-list/expense-list.component.ts index 532559e..017435a 100644 --- a/src/app/components/expense-list/expense-list.component.ts +++ b/src/app/components/expense-list/expense-list.component.ts @@ -3,11 +3,11 @@ import { ExpenseService } from '../../services/expense.service'; import { MatTableModule } from '@angular/material/table'; import { MatCardModule } from '@angular/material/card'; import { ExpenseComponent } from '../expense/expense.component'; -import {Divider} from '../divider/divider'; +import { DividerComponent } from '../divider/divider.component'; @Component({ selector: 'app-expense-list', - imports: [MatTableModule, MatCardModule, ExpenseComponent, Divider], + imports: [MatTableModule, MatCardModule, ExpenseComponent, DividerComponent], templateUrl: './expense-list.component.html', styleUrl: './expense-list.component.scss' }) diff --git a/src/app/pages/home/home-page.component.html b/src/app/pages/home/home-page.component.html index 94c5c02..326f0d3 100644 --- a/src/app/pages/home/home-page.component.html +++ b/src/app/pages/home/home-page.component.html @@ -1,7 +1,3 @@
- +

The common sense expense tracker.

diff --git a/src/app/pages/home/home-page.component.scss b/src/app/pages/home/home-page.component.scss index e69de29..0fcfa03 100644 --- a/src/app/pages/home/home-page.component.scss +++ b/src/app/pages/home/home-page.component.scss @@ -0,0 +1,7 @@ +h2 { + font-size: 1.3rem; + line-height: 100%; + font-weight: 500; + margin: 0; + font-family: sans-serif; +} diff --git a/src/app/pages/home/home-page.component.ts b/src/app/pages/home/home-page.component.ts index 724172f..012cfae 100644 --- a/src/app/pages/home/home-page.component.ts +++ b/src/app/pages/home/home-page.component.ts @@ -1,12 +1,9 @@ import { Component } from '@angular/core'; -import { RouterLink } from '@angular/router'; @Component({ selector: 'app-home', - imports: [ - RouterLink - ], + imports: [], templateUrl: './home-page.component.html', - styleUrl: './home-page.component.scss', + styleUrl: './home-page.component.scss' }) export class HomePage { } diff --git a/src/app/pages/metadata/metadata-page.component.html b/src/app/pages/metadata/metadata-page.component.html new file mode 100644 index 0000000..49ebd46 --- /dev/null +++ b/src/app/pages/metadata/metadata-page.component.html @@ -0,0 +1,3 @@ + diff --git a/src/app/pages/metadata/metadata-page.component.scss b/src/app/pages/metadata/metadata-page.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/metadata/metadata-page.component.ts b/src/app/pages/metadata/metadata-page.component.ts new file mode 100644 index 0000000..778d92d --- /dev/null +++ b/src/app/pages/metadata/metadata-page.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-metadata', + imports: [], + templateUrl: './metadata-page.component.html', + styleUrl: './metadata-page.component.scss' +}) +export class MetadataPageComponent { } diff --git a/src/app/pages/settings/settings-page.component.html b/src/app/pages/settings/settings-page.component.html new file mode 100644 index 0000000..9603e7f --- /dev/null +++ b/src/app/pages/settings/settings-page.component.html @@ -0,0 +1,3 @@ +
+ Settings page +
diff --git a/src/app/pages/settings/settings-page.component.scss b/src/app/pages/settings/settings-page.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/pages/settings/settings-page.component.ts b/src/app/pages/settings/settings-page.component.ts new file mode 100644 index 0000000..817e995 --- /dev/null +++ b/src/app/pages/settings/settings-page.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-settings', + imports: [], + templateUrl: './settings-page.component.html', + styleUrl: './settings-page.component.scss' +}) +export class SettingsPageComponent { } diff --git a/src/styles.scss b/src/styles.scss index ac47f6e..fe32d0a 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -10,7 +10,7 @@ html { height: 100%; @include mat.theme(( color: ( - primary: mat.$cyan-palette, + primary: mat.$azure-palette, tertiary: mat.$orange-palette, ), typography: Roboto, -- 2.47.3 From a0b1ed8d07dc8251ffb42a0f55f600ce2d664904 Mon Sep 17 00:00:00 2001 From: Joe Arndt Date: Mon, 23 Feb 2026 23:21:50 -0600 Subject: [PATCH 02/18] add metadata components --- .../categories/categories.component.html | 3 ++ .../categories/categories.component.scss | 0 .../categories/categories.component.ts | 9 +++++ .../merchants/merchants.component.html | 3 ++ .../merchants/merchants.component.scss | 0 .../metadata/merchants/merchants.component.ts | 9 +++++ .../metadata/metadata.component.html | 36 +++++++++++++++++++ .../metadata/metadata.component.scss | 5 +++ .../components/metadata/metadata.component.ts | 22 ++++++++++++ .../metadata/tags/tags.component.html | 3 ++ .../metadata/tags/tags.component.scss | 0 .../metadata/tags/tags.component.ts | 9 +++++ .../expenses/expense-page.component.html | 2 +- .../expenses/expense-page.component.scss | 2 +- .../pages/expenses/expense-page.component.ts | 2 +- src/app/pages/home/home-page.component.html | 2 +- src/app/pages/home/home-page.component.ts | 2 +- .../metadata/metadata-page.component.html | 4 +-- .../pages/metadata/metadata-page.component.ts | 7 ++-- .../settings/settings-page.component.html | 2 +- .../pages/settings/settings-page.component.ts | 2 +- 21 files changed, 113 insertions(+), 11 deletions(-) create mode 100644 src/app/components/metadata/categories/categories.component.html create mode 100644 src/app/components/metadata/categories/categories.component.scss create mode 100644 src/app/components/metadata/categories/categories.component.ts create mode 100644 src/app/components/metadata/merchants/merchants.component.html create mode 100644 src/app/components/metadata/merchants/merchants.component.scss create mode 100644 src/app/components/metadata/merchants/merchants.component.ts create mode 100644 src/app/components/metadata/metadata.component.html create mode 100644 src/app/components/metadata/metadata.component.scss create mode 100644 src/app/components/metadata/metadata.component.ts create mode 100644 src/app/components/metadata/tags/tags.component.html create mode 100644 src/app/components/metadata/tags/tags.component.scss create mode 100644 src/app/components/metadata/tags/tags.component.ts diff --git a/src/app/components/metadata/categories/categories.component.html b/src/app/components/metadata/categories/categories.component.html new file mode 100644 index 0000000..a9e5079 --- /dev/null +++ b/src/app/components/metadata/categories/categories.component.html @@ -0,0 +1,3 @@ +
+ Categories Component +
diff --git a/src/app/components/metadata/categories/categories.component.scss b/src/app/components/metadata/categories/categories.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/metadata/categories/categories.component.ts b/src/app/components/metadata/categories/categories.component.ts new file mode 100644 index 0000000..4450a3e --- /dev/null +++ b/src/app/components/metadata/categories/categories.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-categories', + imports: [], + templateUrl: './categories.component.html', + styleUrl: './categories.component.scss' +}) +export class CategoriesComponent { } diff --git a/src/app/components/metadata/merchants/merchants.component.html b/src/app/components/metadata/merchants/merchants.component.html new file mode 100644 index 0000000..c956486 --- /dev/null +++ b/src/app/components/metadata/merchants/merchants.component.html @@ -0,0 +1,3 @@ +
+ Merchants Component +
diff --git a/src/app/components/metadata/merchants/merchants.component.scss b/src/app/components/metadata/merchants/merchants.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/metadata/merchants/merchants.component.ts b/src/app/components/metadata/merchants/merchants.component.ts new file mode 100644 index 0000000..b987ac5 --- /dev/null +++ b/src/app/components/metadata/merchants/merchants.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-merchants', + imports: [], + templateUrl: './merchants.component.html', + styleUrl: './merchants.component.scss' +}) +export class MerchantsComponent { } diff --git a/src/app/components/metadata/metadata.component.html b/src/app/components/metadata/metadata.component.html new file mode 100644 index 0000000..889039c --- /dev/null +++ b/src/app/components/metadata/metadata.component.html @@ -0,0 +1,36 @@ + diff --git a/src/app/components/metadata/metadata.component.scss b/src/app/components/metadata/metadata.component.scss new file mode 100644 index 0000000..9258375 --- /dev/null +++ b/src/app/components/metadata/metadata.component.scss @@ -0,0 +1,5 @@ +.metadata-tab { + display: flex; + align-items: center; + gap: 0.5rem; +} diff --git a/src/app/components/metadata/metadata.component.ts b/src/app/components/metadata/metadata.component.ts new file mode 100644 index 0000000..59471c5 --- /dev/null +++ b/src/app/components/metadata/metadata.component.ts @@ -0,0 +1,22 @@ +import { Component } from '@angular/core'; +import { MatTab, MatTabGroup, MatTabLabel } from '@angular/material/tabs'; +import { MatIcon } from '@angular/material/icon'; +import { TagsComponent } from './tags/tags.component'; +import { MerchantsComponent } from './merchants/merchants.component'; +import { CategoriesComponent } from './categories/categories.component'; + +@Component({ + selector: 'app-metadata', + imports: [ + MatTabGroup, + MatTab, + MatIcon, + MatTabLabel, + TagsComponent, + MerchantsComponent, + CategoriesComponent + ], + templateUrl: './metadata.component.html', + styleUrl: './metadata.component.scss' +}) +export class MetadataComponent { } diff --git a/src/app/components/metadata/tags/tags.component.html b/src/app/components/metadata/tags/tags.component.html new file mode 100644 index 0000000..73248d6 --- /dev/null +++ b/src/app/components/metadata/tags/tags.component.html @@ -0,0 +1,3 @@ +
+ Tags Component +
diff --git a/src/app/components/metadata/tags/tags.component.scss b/src/app/components/metadata/tags/tags.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/components/metadata/tags/tags.component.ts b/src/app/components/metadata/tags/tags.component.ts new file mode 100644 index 0000000..f1d7557 --- /dev/null +++ b/src/app/components/metadata/tags/tags.component.ts @@ -0,0 +1,9 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-tags', + imports: [], + templateUrl: './tags.component.html', + styleUrl: './tags.component.scss' +}) +export class TagsComponent { } diff --git a/src/app/pages/expenses/expense-page.component.html b/src/app/pages/expenses/expense-page.component.html index 2add09d..de00fc6 100644 --- a/src/app/pages/expenses/expense-page.component.html +++ b/src/app/pages/expenses/expense-page.component.html @@ -1,4 +1,4 @@ -
+
diff --git a/src/app/pages/expenses/expense-page.component.scss b/src/app/pages/expenses/expense-page.component.scss index b35508b..30bf02c 100644 --- a/src/app/pages/expenses/expense-page.component.scss +++ b/src/app/pages/expenses/expense-page.component.scss @@ -1,4 +1,4 @@ -.expenses-container { +.expenses-page-container { display: flex; flex-direction: column; gap: 1rem; diff --git a/src/app/pages/expenses/expense-page.component.ts b/src/app/pages/expenses/expense-page.component.ts index 18f24e0..542a3fc 100644 --- a/src/app/pages/expenses/expense-page.component.ts +++ b/src/app/pages/expenses/expense-page.component.ts @@ -3,7 +3,7 @@ import { ExpenseListComponent } from '../../components/expense-list/expense-list import { ExpenseComponent } from '../../components/expense/expense.component'; @Component({ - selector: 'app-expenses', + selector: 'app-expenses-page', imports: [ ExpenseListComponent, ExpenseComponent diff --git a/src/app/pages/home/home-page.component.html b/src/app/pages/home/home-page.component.html index 326f0d3..19cf282 100644 --- a/src/app/pages/home/home-page.component.html +++ b/src/app/pages/home/home-page.component.html @@ -1,3 +1,3 @@ -
+

The common sense expense tracker.

diff --git a/src/app/pages/home/home-page.component.ts b/src/app/pages/home/home-page.component.ts index 012cfae..e9a654d 100644 --- a/src/app/pages/home/home-page.component.ts +++ b/src/app/pages/home/home-page.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; @Component({ - selector: 'app-home', + selector: 'app-home-page', imports: [], templateUrl: './home-page.component.html', styleUrl: './home-page.component.scss' diff --git a/src/app/pages/metadata/metadata-page.component.html b/src/app/pages/metadata/metadata-page.component.html index 49ebd46..61dae30 100644 --- a/src/app/pages/metadata/metadata-page.component.html +++ b/src/app/pages/metadata/metadata-page.component.html @@ -1,3 +1,3 @@ -