@banou/ripple 0.0.19 → 0.0.21

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 (4) hide show
  1. package/fkn.json +1 -1
  2. package/index.js +127 -111
  3. package/package.json +1 -1
  4. package/sw.js +1 -1
package/fkn.json CHANGED
@@ -1 +1 @@
1
- {"v":0,"app":"fkn:app:1c7clnsv53zt7dr7q7rcbt455hxauykaxl4gibkuoao24dfmk2eqq","name":"Ripple","version":"0.0.19","key":"vB+5jsZMRya/m8nc1Ba6qNELaua1jUjbGj90dEzuaF0=","issuedAt":1791753174,"perSource":["npm:@banou/ripple"],"url":"https://torrent.fkn.app/","contentsDigest":"7FscK+eLR31ZkexXBfvD+VBbUQTd5eL774cJhAv0hD4=","sig":"l+qafgjjwIoNrp4Mmu1cDpmmPI7+LgFdexdCyXtaKFuW2bP5pAuAKlSEYxrnf0t5YFsgcGlLDh8AYwX/vxcPCA==","contents":{"name":"@banou/ripple","version":"0.0.19","alg":"sha256","files":{"README.md":"BhsiYnbFSdDOWa6Mzt2EjUghpTfW5AQmhg+xkIck48A=","_headers":"/3GnajpvIIUp907PK8pIPx9H2wEmJgfEbrC3BKNLlgo=","api-DIgTslNb-BSzu7eku.js":"Bz7w65kFdIVwnCSxUxxNXi7LPH2Mta0M1aKoM+0OPss=","api-d5i206BT.js":"WRWCiUcBoC7+asLldepnOURaCl2SqA418OC96ZZBFeU=","app.webmanifest":"gIWmbT8RLQZNhLkGKZKO8zLWTEX3F1Dj7RAjIr1zEcQ=","assets/empty-BvRk9kiK.js":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=","assets/libtorrent-CnjRmD5O.js":"q09wBuBpwNzmPkmd5o3ue+rzrClzBmDQkwsHPFZrCKs=","assets/logo.png":"/u2ZiOWTOJxhO6AxbamaptNtn+kUxlrAiPncAEyqwIM=","assets/logo.svg":"3Ciuaqc0v2MjXzWy8x8yLaYwZsDdM0m1H42lzdQPKTg=","assets/sintel.torrent":"TI/a0EFLR2dUag+S/j1mCmbtwyRxh056HPqXEgMXuEo=","assets/worker-i0pDn8fp.js":"zarmKx7XSTiYIuw2YjdwIsqV/NzwyNrYbqXYgiATQa8=","build-JdIfVZn7.js":"aIaK4j25GqAT2a1E+/Cwt+JRgmGKJTHysNMYPog5+gc=","index.html":"NzDOFOXPmq6jpxfz7igvOO2ti9cLkmZSJm1K3NhBxNE=","index.js":"R+y7/07Ra9QSNEvGDIdMgkI/CFHNclXlems//n1iHUQ=","jassub/default.woff2":"iGkpkDcHxbsosHzS7taZIbPV71xJxzoN0eGH6/ZUakw=","jassub/fonts.js":"JFrcfQn7ONAEVBPA8HdbKDW9YM3BYoIKvVpwHPdwMhw=","jassub/jassub-assets.js":"LkOyTls8XUtOqkH3PzaW5tDCgxL/e+3exAOIUP0F53Q=","jassub/jassub-worker-modern.wasm":"2ryQh6ZZOS3g/IbRZ8h6CF/HUA8xRabX9L8kMsxlDAM=","jassub/jassub-worker.js":"bakeHatafNtt0otborw+KQ/nnI5yRZ9aH7AUU9dnFS4=","jassub/jassub-worker.wasm":"IEZIYFRcqKpiSk7Fbv9FqzgDd89yR8MfQDY0IHeDbtE=","jassub/worker.js":"GkJ90cst1LkPx1b3tixhjcZBxzQ/o0h3VQMtYQJ3hA4=","libav-jspi.wasm":"MEAQ3i+O1ZSYGVqP9UyRpdM4zdydljX7mX3+5blHXcA=","libav-worker.js":"DbxMU+90HP9hRjy5mHqhkVBxMSTAHtSnXgvpAe3gZy0=","libav.wasm":"cu4WLx4dsl85gHuQdU5EY6H9btNctu9kkPDcRPc102g=","package.json":"YGvdO/mj9Wtb11D6OOZH2qs0ED7wmkoiwATHiXe7iIE=","remote-U0iHKFtw.js":"HVcgm0wvam8DUylwOFv8m2zGp8hmkw3fLu7nS48+DF8=","sw.js":"lYZp9wakPNK3ulmGSKnxUoC94bIXmqI0k3Emd7UdO4Y=","volume-normalizer-worklet.js":"uERAQN4GaSzVMTY5hfsqvFH25HBOohimVr3HwLUM3WM="},"types":{"README.md":"text/markdown","_headers":"application/octet-stream","api-DIgTslNb-BSzu7eku.js":"text/javascript","api-d5i206BT.js":"text/javascript","app.webmanifest":"application/manifest+json","assets/empty-BvRk9kiK.js":"text/javascript","assets/libtorrent-CnjRmD5O.js":"text/javascript","assets/logo.png":"image/png","assets/logo.svg":"image/svg+xml","assets/sintel.torrent":"application/octet-stream","assets/worker-i0pDn8fp.js":"text/javascript","build-JdIfVZn7.js":"text/javascript","index.html":"text/html","index.js":"text/javascript","jassub/default.woff2":"font/woff2","jassub/fonts.js":"text/javascript","jassub/jassub-assets.js":"text/javascript","jassub/jassub-worker-modern.wasm":"application/wasm","jassub/jassub-worker.js":"text/javascript","jassub/jassub-worker.wasm":"application/wasm","jassub/worker.js":"text/javascript","libav-jspi.wasm":"application/wasm","libav-worker.js":"text/javascript","libav.wasm":"application/wasm","package.json":"application/json","remote-U0iHKFtw.js":"text/javascript","sw.js":"text/javascript","volume-normalizer-worklet.js":"text/javascript"}},"keys":{"app":"fkn:app:1c7clnsv53zt7dr7q7rcbt455hxauykaxl4gibkuoao24dfmk2eqq","serial":1790278249316,"issuedAt":1790278249,"founder":{"kind":"fkn","seed":"fsqkqngttg4s2gpm23qiz5nonk"},"signer":"fkn-1","name":"Ripple","members":[{"key":"vB+5jsZMRya/m8nc1Ba6qNELaua1jUjbGj90dEzuaF0=","since":1790278249}],"sig":"1ulbdoxt48ngFVZw6Oufds/QhcKE2+KRG7ZQqShFVPeiPyoLGH2IR3m8CmeSOxe3tA7oTmAGKSc4vWZ6pAuFDQ=="}}
1
+ {"v":0,"app":"fkn:app:1c7clnsv53zt7dr7q7rcbt455hxauykaxl4gibkuoao24dfmk2eqq","name":"Ripple","version":"0.0.21","key":"vB+5jsZMRya/m8nc1Ba6qNELaua1jUjbGj90dEzuaF0=","issuedAt":1791812061,"perSource":["npm:@banou/ripple"],"url":"https://torrent.fkn.app/","contentsDigest":"YFFyqoUlElPh6311/chax1hTYayVO+dU+d9PUrxqxJ0=","sig":"Fl8XSUO9GOvF5MVcaE3hEYsMHZK8k9H8bBTNTPv0E+mRKTttArbUsImBuenZrj0X6hnuzBbEXkUPPoJIolzlAw==","contents":{"name":"@banou/ripple","version":"0.0.21","alg":"sha256","files":{"README.md":"BhsiYnbFSdDOWa6Mzt2EjUghpTfW5AQmhg+xkIck48A=","_headers":"/3GnajpvIIUp907PK8pIPx9H2wEmJgfEbrC3BKNLlgo=","api-DIgTslNb-BSzu7eku.js":"Bz7w65kFdIVwnCSxUxxNXi7LPH2Mta0M1aKoM+0OPss=","api-d5i206BT.js":"WRWCiUcBoC7+asLldepnOURaCl2SqA418OC96ZZBFeU=","app.webmanifest":"gIWmbT8RLQZNhLkGKZKO8zLWTEX3F1Dj7RAjIr1zEcQ=","assets/empty-BvRk9kiK.js":"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=","assets/libtorrent-CnjRmD5O.js":"q09wBuBpwNzmPkmd5o3ue+rzrClzBmDQkwsHPFZrCKs=","assets/logo.png":"/u2ZiOWTOJxhO6AxbamaptNtn+kUxlrAiPncAEyqwIM=","assets/logo.svg":"3Ciuaqc0v2MjXzWy8x8yLaYwZsDdM0m1H42lzdQPKTg=","assets/sintel.torrent":"TI/a0EFLR2dUag+S/j1mCmbtwyRxh056HPqXEgMXuEo=","assets/worker-i0pDn8fp.js":"zarmKx7XSTiYIuw2YjdwIsqV/NzwyNrYbqXYgiATQa8=","build-JdIfVZn7.js":"aIaK4j25GqAT2a1E+/Cwt+JRgmGKJTHysNMYPog5+gc=","index.html":"NzDOFOXPmq6jpxfz7igvOO2ti9cLkmZSJm1K3NhBxNE=","index.js":"N8Rx2uCrcYBoeABJQZ1I7Xqd3RaC34mTB5GH3G3lO34=","jassub/default.woff2":"iGkpkDcHxbsosHzS7taZIbPV71xJxzoN0eGH6/ZUakw=","jassub/fonts.js":"JFrcfQn7ONAEVBPA8HdbKDW9YM3BYoIKvVpwHPdwMhw=","jassub/jassub-assets.js":"LkOyTls8XUtOqkH3PzaW5tDCgxL/e+3exAOIUP0F53Q=","jassub/jassub-worker-modern.wasm":"2ryQh6ZZOS3g/IbRZ8h6CF/HUA8xRabX9L8kMsxlDAM=","jassub/jassub-worker.js":"bakeHatafNtt0otborw+KQ/nnI5yRZ9aH7AUU9dnFS4=","jassub/jassub-worker.wasm":"IEZIYFRcqKpiSk7Fbv9FqzgDd89yR8MfQDY0IHeDbtE=","jassub/worker.js":"GkJ90cst1LkPx1b3tixhjcZBxzQ/o0h3VQMtYQJ3hA4=","libav-jspi.wasm":"MEAQ3i+O1ZSYGVqP9UyRpdM4zdydljX7mX3+5blHXcA=","libav-worker.js":"DbxMU+90HP9hRjy5mHqhkVBxMSTAHtSnXgvpAe3gZy0=","libav.wasm":"cu4WLx4dsl85gHuQdU5EY6H9btNctu9kkPDcRPc102g=","package.json":"ZuyqryfQJ6GjcL0+c1r2h7TTVKxoGjJ+mndxY6havDI=","remote-U0iHKFtw.js":"HVcgm0wvam8DUylwOFv8m2zGp8hmkw3fLu7nS48+DF8=","sw.js":"nIQNRlUyYlyntvhG6tPbKC5sM4I4XtlK7hnuDsxvv98=","volume-normalizer-worklet.js":"uERAQN4GaSzVMTY5hfsqvFH25HBOohimVr3HwLUM3WM="},"types":{"README.md":"text/markdown","_headers":"application/octet-stream","api-DIgTslNb-BSzu7eku.js":"text/javascript","api-d5i206BT.js":"text/javascript","app.webmanifest":"application/manifest+json","assets/empty-BvRk9kiK.js":"text/javascript","assets/libtorrent-CnjRmD5O.js":"text/javascript","assets/logo.png":"image/png","assets/logo.svg":"image/svg+xml","assets/sintel.torrent":"application/octet-stream","assets/worker-i0pDn8fp.js":"text/javascript","build-JdIfVZn7.js":"text/javascript","index.html":"text/html","index.js":"text/javascript","jassub/default.woff2":"font/woff2","jassub/fonts.js":"text/javascript","jassub/jassub-assets.js":"text/javascript","jassub/jassub-worker-modern.wasm":"application/wasm","jassub/jassub-worker.js":"text/javascript","jassub/jassub-worker.wasm":"application/wasm","jassub/worker.js":"text/javascript","libav-jspi.wasm":"application/wasm","libav-worker.js":"text/javascript","libav.wasm":"application/wasm","package.json":"application/json","remote-U0iHKFtw.js":"text/javascript","sw.js":"text/javascript","volume-normalizer-worklet.js":"text/javascript"}},"keys":{"app":"fkn:app:1c7clnsv53zt7dr7q7rcbt455hxauykaxl4gibkuoao24dfmk2eqq","serial":1790278249316,"issuedAt":1790278249,"founder":{"kind":"fkn","seed":"fsqkqngttg4s2gpm23qiz5nonk"},"signer":"fkn-1","name":"Ripple","members":[{"key":"vB+5jsZMRya/m8nc1Ba6qNELaua1jUjbGj90dEzuaF0=","since":1790278249}],"sig":"1ulbdoxt48ngFVZw6Oufds/QhcKE2+KRG7ZQqShFVPeiPyoLGH2IR3m8CmeSOxe3tA7oTmAGKSc4vWZ6pAuFDQ=="}}
package/index.js CHANGED
@@ -15643,7 +15643,7 @@ function tm(e) {
15643
15643
  }).join("");
15644
15644
  }
15645
15645
  //#endregion
15646
- //#region node_modules/@banou/media-player/dist/engine-DQ537ehC.js
15646
+ //#region node_modules/@banou/media-player/dist/engine-C4Gj_4zs.js
15647
15647
  var nm = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
15648
15648
  index: n,
15649
15649
  start: e.buffered.start(n),
@@ -15668,8 +15668,8 @@ var nm = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
15668
15668
  updateTimestampOffset: (t) => r(async () => {
15669
15669
  e.timestampOffset = t;
15670
15670
  }),
15671
- endOfStream: () => r(async () => {
15672
- if (!(t.readyState !== "open" || e.updating)) try {
15671
+ endOfStream: (n = () => !0) => r(async () => {
15672
+ if (t.readyState === "open" && !e.updating && n()) try {
15673
15673
  t.endOfStream();
15674
15674
  } catch {}
15675
15675
  })
@@ -15893,7 +15893,7 @@ var nm = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
15893
15893
  let e = nm(T);
15894
15894
  if (!e.length) return !0;
15895
15895
  let t = P(), n = e.find((e) => e.start <= t + Sm && t < e.end);
15896
- return n && n.end >= t + gm ? !1 : !n || n.end < t + _m;
15896
+ return ce() && oe(t) && (!n || n.start <= t) || n && n.end >= t + gm ? !1 : !n || n.end < t + _m;
15897
15897
  }, ie = (e) => nm(T).find((t) => t.start <= e + Sm && e < t.end), ae = () => ie(t.currentTime), oe = (e = t.currentTime) => {
15898
15898
  let n = ie(e);
15899
15899
  return e >= V - .1 || !!n && n.end >= V - .1;
@@ -16006,7 +16006,7 @@ var nm = (e) => Array(e.buffered.length).fill(void 0).map((t, n) => ({
16006
16006
  };
16007
16007
  t.addEventListener("error", Te), b.push(() => t.removeEventListener("error", Te));
16008
16008
  let Ee = setInterval(() => {
16009
- we || t.error || (re().catch(() => {}), de().catch((e) => ne(e, !1)), ce() && !z && oe() && C.readyState === "open" && k().catch(() => {}));
16009
+ we || t.error || (re().catch(() => {}), de().catch((e) => ne(e, !1)), ce() && !z && oe() && C.readyState === "open" && k(() => !j).catch(() => {}));
16010
16010
  }, 100);
16011
16011
  return b.push(() => clearInterval(Ee)), {
16012
16012
  destroy: S,
@@ -21317,82 +21317,90 @@ ${lx}
21317
21317
  }
21318
21318
  }
21319
21319
  }
21320
- `, Px = () => {
21321
- let e = Y(), t = Y((e) => e.paused), n = Y((e) => e.currentTime), r = Y((e) => e.duration), i = Y((e) => e.seekingTo), a = Y((e) => e.fullscreen), o = Y((e) => e.hideUI), s = Y((e) => e.togglePictureInPicture), c = Y((e) => e.pictureInPictureMode), l = Y((e) => e.burnedInSubtitles), u = Y((e) => e.passThroughPictureInPicture), d = Y((e) => e.subtitleTracks), f = Y((e) => e.requestSeek), [p, m] = (0, O.useState)(null), h = (0, O.useRef)(null), g = (0, O.useRef)(void 0), _ = c === "burn-in", v = d.length > 0, y = r > 0 && n === r, b = (0, O.useCallback)(({ direction: t, stepSize: n }) => {
21322
- let r = wb(e.volume), i = t === "up" ? n : -n, a = Math.max(0, Math.min(1, r + i)), o = e.muted;
21323
- e.setVolume(Cb(a)), o && !e.muted && e.toggleMuted();
21324
- }, [e]);
21320
+ `, Px = ({ shortcuts: e = "window", root: t }) => {
21321
+ let n = Y(), r = Y((e) => e.paused), i = Y((e) => e.currentTime), a = Y((e) => e.duration), o = Y((e) => e.seekingTo), s = Y((e) => e.fullscreen), c = Y((e) => e.hideUI), l = Y((e) => e.togglePictureInPicture), u = Y((e) => e.pictureInPictureMode), d = Y((e) => e.burnedInSubtitles), f = Y((e) => e.passThroughPictureInPicture), p = Y((e) => e.subtitleTracks), m = Y((e) => e.requestSeek), [h, g] = (0, O.useState)(null), _ = (0, O.useRef)(null), v = (0, O.useRef)(void 0), y = u === "burn-in", b = p.length > 0, x = a > 0 && i === a, S = (0, O.useCallback)(({ direction: e, stepSize: t }) => {
21322
+ let r = wb(n.volume), i = e === "up" ? t : -t, a = Math.max(0, Math.min(1, r + i)), o = n.muted;
21323
+ n.setVolume(Cb(a)), o && !n.muted && n.toggleMuted();
21324
+ }, [n]), C = (0, O.useRef)(!1);
21325
21325
  (0, O.useEffect)(() => {
21326
- let t = (t) => f ? f(t) : e.seek(t), n = (n) => {
21327
- let r = n.target;
21328
- if (r?.isContentEditable || /^(input|textarea|select)$/i.test(r?.tagName ?? "")) return;
21329
- let i = !0;
21330
- if (n.key === "f") e.toggleFullscreen();
21331
- else if (n.key === "k") e.togglePaused();
21332
- else if (n.key === " ") e.togglePaused();
21333
- else if (n.key === "m") e.toggleMuted();
21334
- else if (n.key === "ArrowUp") b({
21326
+ let r = (e) => m ? m(e) : n.seek(e), i = (e) => e.composedPath()[0], a = (e) => {
21327
+ C.current = !!t.current?.contains(i(e) ?? null);
21328
+ }, o = (a) => {
21329
+ let o = i(a);
21330
+ if (o?.isContentEditable || /^(input|textarea|select)$/i.test(o?.tagName ?? "")) return;
21331
+ let s = t.current?.contains(o ?? null) || o === document.body && C.current;
21332
+ if (e === "player" && !n.fullscreen && !s) return;
21333
+ let c = !0;
21334
+ if (a.key === "f") n.toggleFullscreen();
21335
+ else if (a.key === "k") n.togglePaused();
21336
+ else if (a.key === " ") n.togglePaused();
21337
+ else if (a.key === "m") n.toggleMuted();
21338
+ else if (a.key === "ArrowUp") S({
21335
21339
  direction: "up",
21336
21340
  stepSize: kx
21337
21341
  });
21338
- else if (n.key === "ArrowDown") b({
21342
+ else if (a.key === "ArrowDown") S({
21339
21343
  direction: "down",
21340
21344
  stepSize: kx
21341
21345
  });
21342
- else if (n.key === "ArrowRight") {
21343
- if (!e.duration) return;
21344
- t(Math.min(e.currentTime + Ax, e.duration));
21345
- } else n.key === "ArrowLeft" ? t(Math.max(e.currentTime - Ax, 0)) : i = !1;
21346
- i && n.preventDefault();
21346
+ else if (a.key === "ArrowRight") {
21347
+ if (!n.duration) return;
21348
+ r(Math.min(n.currentTime + Ax, n.duration));
21349
+ } else a.key === "ArrowLeft" ? r(Math.max(n.currentTime - Ax, 0)) : c = !1;
21350
+ c && a.preventDefault();
21351
+ };
21352
+ return window.addEventListener("keydown", o), window.addEventListener("pointerdown", a, !0), window.addEventListener("focusin", a, !0), () => {
21353
+ window.removeEventListener("keydown", o), window.removeEventListener("pointerdown", a, !0), window.removeEventListener("focusin", a, !0);
21347
21354
  };
21348
- return window.addEventListener("keydown", n), () => window.removeEventListener("keydown", n);
21349
21355
  }, [
21356
+ n,
21357
+ S,
21358
+ m,
21350
21359
  e,
21351
- b,
21352
- f
21360
+ t
21353
21361
  ]);
21354
- let x = (0, O.useCallback)((e) => {
21355
- e.preventDefault(), e.deltaY < 0 ? b({
21362
+ let w = (0, O.useCallback)((e) => {
21363
+ e.preventDefault(), e.deltaY < 0 ? S({
21356
21364
  direction: "up",
21357
21365
  stepSize: kx
21358
- }) : b({
21366
+ }) : S({
21359
21367
  direction: "down",
21360
21368
  stepSize: kx
21361
21369
  });
21362
- }, [b]);
21370
+ }, [S]);
21363
21371
  (0, O.useEffect)(() => {
21364
- if (p) return p.addEventListener("wheel", x, { passive: !1 }), () => p.removeEventListener("wheel", x);
21365
- }, [p, x]);
21366
- let S = (e) => {
21367
- if (!u || u.active || u.armed || e.pointerType === "touch") return;
21372
+ if (h) return h.addEventListener("wheel", w, { passive: !1 }), () => h.removeEventListener("wheel", w);
21373
+ }, [h, w]);
21374
+ let T = (e) => {
21375
+ if (!f || f.active || f.armed || e.pointerType === "touch") return;
21368
21376
  let { left: t, top: n, width: r, height: i } = e.currentTarget.getBoundingClientRect();
21369
- u.arm({
21377
+ f.arm({
21370
21378
  left: t,
21371
21379
  top: n,
21372
21380
  width: r,
21373
21381
  height: i
21374
21382
  });
21375
- }, C = !!u?.armed;
21383
+ }, E = !!f?.armed;
21376
21384
  return (0, O.useEffect)(() => {
21377
- if (!C) return;
21378
- clearInterval(g.current);
21385
+ if (!E) return;
21386
+ clearInterval(v.current);
21379
21387
  let e = Infinity, t = setInterval(() => {
21380
21388
  if (Date.now() > e) {
21381
21389
  clearInterval(t);
21382
21390
  return;
21383
21391
  }
21384
- let n = h.current, r = document.activeElement;
21392
+ let n = _.current, r = document.activeElement;
21385
21393
  n && r?.tagName === "IFRAME" && r.closest(".video")?.parentElement?.contains(n) && n.focus({ preventScroll: !0 });
21386
21394
  }, jx);
21387
- return g.current = t, () => {
21395
+ return v.current = t, () => {
21388
21396
  e = Date.now() + Mx;
21389
21397
  };
21390
- }, [C]), (0, O.useEffect)(() => () => clearInterval(g.current), []), /* @__PURE__ */ G("div", {
21398
+ }, [E]), (0, O.useEffect)(() => () => clearInterval(v.current), []), /* @__PURE__ */ G("div", {
21391
21399
  css: Nx,
21392
- style: { ...o ? {
21400
+ style: { ...c ? {
21393
21401
  opacity: "0",
21394
21402
  pointerEvents: "none"
21395
- } : C ? { pointerEvents: "none" } : {} },
21403
+ } : E ? { pointerEvents: "none" } : {} },
21396
21404
  children: [/* @__PURE__ */ W(ix, {}), /* @__PURE__ */ G("div", {
21397
21405
  className: "actions",
21398
21406
  children: [/* @__PURE__ */ G("div", {
@@ -21404,16 +21412,16 @@ ${lx}
21404
21412
  text: /* @__PURE__ */ W("button", {
21405
21413
  className: "play",
21406
21414
  type: "button",
21407
- onClick: () => e.togglePaused(),
21408
- "aria-label": y ? "Replay" : t ? "Play" : "Pause",
21409
- children: W(y ? Ko : t ? Uo : Ho, {})
21415
+ onClick: () => n.togglePaused(),
21416
+ "aria-label": x ? "Replay" : r ? "Play" : "Pause",
21417
+ children: W(x ? Ko : r ? Uo : Ho, {})
21410
21418
  }),
21411
- toolTipText: /* @__PURE__ */ W("span", { children: y ? "Replay (k)" : t ? "Play (k)" : "Pause (k)" })
21419
+ toolTipText: /* @__PURE__ */ W("span", { children: x ? "Replay (k)" : r ? "Play (k)" : "Pause (k)" })
21412
21420
  }),
21413
- /* @__PURE__ */ W(Ox, { ref: m }),
21421
+ /* @__PURE__ */ W(Ox, { ref: g }),
21414
21422
  /* @__PURE__ */ W("div", {
21415
21423
  className: "time",
21416
- children: Eb(i ?? n, r)
21424
+ children: Eb(o ?? i, a)
21417
21425
  })
21418
21426
  ]
21419
21427
  }), /* @__PURE__ */ G("div", {
@@ -21422,40 +21430,40 @@ ${lx}
21422
21430
  /* @__PURE__ */ W(_x, {}),
21423
21431
  /* @__PURE__ */ W(Cx, {}),
21424
21432
  /* @__PURE__ */ W(xx, {}),
21425
- u ? /* @__PURE__ */ W(jb, {
21433
+ f ? /* @__PURE__ */ W(jb, {
21426
21434
  id: "picture-in-picture",
21427
21435
  tooltipPlace: "top-end",
21428
21436
  text: /* @__PURE__ */ W("button", {
21429
- ref: h,
21430
- className: u.armed ? "picture-in-picture armed" : "picture-in-picture",
21437
+ ref: _,
21438
+ className: f.armed ? "picture-in-picture armed" : "picture-in-picture",
21431
21439
  type: "button",
21432
- onPointerEnter: S,
21433
- onPointerMove: S,
21434
- onClick: u.active ? u.exit : void 0,
21440
+ onPointerEnter: T,
21441
+ onPointerMove: T,
21442
+ onClick: f.active ? f.exit : void 0,
21435
21443
  "aria-label": "Picture in picture",
21436
- "aria-pressed": u.active,
21444
+ "aria-pressed": f.active,
21437
21445
  children: /* @__PURE__ */ W("img", {
21438
21446
  src: ax,
21439
21447
  alt: ""
21440
21448
  })
21441
21449
  }),
21442
- toolTipText: /* @__PURE__ */ W("span", { children: u.active ? "Exit picture in picture" : "Picture in picture" })
21443
- }) : s ? /* @__PURE__ */ W(jb, {
21450
+ toolTipText: /* @__PURE__ */ W("span", { children: f.active ? "Exit picture in picture" : "Picture in picture" })
21451
+ }) : l ? /* @__PURE__ */ W(jb, {
21444
21452
  id: "picture-in-picture",
21445
21453
  tooltipPlace: "top-end",
21446
21454
  text: /* @__PURE__ */ W("button", {
21447
21455
  className: "picture-in-picture",
21448
21456
  type: "button",
21449
- onClick: s,
21450
- disabled: _ && !v,
21451
- "aria-label": _ ? "Put the subtitles in the video" : "Picture in picture",
21452
- "aria-pressed": _ ? l : void 0,
21453
- children: _ ? W(l ? sx : cx, {}) : /* @__PURE__ */ W("img", {
21457
+ onClick: l,
21458
+ disabled: y && !b,
21459
+ "aria-label": y ? "Put the subtitles in the video" : "Picture in picture",
21460
+ "aria-pressed": y ? d : void 0,
21461
+ children: y ? W(d ? sx : cx, {}) : /* @__PURE__ */ W("img", {
21454
21462
  src: ax,
21455
21463
  alt: ""
21456
21464
  })
21457
21465
  }),
21458
- toolTipText: /* @__PURE__ */ W("span", { children: _ ? v ? l ? "Subtitles are in the picture" : "Put the subtitles in the picture" : "This file has no subtitles" : "Picture in picture" })
21466
+ toolTipText: /* @__PURE__ */ W("span", { children: y ? b ? d ? "Subtitles are in the picture" : "Put the subtitles in the picture" : "This file has no subtitles" : "Picture in picture" })
21459
21467
  }) : null,
21460
21468
  /* @__PURE__ */ W(jb, {
21461
21469
  id: "full-screen",
@@ -21463,12 +21471,12 @@ ${lx}
21463
21471
  text: /* @__PURE__ */ W("button", {
21464
21472
  className: "full-screen",
21465
21473
  type: "button",
21466
- onClick: () => e.toggleFullscreen(),
21474
+ onClick: () => n.toggleFullscreen(),
21467
21475
  "aria-label": "Full screen",
21468
- "aria-pressed": a,
21469
- children: W(a ? Vo : Bo, {})
21476
+ "aria-pressed": s,
21477
+ children: W(s ? Vo : Bo, {})
21470
21478
  }),
21471
- toolTipText: /* @__PURE__ */ W("span", { children: a ? "Exit full screen (f)" : "Full screen (f)" })
21479
+ toolTipText: /* @__PURE__ */ W("span", { children: s ? "Exit full screen (f)" : "Full screen (f)" })
21472
21480
  })
21473
21481
  ]
21474
21482
  })]
@@ -21659,6 +21667,9 @@ ${lx}
21659
21667
  align-items: center;
21660
21668
  height: 100%;
21661
21669
  width: 100%;
21670
+ /* focusable with shortcuts='player', and the first key after a click on the picture would otherwise
21671
+ ring the whole player as :focus-visible */
21672
+ outline: none;
21662
21673
 
21663
21674
  & > div:not(:last-of-type) {
21664
21675
  position: absolute;
@@ -21711,85 +21722,89 @@ ${lx}
21711
21722
  key: r,
21712
21723
  item: e
21713
21724
  }];
21714
- }), Yx = ({ ref: e, onVideoRef: t, onSubtitleRef: n, overlay: r, controls: i, children: a }) => {
21715
- let o = Y(), s = Y((e) => e.hideUI), c = Y((e) => e.setHideUI), l = Y((e) => e.hasMedia), u = Y((e) => e.passThroughPictureInPicture), d = (0, O.useRef)(void 0), f = (0, O.useRef)("mouse"), p = (0, O.useRef)({
21725
+ }), Yx = ({ ref: e, onVideoRef: t, onSubtitleRef: n, overlay: r, controls: i, shortcuts: a, children: o }) => {
21726
+ let s = Y(), c = Y((e) => e.hideUI), l = Y((e) => e.setHideUI), u = Y((e) => e.hasMedia), d = Y((e) => e.passThroughPictureInPicture), f = (0, O.useRef)(void 0), p = (0, O.useRef)("mouse"), m = (0, O.useRef)({
21716
21727
  x: -1,
21717
21728
  y: -1
21718
- }), m = (0, O.useRef)(null);
21719
- (0, O.useEffect)(() => () => clearTimeout(d.current), []), (0, O.useEffect)(() => {
21720
- l || (clearTimeout(d.current), c(!1));
21721
- }, [l, c]);
21722
- let h = () => {
21723
- l && c(!0);
21724
- }, g = (t) => {
21725
- m.current = t, typeof e == "function" ? e(t) : e && (e.current = t);
21726
- }, _ = () => {
21727
- if (o.passThroughPictureInPicture?.armed) return !0;
21728
- if (f.current !== "mouse") return !1;
21729
- let { x: e, y: t } = p.current;
21730
- if (!m.current || e < 0) return !1;
21731
- let n = document.elementFromPoint(e, t);
21732
- return !!n && m.current.contains(n) && !n.closest(".video");
21729
+ }), h = (0, O.useRef)(null);
21730
+ (0, O.useEffect)(() => () => clearTimeout(f.current), []), (0, O.useEffect)(() => {
21731
+ u || (clearTimeout(f.current), l(!1));
21732
+ }, [u, l]);
21733
+ let g = () => {
21734
+ u && l(!0);
21735
+ }, _ = (t) => {
21736
+ h.current = t, typeof e == "function" ? e(t) : e && (e.current = t);
21733
21737
  }, v = () => {
21734
- if (_()) {
21735
- d.current = setTimeout(v, Wx);
21738
+ if (s.passThroughPictureInPicture?.armed) return !0;
21739
+ if (p.current !== "mouse") return !1;
21740
+ let { x: e, y: t } = m.current;
21741
+ if (!h.current || e < 0) return !1;
21742
+ let n = document.elementFromPoint(e, t);
21743
+ return !!n && h.current.contains(n) && !n.closest(".video");
21744
+ }, y = () => {
21745
+ if (v()) {
21746
+ f.current = setTimeout(y, Wx);
21736
21747
  return;
21737
21748
  }
21738
- h();
21739
- }, y = () => {
21740
- c(!1), clearTimeout(d.current), d.current = setTimeout(v, Wx);
21749
+ g();
21750
+ }, b = () => {
21751
+ l(!1), clearTimeout(f.current), f.current = setTimeout(y, Wx);
21741
21752
  };
21742
21753
  return /* @__PURE__ */ G("div", {
21743
21754
  css: qx,
21744
- ref: g,
21755
+ ref: _,
21745
21756
  onPointerMove: (e) => {
21746
- f.current = e.pointerType, e.pointerType === "mouse" && (p.current = {
21757
+ p.current = e.pointerType, e.pointerType === "mouse" && (m.current = {
21747
21758
  x: e.clientX,
21748
21759
  y: e.clientY
21749
- }, y());
21760
+ }, b());
21750
21761
  },
21751
21762
  onPointerDown: (e) => {
21752
- f.current = e.pointerType;
21763
+ p.current = e.pointerType;
21753
21764
  },
21754
21765
  onMouseOut: (e) => {
21755
21766
  let t = e.relatedTarget;
21756
21767
  if (t && e.currentTarget.contains(t)) return;
21757
21768
  let { left: n, right: r, top: i, bottom: a } = e.currentTarget.getBoundingClientRect();
21758
- e.clientX >= n && e.clientX < r && e.clientY >= i && e.clientY < a || (clearTimeout(d.current), h());
21769
+ e.clientX >= n && e.clientX < r && e.clientY >= i && e.clientY < a || (clearTimeout(f.current), g());
21759
21770
  },
21760
- className: s ? "hide" : "",
21771
+ className: c ? "hide" : "",
21772
+ tabIndex: a === "player" ? -1 : void 0,
21761
21773
  children: [
21762
21774
  /* @__PURE__ */ W(bb, { onSubtitleRef: n }),
21763
21775
  Jx(r).map(({ key: e, item: t }) => /* @__PURE__ */ W("div", {
21764
21776
  css: Gx,
21765
- style: { ...s ? {
21777
+ style: { ...c ? {
21766
21778
  opacity: "0",
21767
21779
  visibility: "hidden",
21768
21780
  pointerEvents: "none"
21769
21781
  } : {} },
21770
21782
  children: t
21771
21783
  }, e)),
21772
- i === !1 ? null : /* @__PURE__ */ W(Px, {}),
21784
+ i === !1 ? null : /* @__PURE__ */ W(Px, {
21785
+ shortcuts: a,
21786
+ root: h
21787
+ }),
21773
21788
  /* @__PURE__ */ W(Lx, {}),
21774
21789
  /* @__PURE__ */ W(Ux, {}),
21775
- u?.armed && m.current ? /* @__PURE__ */ W("div", {
21790
+ d?.armed && h.current ? /* @__PURE__ */ W("div", {
21776
21791
  className: "pass-through",
21777
- style: { clipPath: Kx(u.armed, m.current.getBoundingClientRect()) },
21778
- onPointerOver: u.disarm
21792
+ style: { clipPath: Kx(d.armed, h.current.getBoundingClientRect()) },
21793
+ onPointerOver: d.disarm
21779
21794
  }) : null,
21780
21795
  /* @__PURE__ */ G("div", {
21781
21796
  className: "video",
21782
21797
  onClick: () => {
21783
- if (f.current === "mouse") {
21784
- o.togglePaused();
21798
+ if (p.current === "mouse") {
21799
+ s.togglePaused();
21785
21800
  return;
21786
21801
  }
21787
- s ? y() : (clearTimeout(d.current), h());
21802
+ c ? b() : (clearTimeout(f.current), g());
21788
21803
  },
21789
21804
  children: [t ? /* @__PURE__ */ W("video", {
21790
21805
  ref: t,
21791
21806
  playsInline: !0
21792
- }) : null, a]
21807
+ }) : null, o]
21793
21808
  })
21794
21809
  ]
21795
21810
  });
@@ -21904,6 +21919,7 @@ ${lx}
21904
21919
  onSubtitleRef: v,
21905
21920
  overlay: e.overlay,
21906
21921
  controls: e.controls,
21922
+ shortcuts: e.shortcuts,
21907
21923
  children: t
21908
21924
  });
21909
21925
  }, Zx = Mt`
@@ -44083,15 +44099,15 @@ var tW = () => window.location.origin + "/?magnet=%s", nW = () => typeof window
44083
44099
  }),
44084
44100
  /* @__PURE__ */ G("a", {
44085
44101
  className: "build",
44086
- href: "https://github.com/banou26/ripple/commit/fed784f365b1d6413d2786668805e84c78de2d34",
44102
+ href: "https://github.com/banou26/ripple/commit/d1ccfb8abc43d465b2f7ca365f7ee08b5519da09",
44087
44103
  target: "_blank",
44088
44104
  rel: "noreferrer",
44089
- ...pz("commit fed784f365b1d6413d2786668805e84c78de2d34"),
44105
+ ...pz("commit d1ccfb8abc43d465b2f7ca365f7ee08b5519da09"),
44090
44106
  children: [
44091
44107
  "v",
44092
- "0.0.19",
44108
+ "0.0.21",
44093
44109
  " · ",
44094
- "fed784f"
44110
+ "d1ccfb8"
44095
44111
  ]
44096
44112
  }),
44097
44113
  /* @__PURE__ */ G("div", {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@banou/ripple",
3
- "version": "0.0.19",
3
+ "version": "0.0.21",
4
4
  "type": "module",
5
5
  "repository": {
6
6
  "type": "git",
package/sw.js CHANGED
@@ -8,7 +8,7 @@ const live = new Map()
8
8
  /* Stamped at build time. These are the dev defaults and must never reach production: a worker whose
9
9
  BUILD never changes is never reinstalled, so the update this feature announces would never fire. */
10
10
  const MODE = "cache" // @stamp:mode
11
- const BUILD = "e7e5e77cf2cbb85e" // @stamp:build
11
+ const BUILD = "adeb61514283f7e3" // @stamp:build
12
12
  const MANIFEST = [["/api-DIgTslNb-BSzu7eku.js","073ef0eb99057485"],["/api-d5i206BT.js","591582894701a02e"],["/assets/empty-BvRk9kiK.js","e3b0c44298fc1c14"],["/assets/libtorrent-CnjRmD5O.js","ab4f7006e069c0dc"],["/assets/worker-i0pDn8fp.js","cdaae62b1ed74938"],["/build-JdIfVZn7.js","68868ae23db91aa0"],["/remote-U0iHKFtw.js","1d57209b4c2f6a6f"],["/volume-normalizer-worklet.js","b8444040de06692c"]] // @stamp:manifest
13
13
 
14
14
  const CACHE = 'ripple-assets-' + BUILD