Merge branch 'dev' into colors
105
index.html
@ -15,6 +15,109 @@
|
|||||||
<meta name="msapplication-TileColor" content="#120f1d" />
|
<meta name="msapplication-TileColor" content="#120f1d" />
|
||||||
<meta name="theme-color" content="#120f1d" />
|
<meta name="theme-color" content="#120f1d" />
|
||||||
|
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/iPhone_15_Pro_Max__iPhone_15_Plus__iPhone_14_Pro_Max_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/iPhone_15_Pro__iPhone_15__iPhone_14_Pro_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/iPhone_11_Pro_Max__iPhone_XS_Max_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/iPhone_11__iPhone_XR_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/12.9__iPad_Pro_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/11__iPad_Pro__10.5__iPad_Pro_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 820px) and (device-height: 1180px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/10.9__iPad_Air_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/10.5__iPad_Air_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/10.2__iPad_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: landscape)"
|
||||||
|
href="/splash_screens/8.3__iPad_Mini_landscape.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 430px) and (device-height: 932px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/iPhone_15_Pro_Max__iPhone_15_Plus__iPhone_14_Pro_Max_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 393px) and (device-height: 852px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/iPhone_15_Pro__iPhone_15__iPhone_14_Pro_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 428px) and (device-height: 926px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/iPhone_14_Plus__iPhone_13_Pro_Max__iPhone_12_Pro_Max_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 390px) and (device-height: 844px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/iPhone_14__iPhone_13_Pro__iPhone_13__iPhone_12_Pro__iPhone_12_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 375px) and (device-height: 812px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/iPhone_13_mini__iPhone_12_mini__iPhone_11_Pro__iPhone_XS__iPhone_X_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/iPhone_11_Pro_Max__iPhone_XS_Max_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 414px) and (device-height: 896px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/iPhone_11__iPhone_XR_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 414px) and (device-height: 736px) and (-webkit-device-pixel-ratio: 3) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/iPhone_8_Plus__iPhone_7_Plus__iPhone_6s_Plus__iPhone_6_Plus_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/iPhone_8__iPhone_7__iPhone_6s__iPhone_6__4.7__iPhone_SE_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/4__iPhone_SE__iPod_touch_5th_generation_and_later_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/12.9__iPad_Pro_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 834px) and (device-height: 1194px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/11__iPad_Pro__10.5__iPad_Pro_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 820px) and (device-height: 1180px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/10.9__iPad_Air_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 834px) and (device-height: 1112px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/10.5__iPad_Air_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 810px) and (device-height: 1080px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/10.2__iPad_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 768px) and (device-height: 1024px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/9.7__iPad_Pro__7.9__iPad_mini__9.7__iPad_Air__9.7__iPad_portrait.png">
|
||||||
|
<link rel="apple-touch-startup-image"
|
||||||
|
media="screen and (device-width: 744px) and (device-height: 1133px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)"
|
||||||
|
href="/splash_screens/8.3__iPad_Mini_portrait.png">
|
||||||
|
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||||
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;500;600;700&display=swap" rel="stylesheet" />
|
||||||
@ -58,4 +161,4 @@
|
|||||||
<script type="module" src="/src/index.tsx"></script>
|
<script type="module" src="/src/index.tsx"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
BIN
public/splash_screens/10.2__iPad_landscape.png
Normal file
After Width: | Height: | Size: 86 KiB |
BIN
public/splash_screens/10.2__iPad_portrait.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
public/splash_screens/10.5__iPad_Air_landscape.png
Normal file
After Width: | Height: | Size: 90 KiB |
BIN
public/splash_screens/10.5__iPad_Air_portrait.png
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
public/splash_screens/10.9__iPad_Air_landscape.png
Normal file
After Width: | Height: | Size: 95 KiB |
BIN
public/splash_screens/10.9__iPad_Air_portrait.png
Normal file
After Width: | Height: | Size: 96 KiB |
BIN
public/splash_screens/11__iPad_Pro__10.5__iPad_Pro_landscape.png
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
public/splash_screens/11__iPad_Pro__10.5__iPad_Pro_portrait.png
Normal file
After Width: | Height: | Size: 99 KiB |
BIN
public/splash_screens/12.9__iPad_Pro_landscape.png
Normal file
After Width: | Height: | Size: 132 KiB |
BIN
public/splash_screens/12.9__iPad_Pro_portrait.png
Normal file
After Width: | Height: | Size: 134 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 24 KiB |
BIN
public/splash_screens/8.3__iPad_Mini_landscape.png
Normal file
After Width: | Height: | Size: 85 KiB |
BIN
public/splash_screens/8.3__iPad_Mini_portrait.png
Normal file
After Width: | Height: | Size: 88 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 90 KiB |
After Width: | Height: | Size: 92 KiB |
BIN
public/splash_screens/iPhone_11__iPhone_XR_landscape.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
public/splash_screens/iPhone_11__iPhone_XR_portrait.png
Normal file
After Width: | Height: | Size: 46 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 96 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 72 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 30 KiB |
After Width: | Height: | Size: 31 KiB |
BIN
public/splash_screens/icon.png
Normal file
After Width: | Height: | Size: 29 KiB |
@ -9,6 +9,8 @@ import { useEmpheralVolumeStore } from "@/stores/volume";
|
|||||||
export function KeyboardEvents() {
|
export function KeyboardEvents() {
|
||||||
const router = useOverlayRouter("");
|
const router = useOverlayRouter("");
|
||||||
const display = usePlayerStore((s) => s.display);
|
const display = usePlayerStore((s) => s.display);
|
||||||
|
const mediaProgress = usePlayerStore((s) => s.progress);
|
||||||
|
const { isSeeking } = usePlayerStore((s) => s.interface);
|
||||||
const mediaPlaying = usePlayerStore((s) => s.mediaPlaying);
|
const mediaPlaying = usePlayerStore((s) => s.mediaPlaying);
|
||||||
const time = usePlayerStore((s) => s.progress.time);
|
const time = usePlayerStore((s) => s.progress.time);
|
||||||
const { setVolume, toggleMute } = useVolume();
|
const { setVolume, toggleMute } = useVolume();
|
||||||
@ -27,6 +29,8 @@ export function KeyboardEvents() {
|
|||||||
toggleLastUsed,
|
toggleLastUsed,
|
||||||
display,
|
display,
|
||||||
mediaPlaying,
|
mediaPlaying,
|
||||||
|
mediaProgress,
|
||||||
|
isSeeking,
|
||||||
isRolling,
|
isRolling,
|
||||||
time,
|
time,
|
||||||
router,
|
router,
|
||||||
@ -40,6 +44,8 @@ export function KeyboardEvents() {
|
|||||||
toggleLastUsed,
|
toggleLastUsed,
|
||||||
display,
|
display,
|
||||||
mediaPlaying,
|
mediaPlaying,
|
||||||
|
mediaProgress,
|
||||||
|
isSeeking,
|
||||||
isRolling,
|
isRolling,
|
||||||
time,
|
time,
|
||||||
router,
|
router,
|
||||||
@ -52,6 +58,8 @@ export function KeyboardEvents() {
|
|||||||
toggleLastUsed,
|
toggleLastUsed,
|
||||||
display,
|
display,
|
||||||
mediaPlaying,
|
mediaPlaying,
|
||||||
|
mediaProgress,
|
||||||
|
isSeeking,
|
||||||
isRolling,
|
isRolling,
|
||||||
time,
|
time,
|
||||||
router,
|
router,
|
||||||
@ -83,11 +91,29 @@ export function KeyboardEvents() {
|
|||||||
);
|
);
|
||||||
if (k === "m") dataRef.current.toggleMute();
|
if (k === "m") dataRef.current.toggleMute();
|
||||||
|
|
||||||
|
// Video playback speed
|
||||||
|
if (k === ">" || k === "<") {
|
||||||
|
const options = [0.25, 0.5, 1, 1.5, 2];
|
||||||
|
let idx = options.indexOf(dataRef.current.mediaPlaying?.playbackRate);
|
||||||
|
if (idx === -1) idx = options.indexOf(1);
|
||||||
|
const nextIdx = idx + (k === ">" ? 1 : -1);
|
||||||
|
const next = options[nextIdx];
|
||||||
|
if (next) dataRef.current.display?.setPlaybackRate(next);
|
||||||
|
}
|
||||||
|
|
||||||
// Video progress
|
// Video progress
|
||||||
if (k === "ArrowRight")
|
if (k === "ArrowRight")
|
||||||
dataRef.current.display?.setTime(dataRef.current.time + 5);
|
dataRef.current.display?.setTime(dataRef.current.time + 5);
|
||||||
if (k === "ArrowLeft")
|
if (k === "ArrowLeft")
|
||||||
dataRef.current.display?.setTime(dataRef.current.time - 5);
|
dataRef.current.display?.setTime(dataRef.current.time - 5);
|
||||||
|
if (k === "j")
|
||||||
|
dataRef.current.display?.setTime(dataRef.current.time - 10);
|
||||||
|
if (k === "l")
|
||||||
|
dataRef.current.display?.setTime(dataRef.current.time + 10);
|
||||||
|
if (k === "." && dataRef.current.mediaPlaying?.isPaused)
|
||||||
|
dataRef.current.display?.setTime(dataRef.current.time + 1);
|
||||||
|
if (k === "," && dataRef.current.mediaPlaying?.isPaused)
|
||||||
|
dataRef.current.display?.setTime(dataRef.current.time - 1);
|
||||||
|
|
||||||
// Utils
|
// Utils
|
||||||
if (k === "f") dataRef.current.display?.toggleFullscreen();
|
if (k === "f") dataRef.current.display?.toggleFullscreen();
|
||||||
|