@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,125 +1,684 @@
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, css, cssManager } from '@design.estate/dees-element';
35
+ import { DeesElement, property, html, customElement, css, cssManager, unsafeCSS } from '@design.estate/dees-element';
11
36
  import * as domtools from '@design.estate/dees-domtools';
37
+ import * as sharedStyles from '../styles/shared.styles.js';
12
38
  import './internal/uplinternal-miniheading.js';
13
- let UplStatuspageStatusmonth = class UplStatuspageStatusmonth extends DeesElement {
14
- static { this.demo = () => html ` <upl-statuspage-statusmonth></upl-statuspage-statusmonth> `; }
15
- constructor() {
16
- super();
17
- }
18
- static { this.styles = [
19
- domtools.elementBasic.staticStyles,
20
- css `
39
+ import { demoFunc } from './upl-statuspage-statusmonth.demo.js';
40
+ let UplStatuspageStatusmonth = (() => {
41
+ let _classDecorators = [customElement('upl-statuspage-statusmonth')];
42
+ let _classDescriptor;
43
+ let _classExtraInitializers = [];
44
+ let _classThis;
45
+ let _classSuper = DeesElement;
46
+ let _monthlyData_decorators;
47
+ let _monthlyData_initializers = [];
48
+ let _monthlyData_extraInitializers = [];
49
+ let _serviceId_decorators;
50
+ let _serviceId_initializers = [];
51
+ let _serviceId_extraInitializers = [];
52
+ let _serviceName_decorators;
53
+ let _serviceName_initializers = [];
54
+ let _serviceName_extraInitializers = [];
55
+ let _loading_decorators;
56
+ let _loading_initializers = [];
57
+ let _loading_extraInitializers = [];
58
+ let _showTooltip_decorators;
59
+ let _showTooltip_initializers = [];
60
+ let _showTooltip_extraInitializers = [];
61
+ let _monthsToShow_decorators;
62
+ let _monthsToShow_initializers = [];
63
+ let _monthsToShow_extraInitializers = [];
64
+ var UplStatuspageStatusmonth = class extends _classSuper {
65
+ static { _classThis = this; }
66
+ static {
67
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
68
+ _monthlyData_decorators = [property({ type: Array })];
69
+ _serviceId_decorators = [property({ type: String })];
70
+ _serviceName_decorators = [property({ type: String })];
71
+ _loading_decorators = [property({ type: Boolean })];
72
+ _showTooltip_decorators = [property({ type: Boolean })];
73
+ _monthsToShow_decorators = [property({ type: Number })];
74
+ __esDecorate(this, null, _monthlyData_decorators, { kind: "accessor", name: "monthlyData", static: false, private: false, access: { has: obj => "monthlyData" in obj, get: obj => obj.monthlyData, set: (obj, value) => { obj.monthlyData = value; } }, metadata: _metadata }, _monthlyData_initializers, _monthlyData_extraInitializers);
75
+ __esDecorate(this, null, _serviceId_decorators, { kind: "accessor", name: "serviceId", static: false, private: false, access: { has: obj => "serviceId" in obj, get: obj => obj.serviceId, set: (obj, value) => { obj.serviceId = value; } }, metadata: _metadata }, _serviceId_initializers, _serviceId_extraInitializers);
76
+ __esDecorate(this, null, _serviceName_decorators, { kind: "accessor", name: "serviceName", static: false, private: false, access: { has: obj => "serviceName" in obj, get: obj => obj.serviceName, set: (obj, value) => { obj.serviceName = value; } }, metadata: _metadata }, _serviceName_initializers, _serviceName_extraInitializers);
77
+ __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);
78
+ __esDecorate(this, null, _showTooltip_decorators, { kind: "accessor", name: "showTooltip", static: false, private: false, access: { has: obj => "showTooltip" in obj, get: obj => obj.showTooltip, set: (obj, value) => { obj.showTooltip = value; } }, metadata: _metadata }, _showTooltip_initializers, _showTooltip_extraInitializers);
79
+ __esDecorate(this, null, _monthsToShow_decorators, { kind: "accessor", name: "monthsToShow", static: false, private: false, access: { has: obj => "monthsToShow" in obj, get: obj => obj.monthsToShow, set: (obj, value) => { obj.monthsToShow = value; } }, metadata: _metadata }, _monthsToShow_initializers, _monthsToShow_extraInitializers);
80
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
81
+ UplStatuspageStatusmonth = _classThis = _classDescriptor.value;
82
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
83
+ }
84
+ static demo = demoFunc;
85
+ #monthlyData_accessor_storage = __runInitializers(this, _monthlyData_initializers, []);
86
+ get monthlyData() { return this.#monthlyData_accessor_storage; }
87
+ set monthlyData(value) { this.#monthlyData_accessor_storage = value; }
88
+ #serviceId_accessor_storage = (__runInitializers(this, _monthlyData_extraInitializers), __runInitializers(this, _serviceId_initializers, ''));
89
+ get serviceId() { return this.#serviceId_accessor_storage; }
90
+ set serviceId(value) { this.#serviceId_accessor_storage = value; }
91
+ #serviceName_accessor_storage = (__runInitializers(this, _serviceId_extraInitializers), __runInitializers(this, _serviceName_initializers, 'Service'));
92
+ get serviceName() { return this.#serviceName_accessor_storage; }
93
+ set serviceName(value) { this.#serviceName_accessor_storage = value; }
94
+ #loading_accessor_storage = (__runInitializers(this, _serviceName_extraInitializers), __runInitializers(this, _loading_initializers, false));
95
+ get loading() { return this.#loading_accessor_storage; }
96
+ set loading(value) { this.#loading_accessor_storage = value; }
97
+ #showTooltip_accessor_storage = (__runInitializers(this, _loading_extraInitializers), __runInitializers(this, _showTooltip_initializers, true));
98
+ get showTooltip() { return this.#showTooltip_accessor_storage; }
99
+ set showTooltip(value) { this.#showTooltip_accessor_storage = value; }
100
+ #monthsToShow_accessor_storage = (__runInitializers(this, _showTooltip_extraInitializers), __runInitializers(this, _monthsToShow_initializers, 5));
101
+ get monthsToShow() { return this.#monthsToShow_accessor_storage; }
102
+ set monthsToShow(value) { this.#monthsToShow_accessor_storage = value; }
103
+ constructor() {
104
+ super();
105
+ __runInitializers(this, _monthsToShow_extraInitializers);
106
+ }
107
+ static styles = [
108
+ domtools.elementBasic.staticStyles,
109
+ sharedStyles.commonStyles,
110
+ css `
21
111
  :host {
22
- position: relative;
23
- padding: 0px 0px 15px 0px;
24
- display: block;
25
- background: ${cssManager.bdTheme('#eeeeeb', '#222222')};;
26
- font-family: Inter;
27
- color: #fff;
112
+ position: relative;
113
+ display: block;
114
+ background: transparent;
115
+ font-family: ${unsafeCSS(sharedStyles.fonts.base)};
116
+ color: ${sharedStyles.colors.text.primary};
117
+ }
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
+ }
124
+
125
+ .mainbox {
126
+ display: grid;
127
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
128
+ gap: ${unsafeCSS(sharedStyles.spacing.lg)};
129
+ }
130
+
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
+ }
145
+
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; }
151
+
152
+ @keyframes fadeInUp {
153
+ from {
154
+ opacity: 0;
155
+ transform: translateY(16px);
156
+ }
157
+ to {
158
+ opacity: 1;
159
+ transform: translateY(0);
160
+ }
161
+ }
162
+
163
+ .statusMonth:hover {
164
+ border-color: ${sharedStyles.colors.border.muted};
165
+ box-shadow: ${unsafeCSS(sharedStyles.shadows.md)};
166
+ transform: translateY(-2px);
167
+ }
168
+
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
+ }
180
+
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
+
191
+ .days-container {
192
+ flex: 1;
193
+ display: flex;
194
+ flex-direction: column;
195
+ margin-bottom: ${unsafeCSS(sharedStyles.spacing.lg)};
196
+ }
197
+
198
+ .days-grid {
199
+ display: grid;
200
+ grid-template-columns: repeat(7, 1fr);
201
+ gap: 4px;
202
+ width: 100%;
203
+ }
204
+
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
+ }
216
+
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
+ }
227
+
228
+ @keyframes dayFadeIn {
229
+ from {
230
+ opacity: 0;
231
+ transform: scale(0.8);
232
+ }
233
+ to {
234
+ opacity: 1;
235
+ transform: scale(1);
236
+ }
237
+ }
238
+
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
+ }
244
+
245
+ /* Current day highlight */
246
+ .statusDay.today {
247
+ box-shadow: 0 0 0 2px ${sharedStyles.colors.text.primary};
248
+ z-index: 1;
249
+ }
250
+
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
+ }
254
+
255
+ /* Status colors with intensity variations based on uptime */
256
+ .statusDay.operational {
257
+ background: ${sharedStyles.colors.status.operational};
258
+ }
259
+
260
+ .statusDay.operational.uptime-high {
261
+ background: ${cssManager.bdTheme('#22c55e', '#22c55e')};
262
+ }
263
+
264
+ .statusDay.operational.uptime-mid {
265
+ background: ${cssManager.bdTheme('#4ade80', '#4ade80')};
266
+ }
267
+
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)};
28
483
  }
