@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,90 +1,953 @@
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
35
  import * as plugins from '../plugins.js';
11
- import { DeesElement, property, html, customElement, css, cssManager, } from '@design.estate/dees-element';
12
- let UplStatuspageIncidents = class UplStatuspageIncidents extends DeesElement {
13
- // STATIC
14
- static { this.demo = () => html ` <upl-statuspage-incidents></upl-statuspage-incidents> `; }
15
- constructor() {
16
- super();
36
+ import { DeesElement, property, html, customElement, css, cssManager, unsafeCSS, } from '@design.estate/dees-element';
37
+ import * as sharedStyles from '../styles/shared.styles.js';
38
+ import './internal/uplinternal-miniheading.js';
39
+ import { demoFunc } from './upl-statuspage-incidents.demo.js';
40
+ let UplStatuspageIncidents = (() => {
41
+ let _classDecorators = [customElement('upl-statuspage-incidents')];
42
+ let _classDescriptor;
43
+ let _classExtraInitializers = [];
44
+ let _classThis;
45
+ let _classSuper = DeesElement;
46
+ let _currentIncidents_decorators;
47
+ let _currentIncidents_initializers = [];
48
+ let _currentIncidents_extraInitializers = [];
49
+ let _pastIncidents_decorators;
50
+ let _pastIncidents_initializers = [];
51
+ let _pastIncidents_extraInitializers = [];
52
+ let _whitelabel_decorators;
53
+ let _whitelabel_initializers = [];
54
+ let _whitelabel_extraInitializers = [];
55
+ let _loading_decorators;
56
+ let _loading_initializers = [];
57
+ let _loading_extraInitializers = [];
58
+ let _daysToShow_decorators;
59
+ let _daysToShow_initializers = [];
60
+ let _daysToShow_extraInitializers = [];
61
+ let _subscribedIncidentIds_decorators;
62
+ let _subscribedIncidentIds_initializers = [];
63
+ let _subscribedIncidentIds_extraInitializers = [];
64
+ let _expandedIncidents_decorators;
65
+ let _expandedIncidents_initializers = [];
66
+ let _expandedIncidents_extraInitializers = [];
67
+ let _subscribedIncidents_decorators;
68
+ let _subscribedIncidents_initializers = [];
69
+ let _subscribedIncidents_extraInitializers = [];
70
+ var UplStatuspageIncidents = class extends _classSuper {
71
+ static { _classThis = this; }
72
+ static {
73
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
74
+ _currentIncidents_decorators = [property({
75
+ type: Array,
76
+ })];
77
+ _pastIncidents_decorators = [property({
78
+ type: Array,
79
+ })];
80
+ _whitelabel_decorators = [property({
81
+ type: Boolean,
82
+ })];
83
+ _loading_decorators = [property({
84
+ type: Boolean,
85
+ })];
86
+ _daysToShow_decorators = [property({
87
+ type: Number,
88
+ })];
89
+ _subscribedIncidentIds_decorators = [property({
90
+ type: Array,
91
+ })];
92
+ _expandedIncidents_decorators = [property({
93
+ type: Object,
94
+ state: true,
95
+ })];
96
+ _subscribedIncidents_decorators = [property({
97
+ type: Object,
98
+ state: true,
99
+ })];
100
+ __esDecorate(this, null, _currentIncidents_decorators, { kind: "accessor", name: "currentIncidents", static: false, private: false, access: { has: obj => "currentIncidents" in obj, get: obj => obj.currentIncidents, set: (obj, value) => { obj.currentIncidents = value; } }, metadata: _metadata }, _currentIncidents_initializers, _currentIncidents_extraInitializers);
101
+ __esDecorate(this, null, _pastIncidents_decorators, { kind: "accessor", name: "pastIncidents", static: false, private: false, access: { has: obj => "pastIncidents" in obj, get: obj => obj.pastIncidents, set: (obj, value) => { obj.pastIncidents = value; } }, metadata: _metadata }, _pastIncidents_initializers, _pastIncidents_extraInitializers);
102
+ __esDecorate(this, null, _whitelabel_decorators, { kind: "accessor", name: "whitelabel", static: false, private: false, access: { has: obj => "whitelabel" in obj, get: obj => obj.whitelabel, set: (obj, value) => { obj.whitelabel = value; } }, metadata: _metadata }, _whitelabel_initializers, _whitelabel_extraInitializers);
103
+ __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);
104
+ __esDecorate(this, null, _daysToShow_decorators, { kind: "accessor", name: "daysToShow", static: false, private: false, access: { has: obj => "daysToShow" in obj, get: obj => obj.daysToShow, set: (obj, value) => { obj.daysToShow = value; } }, metadata: _metadata }, _daysToShow_initializers, _daysToShow_extraInitializers);
105
+ __esDecorate(this, null, _subscribedIncidentIds_decorators, { kind: "accessor", name: "subscribedIncidentIds", static: false, private: false, access: { has: obj => "subscribedIncidentIds" in obj, get: obj => obj.subscribedIncidentIds, set: (obj, value) => { obj.subscribedIncidentIds = value; } }, metadata: _metadata }, _subscribedIncidentIds_initializers, _subscribedIncidentIds_extraInitializers);
106
+ __esDecorate(this, null, _expandedIncidents_decorators, { kind: "accessor", name: "expandedIncidents", static: false, private: false, access: { has: obj => "expandedIncidents" in obj, get: obj => obj.expandedIncidents, set: (obj, value) => { obj.expandedIncidents = value; } }, metadata: _metadata }, _expandedIncidents_initializers, _expandedIncidents_extraInitializers);
107
+ __esDecorate(this, null, _subscribedIncidents_decorators, { kind: "accessor", name: "subscribedIncidents", static: false, private: false, access: { has: obj => "subscribedIncidents" in obj, get: obj => obj.subscribedIncidents, set: (obj, value) => { obj.subscribedIncidents = value; } }, metadata: _metadata }, _subscribedIncidents_initializers, _subscribedIncidents_extraInitializers);
108
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
109
+ UplStatuspageIncidents = _classThis = _classDescriptor.value;
110
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
111
+ }
112
+ // STATIC
113
+ static demo = demoFunc;
114
+ #currentIncidents_accessor_storage = __runInitializers(this, _currentIncidents_initializers, []);
17
115
  // INSTANCE
18
- this.currentIncidences = [];
19
- this.pastIncidences = [];
20
- this.whitelabel = false;
21
- }
22
- static { this.styles = [
23
- plugins.domtools.elementBasic.staticStyles,
24
- css `
116
+ get currentIncidents() { return this.#currentIncidents_accessor_storage; }
117
+ set currentIncidents(value) { this.#currentIncidents_accessor_storage = value; }
118
+ #pastIncidents_accessor_storage = (__runInitializers(this, _currentIncidents_extraInitializers), __runInitializers(this, _pastIncidents_initializers, []));
119
+ get pastIncidents() { return this.#pastIncidents_accessor_storage; }
120
+ set pastIncidents(value) { this.#pastIncidents_accessor_storage = value; }
121
+ #whitelabel_accessor_storage = (__runInitializers(this, _pastIncidents_extraInitializers), __runInitializers(this, _whitelabel_initializers, false));
122
+ get whitelabel() { return this.#whitelabel_accessor_storage; }
123
+ set whitelabel(value) { this.#whitelabel_accessor_storage = value; }
124
+ #loading_accessor_storage = (__runInitializers(this, _whitelabel_extraInitializers), __runInitializers(this, _loading_initializers, false));
125
+ get loading() { return this.#loading_accessor_storage; }
126
+ set loading(value) { this.#loading_accessor_storage = value; }
127
+ #daysToShow_accessor_storage = (__runInitializers(this, _loading_extraInitializers), __runInitializers(this, _daysToShow_initializers, 90));
128
+ get daysToShow() { return this.#daysToShow_accessor_storage; }
129
+ set daysToShow(value) { this.#daysToShow_accessor_storage = value; }
130
+ #subscribedIncidentIds_accessor_storage = (__runInitializers(this, _daysToShow_extraInitializers), __runInitializers(this, _subscribedIncidentIds_initializers, []));
131
+ get subscribedIncidentIds() { return this.#subscribedIncidentIds_accessor_storage; }
132
+ set subscribedIncidentIds(value) { this.#subscribedIncidentIds_accessor_storage = value; }
133
+ #expandedIncidents_accessor_storage = (__runInitializers(this, _subscribedIncidentIds_extraInitializers), __runInitializers(this, _expandedIncidents_initializers, new Set()));
134
+ get expandedIncidents() { return this.#expandedIncidents_accessor_storage; }
135
+ set expandedIncidents(value) { this.#expandedIncidents_accessor_storage = value; }
136
+ #subscribedIncidents_accessor_storage = (__runInitializers(this, _expandedIncidents_extraInitializers), __runInitializers(this, _subscribedIncidents_initializers, new Set()));
137
+ get subscribedIncidents() { return this.#subscribedIncidents_accessor_storage; }
138
+ set subscribedIncidents(value) { this.#subscribedIncidents_accessor_storage = value; }
139
+ constructor() {
140
+ super();
141
+ __runInitializers(this, _subscribedIncidents_extraInitializers);
142
+ }
143
+ async connectedCallback() {
144
+ await super.connectedCallback();
145
+ // Initialize subscribed incidents from the property
146
+ if (this.subscribedIncidentIds.length > 0) {
147
+ this.subscribedIncidents = new Set(this.subscribedIncidentIds);
148
+ }
149
+ }
150
+ updated(changedProperties) {
151
+ super.updated(changedProperties);
152
+ if (changedProperties.has('subscribedIncidentIds')) {
153
+ this.subscribedIncidents = new Set(this.subscribedIncidentIds);
154
+ }
155
+ }
156
+ static styles = [
157
+ plugins.domtools.elementBasic.staticStyles,
158
+ sharedStyles.commonStyles,
159
+ css `
25
160
  :host {
26
161
  display: block;
27
- background: ${cssManager.bdTheme('#eeeeeb', '#222222')};
28
- font-family: Inter;
29
- color: ${cssManager.bdTheme('#333333', '#ffffff')};
162
+ background: transparent;
163
+ font-family: ${unsafeCSS(sharedStyles.fonts.base)};
164
+ color: ${sharedStyles.colors.text.primary};
30
165
  }
31
166
 
32
- .mainbox {
33
- max-width: 900px;
34
- margin: auto;
167
+ .container {
168
+ max-width: 1200px;
169
+ margin: 0 auto;
170
+ padding: 0 ${unsafeCSS(sharedStyles.spacing.lg)} ${unsafeCSS(sharedStyles.spacing.lg)} ${unsafeCSS(sharedStyles.spacing.lg)};
35
171
  }
36
172
 
37
173
  .noIncidentBox {
38
- background: ${cssManager.bdTheme('#ffffff', '#333333')};;
39
- padding: 10px;
40
- margin-bottom: 15px;
41
- border-radius: 3px;
174
+ background: ${sharedStyles.colors.background.card};
175
+ padding: ${unsafeCSS(sharedStyles.spacing.xl)};
176
+ margin-bottom: ${unsafeCSS(sharedStyles.spacing.lg)};
177
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.lg)};
178
+ border: 1px solid ${sharedStyles.colors.border.default};
179
+ text-align: center;
180
+ color: ${sharedStyles.colors.text.secondary};
181
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.sm)};
182
+ animation: fadeInUp 0.4s ${unsafeCSS(sharedStyles.easings.default)} both;
183
+ }
184
+
185
+ /* Staggered entrance animations */
186
+ .incident-card {
187
+ background: ${sharedStyles.colors.background.card};
188
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.lg)};
189
+ margin-bottom: ${unsafeCSS(sharedStyles.spacing.lg)};
190
+ overflow: hidden;
191
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.sm)};
192
+ border: 1px solid ${sharedStyles.colors.border.default};
193
+ transition: all ${unsafeCSS(sharedStyles.durations.normal)} ${unsafeCSS(sharedStyles.easings.default)};
194
+ animation: fadeInUp 0.4s ${unsafeCSS(sharedStyles.easings.default)} both;
195
+ }
196
+
197
+ .incident-card:nth-child(1) { animation-delay: 0ms; }
198
+ .incident-card:nth-child(2) { animation-delay: 50ms; }
199
+ .incident-card:nth-child(3) { animation-delay: 100ms; }
200
+ .incident-card:nth-child(4) { animation-delay: 150ms; }
201
+ .incident-card:nth-child(5) { animation-delay: 200ms; }
202
+
203
+ .incident-card:hover {
204
+ transform: translateY(-2px);
205
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.md)};
206
+ border-color: ${sharedStyles.colors.border.muted};
207
+ }
208
+
209
+ .incident-card.expanded {
210
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.lg)};
211
+ }
212
+
213
+ /* Active incident pulse effect */
214
+ .incident-card.active-incident {
215
+ animation: fadeInUp 0.4s ${unsafeCSS(sharedStyles.easings.default)} both,
216
+ incident-pulse 3s ease-in-out infinite;
217
+ }
218
+
219
+ @keyframes fadeInUp {
220
+ from {
221
+ opacity: 0;
222
+ transform: translateY(16px);
223
+ }
224
+ to {
225
+ opacity: 1;
226
+ transform: translateY(0);
227
+ }
228
+ }
229
+
230
+ @keyframes incident-pulse {
231
+ 0%, 100% {
232
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.sm)};
233
+ }
234
+ 50% {
235
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.md)},
236
+ 0 0 0 2px ${cssManager.bdTheme('rgba(239, 68, 68, 0.15)', 'rgba(248, 113, 113, 0.2)')};
237
+ }
238
+ }
239
+
240
+ .incident-header {
241
+ padding: ${unsafeCSS(sharedStyles.spacing.lg)} ${unsafeCSS(sharedStyles.spacing.xl)};
242
+ border-left: 4px solid;
243
+ display: flex;
244
+ align-items: start;
245
+ justify-content: space-between;
246
+ gap: ${unsafeCSS(sharedStyles.spacing.md)};
247
+ cursor: pointer;
248
+ transition: background-color ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
249
+ position: relative;
250
+ }
251
+
252
+ .incident-header:hover {
253
+ background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.02)', 'rgba(255, 255, 255, 0.02)')};
254
+ }
255
+
256
+ .incident-header.critical {
257
+ border-left-color: ${sharedStyles.colors.status.major};
258
+ }
259
+
260
+ .incident-header.major {
261
+ border-left-color: ${sharedStyles.colors.status.partial};
262
+ }
263
+
264
+ .incident-header.minor {
265
+ border-left-color: ${sharedStyles.colors.status.degraded};
266
+ }
267
+
268
+ .incident-header.maintenance {
269
+ border-left-color: ${sharedStyles.colors.status.maintenance};
270
+ }
271
+
272
+ .incident-title {
273
+ font-size: 17px;
274
+ font-weight: 600;
275
+ margin: 0;
276
+ line-height: 1.4;
277
+ letter-spacing: -0.01em;
278
+ }
279
+
280
+ .incident-meta {
281
+ display: flex;
282
+ gap: ${unsafeCSS(sharedStyles.spacing.lg)};
283
+ margin-top: ${unsafeCSS(sharedStyles.spacing.sm)};
284
+ font-size: 13px;
285
+ color: ${sharedStyles.colors.text.secondary};
286
+ flex-wrap: wrap;
287
+ }
288
+
289
+ .incident-meta span {
290
+ display: flex;
291
+ align-items: center;
292
+ gap: 4px;
293
+ }
294
+
295
+ .incident-status {
296
+ display: inline-flex;
297
+ align-items: center;
298
+ gap: 6px;
299
+ padding: 6px 12px;
300
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.full)};
301
+ font-size: 11px;
302
+ font-weight: 600;
303
+ text-transform: uppercase;
304
+ letter-spacing: 0.04em;
305
+ flex-shrink: 0;
306
+ transition: all ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
307
+ }
308
+
309
+ .incident-status.investigating {
310
+ background: ${cssManager.bdTheme('#fef3c7', '#78350f')};
311
+ color: ${cssManager.bdTheme('#92400e', '#fbbf24')};
312
+ }
313
+
314
+ .incident-status.identified {
315
+ background: ${cssManager.bdTheme('#e9d5ff', '#581c87')};
316
+ color: ${cssManager.bdTheme('#6b21a8', '#d8b4fe')};
317
+ }
318
+
319
+ .incident-status.monitoring {
320
+ background: ${cssManager.bdTheme('#dbeafe', '#1e3a8a')};
321
+ color: ${cssManager.bdTheme('#1e40af', '#93c5fd')};
322
+ }
323
+
324
+ .incident-status.resolved {
325
+ background: ${cssManager.bdTheme('#d1fae5', '#064e3b')};
326
+ color: ${cssManager.bdTheme('#047857', '#6ee7b7')};
327
+ }
328
+
329
+ .incident-status.postmortem {
330
+ background: ${cssManager.bdTheme('#e5e7eb', '#374151')};
331
+ color: ${cssManager.bdTheme('#4b5563', '#d1d5db')};
332
+ }
333
+
334
+ /* Pulse for investigating status */
335
+ .incident-status.investigating .status-dot {
336
+ animation: status-pulse 1.5s ease-in-out infinite;
337
+ }
338
+
339
+ @keyframes status-pulse {
340
+ 0%, 100% { opacity: 1; transform: scale(1); }
341
+ 50% { opacity: 0.6; transform: scale(1.2); }
342
+ }
343
+
344
+ .incident-body {
345
+ padding: 0 ${unsafeCSS(sharedStyles.spacing.xl)} ${unsafeCSS(sharedStyles.spacing.xl)} ${unsafeCSS(sharedStyles.spacing.xl)};
346
+ animation: slideDown 0.3s ${unsafeCSS(sharedStyles.easings.default)};
347
+ }
348
+
349
+ @keyframes slideDown {
350
+ from {
351
+ opacity: 0;
352
+ transform: translateY(-8px);
353
+ }
354
+ to {
355
+ opacity: 1;
356
+ transform: translateY(0);
357
+ }
358
+ }
359
+
360
+ .incident-impact {
361
+ margin: ${unsafeCSS(sharedStyles.spacing.md)} 0;
362
+ padding: ${unsafeCSS(sharedStyles.spacing.md)} ${unsafeCSS(sharedStyles.spacing.lg)};
363
+ background: ${sharedStyles.colors.background.secondary};
364
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.base)};
365
+ font-size: 14px;
366
+ line-height: 1.6;
367
+ border-left: 3px solid ${sharedStyles.colors.border.muted};
368
+ }
369
+
370
+ .affected-services {
371
+ margin-top: ${unsafeCSS(sharedStyles.spacing.lg)};
372
+ }
373
+
374
+ .affected-services-title {
375
+ font-size: 12px;
376
+ font-weight: 600;
377
+ margin-bottom: ${unsafeCSS(sharedStyles.spacing.sm)};
378
+ color: ${sharedStyles.colors.text.secondary};
379
+ text-transform: uppercase;
380
+ letter-spacing: 0.04em;
381
+ }
382
+
383
+ .service-tag {
384
+ display: inline-block;
385
+ padding: 4px 10px;
386
+ margin: 2px;
387
+ background: ${sharedStyles.colors.background.muted};
388
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.sm)};
389
+ font-size: 12px;
390
+ color: ${sharedStyles.colors.text.secondary};
391
+ transition: all ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
392
+ }
393
+
394
+ .service-tag:hover {
395
+ background: ${sharedStyles.colors.background.secondary};
396
+ color: ${sharedStyles.colors.text.primary};
397
+ }
398
+
399
+ /* Timeline visualization for updates */
400
+ .incident-updates {
401
+ margin-top: ${unsafeCSS(sharedStyles.spacing.xl)};
402
+ border-top: 1px solid ${sharedStyles.colors.border.default};
403
+ padding-top: ${unsafeCSS(sharedStyles.spacing.lg)};
404
+ }
405
+
406
+ .updates-title {
407
+ font-size: 12px;
408
+ font-weight: 600;
409
+ text-transform: uppercase;
410
+ letter-spacing: 0.04em;
411
+ margin: 0 0 ${unsafeCSS(sharedStyles.spacing.lg)} 0;
412
+ color: ${sharedStyles.colors.text.secondary};
413
+ }
414
+
415
+ .timeline {
416
+ position: relative;
417
+ padding-left: 24px;
418
+ }
419
+
420
+ /* Vertical connector line */
421
+ .timeline::before {
422
+ content: '';
423
+ position: absolute;
424
+ left: 5px;
425
+ top: 8px;
426
+ bottom: 8px;
427
+ width: 2px;
428
+ background: ${cssManager.bdTheme('linear-gradient(to bottom, #e5e7eb 0%, #d1d5db 50%, #e5e7eb 100%)', 'linear-gradient(to bottom, #27272a 0%, #3f3f46 50%, #27272a 100%)')};
429
+ border-radius: 1px;
430
+ }
431
+
432
+ .update-item {
433
+ position: relative;
434
+ padding-left: ${unsafeCSS(sharedStyles.spacing.lg)};
435
+ padding-bottom: ${unsafeCSS(sharedStyles.spacing.lg)};
436
+ animation: fadeInUp 0.3s ${unsafeCSS(sharedStyles.easings.default)} both;
437
+ }
438
+
439
+ .update-item:last-child {
440
+ padding-bottom: 0;
441
+ }
442
+
443
+ /* Timeline dot */
444
+ .update-item::before {
445
+ content: '';
446
+ position: absolute;
447
+ left: -22px;
448
+ top: 4px;
449
+ width: 12px;
450
+ height: 12px;
451
+ border-radius: 50%;
452
+ background: ${sharedStyles.colors.background.card};
453
+ border: 2px solid ${sharedStyles.colors.border.muted};
454
+ z-index: 1;
455
+ transition: all ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
456
+ }
457
+
458
+ .update-item:first-child::before {
459
+ border-color: ${sharedStyles.colors.status.operational};
460
+ background: ${sharedStyles.colors.status.operational};
461
+ box-shadow: 0 0 0 3px ${cssManager.bdTheme('rgba(22, 163, 74, 0.15)', 'rgba(34, 197, 94, 0.2)')};
462
+ }
463
+
464
+ .update-item:hover::before {
465
+ transform: scale(1.2);
466
+ border-color: ${sharedStyles.colors.text.secondary};
467
+ }
468
+
469
+ .update-time {
470
+ font-size: 11px;
471
+ color: ${sharedStyles.colors.text.muted};
472
+ margin-bottom: 4px;
473
+ font-family: ${unsafeCSS(sharedStyles.fonts.mono)};
474
+ display: flex;
475
+ align-items: center;
476
+ gap: 8px;
477
+ }
478
+
479
+ .update-status-badge {
480
+ display: inline-flex;
481
+ padding: 2px 6px;
482
+ border-radius: 4px;
483
+ font-size: 10px;
484
+ font-weight: 600;
485
+ text-transform: uppercase;
486
+ letter-spacing: 0.02em;
487
+ background: ${sharedStyles.colors.background.muted};
488
+ color: ${sharedStyles.colors.text.secondary};
489
+ }
490
+
491
+ .update-message {
492
+ font-size: 14px;
493
+ line-height: 1.6;
494
+ color: ${sharedStyles.colors.text.primary};
495
+ }
496
+
497
+ .update-author {
498
+ font-size: 12px;
499
+ color: ${sharedStyles.colors.text.muted};
500
+ margin-top: 4px;
501
+ display: flex;
502
+ align-items: center;
503
+ gap: 4px;
504
+ }
505
+
506
+ .loading-skeleton {
507
+ height: 140px;
508
+ background: ${cssManager.bdTheme('linear-gradient(90deg, #f3f4f6 25%, #e5e7eb 50%, #f3f4f6 75%)', 'linear-gradient(90deg, #1f1f1f 25%, #262626 50%, #1f1f1f 75%)')};
509
+ background-size: 200% 100%;
510
+ animation: shimmer 1.5s infinite;
511
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.lg)};
512
+ margin-bottom: ${unsafeCSS(sharedStyles.spacing.lg)};
513
+ }
514
+
515
+ @keyframes shimmer {
516
+ 0% { background-position: 200% 0; }
517
+ 100% { background-position: -200% 0; }
518
+ }
519
+
520
+ .show-more {
521
+ text-align: center;
522
+ margin-top: ${unsafeCSS(sharedStyles.spacing.xl)};
523
+ }
524
+
525
+ .show-more-button {
526
+ display: inline-flex;
527
+ align-items: center;
528
+ justify-content: center;
529
+ gap: 8px;
530
+ padding: 10px 20px;
531
+ background: transparent;
532
+ border: 1px solid ${sharedStyles.colors.border.default};
533
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.base)};
534
+ cursor: pointer;
535
+ font-size: 14px;
536
+ font-weight: 500;
537
+ transition: all ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
538
+ color: ${sharedStyles.colors.text.primary};
539
+ font-family: ${unsafeCSS(sharedStyles.fonts.base)};
540
+ }
541
+
542
+ .show-more-button:hover {
543
+ background: ${sharedStyles.colors.background.secondary};
544
+ border-color: ${sharedStyles.colors.border.muted};
545
+ transform: translateY(-2px);
546
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.sm)};
547
+ }
548
+
549
+ .show-more-button:active {
550
+ transform: translateY(0);
551
+ }
552
+
553
+ .incident-actions {
554
+ display: flex;
555
+ gap: ${unsafeCSS(sharedStyles.spacing.md)};
556
+ align-items: center;
557
+ margin-top: ${unsafeCSS(sharedStyles.spacing.lg)};
558
+ padding-top: ${unsafeCSS(sharedStyles.spacing.lg)};
559
+ border-top: 1px solid ${sharedStyles.colors.border.default};
560
+ }
561
+
562
+ .subscribe-button {
563
+ display: inline-flex;
564
+ align-items: center;
565
+ gap: 6px;
566
+ padding: 8px 14px;
567
+ background: transparent;
568
+ border: 1px solid ${sharedStyles.colors.border.default};
569
+ border-radius: ${unsafeCSS(sharedStyles.borderRadius.base)};
570
+ cursor: pointer;
571
+ font-size: 13px;
572
+ font-weight: 500;
573
+ transition: all ${unsafeCSS(sharedStyles.durations.fast)} ${unsafeCSS(sharedStyles.easings.default)};
574
+ color: ${sharedStyles.colors.text.primary};
575
+ font-family: ${unsafeCSS(sharedStyles.fonts.base)};
576
+ }
577
+
578
+ .subscribe-button:hover {
579
+ background: ${sharedStyles.colors.background.secondary};
580
+ border-color: ${sharedStyles.colors.border.muted};
581
+ transform: translateY(-1px);
582
+ }
583
+
584
+ .subscribe-button.subscribed {
585
+ background: ${cssManager.bdTheme('#f0fdf4', '#064e3b')};
586
+ border-color: ${cssManager.bdTheme('#86efac', '#047857')};
587
+ color: ${cssManager.bdTheme('#047857', '#86efac')};
588
+ }
589
+
590
+ .subscribe-button.subscribed:hover {
591
+ background: ${cssManager.bdTheme('#dcfce7', '#065f46')};
592
+ }
593
+
594
+ .collapsed-hint {
595
+ font-size: 12px;
596
+ color: ${sharedStyles.colors.text.secondary};
597
+ text-align: center;
598
+ margin-top: ${unsafeCSS(sharedStyles.spacing.md)};
599
+ opacity: 0.8;
600
+ }
601
+
602
+ /* Expand icon animation */
603
+ .expand-icon {
604
+ transition: transform ${unsafeCSS(sharedStyles.durations.normal)} ${unsafeCSS(sharedStyles.easings.default)};
605
+ }
606
+
607
+ .expand-icon.rotated {
608
+ transform: rotate(180deg);
609
+ }
610
+
611
+ @media (max-width: 640px) {
612
+ .container {
613
+ padding: 0 ${unsafeCSS(sharedStyles.spacing.md)} ${unsafeCSS(sharedStyles.spacing.md)} ${unsafeCSS(sharedStyles.spacing.md)};
614
+ }
615
+
616
+ .incident-header {
617
+ padding: ${unsafeCSS(sharedStyles.spacing.md)};
618
+ }
619
+
620
+ .incident-body {
621
+ padding: 0 ${unsafeCSS(sharedStyles.spacing.md)} ${unsafeCSS(sharedStyles.spacing.md)} ${unsafeCSS(sharedStyles.spacing.md)};
622
+ }
623
+
624
+ .incident-meta {
625
+ flex-direction: column;
626
+ gap: ${unsafeCSS(sharedStyles.spacing.xs)};
627
+ }
628
+
629
+ .timeline {
630
+ padding-left: 20px;
631
+ }
632
+
633
+ .timeline::before {
634
+ left: 4px;
635
+ }
636
+
637
+ .update-item::before {
638
+ left: -18px;
639
+ width: 10px;
640
+ height: 10px;
641
+ }
42
642
  }
