build: starting routing, main layout

This commit is contained in:
Mathew Guest 2024-08-02 03:30:50 -06:00
parent bcaafd15c1
commit feb747bb56
17 changed files with 141 additions and 332 deletions

@ -56,6 +56,12 @@ https://hub.docker.com/r/wlucha/angular-starter
- `npm run prettier` - Format the whole project - `npm run prettier` - Format the whole project
- `npm run audit` - Audit this application using Sonatype OSS Index - `npm run audit` - Audit this application using Sonatype OSS Index
## Creating components
```
npx ng generate component HomeComponent --module=app
```
## This app was created and started from https://github.com/wlucha/angular-starter ## This app was created and started from https://github.com/wlucha/angular-starter
Many thanks to all contributors!! and especially Wilfried wlucha. This starter angular scaffold was the best/up-to-date Many thanks to all contributors!! and especially Wilfried wlucha. This starter angular scaffold was the best/up-to-date

@ -6,5 +6,6 @@ services:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
ports: ports:
# Serve on localhost 8000 -> mapped to port 80 inside the Docker container
- "8000:80" - "8000:80"
restart: always restart: always

@ -1,13 +1,16 @@
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router'; import { RouterModule, Routes } from '@angular/router';
// import { HomeComponent } from './home/home.component'; import { HomeComponent } from './home-component/home.component';
// import { AboutComponent } from './about/about.component'; // import { AboutComponent } from './about/about.component';
// import { NotFoundComponent } from './not-found/not-found.component'; // import { NotFoundComponent } from './not-found/not-found.component';
// //
import { ScoutingCryptoComponent } from 'app/scouting-crypto/scouting-crypto.component';
const routes: Routes = [ const routes: Routes = [
{ path: '', redirectTo: '/home', pathMatch: 'full' }, { path: '', redirectTo: '/home', pathMatch: 'full' },
// { path: 'home', component: HomeComponent }, { path: 'home', component: HomeComponent },
// { path: 'about', component: AboutComponent }, { path: 'scout', component: ScoutingCryptoComponent },
// { path: '**', component: NotFoundComponent } // { path: '**', component: NotFoundComponent }
]; ];

