@uptime.link/statuspage 1.0.73 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_bundle/bundle.js +4096 -504
- package/dist_bundle/bundle.js.map +4 -4
- package/dist_ts_web/00_commitinfo_data.js +2 -2
- package/dist_ts_web/elements/index.d.ts +3 -0
- package/dist_ts_web/elements/index.js +6 -1
- package/dist_ts_web/elements/internal/uplinternal-miniheading.d.ts +1 -0
- package/dist_ts_web/elements/internal/uplinternal-miniheading.js +78 -28
- package/dist_ts_web/elements/upl-statuspage-assetsselector.d.ts +14 -0
- package/dist_ts_web/elements/upl-statuspage-assetsselector.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-assetsselector.demo.js +575 -0
- package/dist_ts_web/elements/upl-statuspage-assetsselector.js +605 -43
- package/dist_ts_web/elements/upl-statuspage-footer.d.ts +46 -2
- package/dist_ts_web/elements/upl-statuspage-footer.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-footer.demo.js +679 -0
- package/dist_ts_web/elements/upl-statuspage-footer.js +792 -61
- package/dist_ts_web/elements/upl-statuspage-header.d.ts +5 -1
- package/dist_ts_web/elements/upl-statuspage-header.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-header.demo.js +220 -0
- package/dist_ts_web/elements/upl-statuspage-header.js +313 -86
- package/dist_ts_web/elements/upl-statuspage-incidents.d.ts +22 -4
- package/dist_ts_web/elements/upl-statuspage-incidents.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-incidents.demo.js +1147 -0
- package/dist_ts_web/elements/upl-statuspage-incidents.js +750 -74
- package/dist_ts_web/elements/upl-statuspage-pagetitle.d.ts +15 -0
- package/dist_ts_web/elements/upl-statuspage-pagetitle.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-pagetitle.demo.js +25 -0
- package/dist_ts_web/elements/upl-statuspage-pagetitle.js +148 -0
- package/dist_ts_web/elements/upl-statuspage-statsgrid.d.ts +23 -0
- package/dist_ts_web/elements/upl-statuspage-statsgrid.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-statsgrid.demo.js +295 -0
- package/dist_ts_web/elements/upl-statuspage-statsgrid.js +374 -0
- package/dist_ts_web/elements/upl-statuspage-statusbar.d.ts +4 -0
- package/dist_ts_web/elements/upl-statuspage-statusbar.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-statusbar.demo.js +365 -0
- package/dist_ts_web/elements/upl-statuspage-statusbar.js +357 -44
- package/dist_ts_web/elements/upl-statuspage-statusdetails.d.ts +14 -0
- package/dist_ts_web/elements/upl-statuspage-statusdetails.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-statusdetails.demo.js +706 -0
- package/dist_ts_web/elements/upl-statuspage-statusdetails.js +373 -63
- package/dist_ts_web/elements/upl-statuspage-statusmonth.d.ts +15 -0
- package/dist_ts_web/elements/upl-statuspage-statusmonth.demo.d.ts +1 -0
- package/dist_ts_web/elements/upl-statuspage-statusmonth.demo.js +798 -0
- package/dist_ts_web/elements/upl-statuspage-statusmonth.js +474 -100
- package/dist_ts_web/interfaces/index.d.ts +84 -0
- package/dist_ts_web/interfaces/index.js +4 -0
- package/dist_ts_web/pages/index.d.ts +4 -1
- package/dist_ts_web/pages/index.js +5 -2
- package/dist_ts_web/pages/statuspage-allgreen.d.ts +1 -0
- package/dist_ts_web/pages/statuspage-allgreen.js +386 -0
- package/dist_ts_web/pages/statuspage-demo.d.ts +1 -0
- package/dist_ts_web/pages/statuspage-demo.js +616 -0
- package/dist_ts_web/pages/statuspage-maintenance.d.ts +1 -0
- package/dist_ts_web/pages/statuspage-maintenance.js +544 -0
- package/dist_ts_web/pages/statuspage-outage.d.ts +1 -0
- package/dist_ts_web/pages/statuspage-outage.js +543 -0
- package/dist_ts_web/styles/shared.styles.d.ts +80 -0
- package/dist_ts_web/styles/shared.styles.js +351 -0
- package/dist_watch/bundle.js +54534 -26433
- package/dist_watch/bundle.js.map +4 -4
- package/dist_watch/index.html +3 -10
- package/npmextra.json +9 -3
- package/package.json +19 -19
- package/readme.hints.md +292 -0
- package/readme.md +326 -149
- package/readme.plan.md +261 -0
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/index.ts +6 -0
- package/ts_web/elements/internal/uplinternal-miniheading.ts +24 -17
- package/ts_web/elements/upl-statuspage-assetsselector.demo.ts +607 -0
- package/ts_web/elements/upl-statuspage-assetsselector.ts +526 -18
- package/ts_web/elements/upl-statuspage-footer.demo.ts +744 -0
- package/ts_web/elements/upl-statuspage-footer.ts +608 -30
- package/ts_web/elements/upl-statuspage-header.demo.ts +241 -0
- package/ts_web/elements/upl-statuspage-header.ts +220 -52
- package/ts_web/elements/upl-statuspage-incidents.demo.ts +1216 -0
- package/ts_web/elements/upl-statuspage-incidents.ts +649 -26
- package/ts_web/elements/upl-statuspage-pagetitle.demo.ts +25 -0
- package/ts_web/elements/upl-statuspage-pagetitle.ts +89 -0
- package/ts_web/elements/upl-statuspage-statsgrid.demo.ts +315 -0
- package/ts_web/elements/upl-statuspage-statsgrid.ts +306 -0
- package/ts_web/elements/upl-statuspage-statusbar.demo.ts +393 -0
- package/ts_web/elements/upl-statuspage-statusbar.ts +281 -20
- package/ts_web/elements/upl-statuspage-statusdetails.demo.ts +754 -0
- package/ts_web/elements/upl-statuspage-statusdetails.ts +297 -38
- package/ts_web/elements/upl-statuspage-statusmonth.demo.ts +876 -0
- package/ts_web/elements/upl-statuspage-statusmonth.ts +397 -76
- package/ts_web/interfaces/index.ts +95 -0
- package/ts_web/pages/index.ts +4 -1
- package/ts_web/pages/statuspage-allgreen.ts +412 -0
- package/ts_web/pages/statuspage-demo.ts +653 -0
- package/ts_web/pages/statuspage-maintenance.ts +570 -0
- package/ts_web/pages/statuspage-outage.ts +568 -0
- package/ts_web/styles/shared.styles.ts +367 -0
- package/dist_ts_web/pages/page1.d.ts +0 -1
- package/dist_ts_web/pages/page1.js +0 -11
- package/ts_web/pages/page1.ts +0 -11
|
@@ -0,0 +1,679 @@
|
|
|
1
|
+
import { html } from '@design.estate/dees-element';
|
|
2
|
+
export const demoFunc = () => html `
|
|
3
|
+
<style>
|
|
4
|
+
.demo-container {
|
|
5
|
+
display: flex;
|
|
6
|
+
flex-direction: column;
|
|
7
|
+
gap: 20px;
|
|
8
|
+
}
|
|
9
|
+
.demo-section {
|
|
10
|
+
border: 1px solid #ddd;
|
|
11
|
+
border-radius: 8px;
|
|
12
|
+
padding: 20px;
|
|
13
|
+
background: #f5f5f5;
|
|
14
|
+
}
|
|
15
|
+
.demo-title {
|
|
16
|
+
font-size: 14px;
|
|
17
|
+
font-weight: 600;
|
|
18
|
+
margin-bottom: 16px;
|
|
19
|
+
color: #333;
|
|
20
|
+
}
|
|
21
|
+
.demo-controls {
|
|
22
|
+
display: flex;
|
|
23
|
+
gap: 10px;
|
|
24
|
+
margin-top: 16px;
|
|
25
|
+
flex-wrap: wrap;
|
|
26
|
+
}
|
|
27
|
+
.demo-button {
|
|
28
|
+
padding: 6px 12px;
|
|
29
|
+
border: 1px solid #ddd;
|
|
30
|
+
background: white;
|
|
31
|
+
border-radius: 4px;
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
font-size: 13px;
|
|
34
|
+
}
|
|
35
|
+
.demo-button:hover {
|
|
36
|
+
background: #f0f0f0;
|
|
37
|
+
}
|
|
38
|
+
.demo-button.active {
|
|
39
|
+
background: #2196F3;
|
|
40
|
+
color: white;
|
|
41
|
+
border-color: #2196F3;
|
|
42
|
+
}
|
|
43
|
+
.demo-info {
|
|
44
|
+
margin-top: 12px;
|
|
45
|
+
padding: 12px;
|
|
46
|
+
background: white;
|
|
47
|
+
border-radius: 4px;
|
|
48
|
+
font-size: 13px;
|
|
49
|
+
line-height: 1.6;
|
|
50
|
+
}
|
|
51
|
+
.event-log {
|
|
52
|
+
margin-top: 12px;
|
|
53
|
+
padding: 12px;
|
|
54
|
+
background: #f9f9f9;
|
|
55
|
+
border-radius: 4px;
|
|
56
|
+
font-size: 12px;
|
|
57
|
+
max-height: 150px;
|
|
58
|
+
overflow-y: auto;
|
|
59
|
+
font-family: monospace;
|
|
60
|
+
}
|
|
61
|
+
.config-display {
|
|
62
|
+
display: grid;
|
|
63
|
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
64
|
+
gap: 12px;
|
|
65
|
+
margin-top: 12px;
|
|
66
|
+
}
|
|
67
|
+
.config-item {
|
|
68
|
+
background: white;
|
|
69
|
+
padding: 12px;
|
|
70
|
+
border-radius: 4px;
|
|
71
|
+
font-size: 12px;
|
|
72
|
+
}
|
|
73
|
+
.config-label {
|
|
74
|
+
font-weight: 600;
|
|
75
|
+
color: #666;
|
|
76
|
+
margin-bottom: 4px;
|
|
77
|
+
}
|
|
78
|
+
.config-value {
|
|
79
|
+
word-break: break-word;
|
|
80
|
+
}
|
|
81
|
+
</style>
|
|
82
|
+
|
|
83
|
+
<div class="demo-container">
|
|
84
|
+
<!-- Different Configuration Scenarios -->
|
|
85
|
+
<div class="demo-section">
|
|
86
|
+
<div class="demo-title">Different Footer Configurations</div>
|
|
87
|
+
<dees-demowrapper
|
|
88
|
+
.runAfterRender=${async (wrapperElement) => {
|
|
89
|
+
const footer = wrapperElement.querySelector('upl-statuspage-footer');
|
|
90
|
+
// Configuration presets
|
|
91
|
+
const configPresets = {
|
|
92
|
+
minimal: {
|
|
93
|
+
name: 'Minimal',
|
|
94
|
+
config: {
|
|
95
|
+
companyName: 'SimpleStatus',
|
|
96
|
+
whitelabel: true,
|
|
97
|
+
lastUpdated: Date.now()
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
standard: {
|
|
101
|
+
name: 'Standard',
|
|
102
|
+
config: {
|
|
103
|
+
companyName: 'TechCorp Solutions',
|
|
104
|
+
legalUrl: 'https://example.com/legal',
|
|
105
|
+
supportEmail: 'support@techcorp.com',
|
|
106
|
+
statusPageUrl: 'https://status.techcorp.com',
|
|
107
|
+
whitelabel: false,
|
|
108
|
+
lastUpdated: Date.now(),
|
|
109
|
+
currentYear: new Date().getFullYear()
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
fullFeatured: {
|
|
113
|
+
name: 'Full Featured',
|
|
114
|
+
config: {
|
|
115
|
+
companyName: 'Enterprise Cloud Platform',
|
|
116
|
+
legalUrl: 'https://enterprise.com/legal',
|
|
117
|
+
supportEmail: 'support@enterprise.com',
|
|
118
|
+
statusPageUrl: 'https://status.enterprise.com',
|
|
119
|
+
whitelabel: false,
|
|
120
|
+
socialLinks: [
|
|
121
|
+
{ platform: 'twitter', url: 'https://twitter.com/enterprise' },
|
|
122
|
+
{ platform: 'github', url: 'https://github.com/enterprise' },
|
|
123
|
+
{ platform: 'linkedin', url: 'https://linkedin.com/company/enterprise' },
|
|
124
|
+
{ platform: 'facebook', url: 'https://facebook.com/enterprise' },
|
|
125
|
+
{ platform: 'youtube', url: 'https://youtube.com/enterprise' }
|
|
126
|
+
],
|
|
127
|
+
rssFeedUrl: 'https://status.enterprise.com/rss',
|
|
128
|
+
apiStatusUrl: 'https://api.enterprise.com/v1/status',
|
|
129
|
+
lastUpdated: Date.now(),
|
|
130
|
+
currentYear: new Date().getFullYear(),
|
|
131
|
+
language: 'en',
|
|
132
|
+
additionalLinks: [
|
|
133
|
+
{ label: 'API Docs', url: 'https://docs.enterprise.com' },
|
|
134
|
+
{ label: 'Service SLA', url: 'https://enterprise.com/sla' },
|
|
135
|
+
{ label: 'Security', url: 'https://enterprise.com/security' }
|
|
136
|
+
]
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
international: {
|
|
140
|
+
name: 'International',
|
|
141
|
+
config: {
|
|
142
|
+
companyName: 'Global Services GmbH',
|
|
143
|
+
legalUrl: 'https://global.eu/legal',
|
|
144
|
+
supportEmail: 'support@global.eu',
|
|
145
|
+
statusPageUrl: 'https://status.global.eu',
|
|
146
|
+
whitelabel: false,
|
|
147
|
+
language: 'de',
|
|
148
|
+
currentYear: new Date().getFullYear(),
|
|
149
|
+
lastUpdated: Date.now(),
|
|
150
|
+
languageOptions: [
|
|
151
|
+
{ code: 'en', label: 'English' },
|
|
152
|
+
{ code: 'de', label: 'Deutsch' },
|
|
153
|
+
{ code: 'fr', label: 'Français' },
|
|
154
|
+
{ code: 'es', label: 'Español' },
|
|
155
|
+
{ code: 'ja', label: '日本語' }
|
|
156
|
+
],
|
|
157
|
+
socialLinks: [
|
|
158
|
+
{ platform: 'twitter', url: 'https://twitter.com/global_eu' },
|
|
159
|
+
{ platform: 'linkedin', url: 'https://linkedin.com/company/global-eu' }
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
whitelabel: {
|
|
164
|
+
name: 'Whitelabel',
|
|
165
|
+
config: {
|
|
166
|
+
companyName: 'Custom Brand Status',
|
|
167
|
+
whitelabel: true,
|
|
168
|
+
customBranding: {
|
|
169
|
+
primaryColor: '#FF5722',
|
|
170
|
+
logoUrl: 'https://example.com/custom-logo.png',
|
|
171
|
+
footerText: 'Powered by Custom Infrastructure'
|
|
172
|
+
},
|
|
173
|
+
lastUpdated: Date.now(),
|
|
174
|
+
currentYear: new Date().getFullYear()
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
// Initial setup
|
|
179
|
+
let currentPreset = 'standard';
|
|
180
|
+
const applyPreset = (preset) => {
|
|
181
|
+
Object.keys(preset.config).forEach(key => {
|
|
182
|
+
footer[key] = preset.config[key];
|
|
183
|
+
});
|
|
184
|
+
updateConfigDisplay(preset.config);
|
|
185
|
+
};
|
|
186
|
+
applyPreset(configPresets[currentPreset]);
|
|
187
|
+
// Create controls
|
|
188
|
+
const controls = document.createElement('div');
|
|
189
|
+
controls.className = 'demo-controls';
|
|
190
|
+
Object.entries(configPresets).forEach(([key, preset]) => {
|
|
191
|
+
const button = document.createElement('button');
|
|
192
|
+
button.className = 'demo-button' + (key === currentPreset ? ' active' : '');
|
|
193
|
+
button.textContent = preset.name;
|
|
194
|
+
button.onclick = () => {
|
|
195
|
+
controls.querySelectorAll('.demo-button').forEach(btn => btn.classList.remove('active'));
|
|
196
|
+
button.classList.add('active');
|
|
197
|
+
currentPreset = key;
|
|
198
|
+
footer.loading = true;
|
|
199
|
+
setTimeout(() => {
|
|
200
|
+
applyPreset(preset);
|
|
201
|
+
footer.loading = false;
|
|
202
|
+
}, 500);
|
|
203
|
+
};
|
|
204
|
+
controls.appendChild(button);
|
|
205
|
+
});
|
|
206
|
+
wrapperElement.appendChild(controls);
|
|
207
|
+
// Add configuration display
|
|
208
|
+
const configDisplay = document.createElement('div');
|
|
209
|
+
configDisplay.className = 'config-display';
|
|
210
|
+
wrapperElement.appendChild(configDisplay);
|
|
211
|
+
const updateConfigDisplay = (config) => {
|
|
212
|
+
configDisplay.innerHTML = Object.entries(config)
|
|
213
|
+
.filter(([key]) => key !== 'socialLinks' && key !== 'additionalLinks' && key !== 'languageOptions')
|
|
214
|
+
.map(([key, value]) => `
|
|
215
|
+
<div class="config-item">
|
|
216
|
+
<div class="config-label">${key}</div>
|
|
217
|
+
<div class="config-value">${value}</div>
|
|
218
|
+
</div>
|
|
219
|
+
`).join('');
|
|
220
|
+
};
|
|
221
|
+
// Handle events
|
|
222
|
+
footer.addEventListener('footerLinkClick', (event) => {
|
|
223
|
+
console.log('Footer link clicked:', event.detail);
|
|
224
|
+
alert(`Link clicked: ${event.detail.type} - ${event.detail.url}`);
|
|
225
|
+
});
|
|
226
|
+
footer.addEventListener('subscribeClick', () => {
|
|
227
|
+
alert('Subscribe feature would open here');
|
|
228
|
+
});
|
|
229
|
+
footer.addEventListener('reportIncidentClick', () => {
|
|
230
|
+
alert('Report incident form would open here');
|
|
231
|
+
});
|
|
232
|
+
footer.addEventListener('languageChange', (event) => {
|
|
233
|
+
alert(`Language changed to: ${event.detail.language}`);
|
|
234
|
+
});
|
|
235
|
+
}}
|
|
236
|
+
>
|
|
237
|
+
<upl-statuspage-footer></upl-statuspage-footer>
|
|
238
|
+
</dees-demowrapper>
|
|
239
|
+
</div>
|
|
240
|
+
|
|
241
|
+
<!-- Loading and Error States -->
|
|
242
|
+
<div class="demo-section">
|
|
243
|
+
<div class="demo-title">Loading and Error States</div>
|
|
244
|
+
<dees-demowrapper
|
|
245
|
+
.runAfterRender=${async (wrapperElement) => {
|
|
246
|
+
const footer = wrapperElement.querySelector('upl-statuspage-footer');
|
|
247
|
+
// Start with loading
|
|
248
|
+
footer.loading = true;
|
|
249
|
+
footer.companyName = 'LoadingCorp';
|
|
250
|
+
const controls = document.createElement('div');
|
|
251
|
+
controls.className = 'demo-controls';
|
|
252
|
+
controls.innerHTML = `
|
|
253
|
+
<button class="demo-button" id="toggleLoading">Toggle Loading</button>
|
|
254
|
+
<button class="demo-button" id="loadSuccess">Load Successfully</button>
|
|
255
|
+
<button class="demo-button" id="simulateError">Simulate Error</button>
|
|
256
|
+
<button class="demo-button" id="simulateOffline">Simulate Offline</button>
|
|
257
|
+
<button class="demo-button" id="brokenLinks">Broken Links</button>
|
|
258
|
+
`;
|
|
259
|
+
wrapperElement.appendChild(controls);
|
|
260
|
+
controls.querySelector('#toggleLoading')?.addEventListener('click', () => {
|
|
261
|
+
footer.loading = !footer.loading;
|
|
262
|
+
});
|
|
263
|
+
controls.querySelector('#loadSuccess')?.addEventListener('click', () => {
|
|
264
|
+
footer.loading = true;
|
|
265
|
+
setTimeout(() => {
|
|
266
|
+
footer.companyName = 'Successfully Loaded Inc';
|
|
267
|
+
footer.legalUrl = 'https://example.com/legal';
|
|
268
|
+
footer.supportEmail = 'support@loaded.com';
|
|
269
|
+
footer.statusPageUrl = 'https://status.loaded.com';
|
|
270
|
+
footer.lastUpdated = Date.now();
|
|
271
|
+
footer.socialLinks = [
|
|
272
|
+
{ platform: 'twitter', url: 'https://twitter.com/loaded' },
|
|
273
|
+
{ platform: 'github', url: 'https://github.com/loaded' }
|
|
274
|
+
];
|
|
275
|
+
footer.loading = false;
|
|
276
|
+
footer.errorMessage = null;
|
|
277
|
+
}, 1000);
|
|
278
|
+
});
|
|
279
|
+
controls.querySelector('#simulateError')?.addEventListener('click', () => {
|
|
280
|
+
footer.loading = true;
|
|
281
|
+
setTimeout(() => {
|
|
282
|
+
footer.loading = false;
|
|
283
|
+
footer.errorMessage = 'Failed to load footer configuration';
|
|
284
|
+
footer.companyName = 'Error Loading';
|
|
285
|
+
footer.socialLinks = [];
|
|
286
|
+
}, 1500);
|
|
287
|
+
});
|
|
288
|
+
controls.querySelector('#simulateOffline')?.addEventListener('click', () => {
|
|
289
|
+
footer.offline = true;
|
|
290
|
+
footer.errorMessage = 'You are currently offline';
|
|
291
|
+
footer.lastUpdated = null;
|
|
292
|
+
});
|
|
293
|
+
controls.querySelector('#brokenLinks')?.addEventListener('click', () => {
|
|
294
|
+
footer.companyName = 'Broken Links Demo';
|
|
295
|
+
footer.legalUrl = 'https://broken.invalid/legal';
|
|
296
|
+
footer.supportEmail = 'invalid-email';
|
|
297
|
+
footer.socialLinks = [
|
|
298
|
+
{ platform: 'twitter', url: '' },
|
|
299
|
+
{ platform: 'github', url: 'not-a-url' }
|
|
300
|
+
];
|
|
301
|
+
footer.rssFeedUrl = 'https://broken.invalid/rss';
|
|
302
|
+
footer.apiStatusUrl = null;
|
|
303
|
+
});
|
|
304
|
+
// Add info display
|
|
305
|
+
const info = document.createElement('div');
|
|
306
|
+
info.className = 'demo-info';
|
|
307
|
+
info.innerHTML = 'Test different loading states and error scenarios using the controls above.';
|
|
308
|
+
wrapperElement.appendChild(info);
|
|
309
|
+
}}
|
|
310
|
+
>
|
|
311
|
+
<upl-statuspage-footer></upl-statuspage-footer>
|
|
312
|
+
</dees-demowrapper>
|
|
313
|
+
</div>
|
|
314
|
+
|
|
315
|
+
<!-- Dynamic Updates and Real-time Features -->
|
|
316
|
+
<div class="demo-section">
|
|
317
|
+
<div class="demo-title">Dynamic Updates and Real-time Features</div>
|
|
318
|
+
<dees-demowrapper
|
|
319
|
+
.runAfterRender=${async (wrapperElement) => {
|
|
320
|
+
const footer = wrapperElement.querySelector('upl-statuspage-footer');
|
|
321
|
+
// Initial configuration
|
|
322
|
+
footer.companyName = 'RealTime Systems';
|
|
323
|
+
footer.legalUrl = 'https://realtime.com/legal';
|
|
324
|
+
footer.supportEmail = 'support@realtime.com';
|
|
325
|
+
footer.statusPageUrl = 'https://status.realtime.com';
|
|
326
|
+
footer.lastUpdated = Date.now();
|
|
327
|
+
footer.currentYear = new Date().getFullYear();
|
|
328
|
+
// Dynamic social links
|
|
329
|
+
const allSocialPlatforms = [
|
|
330
|
+
{ platform: 'twitter', url: 'https://twitter.com/realtime' },
|
|
331
|
+
{ platform: 'github', url: 'https://github.com/realtime' },
|
|
332
|
+
{ platform: 'linkedin', url: 'https://linkedin.com/company/realtime' },
|
|
333
|
+
{ platform: 'facebook', url: 'https://facebook.com/realtime' },
|
|
334
|
+
{ platform: 'youtube', url: 'https://youtube.com/realtime' },
|
|
335
|
+
{ platform: 'instagram', url: 'https://instagram.com/realtime' },
|
|
336
|
+
{ platform: 'slack', url: 'https://realtime.slack.com' },
|
|
337
|
+
{ platform: 'discord', url: 'https://discord.gg/realtime' }
|
|
338
|
+
];
|
|
339
|
+
footer.socialLinks = allSocialPlatforms.slice(0, 3);
|
|
340
|
+
// Real-time status feed
|
|
341
|
+
footer.rssFeedUrl = 'https://status.realtime.com/rss';
|
|
342
|
+
footer.apiStatusUrl = 'https://api.realtime.com/v1/status';
|
|
343
|
+
// Status feed simulation
|
|
344
|
+
const statusUpdates = [
|
|
345
|
+
'All systems operational',
|
|
346
|
+
'Investigating API latency',
|
|
347
|
+
'Maintenance scheduled for tonight',
|
|
348
|
+
'Performance improvements deployed',
|
|
349
|
+
'New datacenter online',
|
|
350
|
+
'Security patch applied'
|
|
351
|
+
];
|
|
352
|
+
let updateIndex = 0;
|
|
353
|
+
footer.latestStatusUpdate = statusUpdates[0];
|
|
354
|
+
// Auto-update last updated time
|
|
355
|
+
const updateInterval = setInterval(() => {
|
|
356
|
+
footer.lastUpdated = Date.now();
|
|
357
|
+
}, 5000);
|
|
358
|
+
// Rotate status updates
|
|
359
|
+
const statusInterval = setInterval(() => {
|
|
360
|
+
updateIndex = (updateIndex + 1) % statusUpdates.length;
|
|
361
|
+
footer.latestStatusUpdate = statusUpdates[updateIndex];
|
|
362
|
+
logEvent(`Status update: ${statusUpdates[updateIndex]}`);
|
|
363
|
+
}, 8000);
|
|
364
|
+
// Create controls
|
|
365
|
+
const controls = document.createElement('div');
|
|
366
|
+
controls.className = 'demo-controls';
|
|
367
|
+
controls.innerHTML = `
|
|
368
|
+
<button class="demo-button" id="addSocial">Add Social Link</button>
|
|
369
|
+
<button class="demo-button" id="removeSocial">Remove Social Link</button>
|
|
370
|
+
<button class="demo-button" id="updateStatus">Force Status Update</button>
|
|
371
|
+
<button class="demo-button" id="changeYear">Change Year</button>
|
|
372
|
+
`;
|
|
373
|
+
wrapperElement.appendChild(controls);
|
|
374
|
+
controls.querySelector('#addSocial')?.addEventListener('click', () => {
|
|
375
|
+
if (footer.socialLinks.length < allSocialPlatforms.length) {
|
|
376
|
+
footer.socialLinks = [...footer.socialLinks, allSocialPlatforms[footer.socialLinks.length]];
|
|
377
|
+
logEvent(`Added ${allSocialPlatforms[footer.socialLinks.length - 1].platform} link`);
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
controls.querySelector('#removeSocial')?.addEventListener('click', () => {
|
|
381
|
+
if (footer.socialLinks.length > 0) {
|
|
382
|
+
const removed = footer.socialLinks[footer.socialLinks.length - 1];
|
|
383
|
+
footer.socialLinks = footer.socialLinks.slice(0, -1);
|
|
384
|
+
logEvent(`Removed ${removed.platform} link`);
|
|
385
|
+
}
|
|
386
|
+
});
|
|
387
|
+
controls.querySelector('#updateStatus')?.addEventListener('click', () => {
|
|
388
|
+
const customStatus = prompt('Enter custom status update:');
|
|
389
|
+
if (customStatus) {
|
|
390
|
+
footer.latestStatusUpdate = customStatus;
|
|
391
|
+
footer.lastUpdated = Date.now();
|
|
392
|
+
logEvent(`Custom status: ${customStatus}`);
|
|
393
|
+
}
|
|
394
|
+
});
|
|
395
|
+
controls.querySelector('#changeYear')?.addEventListener('click', () => {
|
|
396
|
+
footer.currentYear = footer.currentYear + 1;
|
|
397
|
+
logEvent(`Year changed to ${footer.currentYear}`);
|
|
398
|
+
});
|
|
399
|
+
// Event log
|
|
400
|
+
const eventLog = document.createElement('div');
|
|
401
|
+
eventLog.className = 'event-log';
|
|
402
|
+
eventLog.innerHTML = '<strong>Event Log:</strong><br>';
|
|
403
|
+
wrapperElement.appendChild(eventLog);
|
|
404
|
+
const logEvent = (message) => {
|
|
405
|
+
const time = new Date().toLocaleTimeString();
|
|
406
|
+
eventLog.innerHTML += `[${time}] ${message}<br>`;
|
|
407
|
+
eventLog.scrollTop = eventLog.scrollHeight;
|
|
408
|
+
};
|
|
409
|
+
logEvent('Real-time updates started');
|
|
410
|
+
// Cleanup
|
|
411
|
+
wrapperElement.addEventListener('remove', () => {
|
|
412
|
+
clearInterval(updateInterval);
|
|
413
|
+
clearInterval(statusInterval);
|
|
414
|
+
});
|
|
415
|
+
}}
|
|
416
|
+
>
|
|
417
|
+
<upl-statuspage-footer></upl-statuspage-footer>
|
|
418
|
+
</dees-demowrapper>
|
|
419
|
+
</div>
|
|
420
|
+
|
|
421
|
+
<!-- Interactive Features -->
|
|
422
|
+
<div class="demo-section">
|
|
423
|
+
<div class="demo-title">Interactive Features and Actions</div>
|
|
424
|
+
<dees-demowrapper
|
|
425
|
+
.runAfterRender=${async (wrapperElement) => {
|
|
426
|
+
const footer = wrapperElement.querySelector('upl-statuspage-footer');
|
|
427
|
+
// Setup interactive footer
|
|
428
|
+
footer.companyName = 'Interactive Corp';
|
|
429
|
+
footer.legalUrl = 'https://interactive.com/legal';
|
|
430
|
+
footer.supportEmail = 'help@interactive.com';
|
|
431
|
+
footer.statusPageUrl = 'https://status.interactive.com';
|
|
432
|
+
footer.whitelabel = false;
|
|
433
|
+
footer.lastUpdated = Date.now();
|
|
434
|
+
footer.currentYear = new Date().getFullYear();
|
|
435
|
+
// Interactive features
|
|
436
|
+
footer.enableSubscribe = true;
|
|
437
|
+
footer.enableReportIssue = true;
|
|
438
|
+
footer.enableLanguageSelector = true;
|
|
439
|
+
footer.enableThemeToggle = true;
|
|
440
|
+
footer.languageOptions = [
|
|
441
|
+
{ code: 'en', label: 'English' },
|
|
442
|
+
{ code: 'es', label: 'Español' },
|
|
443
|
+
{ code: 'fr', label: 'Français' },
|
|
444
|
+
{ code: 'de', label: 'Deutsch' },
|
|
445
|
+
{ code: 'ja', label: '日本語' },
|
|
446
|
+
{ code: 'zh', label: '中文' }
|
|
447
|
+
];
|
|
448
|
+
footer.socialLinks = [
|
|
449
|
+
{ platform: 'twitter', url: 'https://twitter.com/interactive' },
|
|
450
|
+
{ platform: 'github', url: 'https://github.com/interactive' },
|
|
451
|
+
{ platform: 'discord', url: 'https://discord.gg/interactive' }
|
|
452
|
+
];
|
|
453
|
+
footer.additionalLinks = [
|
|
454
|
+
{ label: 'API Documentation', url: 'https://docs.interactive.com' },
|
|
455
|
+
{ label: 'Service Level Agreement', url: 'https://interactive.com/sla' },
|
|
456
|
+
{ label: 'Privacy Policy', url: 'https://interactive.com/privacy' },
|
|
457
|
+
{ label: 'Terms of Service', url: 'https://interactive.com/terms' }
|
|
458
|
+
];
|
|
459
|
+
// Subscribe functionality
|
|
460
|
+
let subscriberCount = 1234;
|
|
461
|
+
footer.subscriberCount = subscriberCount;
|
|
462
|
+
footer.addEventListener('subscribeClick', (event) => {
|
|
463
|
+
const email = prompt('Enter your email to subscribe:');
|
|
464
|
+
if (email && email.includes('@')) {
|
|
465
|
+
subscriberCount++;
|
|
466
|
+
footer.subscriberCount = subscriberCount;
|
|
467
|
+
logAction(`New subscriber: ${email} (Total: ${subscriberCount})`);
|
|
468
|
+
alert(`Successfully subscribed! You are subscriber #${subscriberCount}`);
|
|
469
|
+
}
|
|
470
|
+
});
|
|
471
|
+
// Report issue functionality
|
|
472
|
+
footer.addEventListener('reportIncidentClick', (event) => {
|
|
473
|
+
const issue = prompt('Describe the issue you are experiencing:');
|
|
474
|
+
if (issue) {
|
|
475
|
+
const ticketId = `INC-${Date.now().toString().slice(-6)}`;
|
|
476
|
+
logAction(`Issue reported: ${ticketId} - ${issue.substring(0, 50)}...`);
|
|
477
|
+
alert(`Thank you! Your issue has been logged.\nTicket ID: ${ticketId}\nWe will investigate and update you at the provided email.`);
|
|
478
|
+
}
|
|
479
|
+
});
|
|
480
|
+
// Language change
|
|
481
|
+
footer.addEventListener('languageChange', (event) => {
|
|
482
|
+
const newLang = event.detail.language;
|
|
483
|
+
footer.currentLanguage = newLang;
|
|
484
|
+
logAction(`Language changed to: ${newLang}`);
|
|
485
|
+
// Simulate translation
|
|
486
|
+
const translations = {
|
|
487
|
+
en: 'Interactive Corp',
|
|
488
|
+
es: 'Corporación Interactiva',
|
|
489
|
+
fr: 'Corp Interactif',
|
|
490
|
+
de: 'Interaktive GmbH',
|
|
491
|
+
ja: 'インタラクティブ株式会社',
|
|
492
|
+
zh: '互动公司'
|
|
493
|
+
};
|
|
494
|
+
footer.companyName = translations[newLang] || translations.en;
|
|
495
|
+
});
|
|
496
|
+
// Theme toggle
|
|
497
|
+
footer.addEventListener('themeToggle', (event) => {
|
|
498
|
+
const theme = event.detail.theme;
|
|
499
|
+
logAction(`Theme changed to: ${theme}`);
|
|
500
|
+
footer.currentTheme = theme;
|
|
501
|
+
});
|
|
502
|
+
// Click tracking
|
|
503
|
+
footer.addEventListener('footerLinkClick', (event) => {
|
|
504
|
+
logAction(`Link clicked: ${event.detail.type} - ${event.detail.label || event.detail.url}`);
|
|
505
|
+
});
|
|
506
|
+
// Action log
|
|
507
|
+
const actionLog = document.createElement('div');
|
|
508
|
+
actionLog.className = 'event-log';
|
|
509
|
+
actionLog.innerHTML = '<strong>User Actions:</strong><br>';
|
|
510
|
+
wrapperElement.appendChild(actionLog);
|
|
511
|
+
const logAction = (message) => {
|
|
512
|
+
const time = new Date().toLocaleTimeString();
|
|
513
|
+
actionLog.innerHTML += `[${time}] ${message}<br>`;
|
|
514
|
+
actionLog.scrollTop = actionLog.scrollHeight;
|
|
515
|
+
};
|
|
516
|
+
logAction('Interactive footer ready');
|
|
517
|
+
// Add info
|
|
518
|
+
const info = document.createElement('div');
|
|
519
|
+
info.className = 'demo-info';
|
|
520
|
+
info.innerHTML = 'Try clicking on various footer elements to see the interactive features in action.';
|
|
521
|
+
wrapperElement.appendChild(info);
|
|
522
|
+
}}
|
|
523
|
+
>
|
|
524
|
+
<upl-statuspage-footer></upl-statuspage-footer>
|
|
525
|
+
</dees-demowrapper>
|
|
526
|
+
</div>
|
|
527
|
+
|
|
528
|
+
<!-- Edge Cases -->
|
|
529
|
+
<div class="demo-section">
|
|
530
|
+
<div class="demo-title">Edge Cases and Special Scenarios</div>
|
|
531
|
+
<dees-demowrapper
|
|
532
|
+
.runAfterRender=${async (wrapperElement) => {
|
|
533
|
+
const footer = wrapperElement.querySelector('upl-statuspage-footer');
|
|
534
|
+
const edgeCases = {
|
|
535
|
+
empty: {
|
|
536
|
+
name: 'Empty/Minimal',
|
|
537
|
+
config: {
|
|
538
|
+
companyName: '',
|
|
539
|
+
whitelabel: true,
|
|
540
|
+
lastUpdated: null
|
|
541
|
+
}
|
|
542
|
+
},
|
|
543
|
+
veryLong: {
|
|
544
|
+
name: 'Very Long Content',
|
|
545
|
+
config: {
|
|
546
|
+
companyName: 'International Mega Corporation with an Extremely Long Company Name That Tests Layout Limits Inc.',
|
|
547
|
+
legalUrl: 'https://very-long-domain-name-that-might-break-layouts.international-corporation.com/legal/terms-and-conditions/privacy-policy/cookie-policy',
|
|
548
|
+
supportEmail: 'customer.support.team@very-long-domain-name.international-corporation.com',
|
|
549
|
+
socialLinks: Array.from({ length: 15 }, (_, i) => ({
|
|
550
|
+
platform: ['twitter', 'github', 'linkedin', 'facebook', 'youtube'][i % 5],
|
|
551
|
+
url: `https://social-${i}.com/long-username-handle-that-tests-limits`
|
|
552
|
+
})),
|
|
553
|
+
additionalLinks: Array.from({ length: 10 }, (_, i) => ({
|
|
554
|
+
label: `Very Long Link Label That Might Cause Layout Issues #${i + 1}`,
|
|
555
|
+
url: `https://example.com/very/long/path/structure/that/goes/on/and/on/page-${i}`
|
|
556
|
+
}))
|
|
557
|
+
}
|
|
558
|
+
},
|
|
559
|
+
unicode: {
|
|
560
|
+
name: 'Unicode/International',
|
|
561
|
+
config: {
|
|
562
|
+
companyName: '🌍 全球服务 • グローバル • العالمية • Глобальный 🌏',
|
|
563
|
+
legalUrl: 'https://unicode.test/法律',
|
|
564
|
+
supportEmail: 'support@日本.jp',
|
|
565
|
+
currentYear: new Date().getFullYear(),
|
|
566
|
+
socialLinks: [
|
|
567
|
+
{ platform: 'twitter', url: 'https://twitter.com/🌐' },
|
|
568
|
+
{ platform: 'github', url: 'https://github.com/世界' }
|
|
569
|
+
],
|
|
570
|
+
additionalLinks: [
|
|
571
|
+
{ label: '📋 Terms & Conditions', url: '#' },
|
|
572
|
+
{ label: '🔒 Privacy Policy', url: '#' },
|
|
573
|
+
{ label: '🛡️ Security', url: '#' }
|
|
574
|
+
]
|
|
575
|
+
}
|
|
576
|
+
},
|
|
577
|
+
brokenData: {
|
|
578
|
+
name: 'Broken/Invalid Data',
|
|
579
|
+
config: {
|
|
580
|
+
companyName: null,
|
|
581
|
+
legalUrl: 'not-a-valid-url',
|
|
582
|
+
supportEmail: 'not-an-email',
|
|
583
|
+
currentYear: 'not-a-year',
|
|
584
|
+
lastUpdated: 'invalid-timestamp',
|
|
585
|
+
socialLinks: [
|
|
586
|
+
{ platform: null, url: null },
|
|
587
|
+
{ platform: 'unknown-platform', url: '' },
|
|
588
|
+
{ url: 'https://missing-platform.com' },
|
|
589
|
+
{ platform: 'twitter' }
|
|
590
|
+
],
|
|
591
|
+
rssFeedUrl: '',
|
|
592
|
+
apiStatusUrl: undefined
|
|
593
|
+
}
|
|
594
|
+
},
|
|
595
|
+
maxData: {
|
|
596
|
+
name: 'Maximum Data',
|
|
597
|
+
config: {
|
|
598
|
+
companyName: 'Maximum Configuration Demo',
|
|
599
|
+
legalUrl: 'https://max.demo/legal',
|
|
600
|
+
supportEmail: 'all@max.demo',
|
|
601
|
+
statusPageUrl: 'https://status.max.demo',
|
|
602
|
+
whitelabel: false,
|
|
603
|
+
currentYear: new Date().getFullYear(),
|
|
604
|
+
lastUpdated: Date.now(),
|
|
605
|
+
language: 'en',
|
|
606
|
+
theme: 'dark',
|
|
607
|
+
socialLinks: Array.from({ length: 20 }, (_, i) => ({
|
|
608
|
+
platform: 'generic',
|
|
609
|
+
url: `https://social${i}.com`
|
|
610
|
+
})),
|
|
611
|
+
additionalLinks: Array.from({ length: 15 }, (_, i) => ({
|
|
612
|
+
label: `Link ${i + 1}`,
|
|
613
|
+
url: `#link${i + 1}`
|
|
614
|
+
})),
|
|
615
|
+
rssFeedUrl: 'https://status.max.demo/rss',
|
|
616
|
+
apiStatusUrl: 'https://api.max.demo/status',
|
|
617
|
+
subscriberCount: 999999,
|
|
618
|
+
enableSubscribe: true,
|
|
619
|
+
enableReportIssue: true,
|
|
620
|
+
enableLanguageSelector: true,
|
|
621
|
+
enableThemeToggle: true,
|
|
622
|
+
languageOptions: Array.from({ length: 50 }, (_, i) => ({
|
|
623
|
+
code: `lang${i}`,
|
|
624
|
+
label: `Language ${i}`
|
|
625
|
+
}))
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
};
|
|
629
|
+
// Initial setup
|
|
630
|
+
let currentCase = 'empty';
|
|
631
|
+
const applyCase = (edgeCase) => {
|
|
632
|
+
// Clear all properties first
|
|
633
|
+
Object.keys(footer).forEach(key => {
|
|
634
|
+
if (typeof footer[key] !== 'function') {
|
|
635
|
+
footer[key] = undefined;
|
|
636
|
+
}
|
|
637
|
+
});
|
|
638
|
+
// Apply new config
|
|
639
|
+
Object.keys(edgeCase.config).forEach(key => {
|
|
640
|
+
footer[key] = edgeCase.config[key];
|
|
641
|
+
});
|
|
642
|
+
};
|
|
643
|
+
applyCase(edgeCases[currentCase]);
|
|
644
|
+
// Create controls
|
|
645
|
+
const controls = document.createElement('div');
|
|
646
|
+
controls.className = 'demo-controls';
|
|
647
|
+
Object.entries(edgeCases).forEach(([key, edgeCase]) => {
|
|
648
|
+
const button = document.createElement('button');
|
|
649
|
+
button.className = 'demo-button' + (key === currentCase ? ' active' : '');
|
|
650
|
+
button.textContent = edgeCase.name;
|
|
651
|
+
button.onclick = () => {
|
|
652
|
+
controls.querySelectorAll('.demo-button').forEach(btn => btn.classList.remove('active'));
|
|
653
|
+
button.classList.add('active');
|
|
654
|
+
currentCase = key;
|
|
655
|
+
applyCase(edgeCase);
|
|
656
|
+
};
|
|
657
|
+
controls.appendChild(button);
|
|
658
|
+
});
|
|
659
|
+
wrapperElement.appendChild(controls);
|
|
660
|
+
// Add description
|
|
661
|
+
const info = document.createElement('div');
|
|
662
|
+
info.className = 'demo-info';
|
|
663
|
+
info.innerHTML = `
|
|
664
|
+
<strong>Edge Case Descriptions:</strong><br>
|
|
665
|
+
<strong>Empty:</strong> Minimal configuration with missing data<br>
|
|
666
|
+
<strong>Very Long:</strong> Tests layout with extremely long content<br>
|
|
667
|
+
<strong>Unicode:</strong> International characters and emojis<br>
|
|
668
|
+
<strong>Broken Data:</strong> Invalid or malformed configuration<br>
|
|
669
|
+
<strong>Maximum Data:</strong> All features with maximum content
|
|
670
|
+
`;
|
|
671
|
+
wrapperElement.appendChild(info);
|
|
672
|
+
}}
|
|
673
|
+
>
|
|
674
|
+
<upl-statuspage-footer></upl-statuspage-footer>
|
|
675
|
+
</dees-demowrapper>
|
|
676
|
+
</div>
|
|
677
|
+
</div>
|
|
678
|
+
`;
|
|
679
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsLXN0YXR1c3BhZ2UtZm9vdGVyLmRlbW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvdXBsLXN0YXR1c3BhZ2UtZm9vdGVyLmRlbW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR25ELE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQXNGUixLQUFLLEVBQUUsY0FBbUIsRUFBRSxFQUFFO0lBQzlDLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLENBQVEsQ0FBQztJQUU1RSx3QkFBd0I7SUFDeEIsTUFBTSxhQUFhLEdBQUc7UUFDcEIsT0FBTyxFQUFFO1lBQ1AsSUFBSSxFQUFFLFNBQVM7WUFDZixNQUFNLEVBQUU7Z0JBQ04sV0FBVyxFQUFFLGNBQWM7Z0JBQzNCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTthQUN4QjtTQUNGO1FBQ0QsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFLFVBQVU7WUFDaEIsTUFBTSxFQUFFO2dCQUNOLFdBQVcsRUFBRSxvQkFBb0I7Z0JBQ2pDLFFBQVEsRUFBRSwyQkFBMkI7Z0JBQ3JDLFlBQVksRUFBRSxzQkFBc0I7Z0JBQ3BDLGFBQWEsRUFBRSw2QkFBNkI7Z0JBQzVDLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtnQkFDdkIsV0FBVyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3RDO1NBQ0Y7UUFDRCxZQUFZLEVBQUU7WUFDWixJQUFJLEVBQUUs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
|