@linktr.ee/messaging-react 1.26.1 → 1.28.0-rc-1776225927

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 (58) hide show
  1. package/dist/Creator-D38dWn2X.js +318 -0
  2. package/dist/Creator-D38dWn2X.js.map +1 -0
  3. package/dist/MediaPlayer-DE9MC6k6.js +599 -0
  4. package/dist/MediaPlayer-DE9MC6k6.js.map +1 -0
  5. package/dist/Preview-DqAv16NS.js +87 -0
  6. package/dist/Preview-DqAv16NS.js.map +1 -0
  7. package/dist/Visitor-BG-9-3HU.js +199 -0
  8. package/dist/Visitor-BG-9-3HU.js.map +1 -0
  9. package/dist/dash.all.min-Duv4lvGS.js +18858 -0
  10. package/dist/dash.all.min-Duv4lvGS.js.map +1 -0
  11. package/dist/hls-Bogc7CBn.js +21710 -0
  12. package/dist/hls-Bogc7CBn.js.map +1 -0
  13. package/dist/index-Da-xN4Yq.js +16142 -0
  14. package/dist/index-Da-xN4Yq.js.map +1 -0
  15. package/dist/index-Dj9rqWcU.js +69 -0
  16. package/dist/index-Dj9rqWcU.js.map +1 -0
  17. package/dist/index.d.ts +74 -10
  18. package/dist/index.js +979 -934
  19. package/dist/index.js.map +1 -1
  20. package/dist/mixin-B6jYfIcp.js +808 -0
  21. package/dist/mixin-B6jYfIcp.js.map +1 -0
  22. package/dist/react-BxlQMOfz.js +419 -0
  23. package/dist/react-BxlQMOfz.js.map +1 -0
  24. package/dist/react-COAP-MIW.js +377 -0
  25. package/dist/react-COAP-MIW.js.map +1 -0
  26. package/dist/react-Cn4WlMcl.js +3108 -0
  27. package/dist/react-Cn4WlMcl.js.map +1 -0
  28. package/dist/react-CwTJArKY.js +459 -0
  29. package/dist/react-CwTJArKY.js.map +1 -0
  30. package/dist/react-DkfS_atT.js +373 -0
  31. package/dist/react-DkfS_atT.js.map +1 -0
  32. package/dist/react-Pea5fum1.js +286 -0
  33. package/dist/react-Pea5fum1.js.map +1 -0
  34. package/dist/react-RiBbsUDd.js +534 -0
  35. package/dist/react-RiBbsUDd.js.map +1 -0
  36. package/dist/react-dS1WBxxz.js +238 -0
  37. package/dist/react-dS1WBxxz.js.map +1 -0
  38. package/package.json +2 -1
  39. package/src/components/ChannelView.tsx +12 -2
  40. package/src/components/CustomMessage/CustomMessage.stories.tsx +173 -41
  41. package/src/components/CustomMessage/MessageTag.tsx +5 -0
  42. package/src/components/CustomMessage/index.tsx +43 -4
  43. package/src/components/LockedAttachment/LockedAttachment.stories.tsx +343 -0
  44. package/src/components/LockedAttachment/components/Creator.tsx +469 -0
  45. package/src/components/LockedAttachment/components/MediaPlayer.tsx +359 -0
  46. package/src/components/LockedAttachment/components/Visitor.tsx +356 -0
  47. package/src/components/LockedAttachment/index.tsx +39 -0
  48. package/src/components/LockedAttachment/types.ts +17 -0
  49. package/src/components/LockedAttachment/utils/icons.ts +53 -0
  50. package/src/components/LockedAttachment/utils/mimeType.test.ts +119 -0
  51. package/src/components/LockedAttachment/utils/mimeType.ts +37 -0
  52. package/src/components/ParticipantPicker/index.tsx +8 -1
  53. package/src/hooks/useParticipants.ts +3 -2
  54. package/src/index.ts +4 -0
  55. package/src/stories/decorators/storyUser.tsx +37 -0
  56. package/src/stream-custom-data.ts +9 -3
  57. package/src/types.ts +20 -1
  58. package/src/utils/isDevBuild.ts +10 -0
