@tidal-music/player-web-components 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/active-device-changed-BDbOSq7P-DQ6vFR_K.js +7 -0
  2. package/dist/active-device-mode-changed-OmLVES_4-zwN5exje.js +7 -0
  3. package/dist/audio-context-store-Bf50rcqa-DUuCXOzU.js +36 -0
  4. package/dist/basePlayer-D9LFxFnB-BNIKxMHD.js +380 -0
  5. package/dist/browserPlayer-BzBNrx-C-DjxeaFTq.js +170 -0
  6. package/dist/generate-guid-BMGZjV-R-D16yCCHx.js +1716 -0
  7. package/dist/index.js +368 -10
  8. package/dist/load-L6Urw8gV-CQAMBwcN.js +29443 -0
  9. package/dist/media-element-error-circuit-breaker-BUJbK6sd-DNlFckiw.js +22 -0
  10. package/dist/nativePlayer-DtYpfmo5-nNN5yO4E.js +232 -0
  11. package/dist/output-devices-CPJfYcO--BP7JMB6k.js +156 -0
  12. package/dist/pushkin-C7W2HCqN-BHqS8oLX.js +117 -0
  13. package/dist/pushkin-dg1sQNx0-CAPg-zq7.js +2 -0
  14. package/dist/shakaPlayer-CqIY64ST-BhwOXSvi.js +1448 -0
  15. package/dist/src/helpers.d.ts +18 -0
  16. package/dist/src/index.d.ts +7 -0
  17. package/dist/src/tidal-current-time.d.ts +9 -0
  18. package/dist/src/tidal-duration-time.d.ts +9 -0
  19. package/dist/src/tidal-play-trigger.d.ts +2 -0
  20. package/dist/src/tidal-progress-bar.d.ts +2 -0
  21. package/dist/src/tidal-video-view.d.ts +2 -0
  22. package/dist/state-BT7sE_jc-iVaBwnBC.js +210 -0
  23. package/package.json +15 -13
  24. package/dist/_commonjsHelpers-DaMA6jEr-DtILRGNx.js +0 -8
  25. package/dist/basePlayer-Rqi9yRuo-4eKn-Akv.js +0 -528
  26. package/dist/browserPlayer-CXURpXdL-DjOb2ySS.js +0 -259
  27. package/dist/index-DHnVYeec.js +0 -3391
  28. package/dist/index.d.ts +0 -24
  29. package/dist/nativePlayer-b92CavhC-CABrQPGS.js +0 -323
  30. package/dist/output-devices-CUurcKto-C_F_9nLk.js +0 -224
  31. package/dist/shakaPlayer-D0NCOzx8-Dd1YFBoR.js +0 -24403
