@uptime.link/statuspage 1.0.73 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_bundle/bundle.js +4096 -504
- package/dist_bundle/bundle.js.map +4 -4
- package/dist_ts_web/00_commitinfo_data.js +2 -2
- package/dist_ts_web/elements/index.d.ts +3 -0
- package/dist_ts_web/elements/index.js +6 -1
- package/dist_ts_web/elements/internal/uplinternal-miniheading.d.ts +1 -0
- package/dist_ts_web/elements/internal/uplinternal-miniheading.js +78 -28
- package/dist_ts_web/elements/upl-statuspage-assetsselector.d.ts +14 -0
- package/dist_ts_web/elements/upl-statuspage-assetsselector.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-assetsselector.demo.js +575 -0
- package/dist_ts_web/elements/upl-statuspage-assetsselector.js +605 -43
- package/dist_ts_web/elements/upl-statuspage-footer.d.ts +46 -2
- package/dist_ts_web/elements/upl-statuspage-footer.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-footer.demo.js +679 -0
- package/dist_ts_web/elements/upl-statuspage-footer.js +792 -61
- package/dist_ts_web/elements/upl-statuspage-header.d.ts +5 -1
- package/dist_ts_web/elements/upl-statuspage-header.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-header.demo.js +220 -0
- package/dist_ts_web/elements/upl-statuspage-header.js +313 -86
- package/dist_ts_web/elements/upl-statuspage-incidents.d.ts +22 -4
- package/dist_ts_web/elements/upl-statuspage-incidents.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-incidents.demo.js +1147 -0
- package/dist_ts_web/elements/upl-statuspage-incidents.js +750 -74
- package/dist_ts_web/elements/upl-statuspage-pagetitle.d.ts +15 -0
- package/dist_ts_web/elements/upl-statuspage-pagetitle.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-pagetitle.demo.js +25 -0
- package/dist_ts_web/elements/upl-statuspage-pagetitle.js +148 -0
- package/dist_ts_web/elements/upl-statuspage-statsgrid.d.ts +23 -0
- package/dist_ts_web/elements/upl-statuspage-statsgrid.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-statsgrid.demo.js +295 -0
- package/dist_ts_web/elements/upl-statuspage-statsgrid.js +374 -0
- package/dist_ts_web/elements/upl-statuspage-statusbar.d.ts +4 -0
- package/dist_ts_web/elements/upl-statuspage-statusbar.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-statusbar.demo.js +365 -0
- package/dist_ts_web/elements/upl-statuspage-statusbar.js +357 -44
- package/dist_ts_web/elements/upl-statuspage-statusdetails.d.ts +14 -0
- package/dist_ts_web/elements/upl-statuspage-statusdetails.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-statusdetails.demo.js +706 -0
- package/dist_ts_web/elements/upl-statuspage-statusdetails.js +373 -63
- package/dist_ts_web/elements/upl-statuspage-statusmonth.d.ts +15 -0
- package/dist_ts_web/elements/upl-statuspage-statusmonth.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-statusmonth.demo.js +798 -0
- package/dist_ts_web/elements/upl-statuspage-statusmonth.js +474 -100
- package/dist_ts_web/interfaces/index.d.ts +84 -0
- package/dist_ts_web/interfaces/index.js +4 -0
- package/dist_ts_web/pages/index.d.ts +4 -1
- package/dist_ts_web/pages/index.js +5 -2
- package/dist_ts_web/pages/statuspage-allgreen.d.ts +1 -0
- package/dist_ts_web/pages/statuspage-allgreen.js +386 -0
- package/dist_ts_web/pages/statuspage-demo.d.ts +1 -0
- package/dist_ts_web/pages/statuspage-demo.js +616 -0
- package/dist_ts_web/pages/statuspage-maintenance.d.ts +1 -0
- package/dist_ts_web/pages/statuspage-maintenance.js +544 -0
- package/dist_ts_web/pages/statuspage-outage.d.ts +1 -0
- package/dist_ts_web/pages/statuspage-outage.js +543 -0
- package/dist_ts_web/styles/shared.styles.d.ts +80 -0
- package/dist_ts_web/styles/shared.styles.js +351 -0
- package/dist_watch/bundle.js +54534 -26433
- package/dist_watch/bundle.js.map +4 -4
- package/dist_watch/index.html +3 -10
- package/npmextra.json +9 -3
- package/package.json +19 -19
- package/readme.hints.md +292 -0
- package/readme.md +326 -149
- package/readme.plan.md +261 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/index.ts +6 -0
- package/ts_web/elements/internal/uplinternal-miniheading.ts +24 -17
- package/ts_web/elements/upl-statuspage-assetsselector.demo.ts +607 -0
- package/ts_web/elements/upl-statuspage-assetsselector.ts +526 -18
- package/ts_web/elements/upl-statuspage-footer.demo.ts +744 -0
- package/ts_web/elements/upl-statuspage-footer.ts +608 -30
- package/ts_web/elements/upl-statuspage-header.demo.ts +241 -0
- package/ts_web/elements/upl-statuspage-header.ts +220 -52
- package/ts_web/elements/upl-statuspage-incidents.demo.ts +1216 -0
- package/ts_web/elements/upl-statuspage-incidents.ts +649 -26
- package/ts_web/elements/upl-statuspage-pagetitle.demo.ts +25 -0
- package/ts_web/elements/upl-statuspage-pagetitle.ts +89 -0
- package/ts_web/elements/upl-statuspage-statsgrid.demo.ts +315 -0
- package/ts_web/elements/upl-statuspage-statsgrid.ts +306 -0
- package/ts_web/elements/upl-statuspage-statusbar.demo.ts +393 -0
- package/ts_web/elements/upl-statuspage-statusbar.ts +281 -20
- package/ts_web/elements/upl-statuspage-statusdetails.demo.ts +754 -0
- package/ts_web/elements/upl-statuspage-statusdetails.ts +297 -38
- package/ts_web/elements/upl-statuspage-statusmonth.demo.ts +876 -0
- package/ts_web/elements/upl-statuspage-statusmonth.ts +397 -76
- package/ts_web/interfaces/index.ts +95 -0
- package/ts_web/pages/index.ts +4 -1
- package/ts_web/pages/statuspage-allgreen.ts +412 -0
- package/ts_web/pages/statuspage-demo.ts +653 -0
- package/ts_web/pages/statuspage-maintenance.ts +570 -0
- package/ts_web/pages/statuspage-outage.ts +568 -0
- package/ts_web/styles/shared.styles.ts +367 -0
- package/dist_ts_web/pages/page1.d.ts +0 -1
- package/dist_ts_web/pages/page1.js +0 -11
- package/ts_web/pages/page1.ts +0 -11
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { html } from '@design.estate/dees-element';
|
|
2
|
+
|
|
3
|
+
export const demoFunc = () => html`
|
|
4
|
+
<style>
|
|
5
|
+
.demo-container {
|
|
6
|
+
display: flex;
|
|
7
|
+
flex-direction: column;
|
|
8
|
+
gap: 20px;
|
|
9
|
+
}
|
|
10
|
+
.demo-section {
|
|
11
|
+
border: 1px solid #ddd;
|
|
12
|
+
border-radius: 8px;
|
|
13
|
+
padding: 20px;
|
|
14
|
+
background: #f5f5f5;
|
|
15
|
+
}
|
|
16
|
+
.demo-title {
|
|
17
|
+
font-size: 14px;
|
|
18
|
+
font-weight: 600;
|
|
19
|
+
margin-bottom: 16px;
|
|
20
|
+
color: #333;
|
|
21
|
+
}
|
|
22
|
+
.demo-controls {
|
|
23
|
+
display: flex;
|
|
24
|
+
gap: 10px;
|
|
25
|
+
margin-top: 16px;
|
|
26
|
+
flex-wrap: wrap;
|
|
27
|
+
}
|
|
28
|
+
.demo-button {
|
|
29
|
+
padding: 6px 12px;
|
|
30
|
+
border: 1px solid #ddd;
|
|
31
|
+
background: white;
|
|
32
|
+
border-radius: 4px;
|
|
33
|
+
cursor: pointer;
|
|
34
|
+
font-size: 13px;
|
|
35
|
+
}
|
|
36
|
+
.demo-button:hover {
|
|
37
|
+
background: #f0f0f0;
|
|
38
|
+
}
|
|
39
|
+
</style>
|
|
40
|
+
|
|
41
|
+
<div class="demo-container">
|
|
42
|
+
<!-- Basic Header -->
|
|
43
|
+
<div class="demo-section">
|
|
44
|
+
<div class="demo-title">Basic Header with Dynamic Title</div>
|
|
45
|
+
<dees-demowrapper
|
|
46
|
+
.runAfterRender=${async (wrapperElement: any) => {
|
|
47
|
+
const header = wrapperElement.querySelector('upl-statuspage-header') as any;
|
|
48
|
+
|
|
49
|
+
// Demo different titles
|
|
50
|
+
const titles = [
|
|
51
|
+
'MyService Status Page',
|
|
52
|
+
'Production Environment Status',
|
|
53
|
+
'API Health Dashboard',
|
|
54
|
+
'Global Infrastructure Status',
|
|
55
|
+
'🚀 Rocket Systems Monitor',
|
|
56
|
+
'Multi-Region Service Status'
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
let titleIndex = 0;
|
|
60
|
+
header.pageTitle = titles[titleIndex];
|
|
61
|
+
|
|
62
|
+
// Add event listeners
|
|
63
|
+
header.addEventListener('reportNewIncident', (event: CustomEvent) => {
|
|
64
|
+
console.log('Report incident clicked');
|
|
65
|
+
alert('Report Incident form would open here');
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
header.addEventListener('statusSubscribe', (event: CustomEvent) => {
|
|
69
|
+
console.log('Subscribe clicked');
|
|
70
|
+
alert('Subscribe modal would open here');
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
// Cycle through titles
|
|
74
|
+
setInterval(() => {
|
|
75
|
+
titleIndex = (titleIndex + 1) % titles.length;
|
|
76
|
+
header.pageTitle = titles[titleIndex];
|
|
77
|
+
}, 2000);
|
|
78
|
+
}}
|
|
79
|
+
>
|
|
80
|
+
<upl-statuspage-header></upl-statuspage-header>
|
|
81
|
+
</dees-demowrapper>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<!-- Header with Hidden Buttons -->
|
|
85
|
+
<div class="demo-section">
|
|
86
|
+
<div class="demo-title">Header with Configurable Buttons</div>
|
|
87
|
+
<dees-demowrapper
|
|
88
|
+
.runAfterRender=${async (wrapperElement: any) => {
|
|
89
|
+
const header = wrapperElement.querySelector('upl-statuspage-header') as any;
|
|
90
|
+
header.pageTitle = 'Configurable Button States';
|
|
91
|
+
|
|
92
|
+
// Add properties to control button visibility
|
|
93
|
+
header.showReportButton = true;
|
|
94
|
+
header.showSubscribeButton = true;
|
|
95
|
+
|
|
96
|
+
const controls = document.createElement('div');
|
|
97
|
+
controls.className = 'demo-controls';
|
|
98
|
+
controls.innerHTML = `
|
|
99
|
+
<button class="demo-button" id="toggleReport">Toggle Report Button</button>
|
|
100
|
+
<button class="demo-button" id="toggleSubscribe">Toggle Subscribe Button</button>
|
|
101
|
+
<button class="demo-button" id="toggleBoth">Hide Both</button>
|
|
102
|
+
<button class="demo-button" id="showBoth">Show Both</button>
|
|
103
|
+
`;
|
|
104
|
+
wrapperElement.appendChild(controls);
|
|
105
|
+
|
|
106
|
+
controls.querySelector('#toggleReport')?.addEventListener('click', () => {
|
|
107
|
+
header.showReportButton = !header.showReportButton;
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
controls.querySelector('#toggleSubscribe')?.addEventListener('click', () => {
|
|
111
|
+
header.showSubscribeButton = !header.showSubscribeButton;
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
controls.querySelector('#toggleBoth')?.addEventListener('click', () => {
|
|
115
|
+
header.showReportButton = false;
|
|
116
|
+
header.showSubscribeButton = false;
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
controls.querySelector('#showBoth')?.addEventListener('click', () => {
|
|
120
|
+
header.showReportButton = true;
|
|
121
|
+
header.showSubscribeButton = true;
|
|
122
|
+
});
|
|
123
|
+
}}
|
|
124
|
+
>
|
|
125
|
+
<upl-statuspage-header></upl-statuspage-header>
|
|
126
|
+
</dees-demowrapper>
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
<!-- Header with Custom Styling -->
|
|
130
|
+
<div class="demo-section">
|
|
131
|
+
<div class="demo-title">Header with Custom Branding</div>
|
|
132
|
+
<dees-demowrapper
|
|
133
|
+
.runAfterRender=${async (wrapperElement: any) => {
|
|
134
|
+
const header = wrapperElement.querySelector('upl-statuspage-header') as any;
|
|
135
|
+
header.pageTitle = 'Enterprise Cloud Platform';
|
|
136
|
+
|
|
137
|
+
// Custom branding properties
|
|
138
|
+
header.brandColor = '#1976D2';
|
|
139
|
+
header.logoUrl = 'https://via.placeholder.com/120x40/1976D2/ffffff?text=LOGO';
|
|
140
|
+
header.customStyles = true;
|
|
141
|
+
|
|
142
|
+
// Simulate different brand states
|
|
143
|
+
const brands = [
|
|
144
|
+
{ title: 'Enterprise Cloud Platform', color: '#1976D2', logo: 'ENTERPRISE' },
|
|
145
|
+
{ title: 'StartUp SaaS Monitor', color: '#00BCD4', logo: 'STARTUP' },
|
|
146
|
+
{ title: 'Government Services Status', color: '#4CAF50', logo: 'GOV' },
|
|
147
|
+
{ title: 'Financial Systems Health', color: '#673AB7', logo: 'FINTECH' }
|
|
148
|
+
];
|
|
149
|
+
|
|
150
|
+
let brandIndex = 0;
|
|
151
|
+
setInterval(() => {
|
|
152
|
+
brandIndex = (brandIndex + 1) % brands.length;
|
|
153
|
+
const brand = brands[brandIndex];
|
|
154
|
+
header.pageTitle = brand.title;
|
|
155
|
+
header.brandColor = brand.color;
|
|
156
|
+
header.logoUrl = `https://via.placeholder.com/120x40/${brand.color.slice(1)}/ffffff?text=${brand.logo}`;
|
|
157
|
+
}, 3000);
|
|
158
|
+
}}
|
|
159
|
+
>
|
|
160
|
+
<upl-statuspage-header></upl-statuspage-header>
|
|
161
|
+
</dees-demowrapper>
|
|
162
|
+
</div>
|
|
163
|
+
|
|
164
|
+
<!-- Header with Loading State -->
|
|
165
|
+
<div class="demo-section">
|
|
166
|
+
<div class="demo-title">Header with Loading States</div>
|
|
167
|
+
<dees-demowrapper
|
|
168
|
+
.runAfterRender=${async (wrapperElement: any) => {
|
|
169
|
+
const header = wrapperElement.querySelector('upl-statuspage-header') as any;
|
|
170
|
+
header.pageTitle = 'Loading State Demo';
|
|
171
|
+
header.loading = true;
|
|
172
|
+
|
|
173
|
+
// Simulate loading completion
|
|
174
|
+
setTimeout(() => {
|
|
175
|
+
header.loading = false;
|
|
176
|
+
header.pageTitle = 'Status Page Loaded';
|
|
177
|
+
}, 2000);
|
|
178
|
+
|
|
179
|
+
// Add loading toggle
|
|
180
|
+
const controls = document.createElement('div');
|
|
181
|
+
controls.className = 'demo-controls';
|
|
182
|
+
controls.innerHTML = `
|
|
183
|
+
<button class="demo-button" id="toggleLoading">Toggle Loading State</button>
|
|
184
|
+
`;
|
|
185
|
+
wrapperElement.appendChild(controls);
|
|
186
|
+
|
|
187
|
+
controls.querySelector('#toggleLoading')?.addEventListener('click', () => {
|
|
188
|
+
header.loading = !header.loading;
|
|
189
|
+
if (header.loading) {
|
|
190
|
+
header.pageTitle = 'Loading...';
|
|
191
|
+
setTimeout(() => {
|
|
192
|
+
header.loading = false;
|
|
193
|
+
header.pageTitle = 'Status Page Ready';
|
|
194
|
+
}, 2000);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}}
|
|
198
|
+
>
|
|
199
|
+
<upl-statuspage-header></upl-statuspage-header>
|
|
200
|
+
</dees-demowrapper>
|
|
201
|
+
</div>
|
|
202
|
+
|
|
203
|
+
<!-- Header with Event Counter -->
|
|
204
|
+
<div class="demo-section">
|
|
205
|
+
<div class="demo-title">Header with Event Tracking</div>
|
|
206
|
+
<dees-demowrapper
|
|
207
|
+
.runAfterRender=${async (wrapperElement: any) => {
|
|
208
|
+
const header = wrapperElement.querySelector('upl-statuspage-header') as any;
|
|
209
|
+
header.pageTitle = 'Event Tracking Demo';
|
|
210
|
+
|
|
211
|
+
let reportCount = 0;
|
|
212
|
+
let subscribeCount = 0;
|
|
213
|
+
|
|
214
|
+
// Create counter display
|
|
215
|
+
const counterDisplay = document.createElement('div');
|
|
216
|
+
counterDisplay.style.marginTop = '16px';
|
|
217
|
+
counterDisplay.style.fontSize = '14px';
|
|
218
|
+
counterDisplay.innerHTML = `
|
|
219
|
+
<div>Report Clicks: <strong id="reportCount">0</strong></div>
|
|
220
|
+
<div>Subscribe Clicks: <strong id="subscribeCount">0</strong></div>
|
|
221
|
+
`;
|
|
222
|
+
wrapperElement.appendChild(counterDisplay);
|
|
223
|
+
|
|
224
|
+
header.addEventListener('reportNewIncident', () => {
|
|
225
|
+
reportCount++;
|
|
226
|
+
counterDisplay.querySelector('#reportCount').textContent = reportCount.toString();
|
|
227
|
+
console.log(`Report incident clicked ${reportCount} times`);
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
header.addEventListener('statusSubscribe', () => {
|
|
231
|
+
subscribeCount++;
|
|
232
|
+
counterDisplay.querySelector('#subscribeCount').textContent = subscribeCount.toString();
|
|
233
|
+
console.log(`Subscribe clicked ${subscribeCount} times`);
|
|
234
|
+
});
|
|
235
|
+
}}
|
|
236
|
+
>
|
|
237
|
+
<upl-statuspage-header></upl-statuspage-header>
|
|
238
|
+
</dees-demowrapper>
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
`;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { DeesElement, property, html, customElement, type TemplateResult, css, cssManager } from '@design.estate/dees-element';
|
|
1
|
+
import { DeesElement, property, html, customElement, type TemplateResult, css, cssManager, unsafeCSS } from '@design.estate/dees-element';
|
|
2
2
|
import * as domtools from '@design.estate/dees-domtools';
|
|
3
|
+
import * as sharedStyles from '../styles/shared.styles.js';
|
|
4
|
+
import { demoFunc } from './upl-statuspage-header.demo.js';
|
|
3
5
|
|
|
4
6
|
declare global {
|
|
5
7
|
interface HTMLElementTagNameMap {
|
|
@@ -10,13 +12,23 @@ declare global {
|
|
|
10
12
|
@customElement('upl-statuspage-header')
|
|
11
13
|
export class UplStatuspageHeader extends DeesElement {
|
|
12
14
|
// STATIC
|
|
13
|
-
public static demo =
|
|
14
|
-
<upl-statuspage-header></upl-statuspage-header>
|
|
15
|
-
`;
|
|
15
|
+
public static demo = demoFunc;
|
|
16
16
|
|
|
17
17
|
// INSTANCE
|
|
18
|
-
@property()
|
|
19
|
-
|
|
18
|
+
@property({ type: String })
|
|
19
|
+
accessor pageTitle: string = "Statuspage Title";
|
|
20
|
+
|
|
21
|
+
@property({ type: Boolean })
|
|
22
|
+
accessor showReportButton: boolean = true;
|
|
23
|
+
|
|
24
|
+
@property({ type: Boolean })
|
|
25
|
+
accessor showSubscribeButton: boolean = true;
|
|
26
|
+
|
|
27
|
+
@property({ type: String })
|
|
28
|
+
accessor logoUrl: string = '';
|
|
29
|
+
|
|
30
|
+
@property({ type: Boolean })
|
|
31
|
+
accessor loading: boolean = false;
|
|
20
32
|
|
|
21
33
|
|
|
22
34
|
constructor() {
|
|
@@ -27,72 +39,228 @@ export class UplStatuspageHeader extends DeesElement {
|
|
|
27
39
|
domtools.elementBasic.staticStyles,
|
|
28
40
|
css`
|
|
29
41
|
:host {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
42
|
+
display: block;
|
|
43
|
+
background: ${sharedStyles.colors.background.primary};
|
|
44
|
+
font-family: ${unsafeCSS(sharedStyles.fonts.base)};
|
|
45
|
+
color: ${sharedStyles.colors.text.primary};
|
|
46
|
+
border-bottom: 1px solid ${sharedStyles.colors.border.default};
|
|
47
|
+
position: sticky;
|
|
48
|
+
top: 0;
|
|
49
|
+
z-index: 40;
|
|
50
|
+
backdrop-filter: blur(12px);
|
|
51
|
+
-webkit-backdrop-filter: blur(12px);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.header-container {
|
|
55
|
+
max-width: 1200px;
|
|
56
|
+
margin: 0 auto;
|
|
57
|
+
padding: 0 ${unsafeCSS(sharedStyles.spacing.lg)};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.header-nav {
|
|
61
|
+
display: flex;
|
|
62
|
+
align-items: center;
|
|
63
|
+
justify-content: space-between;
|
|
64
|
+
height: 64px;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.header-left {
|
|
68
|
+
display: flex;
|
|
69
|
+
align-items: center;
|
|
70
|
+
gap: ${unsafeCSS(sharedStyles.spacing.lg)};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.header-actions {
|
|
74
|
+
display: flex;
|
|
75
|
+
align-items: center;
|
|
76
|
+
gap: ${unsafeCSS(sharedStyles.spacing.sm)};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.actionButton {
|
|
80
|
+
font-family: ${unsafeCSS(sharedStyles.fonts.base)};
|
|
81
|
+
font-size: 13px;
|
|
82
|
+
font-weight: 500;
|
|
83
|
+
padding: 0 14px;
|
|
84
|
+
border-radius: ${unsafeCSS(sharedStyles.borderRadius.base)};
|
|
85
|
+
cursor: pointer;
|
|
86
|
+
user-select: none;
|
|
87
|
+
transition: all ${unsafeCSS(sharedStyles.durations.normal)} ${unsafeCSS(sharedStyles.easings.default)};
|
|
88
|
+
display: inline-flex;
|
|
89
|
+
align-items: center;
|
|
90
|
+
justify-content: center;
|
|
91
|
+
height: 36px;
|
|
92
|
+
background: transparent;
|
|
93
|
+
border: 1px solid ${sharedStyles.colors.border.default};
|
|
94
|
+
color: ${sharedStyles.colors.text.primary};
|
|
95
|
+
letter-spacing: -0.01em;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.actionButton:hover {
|
|
99
|
+
background: ${sharedStyles.colors.background.secondary};
|
|
100
|
+
border-color: ${sharedStyles.colors.border.muted};
|
|
101
|
+
box-shadow: ${unsafeCSS(sharedStyles.shadows.xs)};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.actionButton:active {
|
|
105
|
+
transform: scale(0.98);
|
|
106
|
+
transition-duration: ${unsafeCSS(sharedStyles.durations.fast)};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.actionButton:focus-visible {
|
|
110
|
+
outline: 2px solid ${sharedStyles.colors.accent.focus};
|
|
111
|
+
outline-offset: 2px;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.site-title {
|
|
115
|
+
font-size: 18px;
|
|
116
|
+
font-weight: 600;
|
|
117
|
+
letter-spacing: -0.02em;
|
|
118
|
+
color: ${sharedStyles.colors.text.primary};
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.logo {
|
|
122
|
+
height: 28px;
|
|
123
|
+
width: auto;
|
|
124
|
+
filter: ${cssManager.bdTheme('none', 'brightness(0) invert(1)')};
|
|
125
|
+
transition: opacity ${unsafeCSS(sharedStyles.durations.normal)} ${unsafeCSS(sharedStyles.easings.default)};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.logo:hover {
|
|
129
|
+
opacity: 0.8;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.page-info {
|
|
133
|
+
padding: ${unsafeCSS(sharedStyles.spacing.lg)} 0 ${unsafeCSS(sharedStyles.spacing.xl)} 0;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.page-title {
|
|
137
|
+
font-size: 48px;
|
|
138
|
+
font-weight: 700;
|
|
139
|
+
letter-spacing: -0.03em;
|
|
140
|
+
line-height: 1.1;
|
|
141
|
+
color: ${sharedStyles.colors.text.primary};
|
|
142
|
+
margin: 0 0 16px 0;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.page-subtitle {
|
|
146
|
+
font-size: 18px;
|
|
147
|
+
color: ${sharedStyles.colors.text.secondary};
|
|
148
|
+
margin: 0;
|
|
149
|
+
line-height: 1.5;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/* Primary button variant */
|
|
153
|
+
.actionButton.primary {
|
|
154
|
+
background: ${sharedStyles.colors.accent.primary};
|
|
155
|
+
color: ${sharedStyles.colors.background.primary};
|
|
156
|
+
border-color: transparent;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.actionButton.primary:hover {
|
|
160
|
+
background: ${sharedStyles.colors.accent.hover};
|
|
161
|
+
box-shadow: ${unsafeCSS(sharedStyles.shadows.sm)};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
.loading-skeleton {
|
|
165
|
+
height: 64px;
|
|
166
|
+
background: ${sharedStyles.colors.background.secondary};
|
|
167
|
+
border-bottom: 1px solid ${sharedStyles.colors.border.default};
|
|
168
|
+
position: relative;
|
|
169
|
+
overflow: hidden;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.loading-skeleton::after {
|
|
173
|
+
content: '';
|
|
174
|
+
position: absolute;
|
|
175
|
+
inset: 0;
|
|
176
|
+
background: ${cssManager.bdTheme(
|
|
177
|
+
'linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.04) 50%, transparent 100%)',
|
|
178
|
+
'linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.04) 50%, transparent 100%)'
|
|
179
|
+
)};
|
|
180
|
+
animation: loading 1.5s ${unsafeCSS(sharedStyles.easings.default)} infinite;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
@keyframes loading {
|
|
184
|
+
0% { transform: translateX(-100%); }
|
|
185
|
+
100% { transform: translateX(200%); }
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
@media (max-width: 768px) {
|
|
189
|
+
.header-container {
|
|
190
|
+
padding: 0 ${unsafeCSS(sharedStyles.spacing.md)};
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.header-nav {
|
|
194
|
+
height: 56px;
|
|
34
195
|
}
|
|
35
196
|
|
|
36
|
-
.
|
|
37
|
-
|
|
38
|
-
max-width: 900px;
|
|
197
|
+
.header-left {
|
|
198
|
+
gap: ${unsafeCSS(sharedStyles.spacing.md)};
|
|
39
199
|
}
|
|
40
200
|
|
|
41
|
-
.
|
|
42
|
-
|
|
43
|
-
justify-content: flex-end;
|
|
44
|
-
padding: 20px 0px 40px 0px;
|
|
201
|
+
.site-title {
|
|
202
|
+
font-size: 16px;
|
|
45
203
|
}
|
|
46
204
|
|
|
47
|
-
.
|
|
48
|
-
|
|
49
|
-
|
|
205
|
+
.logo {
|
|
206
|
+
height: 24px;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
@media (max-width: 640px) {
|
|
211
|
+
.actionButton {
|
|
50
212
|
font-size: 12px;
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
margin-left: 10px;
|
|
54
|
-
border-radius: 3px;
|
|
55
|
-
cursor: pointer;
|
|
56
|
-
user-select: none;
|
|
213
|
+
padding: 0 12px;
|
|
214
|
+
height: 32px;
|
|
57
215
|
}
|
|
58
216
|
|
|
59
|
-
.
|
|
60
|
-
|
|
61
|
-
border: 1px solid ${cssManager.bdTheme('#333333', '#efefef')};
|
|
62
|
-
color: ${cssManager.bdTheme('#fff', '#333333')};
|
|
217
|
+
.page-title {
|
|
218
|
+
font-size: 32px;
|
|
63
219
|
}
|
|
64
220
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
text-align: center;
|
|
68
|
-
font-weight: 600;
|
|
69
|
-
font-size: 35px;
|
|
221
|
+
.page-subtitle {
|
|
222
|
+
font-size: 16px;
|
|
70
223
|
}
|
|
71
224
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
margin-top: 10px;
|
|
75
|
-
text-align: center;
|
|
76
|
-
font-weight: 600;
|
|
77
|
-
font-size: 18px;
|
|
225
|
+
.header-actions {
|
|
226
|
+
gap: 6px;
|
|
78
227
|
}
|
|
228
|
+
}
|
|
79
229
|
`
|
|
80
230
|
]
|
|
81
231
|
|
|
82
232
|
public render(): TemplateResult {
|
|
233
|
+
if (this.loading) {
|
|
234
|
+
return html`
|
|
235
|
+
<div class="loading-skeleton"></div>
|
|
236
|
+
`;
|
|
237
|
+
}
|
|
238
|
+
|
|
83
239
|
return html`
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
240
|
+
<header>
|
|
241
|
+
<div class="header-container">
|
|
242
|
+
<nav class="header-nav">
|
|
243
|
+
<div class="header-left">
|
|
244
|
+
${this.logoUrl ? html`
|
|
245
|
+
<img src="${this.logoUrl}" alt="${this.pageTitle}" class="logo">
|
|
246
|
+
` : ''}
|
|
247
|
+
<h1 class="site-title">${this.pageTitle}</h1>
|
|
248
|
+
</div>
|
|
249
|
+
<div class="header-actions">
|
|
250
|
+
${this.showReportButton ? html`
|
|
251
|
+
<button class="actionButton" @click=${this.dispatchReportNewIncident}>
|
|
252
|
+
Report Issue
|
|
253
|
+
</button>
|
|
254
|
+
` : ''}
|
|
255
|
+
${this.showSubscribeButton ? html`
|
|
256
|
+
<button class="actionButton primary" @click=${this.dispatchStatusSubscribe}>
|
|
257
|
+
Subscribe
|
|
258
|
+
</button>
|
|
259
|
+
` : ''}
|
|
260
|
+
</div>
|
|
261
|
+
</nav>
|
|
92
262
|
</div>
|
|
93
|
-
|
|
94
|
-
<h2>STATUS BOARD</h2>
|
|
95
|
-
</div>
|
|
263
|
+
</header>
|
|
96
264
|
`;
|
|
97
265
|
}
|
|
98
266
|
|