feat(test-app): add back navigation and improve mobile layout
- Add back buttons to all sub-views (Schedule, Status, Notifications, History, Logs, Settings, UserZero, About) - Fix router navigation by importing router instance directly (resolves TypeScript errors with vue-facing-decorator) - Update back button styling: flex layout with page title, arrow-only label - Fix "Check Status" action to navigate to StatusView instead of checking status inline - Remove horizontal padding on mobile views (max-width 768px) for edge-to-edge layout - Simplify badge styling in HomeView (remove padding and border-radius)
This commit is contained in:
@@ -1,10 +1,61 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="about">
|
<div class="about">
|
||||||
<h1>This is an about page</h1>
|
<div class="view-header">
|
||||||
|
<div class="header-title-row">
|
||||||
|
<button class="back-button" @click="goBack" aria-label="Go back to home">
|
||||||
|
←
|
||||||
|
</button>
|
||||||
|
<h1>This is an about page</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style>
|
<script setup lang="ts">
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
|
|
||||||
|
const router = useRouter()
|
||||||
|
|
||||||
|
function goBack() {
|
||||||
|
router.push('/')
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.view-header {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-title-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 12px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||||
|
color: white;
|
||||||
|
padding: 8px 12px;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
transform: translateX(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
@media (min-width: 1024px) {
|
@media (min-width: 1024px) {
|
||||||
.about {
|
.about {
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
@@ -12,4 +63,17 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Mobile responsiveness */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.header-title-row {
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
min-width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="history-view">
|
<div class="history-view">
|
||||||
<div class="view-header">
|
<div class="view-header">
|
||||||
<h1 class="page-title">📋 History</h1>
|
<div class="header-title-row">
|
||||||
|
<button class="back-button" @click="goBack" aria-label="Go back to home">
|
||||||
|
←
|
||||||
|
</button>
|
||||||
|
<h1 class="page-title">📋 History</h1>
|
||||||
|
</div>
|
||||||
<p class="page-subtitle">Notification history and activity</p>
|
<p class="page-subtitle">Notification history and activity</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="placeholder-content">
|
<div class="placeholder-content">
|
||||||
@@ -12,9 +17,14 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Vue, Component, toNative } from 'vue-facing-decorator'
|
import { Vue, Component, toNative } from 'vue-facing-decorator'
|
||||||
|
import router from '../router'
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
class HistoryView extends Vue {}
|
class HistoryView extends Vue {
|
||||||
|
goBack() {
|
||||||
|
router.push('/')
|
||||||
|
}
|
||||||
|
}
|
||||||
export default toNative(HistoryView)
|
export default toNative(HistoryView)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -29,6 +39,36 @@ export default toNative(HistoryView)
|
|||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-title-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 12px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||||
|
color: white;
|
||||||
|
padding: 8px 12px;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
transform: translateX(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
.page-title {
|
.page-title {
|
||||||
margin: 0 0 8px 0;
|
margin: 0 0 8px 0;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
@@ -51,4 +91,17 @@ export default toNative(HistoryView)
|
|||||||
color: rgba(255, 255, 255, 0.8);
|
color: rgba(255, 255, 255, 0.8);
|
||||||
backdrop-filter: blur(10px);
|
backdrop-filter: blur(10px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Mobile responsiveness */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.header-title-row {
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
min-width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -44,8 +44,7 @@
|
|||||||
icon="📊"
|
icon="📊"
|
||||||
title="Check Status"
|
title="Check Status"
|
||||||
description="View notification system status"
|
description="View notification system status"
|
||||||
@click="checkSystemStatus"
|
@click="navigateToStatus"
|
||||||
:loading="isCheckingStatus"
|
|
||||||
/>
|
/>
|
||||||
<ActionCard
|
<ActionCard
|
||||||
icon="🔐"
|
icon="🔐"
|
||||||
@@ -199,6 +198,11 @@ const navigateToSettings = (): void => {
|
|||||||
router.push('/settings')
|
router.push('/settings')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const navigateToStatus = (): void => {
|
||||||
|
console.log('🔄 CLICK: Navigate to Status')
|
||||||
|
router.push('/status')
|
||||||
|
}
|
||||||
|
|
||||||
const checkSystemStatus = async (): Promise<void> => {
|
const checkSystemStatus = async (): Promise<void> => {
|
||||||
console.log('🔄 CLICK: Check System Status')
|
console.log('🔄 CLICK: Check System Status')
|
||||||
isCheckingStatus.value = true
|
isCheckingStatus.value = true
|
||||||
@@ -653,8 +657,6 @@ onMounted(async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.platform-badge {
|
.platform-badge {
|
||||||
padding: 6px 12px;
|
|
||||||
border-radius: 16px;
|
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
@@ -662,8 +664,6 @@ onMounted(async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.status-badge {
|
.status-badge {
|
||||||
padding: 6px 12px;
|
|
||||||
border-radius: 16px;
|
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
@@ -697,7 +697,7 @@ onMounted(async () => {
|
|||||||
/* Mobile responsiveness */
|
/* Mobile responsiveness */
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.home-view {
|
.home-view {
|
||||||
padding: 16px;
|
padding: 16px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.welcome-title {
|
.welcome-title {
|
||||||
@@ -707,10 +707,5 @@ onMounted(async () => {
|
|||||||
.action-grid {
|
.action-grid {
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
}
|
}
|
||||||
|
|
||||||
.platform-info {
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -12,7 +12,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="logs-view">
|
<div class="logs-view">
|
||||||
<div class="view-header">
|
<div class="view-header">
|
||||||
<h1 class="page-title">📋 System Logs</h1>
|
<div class="header-title-row">
|
||||||
|
<button class="back-button" @click="goBack" aria-label="Go back to home">
|
||||||
|
←
|
||||||
|
</button>
|
||||||
|
<h1 class="page-title">📋 System Logs</h1>
|
||||||
|
</div>
|
||||||
<p class="page-subtitle">View and copy DailyNotification plugin logs</p>
|
<p class="page-subtitle">View and copy DailyNotification plugin logs</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -73,6 +78,7 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Vue, Component, toNative } from 'vue-facing-decorator'
|
import { Vue, Component, toNative } from 'vue-facing-decorator'
|
||||||
|
import router from '../router'
|
||||||
type LogLine = { ts: number; msg: string; level: string }
|
type LogLine = { ts: number; msg: string; level: string }
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@@ -82,6 +88,10 @@ class LogsView extends Vue {
|
|||||||
logs: LogLine[] = []
|
logs: LogLine[] = []
|
||||||
lastUpdated: number | null = null
|
lastUpdated: number | null = null
|
||||||
|
|
||||||
|
goBack() {
|
||||||
|
router.push('/')
|
||||||
|
}
|
||||||
|
|
||||||
get hasLogs() { return this.logs.length > 0 }
|
get hasLogs() { return this.logs.length > 0 }
|
||||||
|
|
||||||
formatTimestamp(ts: number) { return new Date(ts).toLocaleString() }
|
formatTimestamp(ts: number) { return new Date(ts).toLocaleString() }
|
||||||
@@ -130,6 +140,36 @@ export default toNative(LogsView)
|
|||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-title-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 12px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||||
|
color: white;
|
||||||
|
padding: 8px 12px;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
transform: translateX(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
.page-title {
|
.page-title {
|
||||||
margin: 0 0 8px 0;
|
margin: 0 0 8px 0;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
@@ -278,7 +318,7 @@ export default toNative(LogsView)
|
|||||||
/* Mobile responsiveness */
|
/* Mobile responsiveness */
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.logs-view {
|
.logs-view {
|
||||||
padding: 16px;
|
padding: 16px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.logs-controls {
|
.logs-controls {
|
||||||
@@ -301,5 +341,15 @@ export default toNative(LogsView)
|
|||||||
.log-timestamp {
|
.log-timestamp {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-title-row {
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
min-width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@@ -1,7 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="notifications-view">
|
<div class="notifications-view">
|
||||||
<div class="view-header">
|
<div class="view-header">
|
||||||
<h1 class="page-title">🔔 Notifications</h1>
|
<div class="header-title-row">
|
||||||
|
<button class="back-button" @click="goBack" aria-label="Go back to home">
|
||||||
|
←
|
||||||
|
</button>
|
||||||
|
<h1 class="page-title">🔔 Notifications</h1>
|
||||||
|
</div>
|
||||||
<p class="page-subtitle">Manage scheduled notifications</p>
|
<p class="page-subtitle">Manage scheduled notifications</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="placeholder-content">
|
<div class="placeholder-content">
|
||||||
@@ -12,9 +17,14 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Vue, Component, toNative } from 'vue-facing-decorator'
|
import { Vue, Component, toNative } from 'vue-facing-decorator'
|
||||||
|
import router from '../router'
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
class NotificationsView extends Vue {}
|
class NotificationsView extends Vue {
|
||||||
|
goBack() {
|
||||||
|
router.push('/')
|
||||||
|
}
|
||||||
|
}
|
||||||
export default toNative(NotificationsView)
|
export default toNative(NotificationsView)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -29,6 +39,36 @@ export default toNative(NotificationsView)
|
|||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-title-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 12px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||||
|
color: white;
|
||||||
|
padding: 8px 12px;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
transform: translateX(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
.page-title {
|
.page-title {
|
||||||
margin: 0 0 8px 0;
|
margin: 0 0 8px 0;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
@@ -51,4 +91,17 @@ export default toNative(NotificationsView)
|
|||||||
color: rgba(255, 255, 255, 0.8);
|
color: rgba(255, 255, 255, 0.8);
|
||||||
backdrop-filter: blur(10px);
|
backdrop-filter: blur(10px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Mobile responsiveness */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.header-title-row {
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
min-width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -10,7 +10,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="schedule-view">
|
<div class="schedule-view">
|
||||||
<div class="view-header">
|
<div class="view-header">
|
||||||
<h1 class="page-title">📅 Schedule Notification</h1>
|
<div class="header-title-row">
|
||||||
|
<button class="back-button" @click="goBack" aria-label="Go back to home">
|
||||||
|
←
|
||||||
|
</button>
|
||||||
|
<h1 class="page-title">📅 Schedule Notification</h1>
|
||||||
|
</div>
|
||||||
<p class="page-subtitle">Schedule a new daily notification</p>
|
<p class="page-subtitle">Schedule a new daily notification</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -41,6 +46,7 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Vue, Component, toNative } from 'vue-facing-decorator'
|
import { Vue, Component, toNative } from 'vue-facing-decorator'
|
||||||
|
import router from '../router'
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
class ScheduleView extends Vue {
|
class ScheduleView extends Vue {
|
||||||
@@ -49,6 +55,10 @@ class ScheduleView extends Vue {
|
|||||||
notificationMessage = 'Your daily notification is ready!'
|
notificationMessage = 'Your daily notification is ready!'
|
||||||
isScheduling = false
|
isScheduling = false
|
||||||
|
|
||||||
|
goBack() {
|
||||||
|
router.push('/')
|
||||||
|
}
|
||||||
|
|
||||||
async scheduleNotification() {
|
async scheduleNotification() {
|
||||||
this.isScheduling = true
|
this.isScheduling = true
|
||||||
try {
|
try {
|
||||||
@@ -106,6 +116,36 @@ export default toNative(ScheduleView)
|
|||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-title-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 12px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||||
|
color: white;
|
||||||
|
padding: 8px 12px;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
transform: translateX(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
.page-title {
|
.page-title {
|
||||||
margin: 0 0 8px 0;
|
margin: 0 0 8px 0;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
@@ -192,11 +232,21 @@ export default toNative(ScheduleView)
|
|||||||
/* Mobile responsiveness */
|
/* Mobile responsiveness */
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.schedule-view {
|
.schedule-view {
|
||||||
padding: 16px;
|
padding: 16px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.schedule-form {
|
.schedule-form {
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-title-row {
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
min-width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="settings-view">
|
<div class="settings-view">
|
||||||
<div class="view-header">
|
<div class="view-header">
|
||||||
<h1 class="page-title">⚙️ Settings</h1>
|
<div class="header-title-row">
|
||||||
|
<button class="back-button" @click="goBack" aria-label="Go back to home">
|
||||||
|
←
|
||||||
|
</button>
|
||||||
|
<h1 class="page-title">⚙️ Settings</h1>
|
||||||
|
</div>
|
||||||
<p class="page-subtitle">Configure app preferences</p>
|
<p class="page-subtitle">Configure app preferences</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="placeholder-content">
|
<div class="placeholder-content">
|
||||||
@@ -12,9 +17,14 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Vue, Component, toNative } from 'vue-facing-decorator'
|
import { Vue, Component, toNative } from 'vue-facing-decorator'
|
||||||
|
import router from '../router'
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
class SettingsView extends Vue {}
|
class SettingsView extends Vue {
|
||||||
|
goBack() {
|
||||||
|
router.push('/')
|
||||||
|
}
|
||||||
|
}
|
||||||
export default toNative(SettingsView)
|
export default toNative(SettingsView)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -29,6 +39,36 @@ export default toNative(SettingsView)
|
|||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-title-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 12px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||||
|
color: white;
|
||||||
|
padding: 8px 12px;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
transform: translateX(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
.page-title {
|
.page-title {
|
||||||
margin: 0 0 8px 0;
|
margin: 0 0 8px 0;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
@@ -51,4 +91,17 @@ export default toNative(SettingsView)
|
|||||||
color: rgba(255, 255, 255, 0.8);
|
color: rgba(255, 255, 255, 0.8);
|
||||||
backdrop-filter: blur(10px);
|
backdrop-filter: blur(10px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Mobile responsiveness */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.header-title-row {
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
min-width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="status-view">
|
<div class="status-view">
|
||||||
<div class="view-header">
|
<div class="view-header">
|
||||||
<h1 class="page-title">📊 Status Matrix</h1>
|
<div class="header-title-row">
|
||||||
|
<button class="back-button" @click="goBack" aria-label="Go back to home">
|
||||||
|
←
|
||||||
|
</button>
|
||||||
|
<h1 class="page-title">📊 Status Matrix</h1>
|
||||||
|
</div>
|
||||||
<p class="page-subtitle">Comprehensive system status and diagnostics</p>
|
<p class="page-subtitle">Comprehensive system status and diagnostics</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -87,6 +92,7 @@
|
|||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Vue, Component, toNative } from 'vue-facing-decorator'
|
import { Vue, Component, toNative } from 'vue-facing-decorator'
|
||||||
|
import router from '../router'
|
||||||
import StatusCard from '../components/cards/StatusCard.vue'
|
import StatusCard from '../components/cards/StatusCard.vue'
|
||||||
import { createTypedPlugin } from '../lib/typed-plugin'
|
import { createTypedPlugin } from '../lib/typed-plugin'
|
||||||
import { collectDiagnostics, copyDiagnosticsToClipboard, type ComprehensiveDiagnostics } from '../lib/diagnostics-export'
|
import { collectDiagnostics, copyDiagnosticsToClipboard, type ComprehensiveDiagnostics } from '../lib/diagnostics-export'
|
||||||
@@ -114,6 +120,10 @@ type Diagnostics = ComprehensiveDiagnostics
|
|||||||
class StatusView extends Vue {
|
class StatusView extends Vue {
|
||||||
isRefreshing = false
|
isRefreshing = false
|
||||||
errorMessage = ''
|
errorMessage = ''
|
||||||
|
|
||||||
|
goBack() {
|
||||||
|
router.push('/')
|
||||||
|
}
|
||||||
diagnostics: Diagnostics = {
|
diagnostics: Diagnostics = {
|
||||||
appVersion: '1.0.0',
|
appVersion: '1.0.0',
|
||||||
platform: 'Android',
|
platform: 'Android',
|
||||||
@@ -345,6 +355,36 @@ export default toNative(StatusView)
|
|||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-title-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 12px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||||
|
color: white;
|
||||||
|
padding: 8px 12px;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
transform: translateX(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
.page-title {
|
.page-title {
|
||||||
margin: 0 0 8px 0;
|
margin: 0 0 8px 0;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
@@ -533,7 +573,7 @@ export default toNative(StatusView)
|
|||||||
/* Responsive Design */
|
/* Responsive Design */
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.status-view {
|
.status-view {
|
||||||
padding: 16px;
|
padding: 16px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.matrix-header {
|
.matrix-header {
|
||||||
@@ -573,5 +613,15 @@ export default toNative(StatusView)
|
|||||||
.action-button {
|
.action-button {
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-title-row {
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
min-width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="user-zero-view">
|
<div class="user-zero-view">
|
||||||
<div class="view-header">
|
<div class="view-header">
|
||||||
<h1 class="page-title">User Zero Stars Testing</h1>
|
<div class="header-title-row">
|
||||||
|
<button class="back-button" @click="goBack" aria-label="Go back to home">
|
||||||
|
←
|
||||||
|
</button>
|
||||||
|
<h1 class="page-title">User Zero Stars Testing</h1>
|
||||||
|
</div>
|
||||||
<p class="page-subtitle">Test starred projects querying with TimeSafari User Zero</p>
|
<p class="page-subtitle">Test starred projects querying with TimeSafari User Zero</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -103,8 +108,11 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { ref, reactive } from 'vue'
|
import { ref, reactive } from 'vue'
|
||||||
|
import { useRouter } from 'vue-router'
|
||||||
import { TEST_USER_ZERO_CONFIG, TestUserZeroAPI } from '../config/test-user-zero'
|
import { TEST_USER_ZERO_CONFIG, TestUserZeroAPI } from '../config/test-user-zero'
|
||||||
|
|
||||||
|
const router = useRouter()
|
||||||
|
|
||||||
// Reactive state
|
// Reactive state
|
||||||
const config = reactive(TEST_USER_ZERO_CONFIG)
|
const config = reactive(TEST_USER_ZERO_CONFIG)
|
||||||
const isTesting = ref(false)
|
const isTesting = ref(false)
|
||||||
@@ -272,6 +280,13 @@ function toggleMockMode() {
|
|||||||
function clearError() {
|
function clearError() {
|
||||||
errorMessage.value = ''
|
errorMessage.value = ''
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Navigate back to home
|
||||||
|
*/
|
||||||
|
function goBack() {
|
||||||
|
router.push('/')
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
@@ -288,6 +303,36 @@ function clearError() {
|
|||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-title-row {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: 12px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.3);
|
||||||
|
color: white;
|
||||||
|
padding: 8px 12px;
|
||||||
|
border-radius: 8px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 500;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.3);
|
||||||
|
transform: translateX(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
.page-title {
|
.page-title {
|
||||||
margin: 0 0 8px 0;
|
margin: 0 0 8px 0;
|
||||||
font-size: 28px;
|
font-size: 28px;
|
||||||
@@ -461,7 +506,7 @@ function clearError() {
|
|||||||
|
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.user-zero-view {
|
.user-zero-view {
|
||||||
padding: 16px;
|
padding: 16px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.config-grid {
|
.config-grid {
|
||||||
@@ -475,5 +520,15 @@ function clearError() {
|
|||||||
.test-button {
|
.test-button {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.header-title-row {
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.back-button {
|
||||||
|
min-width: 36px;
|
||||||
|
height: 36px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user