@uptime.link/statuspage 1.0.74 → 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 (96) hide show
  1. package/dist_bundle/bundle.js +5019 -519
  2. package/dist_bundle/bundle.js.map +4 -4
  3. package/dist_ts_web/00_commitinfo_data.js +2 -2
  4. package/dist_ts_web/elements/index.d.ts +3 -0
  5. package/dist_ts_web/elements/index.js +6 -1
  6. package/dist_ts_web/elements/internal/uplinternal-miniheading.d.ts +1 -0
  7. package/dist_ts_web/elements/internal/uplinternal-miniheading.js +78 -28
  8. package/dist_ts_web/elements/upl-statuspage-assetsselector.d.ts +14 -0
  9. package/dist_ts_web/elements/upl-statuspage-assetsselector.demo.d.ts +1 -0
  10. package/dist_ts_web/elements/upl-statuspage-assetsselector.demo.js +575 -0
  11. package/dist_ts_web/elements/upl-statuspage-assetsselector.js +679 -43
  12. package/dist_ts_web/elements/upl-statuspage-footer.d.ts +46 -2
  13. package/dist_ts_web/elements/upl-statuspage-footer.demo.d.ts +1 -0
  14. package/dist_ts_web/elements/upl-statuspage-footer.demo.js +679 -0
  15. package/dist_ts_web/elements/upl-statuspage-footer.js +846 -61
  16. package/dist_ts_web/elements/upl-statuspage-header.d.ts +5 -1
  17. package/dist_ts_web/elements/upl-statuspage-header.demo.d.ts +1 -0
  18. package/dist_ts_web/elements/upl-statuspage-header.demo.js +220 -0
  19. package/dist_ts_web/elements/upl-statuspage-header.js +373 -86
  20. package/dist_ts_web/elements/upl-statuspage-incidents.d.ts +22 -4
  21. package/dist_ts_web/elements/upl-statuspage-incidents.demo.d.ts +1 -0
  22. package/dist_ts_web/elements/upl-statuspage-incidents.demo.js +1147 -0
  23. package/dist_ts_web/elements/upl-statuspage-incidents.js +937 -74
  24. package/dist_ts_web/elements/upl-statuspage-pagetitle.d.ts +15 -0
  25. package/dist_ts_web/elements/upl-statuspage-pagetitle.demo.d.ts +1 -0
  26. package/dist_ts_web/elements/upl-statuspage-pagetitle.demo.js +25 -0
  27. package/dist_ts_web/elements/upl-statuspage-pagetitle.js +148 -0
  28. package/dist_ts_web/elements/upl-statuspage-statsgrid.d.ts +23 -0
  29. package/dist_ts_web/elements/upl-statuspage-statsgrid.demo.d.ts +1 -0
  30. package/dist_ts_web/elements/upl-statuspage-statsgrid.demo.js +295 -0
  31. package/dist_ts_web/elements/upl-statuspage-statsgrid.js +549 -0
  32. package/dist_ts_web/elements/upl-statuspage-statusbar.d.ts +4 -0
  33. package/dist_ts_web/elements/upl-statuspage-statusbar.demo.d.ts +1 -0
  34. package/dist_ts_web/elements/upl-statuspage-statusbar.demo.js +365 -0
  35. package/dist_ts_web/elements/upl-statuspage-statusbar.js +408 -44
  36. package/dist_ts_web/elements/upl-statuspage-statusdetails.d.ts +14 -0
  37. package/dist_ts_web/elements/upl-statuspage-statusdetails.demo.d.ts +1 -0
  38. package/dist_ts_web/elements/upl-statuspage-statusdetails.demo.js +706 -0
  39. package/dist_ts_web/elements/upl-statuspage-statusdetails.js +397 -62
  40. package/dist_ts_web/elements/upl-statuspage-statusmonth.d.ts +17 -0
  41. package/dist_ts_web/elements/upl-statuspage-statusmonth.demo.d.ts +1 -0
  42. package/dist_ts_web/elements/upl-statuspage-statusmonth.demo.js +798 -0
  43. package/dist_ts_web/elements/upl-statuspage-statusmonth.js +662 -103
  44. package/dist_ts_web/interfaces/index.d.ts +84 -0
  45. package/dist_ts_web/interfaces/index.js +4 -0
  46. package/dist_ts_web/pages/index.d.ts +4 -1
  47. package/dist_ts_web/pages/index.js +5 -2
  48. package/dist_ts_web/pages/statuspage-allgreen.d.ts +1 -0
  49. package/dist_ts_web/pages/statuspage-allgreen.js +386 -0
  50. package/dist_ts_web/pages/statuspage-demo.d.ts +1 -0
  51. package/dist_ts_web/pages/statuspage-demo.js +616 -0
  52. package/dist_ts_web/pages/statuspage-maintenance.d.ts +1 -0
  53. package/dist_ts_web/pages/statuspage-maintenance.js +544 -0
  54. package/dist_ts_web/pages/statuspage-outage.d.ts +1 -0
  55. package/dist_ts_web/pages/statuspage-outage.js +543 -0
  56. package/dist_ts_web/styles/shared.styles.d.ts +102 -0
  57. package/dist_ts_web/styles/shared.styles.js +494 -0
  58. package/dist_watch/bundle.js +52265 -32033
  59. package/dist_watch/bundle.js.map +4 -4
  60. package/dist_watch/index.html +1 -0
  61. package/npmextra.json +9 -3
  62. package/package.json +19 -19
  63. package/readme.hints.md +292 -0
  64. package/readme.md +326 -149
  65. package/readme.plan.md +261 -0
  66. package/ts_web/00_commitinfo_data.ts +1 -1
  67. package/ts_web/elements/index.ts +6 -0
  68. package/ts_web/elements/internal/uplinternal-miniheading.ts +24 -17
  69. package/ts_web/elements/upl-statuspage-assetsselector.demo.ts +607 -0
  70. package/ts_web/elements/upl-statuspage-assetsselector.ts +600 -18
  71. package/ts_web/elements/upl-statuspage-footer.demo.ts +744 -0
  72. package/ts_web/elements/upl-statuspage-footer.ts +662 -30
  73. package/ts_web/elements/upl-statuspage-header.demo.ts +241 -0
  74. package/ts_web/elements/upl-statuspage-header.ts +289 -52
  75. package/ts_web/elements/upl-statuspage-incidents.demo.ts +1216 -0
  76. package/ts_web/elements/upl-statuspage-incidents.ts +840 -26
  77. package/ts_web/elements/upl-statuspage-pagetitle.demo.ts +25 -0
  78. package/ts_web/elements/upl-statuspage-pagetitle.ts +89 -0
  79. package/ts_web/elements/upl-statuspage-statsgrid.demo.ts +315 -0
  80. package/ts_web/elements/upl-statuspage-statsgrid.ts +478 -0
  81. package/ts_web/elements/upl-statuspage-statusbar.demo.ts +393 -0
  82. package/ts_web/elements/upl-statuspage-statusbar.ts +332 -20
  83. package/ts_web/elements/upl-statuspage-statusdetails.demo.ts +754 -0
  84. package/ts_web/elements/upl-statuspage-statusdetails.ts +321 -37
  85. package/ts_web/elements/upl-statuspage-statusmonth.demo.ts +876 -0
  86. package/ts_web/elements/upl-statuspage-statusmonth.ts +584 -79
  87. package/ts_web/interfaces/index.ts +95 -0
  88. package/ts_web/pages/index.ts +4 -1
  89. package/ts_web/pages/statuspage-allgreen.ts +412 -0
  90. package/ts_web/pages/statuspage-demo.ts +653 -0
  91. package/ts_web/pages/statuspage-maintenance.ts +570 -0
  92. package/ts_web/pages/statuspage-outage.ts +568 -0
  93. package/ts_web/styles/shared.styles.ts +531 -0
  94. package/dist_ts_web/pages/page1.d.ts +0 -1
  95. package/dist_ts_web/pages/page1.js +0 -11
  96. package/ts_web/pages/page1.ts +0 -11
