diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 359dcc38..a84ab9ba 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -41,7 +41,7 @@ importers:
version: 0.7.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@movie-web/providers':
specifier: github:sussy-code/providers
- version: https://codeload.github.com/sussy-code/providers/tar.gz/d261a3baab252d2474c930169e149dfa5fda8075
+ version: https://codeload.github.com/sussy-code/providers/tar.gz/b1a68ce6ca608bab12bf6abcfe55c90580e46004
'@noble/hashes':
specifier: ^1.4.0
version: 1.4.0
@@ -291,7 +291,7 @@ importers:
version: 0.5.14(prettier@3.3.3)
rollup-plugin-visualizer:
specifier: ^5.12.0
- version: 5.12.0(@rollup/wasm-node@4.19.1)
+ version: 5.12.0(@rollup/wasm-node@4.20.0)
tailwind-scrollbar:
specifier: ^3.1.0
version: 3.1.0(tailwindcss@3.4.7)
@@ -1202,8 +1202,8 @@ packages:
react: '>=16.8.0'
react-dom: '>=16.8.0'
- '@movie-web/providers@https://codeload.github.com/sussy-code/providers/tar.gz/d261a3baab252d2474c930169e149dfa5fda8075':
- resolution: {tarball: https://codeload.github.com/sussy-code/providers/tar.gz/d261a3baab252d2474c930169e149dfa5fda8075}
+ '@movie-web/providers@https://codeload.github.com/sussy-code/providers/tar.gz/b1a68ce6ca608bab12bf6abcfe55c90580e46004':
+ resolution: {tarball: https://codeload.github.com/sussy-code/providers/tar.gz/b1a68ce6ca608bab12bf6abcfe55c90580e46004}
version: 2.3.0
'@noble/hashes@1.4.0':
@@ -1323,6 +1323,11 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ '@rollup/wasm-node@4.20.0':
+ resolution: {integrity: sha512-NxIRJDju9ZzXwpCZ+TMYEflT/KJPgcamVrkInPwB/jSzEIEhckHGgbC9C8Fkzt77nEZZpfF/H2BedwKfjxO9qQ==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
'@scure/base@1.1.7':
resolution: {integrity: sha512-PPNYBslrLNNUQ/Yad37MHYsNQtK67EhWb6WtSvNLLPo7SdVZgkUjD6Dg+5On7zNwmskf8OX7I7Nx5oN+MIWE0g==}
@@ -5259,7 +5264,7 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- '@movie-web/providers@https://codeload.github.com/sussy-code/providers/tar.gz/d261a3baab252d2474c930169e149dfa5fda8075':
+ '@movie-web/providers@https://codeload.github.com/sussy-code/providers/tar.gz/b1a68ce6ca608bab12bf6abcfe55c90580e46004':
dependencies:
cheerio: 1.0.0-rc.12
cookie: 0.6.0
@@ -5331,56 +5336,56 @@ snapshots:
'@remix-run/router@1.18.0': {}
- '@rollup/plugin-babel@5.3.1(@babel/core@7.25.2)(@rollup/wasm-node@4.19.1)(@types/babel__core@7.20.5)':
+ '@rollup/plugin-babel@5.3.1(@babel/core@7.25.2)(@rollup/wasm-node@4.20.0)(@types/babel__core@7.20.5)':
dependencies:
'@babel/core': 7.25.2
'@babel/helper-module-imports': 7.24.7
- '@rollup/pluginutils': 3.1.0(@rollup/wasm-node@4.19.1)
- rollup: '@rollup/wasm-node@4.19.1'
+ '@rollup/pluginutils': 3.1.0(@rollup/wasm-node@4.20.0)
+ rollup: '@rollup/wasm-node@4.20.0'
optionalDependencies:
'@types/babel__core': 7.20.5
transitivePeerDependencies:
- supports-color
- '@rollup/plugin-node-resolve@15.2.3(@rollup/wasm-node@4.19.1)':
+ '@rollup/plugin-node-resolve@15.2.3(@rollup/wasm-node@4.20.0)':
dependencies:
- '@rollup/pluginutils': 5.1.0(@rollup/wasm-node@4.19.1)
+ '@rollup/pluginutils': 5.1.0(@rollup/wasm-node@4.20.0)
'@types/resolve': 1.20.2
deepmerge: 4.3.1
is-builtin-module: 3.2.1
is-module: 1.0.0
resolve: 1.22.8
optionalDependencies:
- rollup: '@rollup/wasm-node@4.19.1'
+ rollup: '@rollup/wasm-node@4.20.0'
- '@rollup/plugin-replace@2.4.2(@rollup/wasm-node@4.19.1)':
+ '@rollup/plugin-replace@2.4.2(@rollup/wasm-node@4.20.0)':
dependencies:
- '@rollup/pluginutils': 3.1.0(@rollup/wasm-node@4.19.1)
+ '@rollup/pluginutils': 3.1.0(@rollup/wasm-node@4.20.0)
magic-string: 0.25.9
- rollup: '@rollup/wasm-node@4.19.1'
+ rollup: '@rollup/wasm-node@4.20.0'
- '@rollup/plugin-terser@0.4.4(@rollup/wasm-node@4.19.1)':
+ '@rollup/plugin-terser@0.4.4(@rollup/wasm-node@4.20.0)':
dependencies:
serialize-javascript: 6.0.2
smob: 1.5.0
terser: 5.31.3
optionalDependencies:
- rollup: '@rollup/wasm-node@4.19.1'
+ rollup: '@rollup/wasm-node@4.20.0'
- '@rollup/pluginutils@3.1.0(@rollup/wasm-node@4.19.1)':
+ '@rollup/pluginutils@3.1.0(@rollup/wasm-node@4.20.0)':
dependencies:
'@types/estree': 0.0.39
estree-walker: 1.0.1
picomatch: 2.3.1
- rollup: '@rollup/wasm-node@4.19.1'
+ rollup: '@rollup/wasm-node@4.20.0'
- '@rollup/pluginutils@5.1.0(@rollup/wasm-node@4.19.1)':
+ '@rollup/pluginutils@5.1.0(@rollup/wasm-node@4.20.0)':
dependencies:
'@types/estree': 1.0.5
estree-walker: 2.0.2
picomatch: 2.3.1
optionalDependencies:
- rollup: '@rollup/wasm-node@4.19.1'
+ rollup: '@rollup/wasm-node@4.20.0'
'@rollup/wasm-node@4.19.1':
dependencies:
@@ -5388,6 +5393,12 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
+ '@rollup/wasm-node@4.20.0':
+ dependencies:
+ '@types/estree': 1.0.5
+ optionalDependencies:
+ fsevents: 2.3.3
+
'@scure/base@1.1.7': {}
'@scure/bip39@1.3.0':
@@ -7222,7 +7233,7 @@ snapshots:
'@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.25.2)
'@babel/types': 7.25.2
kleur: 4.1.5
- rollup: '@rollup/wasm-node@4.19.1'
+ rollup: '@rollup/wasm-node@4.20.0'
unplugin: 1.12.0
transitivePeerDependencies:
- supports-color
@@ -7721,14 +7732,14 @@ snapshots:
dependencies:
glob: 7.2.3
- rollup-plugin-visualizer@5.12.0(@rollup/wasm-node@4.19.1):
+ rollup-plugin-visualizer@5.12.0(@rollup/wasm-node@4.20.0):
dependencies:
open: 8.4.2
picomatch: 2.3.1
source-map: 0.7.4
yargs: 17.7.2
optionalDependencies:
- rollup: '@rollup/wasm-node@4.19.1'
+ rollup: '@rollup/wasm-node@4.20.0'
rrweb-cssom@0.6.0: {}
@@ -8291,7 +8302,7 @@ snapshots:
dependencies:
esbuild: 0.21.5
postcss: 8.4.40
- rollup: '@rollup/wasm-node@4.19.1'
+ rollup: '@rollup/wasm-node@4.20.0'
optionalDependencies:
'@types/node': 20.14.13
fsevents: 2.3.3
@@ -8453,10 +8464,10 @@ snapshots:
'@babel/core': 7.25.2
'@babel/preset-env': 7.25.3(@babel/core@7.25.2)
'@babel/runtime': 7.25.0
- '@rollup/plugin-babel': 5.3.1(@babel/core@7.25.2)(@rollup/wasm-node@4.19.1)(@types/babel__core@7.20.5)
- '@rollup/plugin-node-resolve': 15.2.3(@rollup/wasm-node@4.19.1)
- '@rollup/plugin-replace': 2.4.2(@rollup/wasm-node@4.19.1)
- '@rollup/plugin-terser': 0.4.4(@rollup/wasm-node@4.19.1)
+ '@rollup/plugin-babel': 5.3.1(@babel/core@7.25.2)(@rollup/wasm-node@4.20.0)(@types/babel__core@7.20.5)
+ '@rollup/plugin-node-resolve': 15.2.3(@rollup/wasm-node@4.20.0)
+ '@rollup/plugin-replace': 2.4.2(@rollup/wasm-node@4.20.0)
+ '@rollup/plugin-terser': 0.4.4(@rollup/wasm-node@4.20.0)
'@surma/rollup-plugin-off-main-thread': 2.2.3
ajv: 8.17.1
common-tags: 1.8.2
@@ -8465,7 +8476,7 @@ snapshots:
glob: 7.2.3
lodash: 4.17.21
pretty-bytes: 5.6.0
- rollup: '@rollup/wasm-node@4.19.1'
+ rollup: '@rollup/wasm-node@4.20.0'
source-map: 0.8.0-beta.0
stringify-object: 3.3.0
strip-comments: 2.0.1
diff --git a/src/components/player/atoms/Captions.tsx b/src/components/player/atoms/Captions.tsx
new file mode 100644
index 00000000..89e419e0
--- /dev/null
+++ b/src/components/player/atoms/Captions.tsx
@@ -0,0 +1,28 @@
+import { useEffect } from "react";
+
+import { Icons } from "@/components/Icon";
+import { OverlayAnchor } from "@/components/overlays/OverlayAnchor";
+import { VideoPlayerButton } from "@/components/player/internals/Button";
+import { useOverlayRouter } from "@/hooks/useOverlayRouter";
+import { usePlayerStore } from "@/stores/player/store";
+
+export function Captions() {
+ const router = useOverlayRouter("settings");
+ const setHasOpenOverlay = usePlayerStore((s) => s.setHasOpenOverlay);
+
+ useEffect(() => {
+ setHasOpenOverlay(router.isRouterActive);
+ }, [setHasOpenOverlay, router.isRouterActive]);
+
+ return (
+
+ {
+ router.open();
+ router.navigate("/captionsOverlay");
+ }}
+ icon={Icons.CAPTIONS}
+ />
+
+ );
+}
diff --git a/src/components/player/atoms/index.ts b/src/components/player/atoms/index.ts
index 3caf8154..6be88fd6 100644
--- a/src/components/player/atoms/index.ts
+++ b/src/components/player/atoms/index.ts
@@ -16,3 +16,4 @@ export * from "./VolumeChangedPopout";
export * from "./NextEpisodeButton";
export * from "./Chromecast";
export * from "./CastingNotification";
+export * from "./Captions";
diff --git a/src/pages/parts/player/PlayerPart.tsx b/src/pages/parts/player/PlayerPart.tsx
index 1f55013b..2d73286b 100644
--- a/src/pages/parts/player/PlayerPart.tsx
+++ b/src/pages/parts/player/PlayerPart.tsx
@@ -111,7 +111,10 @@ export function PlayerPart(props: PlayerPartProps) {
) : null}
{status === playerStatus.PLAYBACK_ERROR ||
status === playerStatus.PLAYING ? (
-
+ <>
+
+
+ >
) : null}