@uptime.link/statuspage 1.1.0 → 1.2.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.
Files changed (28) hide show
  1. package/dist_bundle/bundle.js +1823 -915
  2. package/dist_bundle/bundle.js.map +3 -3
  3. package/dist_ts_web/00_commitinfo_data.js +1 -1
  4. package/dist_ts_web/elements/upl-statuspage-assetsselector.js +119 -45
  5. package/dist_ts_web/elements/upl-statuspage-footer.js +81 -27
  6. package/dist_ts_web/elements/upl-statuspage-header.js +79 -19
  7. package/dist_ts_web/elements/upl-statuspage-incidents.js +242 -55
  8. package/dist_ts_web/elements/upl-statuspage-statsgrid.js +225 -50
  9. package/dist_ts_web/elements/upl-statuspage-statusbar.js +58 -7
  10. package/dist_ts_web/elements/upl-statuspage-statusdetails.js +36 -11
  11. package/dist_ts_web/elements/upl-statuspage-statusmonth.d.ts +2 -0
  12. package/dist_ts_web/elements/upl-statuspage-statusmonth.js +415 -230
  13. package/dist_ts_web/styles/shared.styles.d.ts +22 -0
  14. package/dist_ts_web/styles/shared.styles.js +146 -3
  15. package/dist_watch/bundle.js +1417 -444
  16. package/dist_watch/bundle.js.map +3 -3
  17. package/dist_watch/index.html +1 -0
  18. package/package.json +1 -1
  19. package/ts_web/00_commitinfo_data.ts +1 -1
  20. package/ts_web/elements/upl-statuspage-assetsselector.ts +118 -44
  21. package/ts_web/elements/upl-statuspage-footer.ts +80 -26
  22. package/ts_web/elements/upl-statuspage-header.ts +87 -18
  23. package/ts_web/elements/upl-statuspage-incidents.ts +247 -56
  24. package/ts_web/elements/upl-statuspage-statsgrid.ts +224 -52
  25. package/ts_web/elements/upl-statuspage-statusbar.ts +57 -6
  26. package/ts_web/elements/upl-statuspage-statusdetails.ts +35 -10
  27. package/ts_web/elements/upl-statuspage-statusmonth.ts +436 -252
  28. package/ts_web/styles/shared.styles.ts +166 -2