@ -1,303 +1,7 @@
:host { body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", background: red;
"Segoe UI Emoji", "Segoe UI Symbol"; background: #171b26 !important;
font-size: 14px;
color: #333;
box-sizing: border-box;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
h1,
h2,
h3,
h4,
h5,
h6 {
margin: 8px 0;
}
p {
margin: 0; margin: 0;
} padding: 0;
font-family: sans-serif;
.spacer {
flex: 1;
}
.toolbar {
position: absolute;
top: 0;
left: 0;
right: 0;
height: 60px;
display: flex;
align-items: center;
background-color: #1976d2;
color: white;
font-weight: 600;
}
.toolbar img {
margin: 0 16px;
}
.toolbar #twitter-logo {
height: 40px;
margin: 0 16px;
}
.toolbar #twitter-logo:hover {
opacity: 0.8;
}
.content {
display: flex;
margin: 82px auto 32px;
padding: 0 16px;
max-width: 960px;
flex-direction: column;
align-items: center;
}
svg.material-icons {
height: 24px;
width: auto;
}
svg.material-icons:not(:last-child) {
margin-right: 8px;
}
.card svg.material-icons path {
fill: #888;
}
.card-container {
display: flex;
flex-wrap: wrap;
justify-content: center;
margin-top: 16px;
}
.card {
border-radius: 4px;
border: 1px solid #eee;
background-color: #fafafa;
height: 40px;
width: 200px;
margin: 0 8px 16px;
padding: 16px;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
transition: all 0.2s ease-in-out;
line-height: 24px;
}
.card-container .card:not(:last-child) {
margin-right: 0;
}
.card.card-small {
height: 16px;
width: 168px;
}
.card-container .card:not(.highlight-card) {
cursor: pointer;
}
.card-container .card:not(.highlight-card):hover {
transform: translateY(-3px);
box-shadow: 0 4px 17px rgba(0, 0, 0, 0.35);
}
.card-container .card:not(.highlight-card):hover .material-icons path {
fill: rgb(105, 103, 103);
}
.card.highlight-card {
background-color: #1976d2;
color: white;
font-weight: 600;
border: none;
width: auto;
min-width: 30%;
position: relative;
}
.card.card.highlight-card span {
margin-left: 60px;
}
svg#rocket {
width: 80px;
position: absolute;
left: -10px;
top: -24px;
}
svg#rocket-smoke {
height: calc(100vh - 95px);
position: absolute;
top: 10px;
right: 180px;
z-index: -10;
}
a,
a:visited,
a:hover {
color: #1976d2;
text-decoration: none;
}
a:hover {
color: #125699;
}
.terminal {
position: relative;
width: 80%;
max-width: 600px;
border-radius: 6px;
padding-top: 45px;
margin-top: 8px;
overflow: hidden;
background-color: rgb(15, 15, 16);
}
.terminal::before {
content: "\2022 \2022 \2022";
position: absolute;
top: 0;
left: 0;
height: 4px;
background: rgb(58, 58, 58);
color: #c2c3c4;
width: 100%;
font-size: 2rem;
line-height: 0;
padding: 14px 0;
text-indent: 4px;
}
.terminal pre {
font-family:
SFMono-Regular,
Consolas,
Liberation Mono,
Menlo,
monospace;
color: white;
padding: 0 1rem 1rem;
margin: 0;
}
.circle-link {
height: 40px;
width: 40px;
border-radius: 40px;
margin: 8px;
background-color: white;
border: 1px solid #eeeeee;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
box-shadow:
0 1px 3px rgba(0, 0, 0, 0.12),
0 1px 2px rgba(0, 0, 0, 0.24);
transition: 1s ease-out;
}
.circle-link:hover {
transform: translateY(-0.25rem);
box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2);
}
footer {
margin-top: 8px;
display: flex;
align-items: center;
line-height: 20px;
}
footer a {
display: flex;
align-items: center;
}
.github-star-badge {
color: #24292e;
display: flex;
align-items: center;
font-size: 12px;
padding: 3px 10px;
border: 1px solid rgba(27, 31, 35, 0.2);
border-radius: 3px;
background-image: linear-gradient(-180deg, #fafbfc, #eff3f6 90%);
margin-left: 4px;
font-weight: 600;
font-family:
-apple-system,
BlinkMacSystemFont,
Segoe UI,
Helvetica,
Arial,
sans-serif,
Apple Color Emoji,
Segoe UI Emoji,
Segoe UI Symbol;
}
.github-star-badge:hover {
background-image: linear-gradient(-180deg, #f0f3f6, #e6ebf1 90%);
border-color: rgba(27, 31, 35, 0.35);
background-position: -0.5em;
}
.github-star-badge .material-icons {
height: 16px;
width: 16px;
margin-right: 4px;
}
svg#clouds {
position: fixed;
bottom: -160px;
left: -230px;
z-index: -10;
width: 1920px;
}
/* Responsive Styles */
@media screen and (max-width: 767px) {
.card-container > *:not(.circle-link),
.terminal {
width: 100%;
}
.card:not(.highlight-card) {
height: 16px;
margin: 8px 0;
}
.card.highlight-card span {
margin-left: 72px;
}
svg#rocket-smoke {
right: 120px;
transform: rotate(-5deg);
}
}
@media screen and (max-width: 575px) {
svg#rocket-smoke {
display: none;
visibility: hidden;
}
} }

@ -1,10 +1,48 @@
<!-- Toolbar --> <!-- Toolbar -->
<div class="toolbar" role="banner">
<header>
<!--<div class="toolbar" role="banner">-->
<img <img
width="40" width="40"
alt="Angular Logo" alt="Angular Logo"
src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg==" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg=="
/> />
<span>Welcome</span> <span>$kriLL</span>
<div class="spacer"></div> <!-- <div class="spacer"></div>-->
<nav>
<ul>
<li>
<a routerLink="/scout">
<button class="btn btn-warning" type="button">Scouting</button>
</a>
</li>
<li>
<button class="btn btn-warning" type="button">
<a routerLink="/portfolio">Portfolio</a>
</button>
</li>
<li>
<button class="btn btn-warning" type="button">
<a routerLink="/trade">Trade</a>
</button>
</li>
</ul>
</nav>
<!--</div>-->
</header>
<main>
<!-- Page Content -->
<div class="container">
<router-outlet></router-outlet>
</div> </div>
</main>
<footer>
<div class="container-fluid">
Copyright &copy 2024 Zavage Software Inc., all rights reserved.<br />
Denver, CO
</div>
</footer>