package/dist/index.js CHANGED
@@ -1,11 +1,369 @@
1
- import { n as s, o as r, p as i, r as t, s as d, b as n, U as o, Q as l } from "./index-DHnVYeec.js";
2
- export {
3
- s as TidalCurrentTime,
4
- r as TidalDurationTime,
5
- i as TidalPlayButton,
6
- t as TidalProgressBar,
7
- d as TidalVideoView,
8
- n as events,
9
- o as setCredentialsProvider,
10
- l as setEventSender
1
+ import { a as e, d as t, i as n, r, t as i } from "./state-BT7sE_jc-iVaBwnBC.js";
2
+ import { t as a } from "./pushkin-C7W2HCqN-BHqS8oLX.js";
3
+ import { r as o, t as s } from "./audio-context-store-Bf50rcqa-DUuCXOzU.js";
4
+ import { s as c } from "./load-L6Urw8gV-CQAMBwcN.js";
5
+ //#region ../player/dist/index.js
6
+ function l() {
7
+ return i.activePlayer?.getPosition() ?? 0;
8
+ }
9
+ function u() {
10
+ return i.activePlayer?.currentMediaProduct ?? null;
11
+ }
12
+ function d() {
13
+ let e = i.activePlayer;
14
+ if (e) {
15
+ let t = n.getMediaProductTransition(e.currentStreamingSessionId);
16
+ if (t) return t.playbackContext;
17
+ }
18
+ }
19
+ function f() {
20
+ return i.activePlayer?.playbackState ?? "IDLE";
21
+ }
22
+ function p() {
23
+ return i.activePlayer?.pause();
24
+ }
25
+ async function m() {
26
+ await a.synchronize();
27
+ let { activePlayer: t } = i;
28
+ return t ? (e.dispatchEvent(new CustomEvent("user-action")), t.play()) : Promise.reject(/* @__PURE__ */ Error("No active player"));
29
+ }
30
+ async function h(e) {
31
+ let { activePlayer: t } = i;
32
+ return t?.seek(e);
33
+ }
34
+ function g(e) {
35
+ t.credentialsProvider = e;
36
+ }
37
+ function _(e) {
38
+ r.eventSender = e;
39
+ }
40
+ a.synchronize().then().catch(console.error);
41
+ function v() {
42
+ let { activePlayer: e } = i;
43
+ if (!e) return null;
44
+ switch (e.name) {
45
+ case "browserPlayer": return e.mediaElement;
46
+ case "shakaPlayer": return e.mediaElement;
47
+ default: return null;
48
+ }
49
+ }
50
+ function y() {
51
+ let e = localStorage.getItem("ssuid");
52
+ try {
53
+ e && indexedDB.deleteDatabase("streaming-sessions-" + e);
54
+ } catch (t) {
55
+ console.warn(`DB streaming-sessions-${e} could not be deleted`), console.error(t);
56
+ }
57
+ }
58
+ o().then().catch(console.error), s().then().catch(console.error), y();
59
+ //#endregion
60
+ //#region src/helpers.ts
61
+ var b = String.raw, x = String.raw;
62
+ function S(e) {
63
+ if (e === void 0) return "0:00";
64
+ let t = parseInt(String(e), 10), n = Math.floor(t / 3600), r = Math.floor((t - n * 3600) / 60), i = t - n * 3600 - r * 60, a;
65
+ return a = n === 0 ? `${r}:` : `${n}:${r < 10 ? `0${r}` : String(r)}:`, a += i < 10 ? `0${i}` : String(i), a;
66
+ }
67
+ function C(e = 0) {
68
+ let t = typeof e == "number" ? e : parseInt(e, 10);
69
+ return `P${[
70
+ Math.floor(t / 3600) % 24,
71
+ Math.floor(t / 60) % 60,
72
+ t % 60
73
+ ].map((e, t) => {
74
+ if (e === 0 && t !== 1) return "";
75
+ let n;
76
+ switch (t) {
77
+ case 0:
78
+ n = "H";
79
+ break;
80
+ case 1:
81
+ n = "M";
82
+ break;
83
+ default:
84
+ n = "S";
85
+ break;
86
+ }
87
+ return `${n}${e}`;
88
+ }).join("")}`;
89
+ }
90
+ //#endregion
91
+ //#region src/tidal-current-time.ts
92
+ var w = "tidal-current-time", T = class extends HTMLElement {
93
+ #e = void 0;
94
+ #t = /* @__PURE__ */ new Set();
95
+ #n;
96
+ #r;
97
+ #i;
98
+ constructor() {
99
+ super(), this.#i = (e) => this.renderTime(e.target.currentTime), this.#r = () => this.renderTime(0), this.#n = this.#a.bind(this);
100
+ }
101
+ #a() {
102
+ let e = v();
103
+ e && this.#e && !this.#t.has(e) && (e.addEventListener("timeupdate", this.#i, !1), this.#t.add(e));
104
+ }
105
+ connectedCallback() {
106
+ let t = this.attachShadow({ mode: "open" });
107
+ t.innerHTML = "<time></time>";
108
+ let n = t.querySelector("time");
109
+ this.#e === void 0 && n !== null && (this.#e = n), this.renderTime(l()), e.addEventListener("media-product-transition", this.#n, !1), e.addEventListener("ended", this.#r, !1);
110
+ }
111
+ disconnectedCallback() {
112
+ for (let e of this.#t) e.removeEventListener("timeupdate", this.#i, !1);
113
+ e.removeEventListener("media-product-transition", this.#n, !1), e.removeEventListener("ended", this.#r, !1);
114
+ }
115
+ renderTime(e) {
116
+ let t = Math.floor(e);
117
+ this.#e && (this.#e.textContent = S(t), this.#e.setAttribute("datetime", C(t)));
118
+ }
11
119
  };
120
+ customElements.define(w, T);
121
+ //#endregion
122
+ //#region src/tidal-duration-time.ts
123
+ var E = "tidal-duration-time", D = class extends HTMLElement {
124
+ #e;
125
+ #t = !1;
126
+ #n;
127
+ constructor() {
128
+ super(), this.#n = (e) => {
129
+ let t = e;
130
+ this.renderTime(t.detail.playbackContext.actualDuration);
131
+ }, this.#r();
132
+ }
133
+ #r() {
134
+ this.#t ||= (e.addEventListener("media-product-transition", this.#n, !1), !0);
135
+ }
136
+ #i() {
137
+ let e = this.attachShadow({ mode: "open" });
138
+ this.#e = document.createElement("time"), e.appendChild(this.#e);
139
+ }
140
+ connectedCallback() {
141
+ this.#r(), this.#i();
142
+ let e = parseInt(String(this.textContent), 10), t = Number.isNaN(e) ? 0 : e;
143
+ this.renderTime(d()?.actualDuration ?? t);
144
+ }
145
+ disconnectedCallback() {
146
+ e.removeEventListener("media-product-transition", this.#n, !1), this.#t = !1;
147
+ }
148
+ renderTime(e) {
149
+ let t = parseInt(e.toFixed(0), 10);
150
+ this.#e && (this.#e.textContent = S(t), this.#e.setAttribute("datetime", C(t)));
151
+ }
152
+ };
153
+ customElements.define(E, D);
154
+ //#endregion
155
+ //#region src/tidal-play-trigger.ts
156
+ var O = "tidal-play-trigger", k = class extends HTMLElement {
157
+ #e;
158
+ #t = !1;
159
+ constructor() {
160
+ super(), this.#e = () => {
161
+ this.#n().catch(console.error);
162
+ }, this.#i();
163
+ }
164
+ static get observedAttributes() {
165
+ return [
166
+ "product-id",
167
+ "product-type",
168
+ "share-code"
169
+ ];
170
+ }
171
+ async #n() {
172
+ await this.#r(), f() === "PLAYING" ? p() : await m();
173
+ }
174
+ #r() {
175
+ let e = u(), t = this.mediaProduct;
176
+ if (t && (e?.productId !== t.productId || e?.productType !== t.productType || e?.shareCode !== t.shareCode)) return c(t, 0);
177
+ }
178
+ #i() {
179
+ this.#t || this.addEventListener("click", this.#e, { passive: !0 });
180
+ }
181
+ #a() {
182
+ let e = this.attachShadow({ mode: "closed" }), t = document.createElement("style");
183
+ t.textContent = b`
184
+ :host {
185
+ display: contents;
186
+ }
187
+ `;
188
+ let n = document.createElement("slot");
189
+ e.appendChild(t), e.appendChild(n);
190
+ }
191
+ connectedCallback() {
192
+ this.#i(), this.#a();
193
+ }
194
+ disconnectedCallback() {
195
+ this.removeEventListener("click", this.#e, { passive: !0 }), this.#t = !1;
196
+ }
197
+ get mediaProduct() {
198
+ let e = this.getAttribute("product-id");
199
+ if (e) return {
200
+ productId: e,
201
+ productType: this.getAttribute("product-type") === "video" ? "video" : "track",
202
+ shareCode: this.getAttribute("share-code")?.trim() || void 0,
203
+ sourceId: "",
204
+ sourceType: ""
205
+ };
206
+ }
207
+ };
208
+ customElements.define(O, k);
209
+ //#endregion
210
+ //#region src/tidal-progress-bar.ts
211
+ var A = b`
212
+ :host {
213
+ display: inline-block;
214
+ }
215
+
216
+ #wrapper {
217
+ width: 100%;
218
+ height: 100%;
219
+ contain: strict;
220
+ background-color: rgba(255, 255, 255, 0.2);
221
+ cursor: pointer;
222
+ }
223
+
224
+ #indicator {
225
+ width: 100%;
226
+ height: 100%;
227
+ transform: none;
228
+ will-change: transform;
229
+ background-color: currentColor;
230
+ pointer-events: none;
231
+ }
232
+ `, j = { NO_DURATION: "You need to set duration before you can start/stop the progress bar." }, M = class extends HTMLElement {
233
+ #e;
234
+ #t = 1;
235
+ #n = null;
236
+ #r;
237
+ #i;
238
+ #a = /* @__PURE__ */ new Set();
239
+ #o = null;
240
+ #s;
241
+ constructor() {
242
+ super(), this.#r = (e) => {
243
+ let t = e;
244
+ if (this.duration = t.detail.playbackContext.actualDuration, f() === "PLAYING") try {
245
+ this.start();
246
+ } catch (e) {
247
+ console.warn(e);
248
+ }
249
+ }, this.#i = (e) => {
250
+ let t = e;
251
+ try {
252
+ t.detail.state === "PLAYING" ? this.start() : this.stop();
253
+ } catch (e) {
254
+ console.warn(e);
255
+ }
256
+ }, this.#s = (e) => {
257
+ (e instanceof MouseEvent || e instanceof PointerEvent) && this.handleClick(e);
258
+ }, this.#c();
259
+ }
260
+ #c() {
261
+ this.#a.has("media-product-transition") || (e.addEventListener("media-product-transition", this.#r, !1), this.#a.add("media-product-transition")), this.#a.has("playback-state-change") || (e.addEventListener("playback-state-change", this.#i), this.#a.add("playback-state-change")), this.#o && !this.#a.has("wrapper-click") && (this.#o.addEventListener("click", this.#s, !1), this.#a.add("wrapper-click"));
262
+ }
263
+ #l() {
264
+ let e = this.attachShadow({ mode: "closed" });
265
+ e.innerHTML = x`
266
+ <style>
267
+ ${A}
268
+ </style>
269
+ <div id="wrapper">
270
+ <div id="indicator"></div>
271
+ </div>
272
+ `, this.#o = e.querySelector("#wrapper"), this.#n = e.querySelector("#indicator");
273
+ }
274
+ connectedCallback() {
275
+ this.#l(), this.#c();
276
+ }
277
+ set currentTime(e) {
278
+ this.#e && (this.#e.currentTime = e);
279
+ }
280
+ disconnectedCallback() {
281
+ e.removeEventListener("media-product-transition", this.#r, !1), e.removeEventListener("playback-state-change", this.#i), this.#o?.addEventListener("click", this.#s, !1), this.#a.clear();
282
+ }
283
+ set duration(e) {
284
+ this.#t = e * 1e3;
285
+ let t = [{ transform: "translateX(-100%)" }, { transform: "translateX(0%)" }];
286
+ this.#e = this.#n?.animate(t, {
287
+ duration: this.#t,
288
+ iterations: 1
289
+ }), this.#e?.pause();
290
+ }
291
+ getMousePositionAsPercent(e) {
292
+ if (this.#o) {
293
+ let t = this.#o.getBoundingClientRect(), n = {
294
+ left: Math.abs(t.left + window.pageXOffset - e.pageX),
295
+ width: Math.round(t.width)
296
+ };
297
+ return n.left / n.width;
298
+ }
299
+ return 0;
300
+ }
301
+ handleClick(e) {
302
+ let t = this.getMousePositionAsPercent(e), n = this.#t * t;
303
+ this.currentTime = n, h(n / 1e3);
304
+ }
305
+ set playbackRate(e) {
306
+ this.stop(), this.#e && (this.#e.playbackRate = e), this.start();
307
+ }
308
+ start() {
309
+ if (!this.#e) throw Error(j.NO_DURATION);
310
+ this.#e.play();
311
+ }
312
+ stop() {
313
+ if (!this.#e) throw Error(j.NO_DURATION);
314
+ this.#e.pause();
315
+ }
316
+ }, N = "tidal-progress-bar";
317
+ customElements.define(N, M);
318
+ //#endregion
319
+ //#region src/tidal-video-view.ts
320
+ var P = b`
321
+ :host {
322
+ position: relative;
323
+ display: block;
324
+ width: 100%;
325
+ aspect-ratio: 16/9;
326
+ background-color: black;
327
+ }
328
+
329
+ ::slotted(video) {
330
+ display: block;
331
+ width: 100%;
332
+ height: 100%;
333
+ z-index: 1;
334
+ position: relative;
335
+ background-color: black;
336
+ }
337
+ `, F = "tidal-video-view", I = class extends HTMLElement {
338
+ #e = !1;
339
+ #t;
340
+ #n;
341
+ constructor() {
342
+ super(), this.#t = (e) => {
343
+ e.detail.mediaProduct.productType === "video" && this.mountPlayer();
344
+ }, this.#n = (e) => {
345
+ let t = e;
346
+ this.setAttribute("playback-state", t.detail.state.toLocaleLowerCase());
347
+ }, this.#r();
348
+ }
349
+ #r() {
350
+ this.#e || (e.addEventListener("media-product-transition", this.#t, !1), e.addEventListener("playback-state-change", this.#n, !1));
351
+ }
352
+ connectedCallback() {
353
+ this.#r();
354
+ let e = this.attachShadow({ mode: "closed" }), t = document.createElement("style");
355
+ t.textContent = P;
356
+ let n = document.createElement("slot");
357
+ e.appendChild(t), e.appendChild(n);
358
+ }
359
+ disconnectedCallback() {
360
+ e.removeEventListener("media-product-transition", this.#t, !1), e.removeEventListener("playback-state-change", this.#n, !1), this.#e = !0;
361
+ }
362
+ mountPlayer() {
363
+ let e = v();
364
+ e && (this.innerHTML = "", this.appendChild(e));
365
+ }
366
+ };
367
+ customElements.define(F, I);
368
+ //#endregion
369
+ export { w as TidalCurrentTime, E as TidalDurationTime, O as TidalPlayButton, N as TidalProgressBar, F as TidalVideoView, e as events, g as setCredentialsProvider, _ as setEventSender };