@kodaris/krubble-components 1.0.2 → 1.0.4
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/custom-elements.json +275 -31
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/krubble.bundled.js +373 -67
- package/dist/krubble.bundled.js.map +1 -1
- package/dist/krubble.bundled.min.js +203 -44
- package/dist/krubble.bundled.min.js.map +1 -1
- package/dist/krubble.umd.js +372 -66
- package/dist/krubble.umd.js.map +1 -1
- package/dist/krubble.umd.min.js +192 -33
- package/dist/krubble.umd.min.js.map +1 -1
- package/dist/snackbar/snackbar.d.ts +71 -0
- package/dist/snackbar/snackbar.d.ts.map +1 -0
- package/dist/snackbar/snackbar.js +309 -0
- package/dist/snackbar/snackbar.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { LitElement } from 'lit';
|
|
2
|
+
export interface KRSnackbarOptions {
|
|
3
|
+
/** The message to display */
|
|
4
|
+
message: string;
|
|
5
|
+
/** Optional title for the snackbar */
|
|
6
|
+
title?: string;
|
|
7
|
+
/** The type/severity of the snackbar */
|
|
8
|
+
type?: 'info' | 'success' | 'warning' | 'error';
|
|
9
|
+
/** Duration in milliseconds before auto-dismiss. Set to 0 to disable auto-dismiss. */
|
|
10
|
+
duration?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* A snackbar component for displaying brief notification messages.
|
|
14
|
+
*
|
|
15
|
+
* Snackbars appear at the bottom-left of the screen and automatically
|
|
16
|
+
* dismiss after a configurable duration. Multiple snackbars stack vertically.
|
|
17
|
+
*
|
|
18
|
+
* @fires dismiss - Fired when the snackbar is dismissed (manually or automatically)
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* // Show a success message
|
|
23
|
+
* KRSnackbar.show({ message: 'Item saved successfully', type: 'success' });
|
|
24
|
+
*
|
|
25
|
+
* // Show a message with title
|
|
26
|
+
* KRSnackbar.show({ title: 'Upload Complete', message: 'Your file has been uploaded.', type: 'success' });
|
|
27
|
+
*
|
|
28
|
+
* // Show an error that stays until manually dismissed
|
|
29
|
+
* KRSnackbar.show({ message: 'Failed to save', type: 'error', duration: 0 });
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare class KRSnackbar extends LitElement {
|
|
33
|
+
static styles: import("lit").CSSResult;
|
|
34
|
+
/** Track active snackbars for stacking */
|
|
35
|
+
private static activeSnackbars;
|
|
36
|
+
/**
|
|
37
|
+
* Show a snackbar with the given options.
|
|
38
|
+
* @param options - Configuration including message, optional title, type, and duration
|
|
39
|
+
* @returns The created snackbar element
|
|
40
|
+
*/
|
|
41
|
+
static show(options: KRSnackbarOptions): KRSnackbar;
|
|
42
|
+
private dismissTimeout;
|
|
43
|
+
/**
|
|
44
|
+
* The snackbar type/severity. Controls the color scheme and icon.
|
|
45
|
+
*/
|
|
46
|
+
type: 'info' | 'success' | 'warning' | 'error';
|
|
47
|
+
/**
|
|
48
|
+
* Optional title to display above the message.
|
|
49
|
+
*/
|
|
50
|
+
title: string;
|
|
51
|
+
/**
|
|
52
|
+
* The message to display in the snackbar.
|
|
53
|
+
*/
|
|
54
|
+
message: string;
|
|
55
|
+
/**
|
|
56
|
+
* Duration in milliseconds before auto-dismiss. Set to 0 to disable auto-dismiss.
|
|
57
|
+
* @default 5000
|
|
58
|
+
*/
|
|
59
|
+
duration: number;
|
|
60
|
+
connectedCallback(): void;
|
|
61
|
+
disconnectedCallback(): void;
|
|
62
|
+
private updatePositions;
|
|
63
|
+
private dismiss;
|
|
64
|
+
render(): import("lit-html").TemplateResult<1>;
|
|
65
|
+
}
|
|
66
|
+
declare global {
|
|
67
|
+
interface HTMLElementTagNameMap {
|
|
68
|
+
'kr-snackbar': KRSnackbar;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=snackbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snackbar.d.ts","sourceRoot":"","sources":["../../src/snackbar/snackbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBACa,UAAW,SAAQ,UAAU;IAExC,OAAgB,MAAM,0BA+IpB;IAEF,0CAA0C;IAC1C,OAAO,CAAC,MAAM,CAAC,eAAe,CAAoB;IAElD;;;;OAIG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU;IAkBnD,OAAO,CAAC,cAAc,CAAuB;IAE7C;;OAEG;IAEH,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAU;IAExD;;OAEG;IAEH,KAAK,SAAM;IAEX;;OAEG;IAEH,OAAO,SAAM;IAEb;;;OAGG;IAEH,QAAQ,SAAQ;IAEP,iBAAiB;IAmBjB,oBAAoB;IAkB7B,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,OAAO;IAaN,MAAM;CA0BhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,aAAa,EAAE,UAAU,CAAC;KAC3B;CACF"}
|
|
@@ -0,0 +1,309 @@
|
|
|
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;
|
|
6
|
+
};
|
|
7
|
+
var KRSnackbar_1;
|
|
8
|
+
import { LitElement, html, css } from 'lit';
|
|
9
|
+
import { customElement, property } from 'lit/decorators.js';
|
|
10
|
+
/**
|
|
11
|
+
* A snackbar component for displaying brief notification messages.
|
|
12
|
+
*
|
|
13
|
+
* Snackbars appear at the bottom-left of the screen and automatically
|
|
14
|
+
* dismiss after a configurable duration. Multiple snackbars stack vertically.
|
|
15
|
+
*
|
|
16
|
+
* @fires dismiss - Fired when the snackbar is dismissed (manually or automatically)
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* // Show a success message
|
|
21
|
+
* KRSnackbar.show({ message: 'Item saved successfully', type: 'success' });
|
|
22
|
+
*
|
|
23
|
+
* // Show a message with title
|
|
24
|
+
* KRSnackbar.show({ title: 'Upload Complete', message: 'Your file has been uploaded.', type: 'success' });
|
|
25
|
+
*
|
|
26
|
+
* // Show an error that stays until manually dismissed
|
|
27
|
+
* KRSnackbar.show({ message: 'Failed to save', type: 'error', duration: 0 });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
let KRSnackbar = KRSnackbar_1 = class KRSnackbar extends LitElement {
|
|
31
|
+
constructor() {
|
|
32
|
+
super(...arguments);
|
|
33
|
+
this.dismissTimeout = null;
|
|
34
|
+
/**
|
|
35
|
+
* The snackbar type/severity. Controls the color scheme and icon.
|
|
36
|
+
*/
|
|
37
|
+
this.type = 'info';
|
|
38
|
+
/**
|
|
39
|
+
* Optional title to display above the message.
|
|
40
|
+
*/
|
|
41
|
+
this.title = '';
|
|
42
|
+
/**
|
|
43
|
+
* The message to display in the snackbar.
|
|
44
|
+
*/
|
|
45
|
+
this.message = '';
|
|
46
|
+
/**
|
|
47
|
+
* Duration in milliseconds before auto-dismiss. Set to 0 to disable auto-dismiss.
|
|
48
|
+
* @default 5000
|
|
49
|
+
*/
|
|
50
|
+
this.duration = 5000;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Show a snackbar with the given options.
|
|
54
|
+
* @param options - Configuration including message, optional title, type, and duration
|
|
55
|
+
* @returns The created snackbar element
|
|
56
|
+
*/
|
|
57
|
+
static show(options) {
|
|
58
|
+
const snackbar = document.createElement('kr-snackbar');
|
|
59
|
+
snackbar.message = options.message;
|
|
60
|
+
snackbar.title = options.title ?? '';
|
|
61
|
+
snackbar.type = options.type ?? 'info';
|
|
62
|
+
if (options.duration !== undefined) {
|
|
63
|
+
snackbar.duration = options.duration;
|
|
64
|
+
}
|
|
65
|
+
else if (snackbar.type === 'error') {
|
|
66
|
+
snackbar.duration = 0;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
snackbar.duration = 5000;
|
|
70
|
+
}
|
|
71
|
+
document.body.appendChild(snackbar);
|
|
72
|
+
return snackbar;
|
|
73
|
+
}
|
|
74
|
+
connectedCallback() {
|
|
75
|
+
super.connectedCallback();
|
|
76
|
+
// Set role and type class on host
|
|
77
|
+
this.setAttribute('role', 'alert');
|
|
78
|
+
this.classList.add(`kr-snackbar--${this.type}`);
|
|
79
|
+
// Add to active snackbars and update positions
|
|
80
|
+
KRSnackbar_1.activeSnackbars.push(this);
|
|
81
|
+
this.updatePositions();
|
|
82
|
+
// Set up auto-dismiss
|
|
83
|
+
if (this.duration > 0) {
|
|
84
|
+
this.dismissTimeout = window.setTimeout(() => {
|
|
85
|
+
this.dismiss();
|
|
86
|
+
}, this.duration);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
disconnectedCallback() {
|
|
90
|
+
super.disconnectedCallback();
|
|
91
|
+
// Remove from active snackbars
|
|
92
|
+
const index = KRSnackbar_1.activeSnackbars.indexOf(this);
|
|
93
|
+
if (index > -1) {
|
|
94
|
+
KRSnackbar_1.activeSnackbars.splice(index, 1);
|
|
95
|
+
}
|
|
96
|
+
// Update positions of remaining snackbars
|
|
97
|
+
this.updatePositions();
|
|
98
|
+
// Clear timeout
|
|
99
|
+
if (this.dismissTimeout) {
|
|
100
|
+
clearTimeout(this.dismissTimeout);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
updatePositions() {
|
|
104
|
+
let bottomOffset = 24;
|
|
105
|
+
for (const snackbar of KRSnackbar_1.activeSnackbars) {
|
|
106
|
+
snackbar.style.bottom = `${bottomOffset}px`;
|
|
107
|
+
bottomOffset += snackbar.offsetHeight + 8;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
dismiss() {
|
|
111
|
+
if (this.dismissTimeout) {
|
|
112
|
+
clearTimeout(this.dismissTimeout);
|
|
113
|
+
this.dismissTimeout = null;
|
|
114
|
+
}
|
|
115
|
+
this.classList.add('kr-snackbar--closing');
|
|
116
|
+
this.addEventListener('animationend', () => {
|
|
117
|
+
this.dispatchEvent(new CustomEvent('dismiss', { bubbles: true, composed: true }));
|
|
118
|
+
this.remove();
|
|
119
|
+
}, { once: true });
|
|
120
|
+
}
|
|
121
|
+
render() {
|
|
122
|
+
const icons = {
|
|
123
|
+
info: html `<svg class="icon" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z" clip-rule="evenodd"/></svg>`,
|
|
124
|
+
success: html `<svg class="icon" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z" clip-rule="evenodd"/></svg>`,
|
|
125
|
+
warning: html `<svg class="icon" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z" clip-rule="evenodd"/></svg>`,
|
|
126
|
+
error: html `<svg class="icon" viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z" clip-rule="evenodd"/></svg>`,
|
|
127
|
+
};
|
|
128
|
+
return html `
|
|
129
|
+
${icons[this.type]}
|
|
130
|
+
<div class="content">
|
|
131
|
+
${this.title ? html `<div class="title">${this.title}</div>` : ''}
|
|
132
|
+
<div class="message">${this.message}</div>
|
|
133
|
+
</div>
|
|
134
|
+
<button
|
|
135
|
+
class="dismiss"
|
|
136
|
+
type="button"
|
|
137
|
+
aria-label="Dismiss"
|
|
138
|
+
@click=${this.dismiss}
|
|
139
|
+
>
|
|
140
|
+
<svg viewBox="0 0 20 20" fill="currentColor" width="16" height="16">
|
|
141
|
+
<path fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"/>
|
|
142
|
+
</svg>
|
|
143
|
+
</button>
|
|
144
|
+
`;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
KRSnackbar.styles = css `
|
|
148
|
+
:host,
|
|
149
|
+
*,
|
|
150
|
+
*::before,
|
|
151
|
+
*::after {
|
|
152
|
+
box-sizing: border-box;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
:host {
|
|
156
|
+
position: fixed;
|
|
157
|
+
left: 16px;
|
|
158
|
+
z-index: 10000;
|
|
159
|
+
display: flex;
|
|
160
|
+
align-items: flex-start;
|
|
161
|
+
gap: 12px;
|
|
162
|
+
padding: 14px 12px 14px 16px;
|
|
163
|
+
border-radius: 8px;
|
|
164
|
+
border: 1px solid;
|
|
165
|
+
border-left: 4px solid;
|
|
166
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
167
|
+
min-width: 280px;
|
|
168
|
+
max-width: 400px;
|
|
169
|
+
min-height: 48px;
|
|
170
|
+
animation: slideIn 0.2s ease-out;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
@keyframes slideIn {
|
|
174
|
+
from {
|
|
175
|
+
opacity: 0;
|
|
176
|
+
transform: translateX(-100%);
|
|
177
|
+
}
|
|
178
|
+
to {
|
|
179
|
+
opacity: 1;
|
|
180
|
+
transform: translateX(0);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
@keyframes slideOut {
|
|
185
|
+
from {
|
|
186
|
+
opacity: 1;
|
|
187
|
+
transform: translateX(0);
|
|
188
|
+
}
|
|
189
|
+
to {
|
|
190
|
+
opacity: 0;
|
|
191
|
+
transform: translateX(-100%);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
:host(.kr-snackbar--closing) {
|
|
196
|
+
animation: slideOut 0.15s ease-in forwards;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/* Variants */
|
|
200
|
+
:host(.kr-snackbar--info) {
|
|
201
|
+
background-color: #eff6ff;
|
|
202
|
+
border-color: #bfdbfe;
|
|
203
|
+
border-left-color: #3b82f6;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
:host(.kr-snackbar--info) .icon {
|
|
207
|
+
color: #2563eb;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
:host(.kr-snackbar--success) {
|
|
211
|
+
background-color: #f0fdf4;
|
|
212
|
+
border-color: #bbf7d0;
|
|
213
|
+
border-left-color: #22c55e;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
:host(.kr-snackbar--success) .icon {
|
|
217
|
+
color: #16a34a;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
:host(.kr-snackbar--warning) {
|
|
221
|
+
background-color: #fffbeb;
|
|
222
|
+
border-color: #fde68a;
|
|
223
|
+
border-left-color: #f59e0b;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
:host(.kr-snackbar--warning) .icon {
|
|
227
|
+
color: #d97706;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
:host(.kr-snackbar--error) {
|
|
231
|
+
background-color: #fef2f2;
|
|
232
|
+
border-color: #fecaca;
|
|
233
|
+
border-left-color: #ef4444;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
:host(.kr-snackbar--error) .icon {
|
|
237
|
+
color: #dc2626;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.icon {
|
|
241
|
+
flex-shrink: 0;
|
|
242
|
+
width: 20px;
|
|
243
|
+
height: 20px;
|
|
244
|
+
margin-top: 1px;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
.content {
|
|
248
|
+
flex: 1;
|
|
249
|
+
min-width: 0;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
.title {
|
|
253
|
+
font-size: 14px;
|
|
254
|
+
font-weight: 600;
|
|
255
|
+
color: #000000;
|
|
256
|
+
margin: 0 0 2px 0;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
.message {
|
|
260
|
+
font-size: 14px;
|
|
261
|
+
color: #000000;
|
|
262
|
+
margin: 0;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
.dismiss {
|
|
266
|
+
flex-shrink: 0;
|
|
267
|
+
display: flex;
|
|
268
|
+
align-items: center;
|
|
269
|
+
justify-content: center;
|
|
270
|
+
width: 24px;
|
|
271
|
+
height: 24px;
|
|
272
|
+
padding: 0;
|
|
273
|
+
background: none;
|
|
274
|
+
border: none;
|
|
275
|
+
border-radius: 4px;
|
|
276
|
+
color: #6b7280;
|
|
277
|
+
cursor: pointer;
|
|
278
|
+
transition: background 0.15s ease, color 0.15s ease;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.dismiss:hover {
|
|
282
|
+
background-color: rgba(0, 0, 0, 0.05);
|
|
283
|
+
color: #374151;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.dismiss:focus-visible {
|
|
287
|
+
outline: 2px solid #3b82f6;
|
|
288
|
+
outline-offset: 2px;
|
|
289
|
+
}
|
|
290
|
+
`;
|
|
291
|
+
/** Track active snackbars for stacking */
|
|
292
|
+
KRSnackbar.activeSnackbars = [];
|
|
293
|
+
__decorate([
|
|
294
|
+
property({ type: String })
|
|
295
|
+
], KRSnackbar.prototype, "type", void 0);
|
|
296
|
+
__decorate([
|
|
297
|
+
property({ type: String })
|
|
298
|
+
], KRSnackbar.prototype, "title", void 0);
|
|
299
|
+
__decorate([
|
|
300
|
+
property({ type: String })
|
|
301
|
+
], KRSnackbar.prototype, "message", void 0);
|
|
302
|
+
__decorate([
|
|
303
|
+
property({ type: Number })
|
|
304
|
+
], KRSnackbar.prototype, "duration", void 0);
|
|
305
|
+
KRSnackbar = KRSnackbar_1 = __decorate([
|
|
306
|
+
customElement('kr-snackbar')
|
|
307
|
+
], KRSnackbar);
|
|
308
|
+
export { KRSnackbar };
|
|
309
|
+
//# sourceMappingURL=snackbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snackbar.js","sourceRoot":"","sources":["../../src/snackbar/snackbar.ts"],"names":[],"mappings":"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"}
|