Project setup
This commit is contained in:
29
BetterIServ.Mobile/src/app/app.component.html
Normal file
29
BetterIServ.Mobile/src/app/app.component.html
Normal file
@@ -0,0 +1,29 @@
|
||||
<ion-app>
|
||||
<ion-split-pane contentId="main-content">
|
||||
<ion-menu contentId="main-content" type="overlay">
|
||||
<ion-content>
|
||||
<ion-list id="inbox-list">
|
||||
<ion-list-header>Inbox</ion-list-header>
|
||||
<ion-note>hi@ionicframework.com</ion-note>
|
||||
|
||||
<ion-menu-toggle auto-hide="false" *ngFor="let p of appPages; let i = index">
|
||||
<ion-item routerDirection="root" [routerLink]="[p.url]" lines="none" detail="false" routerLinkActive="selected">
|
||||
<ion-icon aria-hidden="true" slot="start" [ios]="p.icon + '-outline'" [md]="p.icon + '-sharp'"></ion-icon>
|
||||
<ion-label>{{ p.title }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-menu-toggle>
|
||||
</ion-list>
|
||||
|
||||
<ion-list id="labels-list">
|
||||
<ion-list-header>Labels</ion-list-header>
|
||||
|
||||
<ion-item *ngFor="let label of labels" lines="none">
|
||||
<ion-icon aria-hidden="true" slot="start" ios="bookmark-outline" md="bookmark-sharp"></ion-icon>
|
||||
<ion-label>{{ label }}</ion-label>
|
||||
</ion-item>
|
||||
</ion-list>
|
||||
</ion-content>
|
||||
</ion-menu>
|
||||
<ion-router-outlet id="main-content"></ion-router-outlet>
|
||||
</ion-split-pane>
|
||||
</ion-app>
|
||||
119
BetterIServ.Mobile/src/app/app.component.scss
Normal file
119
BetterIServ.Mobile/src/app/app.component.scss
Normal file
@@ -0,0 +1,119 @@
|
||||
ion-menu ion-content {
|
||||
--background: var(--ion-item-background, var(--ion-background-color, #fff));
|
||||
}
|
||||
|
||||
ion-menu.md ion-content {
|
||||
--padding-start: 8px;
|
||||
--padding-end: 8px;
|
||||
--padding-top: 20px;
|
||||
--padding-bottom: 20px;
|
||||
}
|
||||
|
||||
ion-menu.md ion-list {
|
||||
padding: 20px 0;
|
||||
}
|
||||
|
||||
ion-menu.md ion-note {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
ion-menu.md ion-list-header,
|
||||
ion-menu.md ion-note {
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
ion-menu.md ion-list#inbox-list {
|
||||
border-bottom: 1px solid var(--ion-color-step-150, #d7d8da);
|
||||
}
|
||||
|
||||
ion-menu.md ion-list#inbox-list ion-list-header {
|
||||
font-size: 22px;
|
||||
font-weight: 600;
|
||||
|
||||
min-height: 20px;
|
||||
}
|
||||
|
||||
ion-menu.md ion-list#labels-list ion-list-header {
|
||||
font-size: 16px;
|
||||
|
||||
margin-bottom: 18px;
|
||||
|
||||
color: #757575;
|
||||
|
||||
min-height: 26px;
|
||||
}
|
||||
|
||||
ion-menu.md ion-item {
|
||||
--padding-start: 10px;
|
||||
--padding-end: 10px;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
ion-menu.md ion-item.selected {
|
||||
--background: rgba(var(--ion-color-primary-rgb), 0.14);
|
||||
}
|
||||
|
||||
ion-menu.md ion-item.selected ion-icon {
|
||||
color: var(--ion-color-primary);
|
||||
}
|
||||
|
||||
ion-menu.md ion-item ion-icon {
|
||||
color: #616e7e;
|
||||
}
|
||||
|
||||
ion-menu.md ion-item ion-label {
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
ion-menu.ios ion-content {
|
||||
--padding-bottom: 20px;
|
||||
}
|
||||
|
||||
ion-menu.ios ion-list {
|
||||
padding: 20px 0 0 0;
|
||||
}
|
||||
|
||||
ion-menu.ios ion-note {
|
||||
line-height: 24px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
ion-menu.ios ion-item {
|
||||
--padding-start: 16px;
|
||||
--padding-end: 16px;
|
||||
--min-height: 50px;
|
||||
}
|
||||
|
||||
ion-menu.ios ion-item.selected ion-icon {
|
||||
color: var(--ion-color-primary);
|
||||
}
|
||||
|
||||
ion-menu.ios ion-item ion-icon {
|
||||
font-size: 24px;
|
||||
color: #73849a;
|
||||
}
|
||||
|
||||
ion-menu.ios ion-list#labels-list ion-list-header {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
ion-menu.ios ion-list-header,
|
||||
ion-menu.ios ion-note {
|
||||
padding-left: 16px;
|
||||
padding-right: 16px;
|
||||
}
|
||||
|
||||
ion-menu.ios ion-note {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
ion-note {
|
||||
display: inline-block;
|
||||
font-size: 16px;
|
||||
|
||||
color: var(--ion-color-medium-shade);
|
||||
}
|
||||
|
||||
ion-item.selected {
|
||||
--color: var(--ion-color-primary);
|
||||
}
|
||||
23
BetterIServ.Mobile/src/app/app.component.ts
Normal file
23
BetterIServ.Mobile/src/app/app.component.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { Component } from '@angular/core';
|
||||
import { RouterLink, RouterLinkActive } from '@angular/router';
|
||||
import { IonicModule } from '@ionic/angular';
|
||||
@Component({
|
||||
selector: 'app-root',
|
||||
templateUrl: 'app.component.html',
|
||||
styleUrls: ['app.component.scss'],
|
||||
standalone: true,
|
||||
imports: [IonicModule, RouterLink, RouterLinkActive, CommonModule],
|
||||
})
|
||||
export class AppComponent {
|
||||
public appPages = [
|
||||
{ title: 'Inbox', url: '/folder/inbox', icon: 'mail' },
|
||||
{ title: 'Outbox', url: '/folder/outbox', icon: 'paper-plane' },
|
||||
{ title: 'Favorites', url: '/folder/favorites', icon: 'heart' },
|
||||
{ title: 'Archived', url: '/folder/archived', icon: 'archive' },
|
||||
{ title: 'Trash', url: '/folder/trash', icon: 'trash' },
|
||||
{ title: 'Spam', url: '/folder/spam', icon: 'warning' },
|
||||
];
|
||||
public labels = ['Family', 'Friends', 'Notes', 'Work', 'Travel', 'Reminders'];
|
||||
constructor() {}
|
||||
}
|
||||
14
BetterIServ.Mobile/src/app/app.routes.ts
Normal file
14
BetterIServ.Mobile/src/app/app.routes.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { Routes } from '@angular/router';
|
||||
|
||||
export const routes: Routes = [
|
||||
{
|
||||
path: '',
|
||||
redirectTo: 'folder/inbox',
|
||||
pathMatch: 'full',
|
||||
},
|
||||
{
|
||||
path: 'folder/:id',
|
||||
loadComponent: () =>
|
||||
import('./folder/folder.page').then((m) => m.FolderPage),
|
||||
},
|
||||
];
|
||||
21
BetterIServ.Mobile/src/app/folder/folder.page.html
Normal file
21
BetterIServ.Mobile/src/app/folder/folder.page.html
Normal file
@@ -0,0 +1,21 @@
|
||||
<ion-header [translucent]="true">
|
||||
<ion-toolbar>
|
||||
<ion-buttons slot="start">
|
||||
<ion-menu-button></ion-menu-button>
|
||||
</ion-buttons>
|
||||
<ion-title>{{ folder }}</ion-title>
|
||||
</ion-toolbar>
|
||||
</ion-header>
|
||||
|
||||
<ion-content [fullscreen]="true">
|
||||
<ion-header collapse="condense">
|
||||
<ion-toolbar>
|
||||
<ion-title size="large">{{ folder }}</ion-title>
|
||||
</ion-toolbar>
|
||||
</ion-header>
|
||||
|
||||
<div id="container">
|
||||
<strong class="capitalize">{{ folder }}</strong>
|
||||
<p>Explore <a target="_blank" rel="noopener noreferrer" href="https://ionicframework.com/docs/components">UI Components</a></p>
|
||||
</div>
|
||||
</ion-content>
|
||||
28
BetterIServ.Mobile/src/app/folder/folder.page.scss
Normal file
28
BetterIServ.Mobile/src/app/folder/folder.page.scss
Normal file
@@ -0,0 +1,28 @@
|
||||
ion-menu-button {
|
||||
color: var(--ion-color-primary);
|
||||
}
|
||||
|
||||
#container {
|
||||
text-align: center;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
}
|
||||
|
||||
#container strong {
|
||||
font-size: 20px;
|
||||
line-height: 26px;
|
||||
}
|
||||
|
||||
#container p {
|
||||
font-size: 16px;
|
||||
line-height: 22px;
|
||||
color: #8c8c8c;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#container a {
|
||||
text-decoration: none;
|
||||
}
|
||||
20
BetterIServ.Mobile/src/app/folder/folder.page.ts
Normal file
20
BetterIServ.Mobile/src/app/folder/folder.page.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import { Component, inject, OnInit } from '@angular/core';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
import { IonicModule } from '@ionic/angular';
|
||||
|
||||
@Component({
|
||||
selector: 'app-folder',
|
||||
templateUrl: './folder.page.html',
|
||||
styleUrls: ['./folder.page.scss'],
|
||||
standalone: true,
|
||||
imports: [IonicModule],
|
||||
})
|
||||
export class FolderPage implements OnInit {
|
||||
public folder!: string;
|
||||
private activatedRoute = inject(ActivatedRoute);
|
||||
constructor() {}
|
||||
|
||||
ngOnInit() {
|
||||
this.folder = this.activatedRoute.snapshot.paramMap.get('id') as string;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user