29
484
 
30
485
  .mainbox {
31
- margin: auto;
32
- max-width: 900px;
33
- display: grid;
34
- grid-template-columns: repeat(5, calc(100% / 5 - 80px / 5));
35
- grid-column-gap: 20px;
486
+ grid-template-columns: 1fr;
487
+ gap: ${unsafeCSS(sharedStyles.spacing.md)};
36
488
  }
37
489
 
38
490
  .statusMonth {
39
- background: ${cssManager.bdTheme('#ffffff', '#333333')};;
40
- min-height: 20px;
41
- display: grid;
42
- padding: 10px;
43
- grid-template-columns: repeat(6, auto);
44
- grid-gap: 9px;
45
- border-radius: 3px;
491
+ padding: ${unsafeCSS(sharedStyles.spacing.md)};
492
+ min-height: 260px;
493
+ }
494
+
495
+ .days-grid {
496
+ gap: 3px;
497
+ }
498
+
499
+ .statusDay:hover:not(.empty) {
500
+ transform: scale(1.1);
46
501
  }
47
502
 
48
- .statusMonth .statusDay {
49
- width: 16px;
50
- height: 16px;
51
- background: #2deb51;
52
- border-radius: 3px;
503
+ .loading-skeleton {
504
+ height: 180px;
505
+ padding: ${unsafeCSS(sharedStyles.spacing.md)};
53
506
  }
507
+ }
54
508
  `
55
- ]; }
56
- render() {
57
- return html `
58
- <style></style>
59
- <uplinternal-miniheading>Last 150 days</uplinternal-miniheading>
60
- <div class="mainbox">
61
- <div class="statusMonth">
62
- ${(() => {
63
- let counter = 0;
64
- const returnArray = [];
65
- while (counter < 30) {
66
- counter++;
67
- returnArray.push(html ` <div class="statusDay"></div> `);
68
- }
69
- return returnArray;
70
- })()}
71
- </div>
72
- <div class="statusMonth">
73
- ${(() => {
74
- let counter = 0;
75
- const returnArray = [];
76
- while (counter < 30) {
77
- counter++;
78
- returnArray.push(html ` <div class="statusDay"></div> `);
79
- }
80
- return returnArray;
81
- })()}
509
+ ];
510
+ render() {
511
+ const totalDays = this.monthlyData.reduce((sum, month) => sum + month.days.length, 0);
512
+ return html `
513
+ <div class="container">
514
+ <uplinternal-miniheading>${this.serviceName} - Last ${totalDays} Days</uplinternal-miniheading>
515
+ <div class="mainbox">
516
+ ${this.loading ? html `
517
+ ${Array(this.monthsToShow).fill(0).map((_, index) => html `
518
+ <div class="statusMonth">
519
+ <div class="loading-skeleton">
520
+ <div class="skeleton-header"></div>
521
+ <div class="days-container">
522
+ <div class="skeleton-grid">
523
+ ${Array(42).fill(0).map((_, i) => html `
524
+ <div class="skeleton-day" style="--index: ${i}"></div>
525
+ `)}
526
+ </div>
527
+ </div>
528
+ <div style="height: 48px; border-top: 1px solid ${cssManager.bdTheme('#f3f4f6', '#1f1f1f')}; margin-top: auto; padding-top: 16px;"></div>
529
+ </div>
530
+ </div>
531
+ `)}
532
+ ` : this.monthlyData.length === 0 ? html `
533
+ <div class="no-data-message">No uptime data available</div>
534
+ ` : this.monthlyData.map(month => this.renderMonth(month))}
82
535
  </div>
83
- <div class="statusMonth">
84
- ${(() => {
85
- let counter = 0;
86
- const returnArray = [];
87
- while (counter < 30) {
88
- counter++;
89
- returnArray.push(html ` <div class="statusDay"></div> `);
90
- }
91
- return returnArray;
92
- })()}
536
+ ${this.showTooltip ? html `<div class="tooltip" id="tooltip"></div>` : ''}
537
+ </div>
538
+ `;
539
+ }
540
+ renderMonth(monthData) {
541
+ const monthDate = new Date(monthData.month + '-01');
542
+ const monthName = monthDate.toLocaleDateString('en-US', { month: 'short', year: 'numeric' });
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);
547
+ return html `
548
+ <div class="statusMonth" @mouseleave=${this.hideTooltip}>
549
+ <div class="month-header">
550
+ ${monthName}
551
+ ${isCurrentMonth ? html `<span class="current-badge">Current</span>` : ''}
93
552
  </div>
94
- <div class="statusMonth">
95
- ${(() => {
96
- let counter = 0;
97
- const returnArray = [];
98
- while (counter < 30) {
99
- counter++;
100
- returnArray.push(html ` <div class="statusDay"></div> `);
101
- }
102
- return returnArray;
103
- })()}
553
+ <div class="days-container">
554
+ <div class="days-grid">
555
+ ${this.renderWeekdayLabels()}
556
+ ${this.renderEmptyDays(firstDayOfWeek)}
557
+ ${monthData.days.map((day, index) => this.renderDay(day, index))}
558
+ ${this.renderTrailingEmptyDays(firstDayOfWeek + monthData.days.length)}
559
+ </div>
104
560
  </div>
105
- <div class="statusMonth">
106
- ${(() => {
107
- let counter = 0;
108
- const returnArray = [];
109
- while (counter < 30) {
110
- counter++;
111
- returnArray.push(html ` <div class="statusDay"></div> `);
112
- }
113
- return returnArray;
114
- })()}
561
+ <div class="overall-uptime">
562
+ <div class="uptime-stat">
563
+ <span>Uptime</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>
568
+ </div>
569
+ ${monthData.totalIncidents > 0 ? html `
570
+ <div class="uptime-stat">
571
+ <span>Incidents</span>
572
+ <span class="uptime-value">${monthData.totalIncidents}</span>
573
+ </div>
574
+ ` : ''}
115
575
  </div>
116
576
  </div>
117
577
  `;