@@ -1,55 +1,419 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
6
27
  };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
9
34
  };
10
- import { DeesElement, property, html, customElement, cssManager, css } from '@design.estate/dees-element';
35
+ import { DeesElement, property, html, customElement, cssManager, css, unsafeCSS } from '@design.estate/dees-element';
11
36
  import * as domtools from '@design.estate/dees-domtools';
12
- let UplStatuspageStatusbar = class UplStatuspageStatusbar extends DeesElement {
13
- static { this.demo = () => html `
14
- <upl-statuspage-statusbar></upl-statuspage-statusbar>
15
- `; }
16
- constructor() {
17
- super();
18
- }
19
- static { this.styles = [
20
- cssManager.defaultStyles,
21
- css `
37
+ import * as sharedStyles from '../styles/shared.styles.js';
38
+ import { demoFunc } from './upl-statuspage-statusbar.demo.js';
39
+ let UplStatuspageStatusbar = (() => {
40
+ let _classDecorators = [customElement('upl-statuspage-statusbar')];
41
+ let _classDescriptor;
42
+ let _classExtraInitializers = [];
43
+ let _classThis;
44
+ let _classSuper = DeesElement;
45
+ let _overallStatus_decorators;
46
+ let _overallStatus_initializers = [];
47
+ let _overallStatus_extraInitializers = [];
48
+ let _loading_decorators;
49
+ let _loading_initializers = [];
50
+ let _loading_extraInitializers = [];
51
+ let _expandable_decorators;
52
+ let _expandable_initializers = [];
53
+ let _expandable_extraInitializers = [];
54
+ var UplStatuspageStatusbar = class extends _classSuper {
55
+ static { _classThis = this; }
56
+ static {
57
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
58
+ _overallStatus_decorators = [property({ type: Object })];
59
+ _loading_decorators = [property({ type: Boolean })];
60
+ _expandable_decorators = [property({ type: Boolean })];
61
+ __esDecorate(this, null, _overallStatus_decorators, { kind: "accessor", name: "overallStatus", static: false, private: false, access: { has: obj => "overallStatus" in obj, get: obj => obj.overallStatus, set: (obj, value) => { obj.overallStatus = value; } }, metadata: _metadata }, _overallStatus_initializers, _overallStatus_extraInitializers);
62
+ __esDecorate(this, null, _loading_decorators, { kind: "accessor", name: "loading", static: false, private: false, access: { has: obj => "loading" in obj, get: obj => obj.loading, set: (obj, value) => { obj.loading = value; } }, metadata: _metadata }, _loading_initializers, _loading_extraInitializers);
63
+ __esDecorate(this, null, _expandable_decorators, { kind: "accessor", name: "expandable", static: false, private: false, access: { has: obj => "expandable" in obj, get: obj => obj.expandable, set: (obj, value) => { obj.expandable = value; } }, metadata: _metadata }, _expandable_initializers, _expandable_extraInitializers);
64
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
65
+ UplStatuspageStatusbar = _classThis = _classDescriptor.value;
66
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
67
+ }
68
+ static demo = demoFunc;
69
+ #overallStatus_accessor_storage = __runInitializers(this, _overallStatus_initializers, {
70
+ status: 'operational',
71
+ message: 'All Systems Operational',
72
+ lastUpdated: Date.now(),
73
+ affectedServices: 0,
74
+ totalServices: 0
75
+ });
76
+ get overallStatus() { return this.#overallStatus_accessor_storage; }
77
+ set overallStatus(value) { this.#overallStatus_accessor_storage = value; }
78
+ #loading_accessor_storage = (__runInitializers(this, _overallStatus_extraInitializers), __runInitializers(this, _loading_initializers, false));
79
+ get loading() { return this.#loading_accessor_storage; }
80
+ set loading(value) { this.#loading_accessor_storage = value; }
81
+ #expandable_accessor_storage = (__runInitializers(this, _loading_extraInitializers), __runInitializers(this, _expandable_initializers, true));
82
+ get expandable() { return this.#expandable_accessor_storage; }
83
+ set expandable(value) { this.#expandable_accessor_storage = value; }
84
+ constructor() {
85
+ super();
86
+ __runInitializers(this, _expandable_extraInitializers);
87
+ }
88
+ static styles = [
89
+ cssManager.defaultStyles,
90
+ css `
22
91
  :host {
23
- padding: 20px 0px 15px 0px;
24
- display: block;
25
- background: ${cssManager.bdTheme('#eeeeeb', '#222222')};;
26
- font-family: Inter;
27
- color: #fff;
92
+ padding: 0;
93
+ display: block;
94
+ background: transparent;
95
+ font-family: ${unsafeCSS(sharedStyles.fonts.base)};
96
+ }
97
+
98
+ .statusbar-container {
99
+ margin: auto;
100
+ max-width: 1200px;
101
+ padding: ${unsafeCSS(sharedStyles.spacing.lg)};
102
+ position: relative;
103
+ }
104
+
105
+ .statusbar-inner {
106
+ display: flex;
107
+ align-items: center;
108
+ justify-content: space-between;
109
+ min-height: 72px;
110
+ padding: ${unsafeCSS(sharedStyles.spacing.lg)} ${unsafeCSS(sharedStyles.spacing.xl)};
111
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.xl)};
112
+ cursor: default;
113
+ transition: all ${unsafeCSS(sharedStyles.durations.slow)} ${unsafeCSS(sharedStyles.easings.default)};
114
+ position: relative;
115
+ overflow: hidden;
116
+ font-weight: 500;
117
+ font-size: 15px;
118
+ letter-spacing: -0.01em;
119
+ border: 1px solid ${sharedStyles.colors.border.default};
120
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.sm)};
121
+ }
122
+
123
+ /* Gradient background overlay */
124
+ .statusbar-inner::before {
125
+ content: '';
126
+ position: absolute;
127
+ inset: 0;
128
+ opacity: 1;
129
+ transition: opacity ${unsafeCSS(sharedStyles.durations.slow)} ${unsafeCSS(sharedStyles.easings.default)};
130
+ z-index: 0;
131
+ }
132
+
133
+ /* Left accent border */
134
+ .statusbar-inner::after {
135
+ content: '';
136
+ position: absolute;
137
+ left: 0;
138
+ top: 0;
139
+ bottom: 0;
140
+ width: 4px;
141
+ transition: background ${unsafeCSS(sharedStyles.durations.normal)} ${unsafeCSS(sharedStyles.easings.default)};
142
+ z-index: 1;
143
+ }
144
+
145
+ /* Operational - green gradient */
146
+ .statusbar-inner.operational {
147
+ background: ${sharedStyles.colors.background.card};
148
+ }
149
+ .statusbar-inner.operational::before {
150
+ background: ${sharedStyles.statusGradients.operational};
151
+ }
152
+ .statusbar-inner.operational::after {
153
+ background: ${sharedStyles.colors.status.operational};
154
+ }
155
+
156
+ /* Degraded - yellow/amber gradient */
157
+ .statusbar-inner.degraded {
158
+ background: ${sharedStyles.colors.background.card};
159
+ }
160
+ .statusbar-inner.degraded::before {
161
+ background: ${sharedStyles.statusGradients.degraded};
162
+ }
163
+ .statusbar-inner.degraded::after {
164
+ background: ${sharedStyles.colors.status.degraded};
165
+ }
166
+
167
+ /* Partial outage - orange/red gradient */
168
+ .statusbar-inner.partial_outage {
169
+ background: ${sharedStyles.colors.background.card};
170
+ }
171
+ .statusbar-inner.partial_outage::before {
172
+ background: ${sharedStyles.statusGradients.partial};
173
+ }
174
+ .statusbar-inner.partial_outage::after {
175
+ background: ${sharedStyles.colors.status.partial};
176
+ }
177
+
178
+ /* Major outage - red gradient */
179
+ .statusbar-inner.major_outage {
180
+ background: ${sharedStyles.colors.background.card};
181
+ }
182
+ .statusbar-inner.major_outage::before {
183
+ background: ${sharedStyles.statusGradients.major};
184
+ }
185
+ .statusbar-inner.major_outage::after {
186
+ background: ${sharedStyles.colors.status.major};
187
+ }
188
+
189
+ /* Maintenance - blue gradient */
190
+ .statusbar-inner.maintenance {
191
+ background: ${sharedStyles.colors.background.card};
192
+ }
193
+ .statusbar-inner.maintenance::before {
194
+ background: ${sharedStyles.statusGradients.maintenance};
195
+ }
196
+ .statusbar-inner.maintenance::after {
197
+ background: ${sharedStyles.colors.status.maintenance};
198
+ }
199
+
200
+ .statusbar-inner:hover {
201
+ border-color: ${sharedStyles.colors.border.muted};
202
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.md)};
203
+ transform: translateY(-1px);
204
+ }
205
+
206
+ .statusbar-inner:hover::before {
207
+ opacity: 1.2;
208
+ }
209
+
210
+ .status-indicator {
211
+ width: 10px;
212
+ height: 10px;
213
+ border-radius: 50%;
214
+ flex-shrink: 0;
215
+ position: relative;
216
+ }
217
+
218
+ .status-indicator::after {
219
+ content: '';
220
+ position: absolute;
221
+ inset: -3px;
222
+ border-radius: 50%;
223
+ opacity: 0.2;
224
+ }
225
+
226
+ .statusbar-inner.operational .status-indicator {
227
+ background: ${sharedStyles.colors.status.operational};
228
+ box-shadow: 0 0 0 3px ${cssManager.bdTheme('rgba(22, 163, 74, 0.15)', 'rgba(34, 197, 94, 0.2)')};
229
+ }
230
+
231
+ .statusbar-inner.operational .status-indicator::after {
232
+ background: ${sharedStyles.colors.status.operational};
233
+ animation: pulse-ring 2s ease-out infinite;
234
+ }
235
+
236
+ .statusbar-inner.degraded .status-indicator {
237
+ background: ${sharedStyles.colors.status.degraded};
238
+ box-shadow: 0 0 0 3px ${cssManager.bdTheme('rgba(217, 119, 6, 0.15)', 'rgba(251, 191, 36, 0.2)')};
239
+ }
240
+
241
+ .statusbar-inner.partial_outage .status-indicator {
242
+ background: ${sharedStyles.colors.status.partial};
243
+ box-shadow: 0 0 0 3px ${cssManager.bdTheme('rgba(220, 38, 38, 0.15)', 'rgba(248, 113, 113, 0.2)')};
244
+ }
245
+
246
+ .statusbar-inner.major_outage .status-indicator {
247
+ background: ${sharedStyles.colors.status.major};
248
+ box-shadow: 0 0 0 3px ${cssManager.bdTheme('rgba(185, 28, 28, 0.15)', 'rgba(239, 68, 68, 0.2)')};
249
+ animation: pulse-indicator 1s ease-in-out infinite;
250
+ }
251
+
252
+ .statusbar-inner.maintenance .status-indicator {
253
+ background: ${sharedStyles.colors.status.maintenance};
254
+ box-shadow: 0 0 0 3px ${cssManager.bdTheme('rgba(37, 99, 235, 0.15)', 'rgba(96, 165, 250, 0.2)')};
255
+ }
256
+
257
+ @keyframes pulse-ring {
258
+ 0% { transform: scale(1); opacity: 0.2; }
259
+ 50% { transform: scale(1.5); opacity: 0; }
260
+ 100% { transform: scale(1); opacity: 0; }
261
+ }
262
+
263
+ @keyframes pulse-indicator {
264
+ 0%, 100% { opacity: 1; }
265
+ 50% { opacity: 0.6; }
266
+ }
267
+
268
+ .status-content {
269
+ display: flex;
270
+ align-items: center;
271
+ gap: ${unsafeCSS(sharedStyles.spacing.md)};
272
+ flex: 1;
273
+ padding-left: ${unsafeCSS(sharedStyles.spacing.sm)};
274
+ }
275
+
276
+ .status-main {
277
+ display: flex;
278
+ align-items: center;
279
+ gap: ${unsafeCSS(sharedStyles.spacing.sm)};
280
+ color: ${sharedStyles.colors.text.primary};
281
+ }
282
+
283
+ .status-message {
284
+ font-weight: 600;
285
+ }
286
+
287
+ .status-details {
288
+ font-size: 13px;
289
+ font-weight: 400;
290
+ color: ${sharedStyles.colors.text.secondary};
291
+ }
292
+
293
+ .loading-skeleton {
294
+ background: ${sharedStyles.colors.background.card};
295
+ border: 1px solid ${sharedStyles.colors.border.default};
296
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.lg)};
297
+ height: 64px;
298
+ position: relative;
299
+ overflow: hidden;
300
+ }
301
+
302
+ .loading-skeleton::after {
303
+ content: '';
304
+ position: absolute;
305
+ top: 0;
306
+ left: 0;
307
+ right: 0;
308
+ bottom: 0;
309
+ background: ${cssManager.bdTheme('linear-gradient(90deg, transparent 0%, rgba(0,0,0,0.04) 50%, transparent 100%)', 'linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.04) 50%, transparent 100%)')};
310
+ animation: loading 1.5s ${unsafeCSS(sharedStyles.easings.default)} infinite;
311
+ }
312
+
313
+ @keyframes loading {
314
+ 0% { transform: translateX(-100%); }
315
+ 100% { transform: translateX(200%); }
316
+ }
317
+
318
+ .last-updated {
319
+ font-size: 12px;
320
+ color: ${sharedStyles.colors.text.muted};
321
+ white-space: nowrap;
322
+ padding: 4px 10px;
323
+ background: ${sharedStyles.colors.background.muted};
324
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.full)};
325
+ transition: all ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
326
+ }
327
+
328
+ .statusbar-inner:hover .last-updated {
329
+ background: ${cssManager.bdTheme('#e4e4e7', '#3f3f46')};
330
+ }
331
+
332
+ @media (max-width: 768px) {
333
+ .statusbar-container {
334
+ padding: ${unsafeCSS(sharedStyles.spacing.md)};
335
+ }
336
+
337
+ .statusbar-inner {
338
+ flex-direction: column;
339
+ align-items: flex-start;
340
+ gap: ${unsafeCSS(sharedStyles.spacing.sm)};
341
+ min-height: auto;
342
+ padding: ${unsafeCSS(sharedStyles.spacing.md)};
343
+ }
344
+
345
+ .status-main {
346
+ flex-direction: column;
347
+ align-items: flex-start;
348
+ gap: 4px;
349
+ }
350
+
351
+ .last-updated {
352
+ align-self: flex-start;
353
+ }
354
+ }
355
+
356
+ @media (max-width: 640px) {
357
+ .statusbar-inner {
358
+ font-size: 14px;
28
359
  }
29
360
 
30
- .mainbox {
31
- margin: auto;
32
- max-width: 900px;
33
- text-align: center;
34
- background: #19572E;
35
- line-height: 50px;
36
- border-radius: 3px;
361
+ .status-indicator {
362
+ width: 8px;
363
+ height: 8px;
37
364
  }
365
+
366
+ .last-updated {
367
+ font-size: 11px;
368
+ }
369
+ }
38
370
  `,
39
- ]; }
40
- render() {
41
- return html `
42
- <style>
43
- </style>
44
- <div class="mainbox">
45
- Everything is working normally!
371
+ ];
372
+ render() {
373
+ const formatLastUpdated = () => {
374
+ const date = new Date(this.overallStatus.lastUpdated);
375
+ const now = new Date();
376
+ const diff = now.getTime() - date.getTime();
377
+ const minutes = Math.floor(diff / 60000);
378
+ if (minutes < 1)
379
+ return 'Just now';
380
+ if (minutes < 60)
381
+ return `${minutes}m ago`;
382
+ const hours = Math.floor(minutes / 60);
383
+ if (hours < 24)
384
+ return `${hours}h ago`;
385
+ return date.toLocaleDateString();
386
+ };
387
+ return html `
388
+ <div class="statusbar-container">
389
+ ${this.loading ? html `
390
+ <div class="loading-skeleton"></div>
391
+ ` : html `
392
+ <div class="statusbar-inner ${this.overallStatus.status}">
393
+ <div class="status-content">
394
+ <div class="status-indicator"></div>
395
+ <div class="status-main">
396
+ <span>${this.overallStatus.message}</span>
397
+ ${this.overallStatus.affectedServices > 0 ? html `
398
+ <span class="status-details">
399
+ · ${this.overallStatus.affectedServices} of ${this.overallStatus.totalServices} services affected
400
+ </span>
401
+ ` : ''}
402
+ </div>
403
+ </div>
404
+ <div class="last-updated">
405
+ ${formatLastUpdated()}
406
+ </div>
407
+ </div>
408
+ `}
46
409
  </div>
47
410
  `;
48
- }
49
- };
50
- UplStatuspageStatusbar = __decorate([
51
- customElement('upl-statuspage-statusbar'),
52
- __metadata("design:paramtypes", [])
53
- ], UplStatuspageStatusbar);
411
+ }
412
+ static {
413
+ __runInitializers(_classThis, _classExtraInitializers);
414
+ }
415
+ };
416
+ return UplStatuspageStatusbar = _classThis;
417
+ })();
54
418
  export { UplStatuspageStatusbar };
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsLXN0YXR1c3BhZ2Utc3RhdHVzYmFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL3VwbC1zdGF0dXNwYWdlLXN0YXR1c2Jhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUF1QixVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0gsT0FBTyxLQUFLLFFBQVEsTUFBTSw4QkFBOEIsQ0FBQztBQVNsRCxJQUFNLHNCQUFzQixHQUE1QixNQUFNLHNCQUF1QixTQUFRLFdBQVc7YUFDdkMsU0FBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQTs7R0FFOUIsQUFGaUIsQ0FFaEI7SUFFRjtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQzthQUVhLFdBQU0sR0FBRztRQUNyQixVQUFVLENBQUMsYUFBYTtRQUN4QixHQUFHLENBQUE7Ozs7d0JBSWlCLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7OztLQWEzRDtLQUNGLEFBcEJtQixDQW9CbkI7SUFFTSxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUE7Ozs7OztLQU1WLENBQUM7SUFDSixDQUFDOztBQXZDVSxzQkFBc0I7SUFEbEMsYUFBYSxDQUFDLDBCQUEwQixDQUFDOztHQUM3QixzQkFBc0IsQ0F3Q2xDIn0=
419
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsLXN0YXR1c3BhZ2Utc3RhdHVzYmFyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL3VwbC1zdGF0dXNwYWdlLXN0YXR1c2Jhci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBdUIsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxSSxPQUFPLEtBQUssUUFBUSxNQUFNLDhCQUE4QixDQUFDO0FBRXpELE9BQU8sS0FBSyxZQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0lBU2pELHNCQUFzQjs0QkFEbEMsYUFBYSxDQUFDLDBCQUEwQixDQUFDOzs7O3NCQUNFLFdBQVc7Ozs7Ozs7Ozs7c0NBQW5CLFNBQVEsV0FBVzs7Ozt5Q0FHcEQsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO21DQVMxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7c0NBRzNCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztZQVg1Qiw0TEFBUyxhQUFhLDZCQUFiLGFBQWEscUdBTXBCO1lBR0YsMEtBQVMsT0FBTyw2QkFBUCxPQUFPLHlGQUFrQjtZQUdsQyxtTEFBUyxVQUFVLDZCQUFWLFVBQVUsK0ZBQWlCO1lBaEJ0Qyw2S0E2VkM7Ozs7UUE1VlEsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFHOUIsdUZBQXlDO1lBQ3ZDLE1BQU0sRUFBRSxhQUFhO1lBQ3JCLE9BQU8sRUFBRSx5QkFBeUI7WUFDbEMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDdkIsZ0JBQWdCLEVB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
@@ -1,4 +1,5 @@
1
1
  import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
+ import type { IStatusHistoryPoint } from '../interfaces/index.js';
2
3
  import './internal/uplinternal-miniheading.js';
3
4
  declare global {
4
5
  interface HTMLElementTagNameMap {
@@ -7,7 +8,20 @@ declare global {
7
8
  }
8
9
  export declare class UplStatuspageStatusdetails extends DeesElement {
9
10
  static demo: () => TemplateResult<1>;
11
+ accessor historyData: IStatusHistoryPoint[];
12
+ accessor dataPoints: IStatusHistoryPoint[];
13
+ accessor serviceId: string;
14
+ accessor serviceName: string;
15
+ accessor loading: boolean;
16
+ accessor hoursToShow: number;
10
17
  constructor();
11
18
  static styles: import("@design.estate/dees-element").CSSResult[];
12
19
  render(): TemplateResult;
20
+ private renderBars;
21
+ private getData;
22
+ private findDataPointForTime;
23
+ private getTimeLabel;
24
+ private showTooltip;
25
+ private hideTooltip;
26
+ private handleBarClick;
13
27
  }
@@ -0,0 +1 @@
1
+ export declare const demoFunc: () => import("@design.estate/dees-element").TemplateResult<1>;