@@ -0,0 +1,377 @@
1
+ var Z = Object.defineProperty;
2
+ var U = (e) => {
3
+ throw TypeError(e);
4
+ };
5
+ var tt = (e, i, t) => i in e ? Z(e, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : e[i] = t;
6
+ var k = (e, i, t) => tt(e, typeof i != "symbol" ? i + "" : i, t), B = (e, i, t) => i.has(e) || U("Cannot " + t);
7
+ var a = (e, i, t) => (B(e, i, "read from private field"), t ? t.call(e) : i.get(e)), d = (e, i, t) => i.has(e) ? U("Cannot add the same private member more than once") : i instanceof WeakSet ? i.add(e) : i.set(e, t), n = (e, i, t, s) => (B(e, i, "write to private field"), s ? s.call(e, t) : i.set(e, t), t), q = (e, i, t) => (B(e, i, "access private method"), t);
8
+ import et from "react";
9
+ const it = "https://open.spotify.com", st = /open\.spotify\.com\/(\w+)\/(\w+)/i, nt = "https://open.spotify.com/embed-podcast/iframe-api/v1", ot = "SpotifyIframeApi", rt = "onSpotifyIframeApiReady";
10
+ function F(e, i = {}) {
11
+ const t = {
12
+ src: K(e, i),
13
+ scrolling: "no",
14
+ frameborder: 0,
15
+ width: "100%",
16
+ height: "100%",
17
+ allow: "accelerometer; fullscreen; autoplay; encrypted-media; gyroscope; picture-in-picture"
18
+ };
19
+ return (
20
+ /*html*/
21
+ `
22
+ <style>
23
+ :host {
24
+ display: inline-block;
25
+ min-width: 160px;
26
+ min-height: 80px;
27
+ position: relative;
28
+ }
29
+ iframe {
30
+ position: absolute;
31
+ top: 0;
32
+ left: 0;
33
+ width: 100%;
34
+ height: 100%;
35
+ overflow: hidden;
36
+ }
37
+ :host(:not([controls])) {
38
+ display: none !important;
39
+ }
40
+ </style>
41
+ <iframe${at(t)}></iframe>
42
+ `
43
+ );
44
+ }
45
+ function K(e, i) {
46
+ var t, s, u;
47
+ if (!e.src) return;
48
+ const c = e.src.match(st), b = c && c[1], g = c && c[2], A = {
49
+ t: (t = i.config) == null ? void 0 : t.startAt,
50
+ theme: ((s = i.config) == null ? void 0 : s.theme) === "dark" ? "0" : null
51
+ }, l = (u = i.config) != null && u.preferVideo ? "/video" : "";
52
+ return `${it}/embed/${b}/${g}${l}?${lt(A)}`;
53
+ }
54
+ var L, S, C, f, p, m, v, _, P, H, N, Q;
55
+ class R extends (globalThis.HTMLElement ?? class {
56
+ }) {
57
+ constructor() {
58
+ super();
59
+ d(this, N);
60
+ k(this, "loadComplete", new V());
61
+ d(this, L);
62
+ d(this, S);
63
+ d(this, C);
64
+ d(this, f, !1);
65
+ d(this, p, !1);
66
+ d(this, m, !0);
67
+ d(this, v, 0);
68
+ d(this, _, NaN);
69
+ d(this, P, !1);
70
+ d(this, H, null);
71
+ q(this, N, Q).call(this, "config");
72
+ }
73
+ async load() {
74
+ var t, s, u;
75
+ if (a(this, L)) return;
76
+ a(this, S) && (this.loadComplete = new V()), n(this, S, !0), await n(this, L, Promise.resolve()), n(this, L, null), n(this, f, !1), n(this, p, !1), n(this, v, 0), n(this, _, NaN), n(this, P, !1), this.dispatchEvent(new Event("emptied"));
77
+ let c = this.api;
78
+ if (this.api = null, !this.src)
79
+ return;
80
+ this.dispatchEvent(new Event("loadstart"));
81
+ const b = {
82
+ t: (t = this.config) == null ? void 0 : t.startAt,
83
+ theme: ((s = this.config) == null ? void 0 : s.theme) === "dark" ? "0" : null,
84
+ preferVideo: (u = this.config) == null ? void 0 : u.preferVideo
85
+ };
86
+ if (a(this, C))
87
+ this.api = c, this.api.iframeElement.src = K(G(this.attributes), this);
88
+ else {
89
+ n(this, C, !0), this.shadowRoot || (this.attachShadow({ mode: "open" }), this.shadowRoot.innerHTML = F(G(this.attributes), this));
90
+ let g = this.shadowRoot.querySelector("iframe");
91
+ const A = await ct(nt, ot, rt);
92
+ this.api = await new Promise((l) => A.createController(g, b, l)), this.api.iframeElement = g, this.api.addListener("ready", () => {
93
+ this.dispatchEvent(new Event("loadedmetadata")), this.dispatchEvent(new Event("durationchange")), this.dispatchEvent(new Event("volumechange"));
94
+ }), this.api.addListener("playback_update", (l) => {
95
+ if (a(this, p) && a(this, m) && (l.data.isBuffering || !l.data.isPaused)) {
96
+ n(this, p, !1), this.currentTime = 1;
97
+ return;
98
+ }
99
+ if (l.data.duration / 1e3 !== a(this, _) && (n(this, p, !1), n(this, _, l.data.duration / 1e3), this.dispatchEvent(new Event("durationchange"))), l.data.position / 1e3 !== a(this, v) && (n(this, P, !1), n(this, p, !1), n(this, v, l.data.position / 1e3), this.dispatchEvent(new Event("timeupdate"))), !a(this, f) && !a(this, m) && l.data.isPaused) {
100
+ n(this, m, !0), this.dispatchEvent(new Event("pause"));
101
+ return;
102
+ }
103
+ if (a(this, m) && (l.data.isBuffering || !l.data.isPaused)) {
104
+ n(this, m, !1), this.dispatchEvent(new Event("play")), n(this, f, l.data.isBuffering), a(this, f) ? this.dispatchEvent(new Event("waiting")) : this.dispatchEvent(new Event("playing"));
105
+ return;
106
+ }
107
+ if (a(this, f) && !l.data.isPaused) {
108
+ n(this, f, !1), this.dispatchEvent(new Event("playing"));
109
+ return;
110
+ }
111
+ if (!this.paused && !this.seeking && !a(this, p) && Math.ceil(this.currentTime) >= this.duration) {
112
+ if (n(this, p, !0), this.loop) {
113
+ this.currentTime = 1;
114
+ return;
115
+ }
116
+ this.continuous || (this.pause(), this.dispatchEvent(new Event("ended")));
117
+ return;
118
+ }
119
+ });
120
+ }
121
+ this.loadComplete.resolve(), await this.loadComplete;
122
+ }
123
+ async attributeChangedCallback(t, s, u) {
124
+ if (s !== u)
125
+ switch (t) {
126
+ case "src": {
127
+ this.load();
128
+ return;
129
+ }
130
+ }
131
+ }
132
+ async play() {
133
+ var t;
134
+ return n(this, m, !1), n(this, f, !0), this.dispatchEvent(new Event("play")), await this.loadComplete, (t = this.api) == null ? void 0 : t.resume();
135
+ }
136
+ async pause() {
137
+ var t;
138
+ return await this.loadComplete, (t = this.api) == null ? void 0 : t.pause();
139
+ }
140
+ get config() {
141
+ return a(this, H);
142
+ }
143
+ set config(t) {
144
+ n(this, H, t);
145
+ }
146
+ get paused() {
147
+ return a(this, m) ?? !0;
148
+ }
149
+ get muted() {
150
+ return !1;
151
+ }
152
+ set muted(t) {
153
+ }
154
+ get volume() {
155
+ return 1;
156
+ }
157
+ set volume(t) {
158
+ }
159
+ get ended() {
160
+ return Math.ceil(this.currentTime) >= this.duration;
161
+ }
162
+ get seeking() {
163
+ return a(this, P);
164
+ }
165
+ get loop() {
166
+ return this.hasAttribute("loop");
167
+ }
168
+ set loop(t) {
169
+ this.loop != t && this.toggleAttribute("loop", !!t);
170
+ }
171
+ get currentTime() {
172
+ return a(this, v);
173
+ }
174
+ set currentTime(t) {
175
+ if (this.currentTime == t) return;
176
+ n(this, P, !0);
177
+ let s = a(this, v);
178
+ n(this, v, t), this.dispatchEvent(new Event("timeupdate")), n(this, v, s), this.loadComplete.then(() => {
179
+ var u;
180
+ (u = this.api) == null || u.seek(t);
181
+ });
182
+ }
183
+ get duration() {
184
+ return a(this, _);
185
+ }
186
+ get src() {
187
+ return this.getAttribute("src");
188
+ }
189
+ set src(t) {
190
+ this.setAttribute("src", `${t}`);
191
+ }
192
+ }
193
+ L = new WeakMap(), S = new WeakMap(), C = new WeakMap(), f = new WeakMap(), p = new WeakMap(), m = new WeakMap(), v = new WeakMap(), _ = new WeakMap(), P = new WeakMap(), H = new WeakMap(), N = new WeakSet(), // This is a pattern to update property values that are set before
194
+ // the custom element is upgraded.
195
+ // https://web.dev/custom-elements-best-practices/#make-properties-lazy
196
+ Q = function(t) {
197
+ if (Object.prototype.hasOwnProperty.call(this, t)) {
198
+ const s = this[t];
199
+ delete this[t], this[t] = s;
200
+ }
201
+ }, k(R, "getTemplateHTML", F), k(R, "shadowRootOptions", { mode: "open" }), k(R, "observedAttributes", [
202
+ "controls",
203
+ "loop",
204
+ "src"
205
+ ]);
206
+ function at(e) {
207
+ let i = "";
208
+ for (const t in e) {
209
+ const s = e[t];
210
+ s === "" ? i += ` ${t}` : i += ` ${t}="${s}"`;
211
+ }
212
+ return i;
213
+ }
214
+ function lt(e) {
215
+ return String(new URLSearchParams(ut(e)));
216
+ }
217
+ function ut(e) {
218
+ let i = {};
219
+ for (let t in e) {
220
+ let s = e[t];
221
+ s === !0 || s === "" ? i[t] = 1 : s === !1 ? i[t] = 0 : s != null && (i[t] = s);
222
+ }
223
+ return i;
224
+ }
225
+ function G(e) {
226
+ let i = {};
227
+ for (let t of e)
228
+ i[t.name] = t.value;
229
+ return i;
230
+ }
231
+ const j = {};
232
+ async function ct(e, i, t) {
233
+ return j[e] ? j[e] : self[i] ? Promise.resolve(self[i]) : j[e] = new Promise(function(s, u) {
234
+ const c = document.createElement("script");
235
+ c.src = e;
236
+ const b = (g) => s(g);
237
+ self[t] = b, c.onload = () => !t, c.onerror = u, document.head.append(c);
238
+ });
239
+ }
240
+ class V extends Promise {
241
+ constructor(i = () => {
242
+ }) {
243
+ let t, s;
244
+ super((u, c) => {
245
+ i(u, c), t = u, s = c;
246
+ }), this.resolve = t, this.reject = s;
247
+ }
248
+ }
249
+ globalThis.customElements && !globalThis.customElements.get("spotify-audio") && globalThis.customElements.define("spotify-audio", R);
250
+ var ht = R, dt = /* @__PURE__ */ new Set([
251
+ "style",
252
+ "children",
253
+ "ref",
254
+ "key",
255
+ "suppressContentEditableWarning",
256
+ "suppressHydrationWarning",
257
+ "dangerouslySetInnerHTML"
258
+ ]), ft = {
259
+ className: "class",
260
+ htmlFor: "for"
261
+ };
262
+ function X(e) {
263
+ return e.toLowerCase();
264
+ }
265
+ function Y(e) {
266
+ if (typeof e == "boolean") return e ? "" : void 0;
267
+ if (typeof e != "function" && !(typeof e == "object" && e !== null))
268
+ return e;
269
+ }
270
+ function pt({
271
+ react: e,
272
+ tagName: i,
273
+ elementClass: t,
274
+ events: s,
275
+ displayName: u,
276
+ defaultProps: c,
277
+ toAttributeName: b = X,
278
+ toAttributeValue: g = Y
279
+ }) {
280
+ const A = Number.parseInt(e.version) >= 19, l = e.forwardRef((W, M) => {
281
+ var x, z;
282
+ const y = e.useRef(null), O = e.useRef(/* @__PURE__ */ new Map()), $ = {}, D = {}, w = {}, I = {};
283
+ for (const [o, r] of Object.entries(W)) {
284
+ if (dt.has(o)) {
285
+ w[o] = r;
286
+ continue;
287
+ }
288
+ const h = b(ft[o] ?? o);
289
+ if (t.prototype && o in t.prototype && !(o in (((x = globalThis.HTMLElement) == null ? void 0 : x.prototype) ?? {})) && !((z = t.observedAttributes) != null && z.some((T) => T === h))) {
290
+ I[o] = r;
291
+ continue;
292
+ }
293
+ if (o.startsWith("on")) {
294
+ $[o] = r;
295
+ continue;
296
+ }
297
+ const E = g(r);
298
+ if (h && E != null && (D[h] = String(E), A || (w[h] = E)), h && A) {
299
+ const T = Y(r);
300
+ E !== T ? w[h] = E : w[h] = r;
301
+ }
302
+ }
303
+ if (typeof window < "u") {
304
+ for (const o in $) {
305
+ const r = $[o], h = o.endsWith("Capture"), E = ((s == null ? void 0 : s[o]) ?? o.slice(2).toLowerCase()).slice(
306
+ 0,
307
+ h ? -7 : void 0
308
+ );
309
+ e.useLayoutEffect(() => {
310
+ const T = y == null ? void 0 : y.current;
311
+ if (!(!T || typeof r != "function"))
312
+ return T.addEventListener(E, r, h), () => {
313
+ T.removeEventListener(E, r, h);
314
+ };
315
+ }, [y == null ? void 0 : y.current, r]);
316
+ }
317
+ e.useLayoutEffect(() => {
318
+ if (y.current === null) return;
319
+ const o = /* @__PURE__ */ new Map();
320
+ for (const r in I)
321
+ J(y.current, r, I[r]), O.current.delete(r), o.set(r, I[r]);
322
+ for (const [r, h] of O.current)
323
+ J(y.current, r, void 0);
324
+ O.current = o;
325
+ });
326
+ }
327
+ if (typeof window > "u" && (t != null && t.getTemplateHTML) && (t != null && t.shadowRootOptions)) {
328
+ const { mode: o, delegatesFocus: r } = t.shadowRootOptions, h = e.createElement("template", {
329
+ shadowrootmode: o,
330
+ shadowrootdelegatesfocus: r,
331
+ dangerouslySetInnerHTML: {
332
+ __html: t.getTemplateHTML(D, W)
333
+ },
334
+ key: "ce-la-react-ssr-template-shadow-root"
335
+ });
336
+ w.children = [h, w.children];
337
+ }
338
+ return e.createElement(i, {
339
+ ...c,
340
+ ...w,
341
+ ref: e.useCallback(
342
+ (o) => {
343
+ y.current = o, typeof M == "function" ? M(o) : M !== null && (M.current = o);
344
+ },
345
+ [M]
346
+ )
347
+ }, w.children);
348
+ });
349
+ return l.displayName = u ?? t.name, l;
350
+ }
351
+ function J(e, i, t) {
352
+ var s;
353
+ e[i] = t, t == null && i in (((s = globalThis.HTMLElement) == null ? void 0 : s.prototype) ?? {}) && e.removeAttribute(i);
354
+ }
355
+ var gt = pt({
356
+ react: et,
357
+ tagName: "spotify-audio",
358
+ elementClass: ht,
359
+ toAttributeName(e) {
360
+ return e === "muted" ? "" : e === "defaultMuted" ? "muted" : X(e);
361
+ }
362
+ });
363
+ /*! Bundled license information:
364
+
365
+ ce-la-react/dist/ce-la-react.js:
366
+ (**
367
+ * @license
368
+ * Copyright 2018 Google LLC
369
+ * SPDX-License-Identifier: BSD-3-Clause
370
+ *
371
+ * Modified version of `@lit/react` for vanilla custom elements with support for SSR.
372
+ *)
373
+ */
374
+ export {
375
+ gt as default
376
+ };
377
+ //# sourceMappingURL=react-COAP-MIW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-COAP-MIW.js","sources":["../../../node_modules/spotify-audio-element/dist/spotify-audio-element.js","../../../node_modules/spotify-audio-element/dist/react.js"],"sourcesContent":["const EMBED_BASE = \"https://open.spotify.com\";\nconst MATCH_SRC = /open\\.spotify\\.com\\/(\\w+)\\/(\\w+)/i;\nconst API_URL = \"https://open.spotify.com/embed-podcast/iframe-api/v1\";\nconst API_GLOBAL = \"SpotifyIframeApi\";\nconst API_GLOBAL_READY = \"onSpotifyIframeApiReady\";\nfunction getTemplateHTML(attrs, props = {}) {\n const iframeAttrs = {\n src: serializeIframeUrl(attrs, props),\n scrolling: \"no\",\n frameborder: 0,\n width: \"100%\",\n height: \"100%\",\n allow: \"accelerometer; fullscreen; autoplay; encrypted-media; gyroscope; picture-in-picture\"\n };\n return (\n /*html*/\n `\n <style>\n :host {\n display: inline-block;\n min-width: 160px;\n min-height: 80px;\n position: relative;\n }\n iframe {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n overflow: hidden;\n }\n :host(:not([controls])) {\n display: none !important;\n }\n </style>\n <iframe${serializeAttributes(iframeAttrs)}></iframe>\n `\n );\n}\nfunction serializeIframeUrl(attrs, props) {\n var _a, _b, _c;\n if (!attrs.src) return;\n const matches = attrs.src.match(MATCH_SRC);\n const type = matches && matches[1];\n const metaId = matches && matches[2];\n const params = {\n t: (_a = props.config) == null ? void 0 : _a.startAt,\n theme: ((_b = props.config) == null ? void 0 : _b.theme) === \"dark\" ? \"0\" : null\n };\n const videoPath = ((_c = props.config) == null ? void 0 : _c.preferVideo) ? \"/video\" : \"\";\n return `${EMBED_BASE}/embed/${type}/${metaId}${videoPath}?${serialize(params)}`;\n}\nclass SpotifyAudioElement extends (globalThis.HTMLElement ?? class {\n}) {\n static getTemplateHTML = getTemplateHTML;\n static shadowRootOptions = { mode: \"open\" };\n static observedAttributes = [\n \"controls\",\n \"loop\",\n \"src\"\n ];\n loadComplete = new PublicPromise();\n #loadRequested;\n #hasLoaded;\n #isInit;\n #isWaiting = false;\n #closeToEnded = false;\n #paused = true;\n #currentTime = 0;\n #duration = NaN;\n #seeking = false;\n #config = null;\n constructor() {\n super();\n this.#upgradeProperty(\"config\");\n }\n async load() {\n var _a, _b, _c;\n if (this.#loadRequested) return;\n if (this.#hasLoaded) this.loadComplete = new PublicPromise();\n this.#hasLoaded = true;\n await (this.#loadRequested = Promise.resolve());\n this.#loadRequested = null;\n this.#isWaiting = false;\n this.#closeToEnded = false;\n this.#currentTime = 0;\n this.#duration = NaN;\n this.#seeking = false;\n this.dispatchEvent(new Event(\"emptied\"));\n let oldApi = this.api;\n this.api = null;\n if (!this.src) {\n return;\n }\n this.dispatchEvent(new Event(\"loadstart\"));\n const options = {\n t: (_a = this.config) == null ? void 0 : _a.startAt,\n theme: ((_b = this.config) == null ? void 0 : _b.theme) === \"dark\" ? \"0\" : null,\n preferVideo: (_c = this.config) == null ? void 0 : _c.preferVideo\n };\n if (this.#isInit) {\n this.api = oldApi;\n this.api.iframeElement.src = serializeIframeUrl(namedNodeMapToObject(this.attributes), this);\n } else {\n this.#isInit = true;\n if (!this.shadowRoot) {\n this.attachShadow({ mode: \"open\" });\n this.shadowRoot.innerHTML = getTemplateHTML(namedNodeMapToObject(this.attributes), this);\n }\n let iframe = this.shadowRoot.querySelector(\"iframe\");\n const Spotify = await loadScript(API_URL, API_GLOBAL, API_GLOBAL_READY);\n this.api = await new Promise((resolve) => Spotify.createController(iframe, options, resolve));\n this.api.iframeElement = iframe;\n this.api.addListener(\"ready\", () => {\n this.dispatchEvent(new Event(\"loadedmetadata\"));\n this.dispatchEvent(new Event(\"durationchange\"));\n this.dispatchEvent(new Event(\"volumechange\"));\n });\n this.api.addListener(\"playback_update\", (event) => {\n if (this.#closeToEnded && this.#paused && (event.data.isBuffering || !event.data.isPaused)) {\n this.#closeToEnded = false;\n this.currentTime = 1;\n return;\n }\n if (event.data.duration / 1e3 !== this.#duration) {\n this.#closeToEnded = false;\n this.#duration = event.data.duration / 1e3;\n this.dispatchEvent(new Event(\"durationchange\"));\n }\n if (event.data.position / 1e3 !== this.#currentTime) {\n this.#seeking = false;\n this.#closeToEnded = false;\n this.#currentTime = event.data.position / 1e3;\n this.dispatchEvent(new Event(\"timeupdate\"));\n }\n if (!this.#isWaiting && !this.#paused && event.data.isPaused) {\n this.#paused = true;\n this.dispatchEvent(new Event(\"pause\"));\n return;\n }\n if (this.#paused && (event.data.isBuffering || !event.data.isPaused)) {\n this.#paused = false;\n this.dispatchEvent(new Event(\"play\"));\n this.#isWaiting = event.data.isBuffering;\n if (this.#isWaiting) {\n this.dispatchEvent(new Event(\"waiting\"));\n } else {\n this.dispatchEvent(new Event(\"playing\"));\n }\n return;\n }\n if (this.#isWaiting && !event.data.isPaused) {\n this.#isWaiting = false;\n this.dispatchEvent(new Event(\"playing\"));\n return;\n }\n if (!this.paused && !this.seeking && !this.#closeToEnded && Math.ceil(this.currentTime) >= this.duration) {\n this.#closeToEnded = true;\n if (this.loop) {\n this.currentTime = 1;\n return;\n }\n if (!this.continuous) {\n this.pause();\n this.dispatchEvent(new Event(\"ended\"));\n }\n return;\n }\n });\n }\n this.loadComplete.resolve();\n await this.loadComplete;\n }\n async attributeChangedCallback(attrName, oldValue, newValue) {\n if (oldValue === newValue) return;\n switch (attrName) {\n case \"src\": {\n this.load();\n return;\n }\n }\n }\n async play() {\n var _a;\n this.#paused = false;\n this.#isWaiting = true;\n this.dispatchEvent(new Event(\"play\"));\n await this.loadComplete;\n return (_a = this.api) == null ? void 0 : _a.resume();\n }\n async pause() {\n var _a;\n await this.loadComplete;\n return (_a = this.api) == null ? void 0 : _a.pause();\n }\n get config() {\n return this.#config;\n }\n set config(value) {\n this.#config = value;\n }\n get paused() {\n return this.#paused ?? true;\n }\n get muted() {\n return false;\n }\n set muted(val) {\n }\n get volume() {\n return 1;\n }\n set volume(val) {\n }\n get ended() {\n return Math.ceil(this.currentTime) >= this.duration;\n }\n get seeking() {\n return this.#seeking;\n }\n get loop() {\n return this.hasAttribute(\"loop\");\n }\n set loop(val) {\n if (this.loop == val) return;\n this.toggleAttribute(\"loop\", Boolean(val));\n }\n get currentTime() {\n return this.#currentTime;\n }\n set currentTime(val) {\n if (this.currentTime == val) return;\n this.#seeking = true;\n let oldTime = this.#currentTime;\n this.#currentTime = val;\n this.dispatchEvent(new Event(\"timeupdate\"));\n this.#currentTime = oldTime;\n this.loadComplete.then(() => {\n var _a;\n (_a = this.api) == null ? void 0 : _a.seek(val);\n });\n }\n get duration() {\n return this.#duration;\n }\n get src() {\n return this.getAttribute(\"src\");\n }\n set src(val) {\n this.setAttribute(\"src\", `${val}`);\n }\n // This is a pattern to update property values that are set before\n // the custom element is upgraded.\n // https://web.dev/custom-elements-best-practices/#make-properties-lazy\n #upgradeProperty(prop) {\n if (Object.prototype.hasOwnProperty.call(this, prop)) {\n const value = this[prop];\n delete this[prop];\n this[prop] = value;\n }\n }\n}\nfunction serializeAttributes(attrs) {\n let html = \"\";\n for (const key in attrs) {\n const value = attrs[key];\n if (value === \"\") html += ` ${key}`;\n else html += ` ${key}=\"${value}\"`;\n }\n return html;\n}\nfunction serialize(props) {\n return String(new URLSearchParams(boolToBinary(props)));\n}\nfunction boolToBinary(props) {\n let p = {};\n for (let key in props) {\n let val = props[key];\n if (val === true || val === \"\") p[key] = 1;\n else if (val === false) p[key] = 0;\n else if (val != null) p[key] = val;\n }\n return p;\n}\nfunction namedNodeMapToObject(namedNodeMap) {\n let obj = {};\n for (let attr of namedNodeMap) {\n obj[attr.name] = attr.value;\n }\n return obj;\n}\nconst loadScriptCache = {};\nasync function loadScript(src, globalName, readyFnName) {\n if (loadScriptCache[src]) return loadScriptCache[src];\n if (globalName && self[globalName]) {\n return Promise.resolve(self[globalName]);\n }\n return loadScriptCache[src] = new Promise(function(resolve, reject) {\n const script = document.createElement(\"script\");\n script.src = src;\n const ready = (api) => resolve(api);\n if (readyFnName) self[readyFnName] = ready;\n script.onload = () => !readyFnName && ready();\n script.onerror = reject;\n document.head.append(script);\n });\n}\nclass PublicPromise extends Promise {\n constructor(executor = () => {\n }) {\n let res, rej;\n super((resolve, reject) => {\n executor(resolve, reject);\n res = resolve;\n rej = reject;\n });\n this.resolve = res;\n this.reject = rej;\n }\n}\nif (globalThis.customElements && !globalThis.customElements.get(\"spotify-audio\")) {\n globalThis.customElements.define(\"spotify-audio\", SpotifyAudioElement);\n}\nvar spotify_audio_element_default = SpotifyAudioElement;\nexport {\n spotify_audio_element_default as default\n};\n","\"use client\";\n\n// dist/react.ts\nimport React from \"react\";\nimport CustomMediaElement from \"./spotify-audio-element.js\";\n\n// ../../node_modules/ce-la-react/dist/ce-la-react.js\nvar reservedReactProps = /* @__PURE__ */ new Set([\n \"style\",\n \"children\",\n \"ref\",\n \"key\",\n \"suppressContentEditableWarning\",\n \"suppressHydrationWarning\",\n \"dangerouslySetInnerHTML\"\n]);\nvar reactPropToAttrNameMap = {\n className: \"class\",\n htmlFor: \"for\"\n};\nfunction defaultToAttributeName(propName) {\n return propName.toLowerCase();\n}\nfunction defaultToAttributeValue(propValue) {\n if (typeof propValue === \"boolean\") return propValue ? \"\" : void 0;\n if (typeof propValue === \"function\") return void 0;\n if (typeof propValue === \"object\" && propValue !== null) return void 0;\n return propValue;\n}\nfunction createComponent({\n react: React2,\n tagName,\n elementClass,\n events,\n displayName,\n defaultProps,\n toAttributeName = defaultToAttributeName,\n toAttributeValue = defaultToAttributeValue\n}) {\n const IS_REACT_19_OR_NEWER = Number.parseInt(React2.version) >= 19;\n const ReactComponent = React2.forwardRef((props, ref) => {\n var _a, _b;\n const elementRef = React2.useRef(null);\n const prevElemPropsRef = React2.useRef(/* @__PURE__ */ new Map());\n const eventProps = {};\n const attrs = {};\n const reactProps = {};\n const elementProps = {};\n for (const [k, v] of Object.entries(props)) {\n if (reservedReactProps.has(k)) {\n reactProps[k] = v;\n continue;\n }\n const attrName = toAttributeName(reactPropToAttrNameMap[k] ?? k);\n if (elementClass.prototype && k in elementClass.prototype && !(k in (((_a = globalThis.HTMLElement) == null ? void 0 : _a.prototype) ?? {})) && !((_b = elementClass.observedAttributes) == null ? void 0 : _b.some((attr) => attr === attrName))) {\n elementProps[k] = v;\n continue;\n }\n if (k.startsWith(\"on\")) {\n eventProps[k] = v;\n continue;\n }\n const attrValue = toAttributeValue(v);\n if (attrName && attrValue != null) {\n attrs[attrName] = String(attrValue);\n if (!IS_REACT_19_OR_NEWER) {\n reactProps[attrName] = attrValue;\n }\n }\n if (attrName && IS_REACT_19_OR_NEWER) {\n const attrValueFromDefault = defaultToAttributeValue(v);\n if (attrValue !== attrValueFromDefault) {\n reactProps[attrName] = attrValue;\n } else {\n reactProps[attrName] = v;\n }\n }\n }\n if (typeof window !== \"undefined\") {\n for (const propName in eventProps) {\n const callback = eventProps[propName];\n const useCapture = propName.endsWith(\"Capture\");\n const eventName = ((events == null ? void 0 : events[propName]) ?? propName.slice(2).toLowerCase()).slice(\n 0,\n useCapture ? -7 : void 0\n );\n React2.useLayoutEffect(() => {\n const eventTarget = elementRef == null ? void 0 : elementRef.current;\n if (!eventTarget || typeof callback !== \"function\") return;\n eventTarget.addEventListener(eventName, callback, useCapture);\n return () => {\n eventTarget.removeEventListener(eventName, callback, useCapture);\n };\n }, [elementRef == null ? void 0 : elementRef.current, callback]);\n }\n React2.useLayoutEffect(() => {\n if (elementRef.current === null) return;\n const newElemProps = /* @__PURE__ */ new Map();\n for (const key in elementProps) {\n setProperty(elementRef.current, key, elementProps[key]);\n prevElemPropsRef.current.delete(key);\n newElemProps.set(key, elementProps[key]);\n }\n for (const [key, _value] of prevElemPropsRef.current) {\n setProperty(elementRef.current, key, void 0);\n }\n prevElemPropsRef.current = newElemProps;\n });\n }\n if (typeof window === \"undefined\" && (elementClass == null ? void 0 : elementClass.getTemplateHTML) && (elementClass == null ? void 0 : elementClass.shadowRootOptions)) {\n const { mode, delegatesFocus } = elementClass.shadowRootOptions;\n const templateShadowRoot = React2.createElement(\"template\", {\n shadowrootmode: mode,\n shadowrootdelegatesfocus: delegatesFocus,\n dangerouslySetInnerHTML: {\n __html: elementClass.getTemplateHTML(attrs, props)\n },\n key: \"ce-la-react-ssr-template-shadow-root\"\n });\n reactProps.children = [templateShadowRoot, reactProps.children];\n }\n return React2.createElement(tagName, {\n ...defaultProps,\n ...reactProps,\n ref: React2.useCallback(\n (node) => {\n elementRef.current = node;\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref !== null) {\n ref.current = node;\n }\n },\n [ref]\n )\n }, reactProps.children);\n });\n ReactComponent.displayName = displayName ?? elementClass.name;\n return ReactComponent;\n}\nfunction setProperty(node, name, value) {\n var _a;\n node[name] = value;\n if (value == null && name in (((_a = globalThis.HTMLElement) == null ? void 0 : _a.prototype) ?? {})) {\n node.removeAttribute(name);\n }\n}\n\n// dist/react.ts\nvar react_default = createComponent({\n react: React,\n tagName: \"spotify-audio\",\n elementClass: CustomMediaElement,\n toAttributeName(propName) {\n if (propName === \"muted\") return \"\";\n if (propName === \"defaultMuted\") return \"muted\";\n return defaultToAttributeName(propName);\n }\n});\nexport {\n react_default as default\n};\n/*! Bundled license information:\n\nce-la-react/dist/ce-la-react.js:\n (**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Modified version of `@lit/react` for vanilla custom elements with support for SSR.\n *)\n*/\n"],"names":["EMBED_BASE","MATCH_SRC","API_URL","API_GLOBAL","API_GLOBAL_READY","getTemplateHTML","attrs","props","iframeAttrs","serializeIframeUrl","serializeAttributes","_a","_b","_c","matches","type","metaId","params","videoPath","serialize","SpotifyAudioElement","__privateAdd","_SpotifyAudioElement_instances","__publicField","PublicPromise","_loadRequested","_hasLoaded","_isInit","_isWaiting","_closeToEnded","_paused","_currentTime","_duration","_seeking","_config","__privateMethod","upgradeProperty_fn","__privateGet","__privateSet","oldApi","options","namedNodeMapToObject","iframe","Spotify","loadScript","resolve","event","attrName","oldValue","newValue","value","val","oldTime","prop","html","key","boolToBinary","p","namedNodeMap","obj","attr","loadScriptCache","src","globalName","readyFnName","reject","script","ready","api","executor","res","rej","spotify_audio_element_default","reservedReactProps","reactPropToAttrNameMap","defaultToAttributeName","propName","defaultToAttributeValue","propValue","createComponent","React2","tagName","elementClass","events","displayName","defaultProps","toAttributeName","toAttributeValue","IS_REACT_19_OR_NEWER","ReactComponent","ref","elementRef","prevElemPropsRef","eventProps","reactProps","elementProps","k","v","attrValue","attrValueFromDefault","callback","useCapture","eventName","eventTarget","newElemProps","setProperty","_value","mode","delegatesFocus","templateShadowRoot","node","name","react_default","React","CustomMediaElement"],"mappings":";;;;;;;;AAAA,MAAMA,KAAa,4BACbC,KAAY,qCACZC,KAAU,wDACVC,KAAa,oBACbC,KAAmB;AACzB,SAASC,EAAgBC,GAAOC,IAAQ,IAAI;AAC1C,QAAMC,IAAc;AAAA,IAClB,KAAKC,EAAmBH,GAAOC,CAAK;AAAA,IACpC,WAAW;AAAA,IACX,aAAa;AAAA,IACb,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,EACX;AACE;AAAA;AAAA,IAEE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,aAoBSG,GAAoBF,CAAW,CAAC;AAAA;AAAA;AAG7C;AACA,SAASC,EAAmBH,GAAOC,GAAO;AACxC,MAAII,GAAIC,GAAIC;AACZ,MAAI,CAACP,EAAM,IAAK;AAChB,QAAMQ,IAAUR,EAAM,IAAI,MAAML,EAAS,GACnCc,IAAOD,KAAWA,EAAQ,CAAC,GAC3BE,IAASF,KAAWA,EAAQ,CAAC,GAC7BG,IAAS;AAAA,IACb,IAAIN,IAAKJ,EAAM,WAAW,OAAO,SAASI,EAAG;AAAA,IAC7C,SAASC,IAAKL,EAAM,WAAW,OAAO,SAASK,EAAG,WAAW,SAAS,MAAM;AAAA,EAChF,GACQM,KAAcL,IAAKN,EAAM,WAAW,QAAgBM,EAAG,cAAe,WAAW;AACvF,SAAO,GAAGb,EAAU,UAAUe,CAAI,IAAIC,CAAM,GAAGE,CAAS,IAAIC,GAAUF,CAAM,CAAC;AAC/E;;AACA,MAAMG,WAA6B,WAAW,eAAe,MAAM;AACnE,GAAG;AAAA,EAmBD,cAAc;AACZ,UAAK;AArBT,IAAAC,EAAA,MAAAC;AASE,IAAAC,EAAA,sBAAe,IAAIC,EAAa;AAChC,IAAAH,EAAA,MAAAI;AACA,IAAAJ,EAAA,MAAAK;AACA,IAAAL,EAAA,MAAAM;AACA,IAAAN,EAAA,MAAAO,GAAa;AACb,IAAAP,EAAA,MAAAQ,GAAgB;AAChB,IAAAR,EAAA,MAAAS,GAAU;AACV,IAAAT,EAAA,MAAAU,GAAe;AACf,IAAAV,EAAA,MAAAW,GAAY;AACZ,IAAAX,EAAA,MAAAY,GAAW;AACX,IAAAZ,EAAA,MAAAa,GAAU;AAGR,IAAAC,EAAA,MAAKb,GAAAc,GAAL,WAAsB;AAAA,EACxB;AAAA,EACA,MAAM,OAAO;AACX,QAAIzB,GAAIC,GAAIC;AACZ,QAAIwB,EAAA,MAAKZ,GAAgB;AACzB,IAAIY,EAAA,MAAKX,OAAY,KAAK,eAAe,IAAIF,EAAa,IAC1Dc,EAAA,MAAKZ,GAAa,KAClB,MAAOY,EAAA,MAAKb,GAAiB,QAAQ,QAAO,IAC5Ca,EAAA,MAAKb,GAAiB,OACtBa,EAAA,MAAKV,GAAa,KAClBU,EAAA,MAAKT,GAAgB,KACrBS,EAAA,MAAKP,GAAe,IACpBO,EAAA,MAAKN,GAAY,MACjBM,EAAA,MAAKL,GAAW,KAChB,KAAK,cAAc,IAAI,MAAM,SAAS,CAAC;AACvC,QAAIM,IAAS,KAAK;AAElB,QADA,KAAK,MAAM,MACP,CAAC,KAAK;AACR;AAEF,SAAK,cAAc,IAAI,MAAM,WAAW,CAAC;AACzC,UAAMC,IAAU;AAAA,MACd,IAAI7B,IAAK,KAAK,WAAW,OAAO,SAASA,EAAG;AAAA,MAC5C,SAASC,IAAK,KAAK,WAAW,OAAO,SAASA,EAAG,WAAW,SAAS,MAAM;AAAA,MAC3E,cAAcC,IAAK,KAAK,WAAW,OAAO,SAASA,EAAG;AAAA,IAC5D;AACI,QAAIwB,EAAA,MAAKV;AACP,WAAK,MAAMY,GACX,KAAK,IAAI,cAAc,MAAM9B,EAAmBgC,EAAqB,KAAK,UAAU,GAAG,IAAI;AAAA,SACtF;AACL,MAAAH,EAAA,MAAKX,GAAU,KACV,KAAK,eACR,KAAK,aAAa,EAAE,MAAM,OAAM,CAAE,GAClC,KAAK,WAAW,YAAYtB,EAAgBoC,EAAqB,KAAK,UAAU,GAAG,IAAI;AAEzF,UAAIC,IAAS,KAAK,WAAW,cAAc,QAAQ;AACnD,YAAMC,IAAU,MAAMC,GAAW1C,IAASC,IAAYC,EAAgB;AACtE,WAAK,MAAM,MAAM,IAAI,QAAQ,CAACyC,MAAYF,EAAQ,iBAAiBD,GAAQF,GAASK,CAAO,CAAC,GAC5F,KAAK,IAAI,gBAAgBH,GACzB,KAAK,IAAI,YAAY,SAAS,MAAM;AAClC,aAAK,cAAc,IAAI,MAAM,gBAAgB,CAAC,GAC9C,KAAK,cAAc,IAAI,MAAM,gBAAgB,CAAC,GAC9C,KAAK,cAAc,IAAI,MAAM,cAAc,CAAC;AAAA,MAC9C,CAAC,GACD,KAAK,IAAI,YAAY,mBAAmB,CAACI,MAAU;AACjD,YAAIT,EAAA,MAAKR,MAAiBQ,EAAA,MAAKP,OAAYgB,EAAM,KAAK,eAAe,CAACA,EAAM,KAAK,WAAW;AAC1F,UAAAR,EAAA,MAAKT,GAAgB,KACrB,KAAK,cAAc;AACnB;AAAA,QACF;AAYA,YAXIiB,EAAM,KAAK,WAAW,QAAQT,EAAA,MAAKL,OACrCM,EAAA,MAAKT,GAAgB,KACrBS,EAAA,MAAKN,GAAYc,EAAM,KAAK,WAAW,MACvC,KAAK,cAAc,IAAI,MAAM,gBAAgB,CAAC,IAE5CA,EAAM,KAAK,WAAW,QAAQT,EAAA,MAAKN,OACrCO,EAAA,MAAKL,GAAW,KAChBK,EAAA,MAAKT,GAAgB,KACrBS,EAAA,MAAKP,GAAee,EAAM,KAAK,WAAW,MAC1C,KAAK,cAAc,IAAI,MAAM,YAAY,CAAC,IAExC,CAACT,EAAA,MAAKT,MAAc,CAACS,EAAA,MAAKP,MAAWgB,EAAM,KAAK,UAAU;AAC5D,UAAAR,EAAA,MAAKR,GAAU,KACf,KAAK,cAAc,IAAI,MAAM,OAAO,CAAC;AACrC;AAAA,QACF;AACA,YAAIO,EAAA,MAAKP,OAAYgB,EAAM,KAAK,eAAe,CAACA,EAAM,KAAK,WAAW;AACpE,UAAAR,EAAA,MAAKR,GAAU,KACf,KAAK,cAAc,IAAI,MAAM,MAAM,CAAC,GACpCQ,EAAA,MAAKV,GAAakB,EAAM,KAAK,cACzBT,EAAA,MAAKT,KACP,KAAK,cAAc,IAAI,MAAM,SAAS,CAAC,IAEvC,KAAK,cAAc,IAAI,MAAM,SAAS,CAAC;AAEzC;AAAA,QACF;AACA,YAAIS,EAAA,MAAKT,MAAc,CAACkB,EAAM,KAAK,UAAU;AAC3C,UAAAR,EAAA,MAAKV,GAAa,KAClB,KAAK,cAAc,IAAI,MAAM,SAAS,CAAC;AACvC;AAAA,QACF;AACA,YAAI,CAAC,KAAK,UAAU,CAAC,KAAK,WAAW,CAACS,EAAA,MAAKR,MAAiB,KAAK,KAAK,KAAK,WAAW,KAAK,KAAK,UAAU;AAExG,cADAS,EAAA,MAAKT,GAAgB,KACjB,KAAK,MAAM;AACb,iBAAK,cAAc;AACnB;AAAA,UACF;AACA,UAAK,KAAK,eACR,KAAK,MAAK,GACV,KAAK,cAAc,IAAI,MAAM,OAAO,CAAC;AAEvC;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AACA,SAAK,aAAa,QAAO,GACzB,MAAM,KAAK;AAAA,EACb;AAAA,EACA,MAAM,yBAAyBkB,GAAUC,GAAUC,GAAU;AAC3D,QAAID,MAAaC;AACjB,cAAQF,GAAQ;AAAA,QACd,KAAK,OAAO;AACV,eAAK,KAAI;AACT;AAAA,QACF;AAAA,MACN;AAAA,EACE;AAAA,EACA,MAAM,OAAO;AACX,QAAIpC;AACJ,WAAA2B,EAAA,MAAKR,GAAU,KACfQ,EAAA,MAAKV,GAAa,KAClB,KAAK,cAAc,IAAI,MAAM,MAAM,CAAC,GACpC,MAAM,KAAK,eACHjB,IAAK,KAAK,QAAQ,OAAO,SAASA,EAAG,OAAM;AAAA,EACrD;AAAA,EACA,MAAM,QAAQ;AACZ,QAAIA;AACJ,iBAAM,KAAK,eACHA,IAAK,KAAK,QAAQ,OAAO,SAASA,EAAG,MAAK;AAAA,EACpD;AAAA,EACA,IAAI,SAAS;AACX,WAAO0B,EAAA,MAAKH;AAAA,EACd;AAAA,EACA,IAAI,OAAOgB,GAAO;AAChB,IAAAZ,EAAA,MAAKJ,GAAUgB;AAAA,EACjB;AAAA,EACA,IAAI,SAAS;AACX,WAAOb,EAAA,MAAKP,MAAW;AAAA,EACzB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO;AAAA,EACT;AAAA,EACA,IAAI,MAAMqB,GAAK;AAAA,EACf;AAAA,EACA,IAAI,SAAS;AACX,WAAO;AAAA,EACT;AAAA,EACA,IAAI,OAAOA,GAAK;AAAA,EAChB;AAAA,EACA,IAAI,QAAQ;AACV,WAAO,KAAK,KAAK,KAAK,WAAW,KAAK,KAAK;AAAA,EAC7C;AAAA,EACA,IAAI,UAAU;AACZ,WAAOd,EAAA,MAAKJ;AAAA,EACd;AAAA,EACA,IAAI,OAAO;AACT,WAAO,KAAK,aAAa,MAAM;AAAA,EACjC;AAAA,EACA,IAAI,KAAKkB,GAAK;AACZ,IAAI,KAAK,QAAQA,KACjB,KAAK,gBAAgB,QAAQ,EAAQA,CAAI;AAAA,EAC3C;AAAA,EACA,IAAI,cAAc;AAChB,WAAOd,EAAA,MAAKN;AAAA,EACd;AAAA,EACA,IAAI,YAAYoB,GAAK;AACnB,QAAI,KAAK,eAAeA,EAAK;AAC7B,IAAAb,EAAA,MAAKL,GAAW;AAChB,QAAImB,IAAUf,EAAA,MAAKN;AACnB,IAAAO,EAAA,MAAKP,GAAeoB,IACpB,KAAK,cAAc,IAAI,MAAM,YAAY,CAAC,GAC1Cb,EAAA,MAAKP,GAAeqB,IACpB,KAAK,aAAa,KAAK,MAAM;AAC3B,UAAIzC;AACJ,OAACA,IAAK,KAAK,QAAQ,QAAgBA,EAAG,KAAKwC,CAAG;AAAA,IAChD,CAAC;AAAA,EACH;AAAA,EACA,IAAI,WAAW;AACb,WAAOd,EAAA,MAAKL;AAAA,EACd;AAAA,EACA,IAAI,MAAM;AACR,WAAO,KAAK,aAAa,KAAK;AAAA,EAChC;AAAA,EACA,IAAI,IAAImB,GAAK;AACX,SAAK,aAAa,OAAO,GAAGA,CAAG,EAAE;AAAA,EACnC;AAWF;AAvME1B,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eACAC,IAAA,eAnBFZ,IAAA;AAAA;AAAA;AA0MEc,IAAgB,SAACiB,GAAM;AACrB,MAAI,OAAO,UAAU,eAAe,KAAK,MAAMA,CAAI,GAAG;AACpD,UAAMH,IAAQ,KAAKG,CAAI;AACvB,WAAO,KAAKA,CAAI,GAChB,KAAKA,CAAI,IAAIH;AAAA,EACf;AACF,GA9MA3B,EAFIH,GAEG,mBAAkBf,IACzBkB,EAHIH,GAGG,qBAAoB,EAAE,MAAM,OAAM,IACzCG,EAJIH,GAIG,sBAAqB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACJ;AA0MA,SAASV,GAAoBJ,GAAO;AAClC,MAAIgD,IAAO;AACX,aAAWC,KAAOjD,GAAO;AACvB,UAAM4C,IAAQ5C,EAAMiD,CAAG;AACvB,IAAIL,MAAU,KAAII,KAAQ,IAAIC,CAAG,KAC5BD,KAAQ,IAAIC,CAAG,KAAKL,CAAK;AAAA,EAChC;AACA,SAAOI;AACT;AACA,SAASnC,GAAUZ,GAAO;AACxB,SAAO,OAAO,IAAI,gBAAgBiD,GAAajD,CAAK,CAAC,CAAC;AACxD;AACA,SAASiD,GAAajD,GAAO;AAC3B,MAAIkD,IAAI,CAAA;AACR,WAASF,KAAOhD,GAAO;AACrB,QAAI4C,IAAM5C,EAAMgD,CAAG;AACnB,IAAIJ,MAAQ,MAAQA,MAAQ,KAAIM,EAAEF,CAAG,IAAI,IAChCJ,MAAQ,KAAOM,EAAEF,CAAG,IAAI,IACxBJ,KAAO,SAAMM,EAAEF,CAAG,IAAIJ;AAAA,EACjC;AACA,SAAOM;AACT;AACA,SAAShB,EAAqBiB,GAAc;AAC1C,MAAIC,IAAM,CAAA;AACV,WAASC,KAAQF;AACf,IAAAC,EAAIC,EAAK,IAAI,IAAIA,EAAK;AAExB,SAAOD;AACT;AACA,MAAME,IAAkB,CAAA;AACxB,eAAejB,GAAWkB,GAAKC,GAAYC,GAAa;AACtD,SAAIH,EAAgBC,CAAG,IAAUD,EAAgBC,CAAG,IAClC,KAAKC,CAAU,IACxB,QAAQ,QAAQ,KAAKA,CAAU,CAAC,IAElCF,EAAgBC,CAAG,IAAI,IAAI,QAAQ,SAASjB,GAASoB,GAAQ;AAClE,UAAMC,IAAS,SAAS,cAAc,QAAQ;AAC9C,IAAAA,EAAO,MAAMJ;AACb,UAAMK,IAAQ,CAACC,MAAQvB,EAAQuB,CAAG;AACjB,SAAKJ,CAAW,IAAIG,GACrCD,EAAO,SAAS,MAAM,CAACF,GACvBE,EAAO,UAAUD,GACjB,SAAS,KAAK,OAAOC,CAAM;AAAA,EAC7B,CAAC;AACH;AACA,MAAM1C,UAAsB,QAAQ;AAAA,EAClC,YAAY6C,IAAW,MAAM;AAAA,EAC7B,GAAG;AACD,QAAIC,GAAKC;AACT,UAAM,CAAC1B,GAASoB,MAAW;AACzB,MAAAI,EAASxB,GAASoB,CAAM,GACxBK,IAAMzB,GACN0B,IAAMN;AAAA,IACR,CAAC,GACD,KAAK,UAAUK,GACf,KAAK,SAASC;AAAA,EAChB;AACF;AACI,WAAW,kBAAkB,CAAC,WAAW,eAAe,IAAI,eAAe,KAC7E,WAAW,eAAe,OAAO,iBAAiBnD,CAAmB;AAEvE,IAAIoD,KAAgCpD,GC7ThCqD,KAAqC,oBAAI,IAAI;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GACGC,KAAyB;AAAA,EAC3B,WAAW;AAAA,EACX,SAAS;AACX;AACA,SAASC,EAAuBC,GAAU;AACxC,SAAOA,EAAS,YAAW;AAC7B;AACA,SAASC,EAAwBC,GAAW;AAC1C,MAAI,OAAOA,KAAc,UAAW,QAAOA,IAAY,KAAK;AAC5D,MAAI,OAAOA,KAAc,cACrB,SAAOA,KAAc,YAAYA,MAAc;AACnD,WAAOA;AACT;AACA,SAASC,GAAgB;AAAA,EACvB,OAAOC;AAAA,EACP,SAAAC;AAAA,EACA,cAAAC;AAAA,EACA,QAAAC;AAAA,EACA,aAAAC;AAAA,EACA,cAAAC;AAAA,EACA,iBAAAC,IAAkBX;AAAA,EAClB,kBAAAY,IAAmBV;AACrB,GAAG;AACD,QAAMW,IAAuB,OAAO,SAASR,EAAO,OAAO,KAAK,IAC1DS,IAAiBT,EAAO,WAAW,CAACzE,GAAOmF,MAAQ;AACvD,QAAI/E,GAAIC;AACR,UAAM+E,IAAaX,EAAO,OAAO,IAAI,GAC/BY,IAAmBZ,EAAO,OAAuB,oBAAI,IAAG,CAAE,GAC1Da,IAAa,CAAA,GACbvF,IAAQ,CAAA,GACRwF,IAAa,CAAA,GACbC,IAAe,CAAA;AACrB,eAAW,CAACC,GAAGC,CAAC,KAAK,OAAO,QAAQ1F,CAAK,GAAG;AAC1C,UAAIkE,GAAmB,IAAIuB,CAAC,GAAG;AAC7B,QAAAF,EAAWE,CAAC,IAAIC;AAChB;AAAA,MACF;AACA,YAAMlD,IAAWuC,EAAgBZ,GAAuBsB,CAAC,KAAKA,CAAC;AAC/D,UAAId,EAAa,aAAac,KAAKd,EAAa,aAAa,EAAEc,QAAQrF,IAAK,WAAW,gBAAgB,OAAO,SAASA,EAAG,cAAc,CAAA,OAAQ,GAAGC,IAAKsE,EAAa,uBAAuB,QAAgBtE,EAAG,KAAK,CAACgD,MAASA,MAASb,CAAQ,IAAI;AACjP,QAAAgD,EAAaC,CAAC,IAAIC;AAClB;AAAA,MACF;AACA,UAAID,EAAE,WAAW,IAAI,GAAG;AACtB,QAAAH,EAAWG,CAAC,IAAIC;AAChB;AAAA,MACF;AACA,YAAMC,IAAYX,EAAiBU,CAAC;AAOpC,UANIlD,KAAYmD,KAAa,SAC3B5F,EAAMyC,CAAQ,IAAI,OAAOmD,CAAS,GAC7BV,MACHM,EAAW/C,CAAQ,IAAImD,KAGvBnD,KAAYyC,GAAsB;AACpC,cAAMW,IAAuBtB,EAAwBoB,CAAC;AACtD,QAAIC,MAAcC,IAChBL,EAAW/C,CAAQ,IAAImD,IAEvBJ,EAAW/C,CAAQ,IAAIkD;AAAA,MAE3B;AAAA,IACF;AACA,QAAI,OAAO,SAAW,KAAa;AACjC,iBAAWrB,KAAYiB,GAAY;AACjC,cAAMO,IAAWP,EAAWjB,CAAQ,GAC9ByB,IAAazB,EAAS,SAAS,SAAS,GACxC0B,MAAcnB,KAAU,OAAO,SAASA,EAAOP,CAAQ,MAAMA,EAAS,MAAM,CAAC,EAAE,YAAW,GAAI;AAAA,UAClG;AAAA,UACAyB,IAAa,KAAK;AAAA,QAC5B;AACQ,QAAArB,EAAO,gBAAgB,MAAM;AAC3B,gBAAMuB,IAAcZ,KAAc,OAAO,SAASA,EAAW;AAC7D,cAAI,GAACY,KAAe,OAAOH,KAAa;AACxC,mBAAAG,EAAY,iBAAiBD,GAAWF,GAAUC,CAAU,GACrD,MAAM;AACX,cAAAE,EAAY,oBAAoBD,GAAWF,GAAUC,CAAU;AAAA,YACjE;AAAA,QACF,GAAG,CAACV,KAAc,OAAO,SAASA,EAAW,SAASS,CAAQ,CAAC;AAAA,MACjE;AACA,MAAApB,EAAO,gBAAgB,MAAM;AAC3B,YAAIW,EAAW,YAAY,KAAM;AACjC,cAAMa,IAA+B,oBAAI,IAAG;AAC5C,mBAAWjD,KAAOwC;AAChB,UAAAU,EAAYd,EAAW,SAASpC,GAAKwC,EAAaxC,CAAG,CAAC,GACtDqC,EAAiB,QAAQ,OAAOrC,CAAG,GACnCiD,EAAa,IAAIjD,GAAKwC,EAAaxC,CAAG,CAAC;AAEzC,mBAAW,CAACA,GAAKmD,CAAM,KAAKd,EAAiB;AAC3C,UAAAa,EAAYd,EAAW,SAASpC,GAAK,MAAM;AAE7C,QAAAqC,EAAiB,UAAUY;AAAA,MAC7B,CAAC;AAAA,IACH;AACA,QAAI,OAAO,SAAW,QAAgBtB,KAAgB,QAAgBA,EAAa,qBAAqBA,KAAgB,QAAgBA,EAAa,oBAAoB;AACvK,YAAM,EAAE,MAAAyB,GAAM,gBAAAC,EAAc,IAAK1B,EAAa,mBACxC2B,IAAqB7B,EAAO,cAAc,YAAY;AAAA,QAC1D,gBAAgB2B;AAAA,QAChB,0BAA0BC;AAAA,QAC1B,yBAAyB;AAAA,UACvB,QAAQ1B,EAAa,gBAAgB5E,GAAOC,CAAK;AAAA,QAC3D;AAAA,QACQ,KAAK;AAAA,MACb,CAAO;AACD,MAAAuF,EAAW,WAAW,CAACe,GAAoBf,EAAW,QAAQ;AAAA,IAChE;AACA,WAAOd,EAAO,cAAcC,GAAS;AAAA,MACnC,GAAGI;AAAA,MACH,GAAGS;AAAA,MACH,KAAKd,EAAO;AAAA,QACV,CAAC8B,MAAS;AACR,UAAAnB,EAAW,UAAUmB,GACjB,OAAOpB,KAAQ,aACjBA,EAAIoB,CAAI,IACCpB,MAAQ,SACjBA,EAAI,UAAUoB;AAAA,QAElB;AAAA,QACA,CAACpB,CAAG;AAAA,MACZ;AAAA,IACA,GAAOI,EAAW,QAAQ;AAAA,EACxB,CAAC;AACD,SAAAL,EAAe,cAAcL,KAAeF,EAAa,MAClDO;AACT;AACA,SAASgB,EAAYK,GAAMC,GAAM7D,GAAO;AACtC,MAAIvC;AACJ,EAAAmG,EAAKC,CAAI,IAAI7D,GACTA,KAAS,QAAQ6D,QAAWpG,IAAK,WAAW,gBAAgB,OAAO,SAASA,EAAG,cAAc,CAAA,MAC/FmG,EAAK,gBAAgBC,CAAI;AAE7B;AAGG,IAACC,KAAgBjC,GAAgB;AAAA,EAClC,OAAOkC;AAAAA,EACP,SAAS;AAAA,EACT,cAAcC;AAAAA,EACd,gBAAgBtC,GAAU;AACxB,WAAIA,MAAa,UAAgB,KAC7BA,MAAa,iBAAuB,UACjCD,EAAuBC,CAAQ;AAAA,EACxC;AACF,CAAC;AAID;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","x_google_ignoreList":[0,1]}