@ -1,10 +1,15 @@
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';
@Component({ @Component({
selector: 'app-root', selector: 'app-root',
//standalone: true,
// imports: [
// RouterLink, RouterLinkActive, RouterOutlet
// ],
templateUrl: './app.component.html', templateUrl: './app.component.html',
styleUrls: ['./app.component.css'] styleUrls: ['./app.component.css'],
}) })
export class AppComponent { export class AppComponent {
title = 'angular-starter'; title = 'Skrill - get rich or die trying!!';
} }

@ -6,10 +6,20 @@ import { AppRoutingModule } from './app-routing.module';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { HttpClientModule } from '@angular/common/http'; import { HttpClientModule } from '@angular/common/http';
import { TranslocoRootModule } from './transloco-root.module'; import { TranslocoRootModule } from './transloco-root.module';
import { ScoutingCryptoComponent } from './scouting-crypto/scouting-crypto.component';
import { HomeComponent } from './home-component/home.component';
import { RouterModule } from '@angular/router';
@NgModule({ @NgModule({
declarations: [AppComponent], imports: [
imports: [AppRoutingModule, BrowserModule, BrowserAnimationsModule, HttpClientModule, TranslocoRootModule], AppRoutingModule,
BrowserModule,
BrowserAnimationsModule,
HttpClientModule,
TranslocoRootModule,
RouterModule.forRoot([{ path: '', component: ScoutingCryptoComponent }]),
],
declarations: [ScoutingCryptoComponent, HomeComponent, AppComponent],
providers: [], providers: [],
bootstrap: [AppComponent], bootstrap: [AppComponent],
}) })

@ -0,0 +1 @@
<p>home-component works!</p>

@ -0,0 +1,8 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-home-component',
templateUrl: './home.component.html',
styleUrl: './home.component.css',
})
export class HomeComponent {}

@ -0,0 +1 @@
<p>scouting-crypto works!</p>

@ -0,0 +1,8 @@
import { Component } from '@angular/core';
@Component({
selector: 'app-scouting-crypto',
templateUrl: './scouting-crypto.component.html',
styleUrl: './scouting-crypto.component.css',
})
export class ScoutingCryptoComponent {}

@ -1,15 +1,16 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8" />
<title>AngularStarter</title> <title>$kriLL</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/x-icon" href="favicon.ico" />
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500&display=swap" rel="stylesheet" />
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet" />
</head> </head>
<body> <body>
<!-- reference to app.component.html -->
<app-root></app-root> <app-root></app-root>
</body> </body>
</html> </html>

@ -1,4 +1,22 @@
/* You can add global styles to this file, and also import other style files */ /* You can add global styles to this file, and also import other style files */
html, body { height: 100%; } html,
body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } body {
height: 100%;
}
body {
background: #171b26;
margin: 0;
font-family: Roboto, "Helvetica Neue", sans-serif;
}
main {
color: #ccc;
}
footer {
border-top: 1px solid #545050;
background: rgba(28, 45, 58, 0.5);
color: #ccc;
}

@ -2,9 +2,12 @@
"extends": "./tsconfig.json", "extends": "./tsconfig.json",
"compilerOptions": { "compilerOptions": {
"outDir": "./out-tsc/app", "outDir": "./out-tsc/app",
"types": [] "types": [],
"paths": {
"app/*": ["src/app/*"]
}
}, },
"files": ["src/main.ts", "src/polyfills.ts"], "files": ["src/main.ts", "src/polyfills.ts"],
"include": ["src/**/*.d.ts"], "include": ["src/**/*.d.ts", "src/app/home-component/home.component.ts"],
"exclude": ["**/*.stories.*"] "exclude": []
} }

@ -8,15 +8,17 @@
"downlevelIteration": true, "downlevelIteration": true,
"experimentalDecorators": true, "experimentalDecorators": true,
"esModuleInterop": true, "esModuleInterop": true,
"module": "es2020", "module": "es2022",
"moduleResolution": "node", "moduleResolution": "node",
"importHelpers": true, "importHelpers": true,
"target": "ES2022", "target": "ES2022",
"lib": ["es2018", "dom"], "lib": ["ES2022", "dom"],
"useDefineForClassFields": false "useDefineForClassFields": false
}, },
"angularCompilerOptions": { "angularCompilerOptions": {
"fullTemplateTypeCheck": true, "fullTemplateTypeCheck": true,
"strictInjectionParameters": true "strictInjectionParameters": true
} },
"include": ["src/**/*.ts"]
} }