118
- }
119
- };
120
- UplStatuspageStatusmonth = __decorate([
121
- customElement('upl-statuspage-statusmonth'),
122
- __metadata("design:paramtypes", [])
123
- ], UplStatuspageStatusmonth);
578
+ }
579
+ getUptimeClass(uptime) {
580
+ if (uptime >= 99.9)
581
+ return 'good';
582
+ if (uptime >= 99)
583
+ return 'warning';
584
+ return 'bad';
585
+ }
586
+ renderWeekdayLabels() {
587
+ const weekdays = ['S', 'M', 'T', 'W', 'T', 'F', 'S'];
588
+ return weekdays.map(day => html `<div class="weekday-label">${day}</div>`);
589
+ }
590
+ renderEmptyDays(count) {
591
+ return Array(count).fill(0).map(() => html `<div class="statusDay empty"></div>`);
592
+ }
593
+ renderTrailingEmptyDays(totalCells) {
594
+ const remainder = totalCells % 7;
595
+ const trailingCount = remainder === 0 ? 0 : 7 - remainder;
596
+ return Array(trailingCount).fill(0).map(() => html `<div class="statusDay empty"></div>`);
597
+ }
598
+ renderDay(day, index = 0) {
599
+ const status = day.status || 'no-data';
600
+ const date = new Date(day.date);
601
+ const now = new Date();
602
+ const isToday = date.toDateString() === now.toDateString();
603
+ const uptimeIntensity = this.getUptimeIntensity(day.uptime);
604
+ return html `
605
+ <div
606
+ class="statusDay ${status} ${isToday ? 'today' : ''} ${status === 'operational' ? uptimeIntensity : ''}"
607
+ style="--day-index: ${index}"
608
+ @mouseenter=${(e) => this.showTooltip && this.showDayTooltip(e, day)}
609
+ @click=${() => this.handleDayClick(day)}
610
+ >
611
+ ${(status === 'major_outage' || status === 'partial_outage') && day.incidents > 0 ? html `
612
+ <span class="incident-count">${day.incidents}</span>
613
+ ` : ''}
614
+ </div>
615
+ `;
616
+ }
617
+ getUptimeIntensity(uptime) {
618
+ if (uptime >= 99.9)
619
+ return 'uptime-high';
620
+ if (uptime >= 99)
621
+ return 'uptime-mid';
622
+ return '';
623
+ }
624
+ showDayTooltip(event, day) {
625
+ const tooltip = this.shadowRoot?.getElementById('tooltip');
626
+ if (!tooltip)
627
+ return;
628
+ const date = new Date(day.date);
629
+ const dateStr = date.toLocaleDateString('en-US', {
630
+ weekday: 'short',
631
+ month: 'short',
632
+ day: 'numeric'
633
+ });
634
+ let statusText = day.status.replace(/_/g, ' ');
635
+ statusText = statusText.charAt(0).toUpperCase() + statusText.slice(1);
636
+ const uptimeColor = day.uptime >= 99.9 ? '#22c55e' :
637
+ day.uptime >= 99 ? '#fbbf24' : '#f87171';
638
+ tooltip.innerHTML = `
639
+ <div class="tooltip-date">${dateStr}</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>
650
+ `;
651
+ const rect = event.target.getBoundingClientRect();
652
+ const containerRect = this.getBoundingClientRect();
653
+ tooltip.style.left = `${rect.left - containerRect.left + rect.width / 2}px`;
654
+ tooltip.style.top = `${rect.top - containerRect.top - 10}px`;
655
+ tooltip.style.transform = 'translateX(-50%) translateY(-100%)';
656
+ tooltip.classList.add('visible');
657
+ }
658
+ hideTooltip() {
659
+ const tooltip = this.shadowRoot?.getElementById('tooltip');
660
+ if (tooltip) {
661
+ tooltip.classList.remove('visible');
662
+ }
663
+ }
664
+ handleDayClick(day) {
665
+ this.dispatchEvent(new CustomEvent('dayClick', {
666
+ detail: {
667
+ date: day.date,
668
+ uptime: day.uptime,
669
+ incidents: day.incidents,
670
+ status: day.status,
671
+ serviceId: this.serviceId
672
+ },
673
+ bubbles: true,
674
+ composed: true
675
+ }));
676
+ }
677
+ static {
678
+ __runInitializers(_classThis, _classExtraInitializers);
679
+ }
680
+ };
681
+ return UplStatuspageStatusmonth = _classThis;
682
+ })();
124
683
  export { UplStatuspageStatusmonth };
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsLXN0YXR1c3BhZ2Utc3RhdHVzbW9udGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvdXBsLXN0YXR1c3BhZ2Utc3RhdHVzbW9udGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUNMLFdBQVcsRUFDWCxRQUFRLEVBQ1IsSUFBSSxFQUNKLGFBQWEsRUFFYixHQUFHLEVBQ0gsVUFBVSxFQUNYLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxLQUFLLFFBQVEsTUFBTSw4QkFBOEIsQ0FBQztBQUV6RCxPQUFPLHVDQUF1QyxDQUFDO0FBU3hDLElBQU0sd0JBQXdCLEdBQTlCLE1BQU0sd0JBQXlCLFNBQVEsV0FBVzthQUN6QyxTQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFBLDZEQUE2RCxBQUExRSxDQUEyRTtJQUU3RjtRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQzthQUVhLFdBQU0sR0FBRztRQUNyQixRQUFRLENBQUMsWUFBWSxDQUFDLFlBQVk7UUFDbEMsR0FBRyxDQUFBOzs7Ozt5QkFLa0IsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7Ozt5QkFjeEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7S0FlNUQ7S0FDRixBQXJDbUIsQ0FxQ25CO0lBRU0sTUFBTTtRQUNYLE9BQU8sSUFBSSxDQUFBOzs7OztZQUtILENBQUMsR0FBRyxFQUFFO1lBQ04sSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLE1BQU0sV0FBVyxHQUFxQixFQUFFLENBQUM7WUFDekMsT0FBTyxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sRUFBRSxDQUFDO2dCQUNWLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBLGlDQUFpQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxFQUFFOzs7WUFHRixDQUFDLEdBQUcsRUFBRTtZQUNOLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNoQixNQUFNLFdBQVcsR0FBcUIsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sT0FBTyxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixPQUFPLEVBQUUsQ0FBQztnQkFDVixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQSxpQ0FBaUMsQ0FBQyxDQUFDO1lBQzFELENBQUM7WUFDRCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDLENBQUMsRUFBRTs7O1lBR0YsQ0FBQyxHQUFHLEVBQUU7WUFDTixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDaEIsTUFBTSxXQUFXLEdBQXFCLEVBQUUsQ0FBQztZQUN6QyxPQUFPLE9BQU8sR0FBRyxFQUFFLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUEsaUNBQWlDLENBQUMsQ0FBQztZQUMxRCxDQUFDO1lBQ0QsT0FBTyxXQUFXLENBQUM7UUFDckIsQ0FBQyxDQUFDLEVBQUU7OztZQUdGLENBQUMsR0FBRyxFQUFFO1lBQ04sSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLE1BQU0sV0FBVyxHQUFxQixFQUFFLENBQUM7WUFDekMsT0FBTyxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUM7Z0JBQ3BCLE9BQU8sRUFBRSxDQUFDO2dCQUNWLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFBLGlDQUFpQyxDQUFDLENBQUM7WUFDMUQsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxFQUFFOzs7WUFHRixDQUFDLEdBQUcsRUFBRTtZQUNOLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNoQixNQUFNLFdBQVcsR0FBcUIsRUFBRSxDQUFDO1lBQ3pDLE9BQU8sT0FBTyxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUNwQixPQUFPLEVBQUUsQ0FBQztnQkFDVixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQSxpQ0FBaUMsQ0FBQyxDQUFDO1lBQzFELENBQUM7WUFDRCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDLENBQUMsRUFBRTs7O0tBR1QsQ0FBQztJQUNKLENBQUM7O0FBNUdVLHdCQUF3QjtJQURwQyxhQUFhLENBQUMsNEJBQTRCLENBQUM7O0dBQy9CLHdCQUF3QixDQTZHcEMifQ==
684
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsLXN0YXR1c3BhZ2Utc3RhdHVzbW9udGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvdXBsLXN0YXR1c3BhZ2Utc3RhdHVzbW9udGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLElBQUksRUFDSixhQUFhLEVBRWIsR0FBRyxFQUNILFVBQVUsRUFDVixTQUFTLEVBQ1YsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEtBQUssUUFBUSxNQUFNLDhCQUE4QixDQUFDO0FBRXpELE9BQU8sS0FBSyxZQUFZLE1BQU0sNEJBQTRCLENBQUM7QUFFM0QsT0FBTyx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7SUFTbkQsd0JBQXdCOzRCQURwQyxhQUFhLENBQUMsNEJBQTRCLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt3Q0FBbkIsU0FBUSxXQUFXOzs7O3VDQUd0RCxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7cUNBR3pCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzt1Q0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO21DQUcxQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7dUNBRzNCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQzt3Q0FHM0IsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBZDNCLHNMQUFTLFdBQVcsNkJBQVgsV0FBVyxpR0FBd0I7WUFHNUMsZ0xBQVMsU0FBUyw2QkFBVCxTQUFTLDZGQUFjO1lBR2hDLHNMQUFTLFdBQVcsNkJB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