43
643
  `,
44
- ]; }
45
- render() {
46
- return html `
47
- <style></style>
48
- <div class="mainbox">
49
- <uplinternal-miniheading> Current Incidents </uplinternal-miniheading>
50
- ${this.currentIncidences.length
51
- ? html ``
52
- : html ` <div class="noIncidentBox">No incidents ongoing.</div> `}
53
- <uplinternal-miniheading> Past Incidents </uplinternal-miniheading>
54
- ${this.pastIncidences.length
55
- ? html ``
56
- : html ` <div class="noIncidentBox">No past incidents in the last 90 days.</div> `}
644
+ ];
645
+ render() {
646
+ return html `
647
+ <div class="container">
648
+ <uplinternal-miniheading>Current Incidents</uplinternal-miniheading>
649
+ ${this.loading ? html `
650
+ <div class="loading-skeleton"></div>
651
+ ` : this.currentIncidents.length ? html `
652
+ ${this.currentIncidents.map(incident => this.renderIncident(incident, true))}
653
+ ` :
654
+ html `<div class="noIncidentBox">No incidents ongoing.</div>`}
655
+
656
+ <uplinternal-miniheading>Past Incidents</uplinternal-miniheading>
657
+ ${this.loading ? html `
658
+ <div class="loading-skeleton"></div>
659
+ <div class="loading-skeleton"></div>
660
+ ` : this.pastIncidents.length ?
661
+ this.pastIncidents.slice(0, 5).map(incident => this.renderIncident(incident, false)) :
662
+ html `<div class="noIncidentBox">No past incidents in the last ${this.daysToShow} days.</div>`}
663
+
664
+ ${this.pastIncidents.length > 5 && !this.loading ? html `
665
+ <div class="show-more">
666
+ <button class="show-more-button" @click=${this.handleShowMore}>
667
+ Show ${this.pastIncidents.length - 5} more incidents
668
+ </button>
669
+ </div>
670
+ ` : ''}
57
671
  </div>
58
672
  `;
59
- }
60
- dispatchReportNewIncident() {
61
- this.dispatchEvent(new CustomEvent('reportNewIncident', {}));
62
- }
63
- dispatchStatusSubscribe() {
64
- this.dispatchEvent(new CustomEvent('statusSubscribe', {}));
65
- }
66
- };
67
- __decorate([
68
- property({
69
- type: Array,
70
- }),
71
- __metadata("design:type", Array)
72
- ], UplStatuspageIncidents.prototype, "currentIncidences", void 0);
73
- __decorate([
74
- property({
75
- type: Array,
76
- }),
77
- __metadata("design:type", Array)
78
- ], UplStatuspageIncidents.prototype, "pastIncidences", void 0);
79
- __decorate([
80
- property({
81
- type: Boolean,
82
- }),
83
- __metadata("design:type", Object)
84
- ], UplStatuspageIncidents.prototype, "whitelabel", void 0);
85
- UplStatuspageIncidents = __decorate([
86
- customElement('upl-statuspage-incidents'),
87
- __metadata("design:paramtypes", [])
88
- ], UplStatuspageIncidents);
673
+ }
674
+ renderIncident(incident, isCurrent) {
675
+ const latestUpdate = incident.updates[incident.updates.length - 1];
676
+ const duration = incident.endTime ?
677
+ this.formatDuration(incident.endTime - incident.startTime) :
678
+ this.formatDuration(Date.now() - incident.startTime);
679
+ const isActive = isCurrent && latestUpdate?.status !== 'resolved';
680
+ return html `
681
+ <div class="incident-card ${this.expandedIncidents.has(incident.id) ? 'expanded' : ''} ${isActive ? 'active-incident' : ''}">
682
+ <div class="incident-header ${incident.severity}" @click=${() => this.toggleIncident(incident.id)}>
683
+ <div>
684
+ <h3 class="incident-title">${incident.title}</h3>
685
+ <div class="incident-meta">
686
+ <span>Started: ${this.formatDate(incident.startTime)}</span>
687
+ <span>Duration: ${duration}</span>
688
+ ${incident.endTime ? html `
689
+ <span>Ended: ${this.formatDate(incident.endTime)}</span>
690
+ ` : ''}
691
+ </div>
692
+ ${!this.expandedIncidents.has(incident.id) ? html `
693
+ <div style="
694
+ margin-top: ${unsafeCSS(sharedStyles.spacing.sm)};
695
+ font-size: 13px;
696
+ color: ${sharedStyles.colors.text.secondary};
697
+ display: flex;
698
+ align-items: center;
699
+ gap: ${unsafeCSS(sharedStyles.spacing.md)};
700
+ ">
701
+ ${incident.impact ? html `
702
+ <span style="
703
+ overflow: hidden;
704
+ text-overflow: ellipsis;
705
+ white-space: nowrap;
706
+ max-width: 500px;
707
+ ">${incident.impact}</span>
708
+ ` : ''}
709
+ <span style="
710
+ font-size: 12px;
711
+ color: ${cssManager.bdTheme('#9ca3af', '#71717a')};
712
+ ">
713
+ ${incident.updates.length} update${incident.updates.length !== 1 ? 's' : ''}
714
+ </span>
715
+ </div>
716
+ ` : ''}
717
+ </div>
718
+ <div style="display: flex; align-items: center; gap: ${unsafeCSS(sharedStyles.spacing.md)};">
719
+ <div class="incident-status ${latestUpdate.status}">
720
+ ${this.getStatusIcon(latestUpdate.status)}
721
+ ${latestUpdate.status.replace(/_/g, ' ')}
722
+ </div>
723
+ <div class="expand-icon" style="
724
+ font-size: 10px;
725
+ color: ${cssManager.bdTheme('#6b7280', '#a1a1aa')};
726
+ transition: transform 0.2s ease;
727
+ display: flex;
728
+ align-items: center;
729
+ justify-content: center;
730
+ width: 24px;
731
+ height: 24px;
732
+ border-radius: 4px;
733
+ background: ${cssManager.bdTheme('#f3f4f6', '#27272a')};
734
+ ${this.expandedIncidents.has(incident.id) ? 'transform: rotate(180deg);' : ''}
735
+ ">
736
+
737
+ </div>
738
+ </div>
739
+ </div>
740
+
741
+ ${this.expandedIncidents.has(incident.id) ? html `
742
+ <div class="incident-body">
743
+ <div class="incident-impact">
744
+ <strong>Impact:</strong> ${incident.impact}
745
+ </div>
746
+
747
+ ${incident.affectedServices.length > 0 ? html `
748
+ <div class="affected-services">
749
+ <div class="affected-services-title">Affected Services:</div>
750
+ ${incident.affectedServices.map(service => html `
751
+ <span class="service-tag">${service}</span>
752
+ `)}
753
+ </div>
754
+ ` : ''}
755
+
756
+ ${incident.updates.length > 0 ? html `
757
+ <div class="incident-updates">
758
+ <h4 class="updates-title">Updates</h4>
759
+ <div class="timeline">
760
+ ${incident.updates.slice(-3).reverse().map((update, index) => this.renderUpdate(update, index))}
761
+ </div>
762
+ </div>
763
+ ` : ''}
764
+
765
+ ${incident.rootCause && isCurrent === false ? html `
766
+ <div class="incident-impact" style="margin-top: 12px;">
767
+ <strong>Root Cause:</strong> ${incident.rootCause}
768
+ </div>
769
+ ` : ''}
770
+
771
+ ${incident.resolution && isCurrent === false ? html `
772
+ <div class="incident-impact" style="margin-top: 12px;">
773
+ <strong>Resolution:</strong> ${incident.resolution}
774
+ </div>
775
+ ` : ''}
776
+
777
+ <div class="incident-actions">
778
+ <button
779
+ class="subscribe-button ${this.isSubscribedToIncident(incident.id) ? 'subscribed' : ''}"
780
+ @click=${(e) => {
781
+ e.stopPropagation();
782
+ this.handleIncidentSubscribe(incident);
783
+ }}
784
+ >
785
+ ${this.isSubscribedToIncident(incident.id) ? html `
786
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
787
+ <path d="M11.6667 3.5L5.25 9.91667L2.33334 7" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
788
+ </svg>
789
+ Subscribed to updates
790
+ ` : html `
791
+ <svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
792
+ <path d="M10.5 5.25V8.75C10.5 9.34674 10.2629 9.91903 9.84099 10.341C9.41903 10.7629 8.84674 11 8.25 11L3.75 11C3.15326 11 2.58097 10.7629 2.15901 10.341C1.73705 9.91903 1.5 9.34674 1.5 8.75V4.25C1.5 3.65326 1.73705 3.08097 2.15901 2.65901C2.58097 2.23705 3.15326 2 3.75 2H7.25" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
793
+ <path d="M9 1.5H12.5M12.5 1.5V5M12.5 1.5L6 8" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
794
+ </svg>
795
+ Subscribe to updates
796
+ `}
797
+ </button>
798
+ ${isCurrent ? html `
799
+ <span style="
800
+ font-size: 12px;
801
+ color: ${cssManager.bdTheme('#6b7280', '#a1a1aa')};
802
+ ">Get notified when this incident is updated or resolved</span>
803
+ ` : ''}
804
+ </div>
805
+ </div>
806
+ ` : ''}
807
+ </div>
808
+ `;
809
+ }
810
+ renderUpdate(update, index = 0) {
811
+ return html `
812
+ <div class="update-item" style="animation-delay: ${index * 50}ms">
813
+ <div class="update-time">
814
+ ${this.formatDate(update.timestamp)}
815
+ ${update.status ? html `<span class="update-status-badge">${update.status}</span>` : ''}
816
+ </div>
817
+ <div class="update-message">${update.message}</div>
818
+ ${update.author ? html `
819
+ <div class="update-author">
820
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
821
+ <path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path>
822
+ <circle cx="12" cy="7" r="4"></circle>
823
+ </svg>
824
+ ${update.author}
825
+ </div>
826
+ ` : ''}
827
+ </div>
828
+ `;
829
+ }
830
+ getStatusIcon(status) {
831
+ return html `<span class="status-dot" style="
832
+ display: inline-block;
833
+ width: 6px;
834
+ height: 6px;
835
+ border-radius: 50%;
836
+ background: ${status === 'resolved' ? sharedStyles.colors.status.operational :
837
+ status === 'monitoring' ? sharedStyles.colors.status.maintenance :
838
+ status === 'identified' ? sharedStyles.colors.status.degraded :
839
+ sharedStyles.colors.status.partial};
840
+ "></span>`;
841
+ }
842
+ formatDate(timestamp) {
843
+ const date = new Date(timestamp);
844
+ const now = Date.now();
845
+ const diff = now - timestamp;
846
+ // Less than 1 hour ago
847
+ if (diff < 60 * 60 * 1000) {
848
+ const minutes = Math.floor(diff / (60 * 1000));
849
+ return `${minutes} minute${minutes !== 1 ? 's' : ''} ago`;
850
+ }
851
+ // Less than 24 hours ago
852
+ if (diff < 24 * 60 * 60 * 1000) {
853
+ const hours = Math.floor(diff / (60 * 60 * 1000));
854
+ return `${hours} hour${hours !== 1 ? 's' : ''} ago`;
855
+ }
856
+ // Less than 7 days ago
857
+ if (diff < 7 * 24 * 60 * 60 * 1000) {
858
+ const days = Math.floor(diff / (24 * 60 * 60 * 1000));
859
+ return `${days} day${days !== 1 ? 's' : ''} ago`;
860
+ }
861
+ // Default to full date
862
+ return date.toLocaleDateString('en-US', {
863
+ month: 'short',
864
+ day: 'numeric',
865
+ year: date.getFullYear() !== new Date().getFullYear() ? 'numeric' : undefined
866
+ });
867
+ }
868
+ formatDuration(milliseconds) {
869
+ const minutes = Math.floor(milliseconds / (60 * 1000));
870
+ const hours = Math.floor(minutes / 60);
871
+ const days = Math.floor(hours / 24);
872
+ if (days > 0) {
873
+ return `${days}d ${hours % 24}h`;
874
+ }
875
+ else if (hours > 0) {
876
+ return `${hours}h ${minutes % 60}m`;
877
+ }
878
+ else {
879
+ return `${minutes}m`;
880
+ }
881
+ }
882
+ toggleIncident(incidentId) {
883
+ const newExpanded = new Set(this.expandedIncidents);
884
+ if (newExpanded.has(incidentId)) {
885
+ newExpanded.delete(incidentId);
886
+ }
887
+ else {
888
+ newExpanded.add(incidentId);
889
+ }
890
+ this.expandedIncidents = newExpanded;
891
+ }
892
+ handleIncidentClick(incident) {
893
+ this.dispatchEvent(new CustomEvent('incidentClick', {
894
+ detail: { incident },
895
+ bubbles: true,
896
+ composed: true
897
+ }));
898
+ }
899
+ handleShowMore() {
900
+ // This would typically load more incidents or navigate to a full list
901
+ console.log('Show more incidents');
902
+ }
903
+ isSubscribedToIncident(incidentId) {
904
+ return this.subscribedIncidents.has(incidentId);
905
+ }
906
+ handleIncidentSubscribe(incident) {
907
+ const newSubscribed = new Set(this.subscribedIncidents);
908
+ if (newSubscribed.has(incident.id)) {
909
+ newSubscribed.delete(incident.id);
910
+ this.dispatchEvent(new CustomEvent('incidentUnsubscribe', {
911
+ detail: {
912
+ incident,
913
+ incidentId: incident.id
914
+ },
915
+ bubbles: true,
916
+ composed: true
917
+ }));
918
+ }
919
+ else {
920
+ newSubscribed.add(incident.id);
921
+ this.dispatchEvent(new CustomEvent('incidentSubscribe', {
922
+ detail: {
923
+ incident,
924
+ incidentId: incident.id,
925
+ incidentTitle: incident.title,
926
+ affectedServices: incident.affectedServices
927
+ },
928
+ bubbles: true,
929
+ composed: true
930
+ }));
931
+ }
932
+ this.subscribedIncidents = newSubscribed;
933
+ }
934
+ dispatchReportNewIncident() {
935
+ this.dispatchEvent(new CustomEvent('reportNewIncident', {
936
+ bubbles: true,
937
+ composed: true
938
+ }));
939
+ }
940
+ dispatchStatusSubscribe() {
941
+ this.dispatchEvent(new CustomEvent('statusSubscribe', {
942
+ bubbles: true,
943
+ composed: true
944
+ }));
945
+ }
946
+ static {
947
+ __runInitializers(_classThis, _classExtraInitializers);
948
+ }
949
+ };
950
+ return UplStatuspageIncidents = _classThis;
951
+ })();
89
952
  export { UplStatuspageIncidents };
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsLXN0YXR1c3BhZ2UtaW5jaWRlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL3VwbC1zdGF0dXNwYWdlLWluY2lkZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsV0FBVyxFQUNYLFFBQVEsRUFDUixJQUFJLEVBQ0osYUFBYSxFQUViLEdBQUcsRUFDSCxVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQVM5QixJQUFNLHNCQUFzQixHQUE1QixNQUFNLHNCQUF1QixTQUFRLFdBQVc7SUFDckQsU0FBUzthQUNLLFNBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUEseURBQXlELEFBQXRFLENBQXVFO0lBa0J6RjtRQUNFLEtBQUssRUFBRSxDQUFDO1FBakJWLFdBQVc7UUFJSixzQkFBaUIsR0FBMkMsRUFBRSxDQUFDO1FBSy9ELG1CQUFjLEdBQTJDLEVBQUUsQ0FBQztRQUs1RCxlQUFVLEdBQUcsS0FBSyxDQUFDO0lBSTFCLENBQUM7YUFFYSxXQUFNLEdBQUc7UUFDckIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsWUFBWTtRQUMxQyxHQUFHLENBQUE7OztzQkFHZSxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7O2lCQUU3QyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUM7Ozs7Ozs7Ozt1QkFTbEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7OztLQUsxRDtLQUNGLEFBdEJtQixDQXNCbEI7SUFFSyxNQUFNO1FBQ1gsT0FBTyxJQUFJLENBQUE7Ozs7VUFJTCxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTTtZQUM3QixDQUFDLENBQUMsSUFBSSxDQUFBLEVBQUU7WUFDUixDQUFDLENBQUMsSUFBSSxDQUFBLDBEQUEwRDs7VUFFaEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNO1lBQzFCLENBQUMsQ0FBQyxJQUFJLENBQUEsRUFBRTtZQUNSLENBQUMsQ0FBQyxJQUFJLENBQUEsMkVBQTJFOztLQUV0RixDQUFDO0lBQ0osQ0FBQztJQUVNLHlCQUF5QjtRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksV0FBVyxDQUFDLG1CQUFtQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVNLHVCQUF1QjtRQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksV0FBVyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQzs7QUE5RE07SUFITixRQUFRLENBQUM7UUFDUixJQUFJLEVBQUUsS0FBSztLQUNaLENBQUM7O2lFQUNvRTtBQUsvRDtJQUhOLFFBQVEsQ0FBQztRQUNSLElBQUksRUFBRSxLQUFLO0tBQ1osQ0FBQzs7OERBQ2lFO0FBSzVEO0lBSE4sUUFBUSxDQUFDO1FBQ1IsSUFBSSxFQUFFLE9BQU87S0FDZCxDQUFDOzswREFDd0I7QUFsQmYsc0JBQXNCO0lBRGxDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQzs7R0FDN0Isc0JBQXNCLENBdUVsQyJ9
953
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsLXN0YXR1c3BhZ2UtaW5jaWRlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL3VwbC1zdGF0dXNwYWdlLWluY2lkZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUNMLFdBQVcsRUFDWCxRQUFRLEVBQ1IsSUFBSSxFQUNKLGFBQWEsRUFFYixHQUFHLEVBQ0gsVUFBVSxFQUNWLFNBQVMsR0FDVixNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8sS0FBSyxZQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7SUFTakQsc0JBQXNCOzRCQURsQyxhQUFhLENBQUMsMEJBQTBCLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQ0FBbkIsU0FBUSxXQUFXOzs7OzRDQUtwRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLEtBQUs7aUJBQ1osQ0FBQzt5Q0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLEtBQUs7aUJBQ1osQ0FBQztzQ0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE9BQU87aUJBQ2QsQ0FBQzttQ0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE9BQU87aUJBQ2QsQ0FBQztzQ0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE1BQU07aUJBQ2IsQ0FBQztpREFHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLEtBQUs7aUJBQ1osQ0FBQzs2Q0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE1BQU07b0JBQ1osS0FBSyxFQUFFLElBQUk7aUJBQ1osQ0FBQzsrQ0FHRCxRQUFRLENB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