Files
dees-catalog/ts_web/elements/dees-simple-appdash.demo.ts

226 lines
5.3 KiB
TypeScript
Raw Normal View History

import { html, DeesElement, customElement, css, cssManager } from '@design.estate/dees-element';
2024-01-22 22:30:44 +01:00
import type { IView } from './dees-simple-appdash.js';
import './dees-form.js';
import './dees-input-text.js';
import './dees-input-checkbox.js';
import './dees-form-submit.js';
import './dees-statsgrid.js';
import type { IStatsTile } from './dees-statsgrid.js';
// Create demo view components
@customElement('demo-view-dashboard')
class DemoViewDashboard extends DeesElement {
static styles = [
cssManager.defaultStyles,
css`
:host {
display: block;
padding: 40px;
}
h1 {
margin: 0 0 20px 0;
color: ${cssManager.bdTheme('#000', '#fff')};
}
dees-statsgrid {
margin-top: 20px;
}
`
];
private statsTiles: IStatsTile[] = [
{
id: 'users',
title: 'Active Users',
value: 1234,
type: 'number',
icon: 'faUsers',
description: '+15% from last week',
color: '#22c55e'
},
{
id: 'pageviews',
title: 'Page Views',
value: 56700,
type: 'number',
icon: 'faEye',
description: '56.7k total views',
color: '#3b82f6'
},
{
id: 'uptime',
title: 'System Uptime',
value: 89,
unit: '%',
type: 'gauge',
icon: 'faServer',
description: 'Last 30 days',
color: '#10b981',
gaugeOptions: {
min: 0,
max: 100,
thresholds: [
{ value: 80, color: '#ef4444' },
{ value: 90, color: '#f59e0b' },
{ value: 100, color: '#10b981' }
]
}
},
{
id: 'response',
title: 'Avg Response Time',
value: 3.2,
unit: 's',
type: 'number',
icon: 'faClock',
description: '-0.5s improvement',
color: '#f59e0b'
},
{
id: 'revenue',
title: 'Monthly Revenue',
value: 48520,
unit: '$',
type: 'trend',
icon: 'faDollarSign',
description: '+8.2% growth',
color: '#22c55e',
trendData: [35000, 38000, 37500, 41000, 39800, 42000, 44100, 43200, 45600, 47100, 46800, 48520]
},
{
id: 'traffic',
title: 'Traffic Trend',
value: 1680,
type: 'trend',
icon: 'faChartLine',
description: 'Last 7 days',
color: '#3b82f6',
trendData: [1200, 1350, 1100, 1450, 1600, 1550, 1680]
}
];
render() {
return html`
<h1>Dashboard</h1>
<p>Welcome to your application dashboard. Here's an overview of your metrics:</p>
<dees-statsgrid
.tiles=${this.statsTiles}
@tile-action=${(e: CustomEvent) => {
console.log('Tile action:', e.detail);
}}
></dees-statsgrid>
`;
}
}
@customElement('demo-view-analytics')
class DemoViewAnalytics extends DeesElement {
static styles = [
cssManager.defaultStyles,
css`
:host {
display: block;
padding: 40px;
}
h1 {
margin: 0 0 20px 0;
color: ${cssManager.bdTheme('#000', '#fff')};
}
`
];
render() {
return html`
<h1>Analytics</h1>
<p>This is the analytics view. You can add charts and metrics here.</p>
`;
}
}
@customElement('demo-view-settings')
class DemoViewSettings extends DeesElement {
static styles = [
cssManager.defaultStyles,
css`
:host {
display: block;
padding: 40px;
}
h1 {
margin: 0 0 20px 0;
color: ${cssManager.bdTheme('#000', '#fff')};
}
.settings-section {
margin-top: 30px;
}
.settings-section h2 {
font-size: 18px;
margin: 0 0 15px 0;
color: ${cssManager.bdTheme('#333', '#ccc')};
}
`
];
render() {
return html`
<h1>Settings</h1>
<p>Configure your application settings below:</p>
<div class="settings-section">
<h2>General Settings</h2>
<dees-form>
<dees-input-text key="appName" label="Application Name" value="My App"></dees-input-text>
<dees-input-text key="apiEndpoint" label="API Endpoint" value="https://api.example.com"></dees-input-text>
<dees-input-checkbox key="enableNotifications" label="Enable Notifications" value="true"></dees-input-checkbox>
<dees-form-submit>Save Settings</dees-form-submit>
</dees-form>
</div>
`;
}
}
2023-09-09 13:34:46 +02:00
export const demoFunc = () => html`
<style>
body {
margin: 0;
padding: 0;
}
.demo-container {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
</style>
<div class="demo-container">
<dees-simple-appdash
name="My Application"
terminalSetupCommand="echo 'Welcome to the terminal!'"
.viewTabs=${[
{
name: 'Dashboard',
iconName: 'home',
element: DemoViewDashboard,
},
{
name: 'Analytics',
iconName: 'lineChart',
element: DemoViewAnalytics,
},
{
name: 'Settings',
iconName: 'settings',
element: DemoViewSettings,
}
] as IView[]}
@logout=${() => {
console.log('Logout event triggered');
alert('Logout clicked!');
}}
@view-select=${(e: CustomEvent) => {
console.log('View selected:', e.detail.view.name);
}}
></dees-simple-appdash>
</div>
2023-09-09 13:34:46 +02:00
`;