favicon and simple styling
BIN
public/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 8.3 KiB |
BIN
public/favicon-96x96.png
Normal file
|
After Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
17
public/favicon.svg
Normal file
|
After Width: | Height: | Size: 37 KiB |
21
public/site.webmanifest
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"name": "Common Cents",
|
||||||
|
"short_name": "Common Cents",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "/web-app-manifest-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "maskable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "/web-app-manifest-512x512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png",
|
||||||
|
"purpose": "maskable"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"theme_color": "#ffffff",
|
||||||
|
"background_color": "#ffffff",
|
||||||
|
"display": "standalone"
|
||||||
|
}
|
||||||
BIN
public/web-app-manifest-192x192.png
Normal file
|
After Width: | Height: | Size: 8.5 KiB |
BIN
public/web-app-manifest-512x512.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
|
|
@ -2,6 +2,7 @@
|
||||||
<header class="app-header">
|
<header class="app-header">
|
||||||
<h1>Common Cents</h1>
|
<h1>Common Cents</h1>
|
||||||
<h2>The common sense expense tracker.</h2>
|
<h2>The common sense expense tracker.</h2>
|
||||||
|
<app-divider />
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<main class="app-content">
|
<main class="app-content">
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,17 @@
|
||||||
padding: 0.5rem;
|
padding: 0.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.app-header {
|
||||||
|
padding: 0.5rem;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
app-divider {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
h1 {
|
h1 {
|
||||||
font-size: 3.125rem;
|
font-size: 3.125rem;
|
||||||
line-height: 100%;
|
line-height: 100%;
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { RouterOutlet } from '@angular/router';
|
import { RouterOutlet } from '@angular/router';
|
||||||
|
import { Divider } from './components/divider/divider';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-root',
|
selector: 'app-root',
|
||||||
imports: [RouterOutlet],
|
imports: [RouterOutlet, Divider],
|
||||||
templateUrl: './app.html',
|
templateUrl: './app.html',
|
||||||
styleUrl: './app.scss'
|
styleUrl: './app.scss'
|
||||||
})
|
})
|
||||||
|
|
|
||||||
1
src/app/components/divider/divider.html
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
<div class="divider"></div>
|
||||||
4
src/app/components/divider/divider.scss
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
.divider {
|
||||||
|
padding-top: 1rem;
|
||||||
|
border-bottom: 1px #80808042 solid;
|
||||||
|
}
|
||||||
9
src/app/components/divider/divider.ts
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
import { Component } from '@angular/core';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-divider',
|
||||||
|
imports: [],
|
||||||
|
templateUrl: './divider.html',
|
||||||
|
styleUrl: './divider.scss'
|
||||||
|
})
|
||||||
|
export class Divider { }
|
||||||
|
|
@ -1,6 +1,17 @@
|
||||||
<div class="expense-list-container">
|
<div class="expense-list-container">
|
||||||
<h2>Expenses</h2>
|
<div class="expense-list-header">
|
||||||
|
<p>Expenses</p>
|
||||||
|
<app-divider />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="expense-list">
|
||||||
@for (expense of expenses(); track expense.id) {
|
@for (expense of expenses(); track expense.id) {
|
||||||
<app-expense [expense]="expense" />
|
<app-expense [expense]="expense" />
|
||||||
}
|
}
|
||||||
|
@if (!expenses().length) {
|
||||||
|
<div class="expense-list-empty">
|
||||||
|
No expenses to display
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -2,3 +2,28 @@
|
||||||
display: grid;
|
display: grid;
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.expense-list-header {
|
||||||
|
padding-top: 1rem;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-size: 1.8rem;
|
||||||
|
line-height: 100%;
|
||||||
|
font-weight: 200;
|
||||||
|
margin: 0;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
app-divider {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.expense-list {
|
||||||
|
display: grid;
|
||||||
|
gap: 1rem;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,11 @@ import { ExpenseService } from '../../services/expense.service';
|
||||||
import { MatTableModule } from '@angular/material/table';
|
import { MatTableModule } from '@angular/material/table';
|
||||||
import { MatCardModule } from '@angular/material/card';
|
import { MatCardModule } from '@angular/material/card';
|
||||||
import { ExpenseComponent } from '../expense/expense.component';
|
import { ExpenseComponent } from '../expense/expense.component';
|
||||||
|
import {Divider} from '../divider/divider';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-expense-list',
|
selector: 'app-expense-list',
|
||||||
imports: [MatTableModule, MatCardModule, ExpenseComponent],
|
imports: [MatTableModule, MatCardModule, ExpenseComponent, Divider],
|
||||||
templateUrl: './expense-list.component.html',
|
templateUrl: './expense-list.component.html',
|
||||||
styleUrl: './expense-list.component.scss'
|
styleUrl: './expense-list.component.scss'
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,11 @@
|
||||||
<title>Common Cents</title>
|
<title>Common Cents</title>
|
||||||
<base href="/">
|
<base href="/">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<link rel="icon" type="image/x-icon" href="favicon.ico">
|
<link rel="icon" type="image/png" href="/favicon-96x96.png" sizes="96x96" />
|
||||||
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
|
<link rel="shortcut icon" href="/favicon.ico" />
|
||||||
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
|
||||||
|
<link rel="manifest" href="/site.webmanifest" />
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap" rel="stylesheet">
|
||||||
|
|
|
||||||