@@ -109,242 +109,402 @@ let UplStatuspageStatusmonth = (() => {
109
109
  sharedStyles.commonStyles,
110
110
  css `
111
111
  :host {
112
- position: relative;
113
- display: block;
114
- background: transparent;
115
- font-family: ${unsafeCSS(sharedStyles.fonts.base)};
116
- color: ${sharedStyles.colors.text.primary};
117
- }
112
+ position: relative;
113
+ display: block;
114
+ background: transparent;
115
+ font-family: ${unsafeCSS(sharedStyles.fonts.base)};
116
+ color: ${sharedStyles.colors.text.primary};
117
+ }
118
118
 
119
- .container {
120
- max-width: 1200px;
121
- margin: 0 auto;
122
- padding: 0 ${unsafeCSS(sharedStyles.spacing.lg)} ${unsafeCSS(sharedStyles.spacing.lg)} ${unsafeCSS(sharedStyles.spacing.lg)};
123
- }
119
+ .container {
120
+ max-width: 1200px;
121
+ margin: 0 auto;
122
+ padding: 0 ${unsafeCSS(sharedStyles.spacing.lg)} ${unsafeCSS(sharedStyles.spacing.lg)} ${unsafeCSS(sharedStyles.spacing.lg)};
123
+ }
124
124
 
125
- .mainbox {
126
- display: grid;
127
- grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
128
- gap: ${unsafeCSS(sharedStyles.spacing.lg)};
129
- }
125
+ .mainbox {
126
+ display: grid;
127
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
128
+ gap: ${unsafeCSS(sharedStyles.spacing.lg)};
129
+ }
130
130
 
131
- .statusMonth {
132
- background: ${cssManager.bdTheme('#ffffff', '#0a0a0a')};
133
- padding: ${unsafeCSS(sharedStyles.spacing.lg)};
134
- border-radius: ${unsafeCSS(sharedStyles.borderRadius.base)};
135
- border: 1px solid ${cssManager.bdTheme('#e5e7eb', '#27272a')};
136
- position: relative;
137
- transition: all 0.2s ease;
138
- display: flex;
139
- flex-direction: column;
140
- min-height: 280px;
141
- box-shadow: ${cssManager.bdTheme('0 1px 2px 0 rgba(0, 0, 0, 0.05)', 'none')};
142
- }
131
+ /* Month card with entrance animation */
132
+ .statusMonth {
133
+ background: ${sharedStyles.colors.background.card};
134
+ padding: ${unsafeCSS(sharedStyles.spacing.lg)};
135
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.lg)};
136
+ border: 1px solid ${sharedStyles.colors.border.default};
137
+ position: relative;
138
+ transition: all ${unsafeCSS(sharedStyles.durations.normal)} ${unsafeCSS(sharedStyles.easings.default)};
139
+ display: flex;
140
+ flex-direction: column;
141
+ min-height: 280px;
142
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.sm)};
143
+ animation: fadeInUp 0.5s ${unsafeCSS(sharedStyles.easings.default)} both;
144
+ }
143
145
 
144
- .statusMonth:hover {
145
- border-color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
146
- box-shadow: ${cssManager.bdTheme('0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)', '0 0 0 1px rgba(255, 255, 255, 0.1)')};
147
- }
146
+ .statusMonth:nth-child(1) { animation-delay: 0ms; }
147
+ .statusMonth:nth-child(2) { animation-delay: 100ms; }
148
+ .statusMonth:nth-child(3) { animation-delay: 200ms; }
149
+ .statusMonth:nth-child(4) { animation-delay: 300ms; }
150
+ .statusMonth:nth-child(5) { animation-delay: 400ms; }
148
151
 
149
- .month-header {
150
- font-size: 13px;
151
- font-weight: 600;
152
- margin-bottom: ${unsafeCSS(sharedStyles.spacing.md)};
153
- color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
154
- letter-spacing: 0.02em;
155
- text-transform: uppercase;
152
+ @keyframes fadeInUp {
153
+ from {
154
+ opacity: 0;
155
+ transform: translateY(16px);
156
156
  }
157
-
158
- .days-container {
159
- flex: 1;
160
- display: flex;
161
- flex-direction: column;
162
- margin-bottom: ${unsafeCSS(sharedStyles.spacing.lg)};
157
+ to {
158
+ opacity: 1;
159
+ transform: translateY(0);
163
160
  }
161
+ }
164
162
 
165
- .days-grid {
166
- display: grid;
167
- grid-template-columns: repeat(7, 1fr);
168
- gap: 3px;
169
- width: 100%;
170
- }
163
+ .statusMonth:hover {
164
+ border-color: ${sharedStyles.colors.border.muted};
165
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.md)};
166
+ transform: translateY(-2px);
167
+ }
171
168
 
172
- .weekday-label {
173
- font-size: 10px;
174
- text-align: center;
175
- color: ${cssManager.bdTheme('#9ca3af', '#71717a')};
176
- font-weight: 500;
177
- height: 20px;
178
- line-height: 20px;
179
- margin-bottom: ${unsafeCSS(sharedStyles.spacing.sm)};
180
- text-transform: uppercase;
181
- }
169
+ .month-header {
170
+ font-size: 12px;
171
+ font-weight: 600;
172
+ margin-bottom: ${unsafeCSS(sharedStyles.spacing.md)};
173
+ color: ${sharedStyles.colors.text.primary};
174
+ letter-spacing: 0.04em;
175
+ text-transform: uppercase;
176
+ display: flex;
177
+ align-items: center;
178
+ gap: 8px;
179
+ }
182
180
 
183
- .statusDay {
184
- aspect-ratio: 1;
185
- border-radius: 4px;
186
- cursor: pointer;
187
- transition: all 0.15s ease;
188
- position: relative;
189
- }
181
+ .month-header .current-badge {
182
+ font-size: 9px;
183
+ padding: 2px 6px;
184
+ background: ${sharedStyles.colors.status.operational};
185
+ color: white;
186
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.full)};
187
+ font-weight: 500;
188
+ letter-spacing: 0.02em;
189
+ }
190
190
 
191
- .statusDay:hover:not(.empty) {
192
- transform: scale(1.15);
193
- box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
194
- z-index: 1;
195
- }
191
+ .days-container {
192
+ flex: 1;
193
+ display: flex;
194
+ flex-direction: column;
195
+ margin-bottom: ${unsafeCSS(sharedStyles.spacing.lg)};
196
+ }
196
197
 
197
- .statusDay.operational {
198
- background: #22c55e;
199
- }
198
+ .days-grid {
199
+ display: grid;
200
+ grid-template-columns: repeat(7, 1fr);
201
+ gap: 4px;
202
+ width: 100%;
203
+ }
200
204
 
201
- .statusDay.degraded {
202
- background: #fbbf24;
203
- }
205
+ .weekday-label {
206
+ font-size: 9px;
207
+ text-align: center;
208
+ color: ${sharedStyles.colors.text.muted};
209
+ font-weight: 600;
210
+ height: 20px;
211
+ line-height: 20px;
212
+ margin-bottom: ${unsafeCSS(sharedStyles.spacing.xs)};
213
+ text-transform: uppercase;
214
+ letter-spacing: 0.02em;
215
+ }
204
216
 
205
- .statusDay.partial_outage {
206
- background: #f87171;
207
- }
217
+ /* Calendar day cell */
218
+ .statusDay {
219
+ aspect-ratio: 1;
220
+ border-radius: 4px;
221
+ cursor: pointer;
222
+ transition: all ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
223
+ position: relative;
224
+ animation: dayFadeIn 0.3s ${unsafeCSS(sharedStyles.easings.default)} both;
225
+ animation-delay: calc(var(--day-index, 0) * 15ms);
226
+ }
208
227
 
209
- .statusDay.major_outage {
210
- background: #ef4444;
228
+ @keyframes dayFadeIn {
229
+ from {
230
+ opacity: 0;
231
+ transform: scale(0.8);
211
232
  }
212
-
213
- .statusDay.maintenance {
214
- background: #60a5fa;
233
+ to {
234
+ opacity: 1;
235
+ transform: scale(1);
215
236
  }
237
+ }
216
238
 
217
- .statusDay.no-data {
218
- background: ${cssManager.bdTheme('#e5e7eb', '#27272a')};
219
- opacity: 0.6;
220
- }
239
+ .statusDay:hover:not(.empty) {
240
+ transform: scale(1.2);
241
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
242
+ z-index: 2;
243
+ }
221
244
 
222
- .statusDay.empty {
223
- background: transparent;
224
- cursor: default;
225
- pointer-events: none;
226
- }
245
+ /* Current day highlight */
246
+ .statusDay.today {
247
+ box-shadow: 0 0 0 2px ${sharedStyles.colors.text.primary};
248
+ z-index: 1;
249
+ }
227
250
 
228
- .overall-uptime {
229
- font-size: 12px;
230
- margin-top: auto;
231
- padding-top: ${unsafeCSS(sharedStyles.spacing.md)};
232
- color: ${cssManager.bdTheme('#6b7280', '#a1a1aa')};
233
- display: flex;
234
- flex-direction: column;
235
- gap: 6px;
236
- border-top: 1px solid ${cssManager.bdTheme('#f3f4f6', '#1f1f1f')};
237
- }
251
+ .statusDay.today:hover {
252
+ box-shadow: 0 0 0 2px ${sharedStyles.colors.text.primary}, 0 4px 8px rgba(0, 0, 0, 0.15);
253
+ }
238
254
 
239
- .uptime-stat {
240
- display: flex;
241
- justify-content: space-between;
242
- align-items: center;
243
- }
244
-
245
- .uptime-value {
246
- font-weight: 600;
247
- color: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
248
- font-variant-numeric: tabular-nums;
249
- font-size: 13px;
250
- }
255
+ /* Status colors with intensity variations based on uptime */
256
+ .statusDay.operational {
257
+ background: ${sharedStyles.colors.status.operational};
258
+ }
251
259
 
252
- .loading-skeleton {
253
- display: flex;
254
- flex-direction: column;
255
- gap: ${unsafeCSS(sharedStyles.spacing.sm)};
256
- height: 100%;
257
- }
258
-
259
- .skeleton-header {
260
- height: 20px;
261
- width: 80px;
262
- background: ${cssManager.bdTheme('#f3f4f6', '#27272a')};
263
- border-radius: 4px;
264
- animation: pulse 2s infinite;
265
- }
266
-
267
- .skeleton-grid {
268
- flex: 1;
269
- display: grid;
270
- grid-template-columns: repeat(7, 1fr);
271
- gap: 2px;
272
- }
273
-
274
- .skeleton-day {
275
- background: ${cssManager.bdTheme('#f3f4f6', '#27272a')};
276
- border-radius: 2px;
277
- animation: pulse 2s infinite;
278
- animation-delay: calc(var(--index) * 0.05s);
279
- }
280
-
281
- @keyframes pulse {
282
- 0%, 100% { opacity: 1; }
283
- 50% { opacity: 0.5; }
284
- }
260
+ .statusDay.operational.uptime-high {
261
+ background: ${cssManager.bdTheme('#22c55e', '#22c55e')};
262
+ }
285
263
 
286
- @keyframes loading {
287
- 0% { transform: translateX(-100%); }
288
- 100% { transform: translateX(200%); }
289
- }
264
+ .statusDay.operational.uptime-mid {
265
+ background: ${cssManager.bdTheme('#4ade80', '#4ade80')};
266
+ }
290
267
 
291
- .tooltip {
292
- position: absolute;
293
- background: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
294
- color: ${cssManager.bdTheme('#fafafa', '#0a0a0a')};
295
- padding: 8px 12px;
296
- border-radius: 4px;
297
- font-size: 12px;
298
- pointer-events: none;
299
- opacity: 0;
300
- transition: opacity 0.15s;
301
- z-index: 50;
302
- white-space: nowrap;
303
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
304
- line-height: 1.5;
268
+ .statusDay.degraded {
269
+ background: ${sharedStyles.colors.status.degraded};
270
+ }
271
+
272
+ .statusDay.partial_outage {
273
+ background: ${sharedStyles.colors.status.partial};
274
+ }
275
+
276
+ .statusDay.major_outage {
277
+ background: ${sharedStyles.colors.status.major};
278
+ animation: dayFadeIn 0.3s ${unsafeCSS(sharedStyles.easings.default)} both,
279
+ majorOutagePulse 2s ease-in-out infinite;
280
+ }
281
+
282
+ @keyframes majorOutagePulse {
283
+ 0%, 100% { opacity: 1; }
284
+ 50% { opacity: 0.8; }
285
+ }
286
+
287
+ .statusDay.maintenance {
288
+ background: ${sharedStyles.colors.status.maintenance};
289
+ }
290
+
291
+ .statusDay.no-data {
292
+ background: ${sharedStyles.colors.background.muted};
293
+ opacity: 0.5;
294
+ }
295
+
296
+ .statusDay.empty {
297
+ background: transparent;
298
+ cursor: default;
299
+ pointer-events: none;
300
+ animation: none;
301
+ }
302
+
303
+ /* Incident count indicator */
304
+ .incident-count {
305
+ position: absolute;
306
+ top: 50%;
307
+ left: 50%;
308
+ transform: translate(-50%, -50%);
309
+ font-size: 8px;
310
+ font-weight: 700;
311
+ color: white;
312
+ text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
313
+ line-height: 1;
314
+ }
315
+
316
+ /* Overall uptime footer */
317
+ .overall-uptime {
318
+ font-size: 12px;
319
+ margin-top: auto;
320
+ padding-top: ${unsafeCSS(sharedStyles.spacing.md)};
321
+ color: ${sharedStyles.colors.text.secondary};
322
+ display: flex;
323
+ flex-direction: column;
324
+ gap: 8px;
325
+ border-top: 1px solid ${sharedStyles.colors.border.default};
326
+ }
327
+
328
+ .uptime-stat {
329
+ display: flex;
330
+ justify-content: space-between;
331
+ align-items: center;
332
+ }
333
+
334
+ .uptime-value {
335
+ font-weight: 600;
336
+ color: ${sharedStyles.colors.text.primary};
337
+ font-variant-numeric: tabular-nums;
338
+ font-size: 13px;
339
+ }
340
+
341
+ .uptime-value.good {
342
+ color: ${sharedStyles.colors.status.operational};
343
+ }
344
+
345
+ .uptime-value.warning {
346
+ color: ${sharedStyles.colors.status.degraded};
347
+ }
348
+
349
+ .uptime-value.bad {
350
+ color: ${sharedStyles.colors.status.partial};
351
+ }
352
+
353
+ /* Uptime bar visualization */
354
+ .uptime-bar {
355
+ height: 4px;
356
+ background: ${sharedStyles.colors.background.muted};
357
+ border-radius: 2px;
358
+ overflow: hidden;
359
+ margin-top: 4px;
360
+ }
361
+
362
+ .uptime-bar-fill {
363
+ height: 100%;
364
+ border-radius: 2px;
365
+ transition: width ${unsafeCSS(sharedStyles.durations.slow)} ${unsafeCSS(sharedStyles.easings.default)};
366
+ }
367
+
368
+ .uptime-bar-fill.good {
369
+ background: ${sharedStyles.colors.status.operational};
370
+ }
371
+
372
+ .uptime-bar-fill.warning {
373
+ background: ${sharedStyles.colors.status.degraded};
374
+ }
375
+
376
+ .uptime-bar-fill.bad {
377
+ background: ${sharedStyles.colors.status.partial};
378
+ }
379
+
380
+ /* Loading skeleton */
381
+ .loading-skeleton {
382
+ display: flex;
383
+ flex-direction: column;
384
+ gap: ${unsafeCSS(sharedStyles.spacing.sm)};
385
+ height: 100%;
386
+ }
387
+
388
+ .skeleton-header {
389
+ height: 20px;
390
+ width: 80px;
391
+ background: ${sharedStyles.colors.background.muted};
392
+ border-radius: 4px;
393
+ animation: shimmer 1.5s infinite;
394
+ }
395
+
396
+ .skeleton-grid {
397
+ flex: 1;
398
+ display: grid;
399
+ grid-template-columns: repeat(7, 1fr);
400
+ gap: 3px;
401
+ }
402
+
403
+ .skeleton-day {
404
+ background: ${sharedStyles.colors.background.muted};
405
+ border-radius: 3px;
406
+ animation: shimmer 1.5s infinite;
407
+ animation-delay: calc(var(--index) * 30ms);
408
+ }
409
+
410
+ @keyframes shimmer {
411
+ 0% { opacity: 0.5; }
412
+ 50% { opacity: 1; }
413
+ 100% { opacity: 0.5; }
414
+ }
415
+
416
+ /* Tooltip */
417
+ .tooltip {
418
+ position: absolute;
419
+ background: ${cssManager.bdTheme('#0a0a0a', '#fafafa')};
420
+ color: ${cssManager.bdTheme('#fafafa', '#0a0a0a')};
421
+ padding: 10px 14px;
422
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.base)};
423
+ font-size: 12px;
424
+ pointer-events: none;
425
+ opacity: 0;
426
+ transition: opacity ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)},
427
+ transform ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
428
+ z-index: 50;
429
+ white-space: nowrap;
430
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.lg)};
431
+ line-height: 1.5;
432
+ transform: translateX(-50%) translateY(4px);
433
+ }
434
+
435
+ .tooltip.visible {
436
+ opacity: 1;
437
+ transform: translateX(-50%) translateY(0);
438
+ }
439
+
440
+ .tooltip-date {
441
+ font-weight: 600;
442
+ margin-bottom: 6px;
443
+ font-size: 13px;
444
+ }
445
+
446
+ .tooltip-stat {
447
+ font-size: 11px;
448
+ opacity: 0.85;
449
+ display: flex;
450
+ align-items: center;
451
+ gap: 6px;
452
+ }
453
+
454
+ .tooltip-stat + .tooltip-stat {
455
+ margin-top: 2px;
456
+ }
457
+
458
+ .tooltip-uptime-bar {
459
+ height: 3px;
460
+ width: 60px;
461
+ background: rgba(128, 128, 128, 0.3);
462
+ border-radius: 2px;
463
+ overflow: hidden;
464
+ margin-top: 8px;
465
+ }
466
+
467
+ .tooltip-uptime-fill {
468
+ height: 100%;
469
+ border-radius: 2px;
470
+ }
471
+
472
+ .no-data-message {
473
+ grid-column: 1 / -1;
474
+ text-align: center;
475
+ padding: ${unsafeCSS(sharedStyles.spacing['2xl'])};
476
+ color: ${sharedStyles.colors.text.secondary};
477
+ animation: fadeInUp 0.4s ${unsafeCSS(sharedStyles.easings.default)} both;
478
+ }
479
+
480
+ @media (max-width: 640px) {
481
+ .container {
482
+ padding: 0 ${unsafeCSS(sharedStyles.spacing.md)} ${unsafeCSS(sharedStyles.spacing.md)} ${unsafeCSS(sharedStyles.spacing.md)};
305
483
  }
306
484
 
307
- .tooltip.visible {
308
- opacity: 1;
485
+ .mainbox {
486
+ grid-template-columns: 1fr;
487
+ gap: ${unsafeCSS(sharedStyles.spacing.md)};
309
488
  }
310
-
311
- .tooltip-date {
312
- font-weight: 500;
313
- margin-bottom: 4px;
489
+
490
+ .statusMonth {
491
+ padding: ${unsafeCSS(sharedStyles.spacing.md)};
492
+ min-height: 260px;
314
493
  }
315
-
316
- .tooltip-stat {
317
- font-size: 11px;
318
- opacity: 0.9;
494
+
495
+ .days-grid {
496
+ gap: 3px;
319
497
  }
320
498
 
321
- .no-data-message {
322
- grid-column: 1 / -1;
323
- text-align: center;
324
- padding: ${unsafeCSS(sharedStyles.spacing['2xl'])};
325
- color: ${sharedStyles.colors.text.secondary};
499
+ .statusDay:hover:not(.empty) {
500
+ transform: scale(1.1);
326
501
  }
327
502
 
328
- @media (max-width: 640px) {
329
- .container {
330
- padding: 0 ${unsafeCSS(sharedStyles.spacing.md)} ${unsafeCSS(sharedStyles.spacing.md)} ${unsafeCSS(sharedStyles.spacing.md)};
331
- }
332
-
333
- .mainbox {
334
- grid-template-columns: 1fr;
335
- gap: ${unsafeCSS(sharedStyles.spacing.md)};
336
- }
337
-
338
- .statusMonth {
339
- padding: ${unsafeCSS(sharedStyles.spacing.md)};
340
- min-height: 260px;
341
- }
342
-
343
- .loading-skeleton {
344
- height: 180px;
345
- padding: ${unsafeCSS(sharedStyles.spacing.md)};
346
- }
503
+ .loading-skeleton {
504
+ height: 180px;
505
+ padding: ${unsafeCSS(sharedStyles.spacing.md)};
347
506
  }
507
+ }
348
508
  `
349
509
  ];
350
510
  render() {
@@ -381,21 +541,30 @@ let UplStatuspageStatusmonth = (() => {
381
541
  const monthDate = new Date(monthData.month + '-01');
382
542
  const monthName = monthDate.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });
383
543
  const firstDayOfWeek = new Date(monthDate.getFullYear(), monthDate.getMonth(), 1).getDay();
544
+ const now = new Date();
545
+ const isCurrentMonth = monthDate.getMonth() === now.getMonth() && monthDate.getFullYear() === now.getFullYear();
546
+ const uptimeClass = this.getUptimeClass(monthData.overallUptime);
384
547
  return html `
385
548
  <div class="statusMonth" @mouseleave=${this.hideTooltip}>
386
- <div class="month-header">${monthName}</div>
549
+ <div class="month-header">
550
+ ${monthName}
551
+ ${isCurrentMonth ? html `<span class="current-badge">Current</span>` : ''}
552
+ </div>
387
553
  <div class="days-container">
388
554
  <div class="days-grid">
389
555
  ${this.renderWeekdayLabels()}
390
556
  ${this.renderEmptyDays(firstDayOfWeek)}
391
- ${monthData.days.map(day => this.renderDay(day))}
557
+ ${monthData.days.map((day, index) => this.renderDay(day, index))}
392
558
  ${this.renderTrailingEmptyDays(firstDayOfWeek + monthData.days.length)}
393
559
  </div>
394
560
  </div>
395
561
  <div class="overall-uptime">
396
562
  <div class="uptime-stat">
397
563
  <span>Uptime</span>
398
- <span class="uptime-value">${monthData.overallUptime.toFixed(2)}%</span>
564
+ <span class="uptime-value ${uptimeClass}">${monthData.overallUptime.toFixed(2)}%</span>
565
+ </div>
566
+ <div class="uptime-bar">
567
+ <div class="uptime-bar-fill ${uptimeClass}" style="width: ${monthData.overallUptime}%"></div>
399
568
  </div>
400
569
  ${monthData.totalIncidents > 0 ? html `
401
570
  <div class="uptime-stat">
@@ -407,6 +576,13 @@ let UplStatuspageStatusmonth = (() => {
407
576
  </div>
408
577
  `;
409
578
  }
579
+ getUptimeClass(uptime) {
580
+ if (uptime >= 99.9)
581
+ return 'good';
582
+ if (uptime >= 99)
583
+ return 'warning';
584
+ return 'bad';
585
+ }
410
586
  renderWeekdayLabels() {
411
587
  const weekdays = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
412
588
  return weekdays.map(day => html `<div class="weekday-label">${day}</div>`);
@@ -419,55 +595,64 @@ let UplStatuspageStatusmonth = (() => {
419
595
  const trailingCount = remainder === 0 ? 0 : 7 - remainder;
420
596
  return Array(trailingCount).fill(0).map(() => html `<div class="statusDay empty"></div>`);
421
597
  }
422
- renderDay(day) {
598
+ renderDay(day, index = 0) {
423
599
  const status = day.status || 'no-data';
424
600
  const date = new Date(day.date);
425
- const dayNumber = date.getDate();
601
+ const now = new Date();
602
+ const isToday = date.toDateString() === now.toDateString();
603
+ const uptimeIntensity = this.getUptimeIntensity(day.uptime);
426
604
  return html `
427
- <div
428
- class="statusDay ${status}"
605
+ <div
606
+ class="statusDay ${status} ${isToday ? 'today' : ''} ${status === 'operational' ? uptimeIntensity : ''}"
607
+ style="--day-index: ${index}"
429
608
  @mouseenter=${(e) => this.showTooltip && this.showDayTooltip(e, day)}
430
609
  @click=${() => this.handleDayClick(day)}
431
610
  >
432
- ${status === 'major_outage' || status === 'partial_outage' ? html `
433
- <div style="
434
- position: absolute;
435
- top: 50%;
436
- left: 50%;
437
- transform: translate(-50%, -50%);
438
- font-size: 8px;
439
- font-weight: bold;
440
- color: white;
441
- ">${day.incidents}</div>
611
+ ${(status === 'major_outage' || status === 'partial_outage') && day.incidents > 0 ? html `
612
+ <span class="incident-count">${day.incidents}</span>
442
613
  ` : ''}
443
614
  </div>
444
615
  `;
445
616
  }
617
+ getUptimeIntensity(uptime) {
618
+ if (uptime >= 99.9)
619
+ return 'uptime-high';
620
+ if (uptime >= 99)
621
+ return 'uptime-mid';
622
+ return '';
623
+ }
446
624
  showDayTooltip(event, day) {
447
625
  const tooltip = this.shadowRoot?.getElementById('tooltip');
448
626
  if (!tooltip)
449
627
  return;
450
628
  const date = new Date(day.date);
451
629
  const dateStr = date.toLocaleDateString('en-US', {
452
- weekday: 'long',
453
- year: 'numeric',
454
- month: 'long',
630
+ weekday: 'short',
631
+ month: 'short',
455
632
  day: 'numeric'
456
633
  });
457
634
  let statusText = day.status.replace(/_/g, ' ');
458
635
  statusText = statusText.charAt(0).toUpperCase() + statusText.slice(1);
636
+ const uptimeColor = day.uptime >= 99.9 ? '#22c55e' :
637
+ day.uptime >= 99 ? '#fbbf24' : '#f87171';
459
638
  tooltip.innerHTML = `
460
639
  <div class="tooltip-date">${dateStr}</div>
461
- <div class="tooltip-stat">Status: ${statusText}</div>
462
- <div class="tooltip-stat">Uptime: ${day.uptime.toFixed(2)}%</div>
463
- ${day.incidents > 0 ? `<div class="tooltip-stat">Incidents: ${day.incidents}</div>` : ''}
464
- ${day.totalDowntime > 0 ? `<div class="tooltip-stat">Downtime: ${day.totalDowntime} min</div>` : ''}
640
+ <div class="tooltip-stat">
641
+ <span style="display: inline-block; width: 6px; height: 6px; border-radius: 50%; background: ${uptimeColor};"></span>
642
+ ${statusText}
643
+ </div>
644
+ <div class="tooltip-stat">Uptime: <strong>${day.uptime.toFixed(2)}%</strong></div>
645
+ ${day.incidents > 0 ? `<div class="tooltip-stat">Incidents: <strong>${day.incidents}</strong></div>` : ''}
646
+ ${day.totalDowntime > 0 ? `<div class="tooltip-stat">Downtime: <strong>${day.totalDowntime}m</strong></div>` : ''}
647
+ <div class="tooltip-uptime-bar">
648
+ <div class="tooltip-uptime-fill" style="width: ${day.uptime}%; background: ${uptimeColor};"></div>
649
+ </div>
465
650
  `;
466
651
  const rect = event.target.getBoundingClientRect();
467
652
  const containerRect = this.getBoundingClientRect();
468
653
  tooltip.style.left = `${rect.left - containerRect.left + rect.width / 2}px`;
469
- tooltip.style.top = `${rect.top - containerRect.top - 80}px`;
470
- tooltip.style.transform = 'translateX(-50%)';
654
+ tooltip.style.top = `${rect.top - containerRect.top - 10}px`;
655
+ tooltip.style.transform = 'translateX(-50%) translateY(-100%)';
471
656
  tooltip.classList.add('visible');
472
657
  }
473
658
  hideTooltip() {
@@ -496,4 +681,4 @@ let UplStatuspageStatusmonth = (() => {
496
681
  return UplStatuspageStatusmonth = _classThis;
497
682
  })();
498
683
  export { UplStatuspageStatusmonth };
499
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsLXN0YXR1c3BhZ2Utc3RhdHVzbW9udGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvdXBsLXN0YXR1c3BhZ2Utc3RhdHVzbW9udGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLElBQUksRUFDSixhQUFhLEVBRWIsR0FBRyxFQUNILFVBQVUsRUFDVixTQUFTLEVBQ1YsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssUUFBUSxNQUFNLDhCQUE4QixDQUFDO0FBRXpELE9BQU8sS0FBSyxZQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFFM0QsT0FBTyx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7SUFTbkQsd0JBQXdCOzRCQURwQyxhQUFhLENBQUMsNEJBQTRCLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt3Q0FBbkIsU0FBUSxXQUFXOzs7O3VDQUd0RCxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7cUNBR3pCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzt1Q0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO21DQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7dUNBRzNCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQzt3Q0FHM0IsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBZDNCLHNMQUFTLFdBQVcsNkJBQVgsV0FBVyxpR0FBd0I7WUFHNUMsZ0xBQVMsU0FBUyw2QkFBVCxTQUFTLDZGQUFjO1lBR2hDLHNMQUFTLFdBQVcsNkJB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
684
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsLXN0YXR1c3BhZ2Utc3RhdHVzbW9udGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvdXBsLXN0YXR1c3BhZ2Utc3RhdHVzbW9udGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLElBQUksRUFDSixhQUFhLEVBRWIsR0FBRyxFQUNILFVBQVUsRUFDVixTQUFTLEVBQ1YsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssUUFBUSxNQUFNLDhCQUE4QixDQUFDO0FBRXpELE9BQU8sS0FBSyxZQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFFM0QsT0FBTyx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7SUFTbkQsd0JBQXdCOzRCQURwQyxhQUFhLENBQUMsNEJBQTRCLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt3Q0FBbkIsU0FBUSxXQUFXOzs7O3VDQUd0RCxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7cUNBR3pCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzt1Q0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO21DQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7dUNBRzNCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQzt3Q0FHM0IsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBZDNCLHNMQUFTLFdBQVcsNkJBQVgsV0FBVyxpR0FBd0I7WUFHNUMsZ0xBQVMsU0FBUyw2QkFBVCxTQUFTLDZGQUFjO1lBR2hDLHNMQUFTLFdBQVcsNkJB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