mirror of
https://github.com/hydralauncher/hydra.git
synced 2025-03-09 15:40:26 +00:00
chore: updating yarn.lock
This commit is contained in:
parent
9e648fed28
commit
072b4dc4d3
5 changed files with 62 additions and 51 deletions
|
@ -138,7 +138,7 @@
|
||||||
"telemetry": "Телеметрия",
|
"telemetry": "Телеметрия",
|
||||||
"telemetry_description": "Включить анонимную статистику использования",
|
"telemetry_description": "Включить анонимную статистику использования",
|
||||||
"behavior": "Поведение",
|
"behavior": "Поведение",
|
||||||
"quit_app_instead_hiding": "Закрывать приложение вместо того, чтобы сворачивать его в трей"
|
"quit_app_instead_hiding": "Закрывать приложение вместо того, чтобы сворачивать его в трей",
|
||||||
"launch_with_system": "Запуск приложения при запуске системы"
|
"launch_with_system": "Запуск приложения при запуске системы"
|
||||||
},
|
},
|
||||||
"notifications": {
|
"notifications": {
|
||||||
|
|
|
@ -7,8 +7,10 @@ const showOpenDialog = async (
|
||||||
options: Electron.OpenDialogOptions
|
options: Electron.OpenDialogOptions
|
||||||
) => {
|
) => {
|
||||||
if (WindowManager.mainWindow) {
|
if (WindowManager.mainWindow) {
|
||||||
dialog.showOpenDialog(WindowManager.mainWindow, options);
|
return dialog.showOpenDialog(WindowManager.mainWindow, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
throw new Error("Main window is not available");
|
||||||
};
|
};
|
||||||
|
|
||||||
registerEvent(showOpenDialog, {
|
registerEvent(showOpenDialog, {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { RefObject, useEffect, useRef, useState } from "react";
|
import { useEffect, useRef, useState } from "react";
|
||||||
import { ShopDetails, SteamMovies, SteamScreenshot } from "@types";
|
import { ShopDetails, SteamMovies, SteamScreenshot } from "@types";
|
||||||
import { ChevronRightIcon, ChevronLeftIcon } from "@primer/octicons-react";
|
import { ChevronRightIcon, ChevronLeftIcon } from "@primer/octicons-react";
|
||||||
import * as styles from "./game-details.css";
|
import * as styles from "./game-details.css";
|
||||||
|
@ -8,8 +8,8 @@ export interface GallerySliderProps {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function GallerySlider({ gameDetails }: GallerySliderProps) {
|
export function GallerySlider({ gameDetails }: GallerySliderProps) {
|
||||||
const scrollContainerRef: RefObject<HTMLDivElement> =
|
const scrollContainerRef = useRef<HTMLDivElement>(null);
|
||||||
useRef<HTMLDivElement>(null);
|
|
||||||
const [mediaCount] = useState<number>(() => {
|
const [mediaCount] = useState<number>(() => {
|
||||||
if (gameDetails) {
|
if (gameDetails) {
|
||||||
if (gameDetails.screenshots && gameDetails.movies) {
|
if (gameDetails.screenshots && gameDetails.movies) {
|
||||||
|
@ -25,16 +25,6 @@ export function GallerySlider({ gameDetails }: GallerySliderProps) {
|
||||||
const [mediaIndex, setMediaIndex] = useState<number>(0);
|
const [mediaIndex, setMediaIndex] = useState<number>(0);
|
||||||
const [arrowShow, setArrowShow] = useState(false);
|
const [arrowShow, setArrowShow] = useState(false);
|
||||||
|
|
||||||
const scrollHorizontallyToPercentage = () => {
|
|
||||||
if (scrollContainerRef.current) {
|
|
||||||
const container = scrollContainerRef.current;
|
|
||||||
const totalWidth = container.scrollWidth - container.clientWidth;
|
|
||||||
const itemWidth = totalWidth / (mediaCount - 1);
|
|
||||||
const scrollLeft = mediaIndex * itemWidth;
|
|
||||||
container.scrollLeft = scrollLeft;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const showNextImage = () => {
|
const showNextImage = () => {
|
||||||
setMediaIndex((index: number) => {
|
setMediaIndex((index: number) => {
|
||||||
if (index === mediaCount - 1) return 0;
|
if (index === mediaCount - 1) return 0;
|
||||||
|
@ -42,6 +32,7 @@ export function GallerySlider({ gameDetails }: GallerySliderProps) {
|
||||||
return index + 1;
|
return index + 1;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const showPrevImage = () => {
|
const showPrevImage = () => {
|
||||||
setMediaIndex((index: number) => {
|
setMediaIndex((index: number) => {
|
||||||
if (index === 0) return mediaCount - 1;
|
if (index === 0) return mediaCount - 1;
|
||||||
|
@ -51,11 +42,21 @@ export function GallerySlider({ gameDetails }: GallerySliderProps) {
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
scrollHorizontallyToPercentage();
|
if (scrollContainerRef.current) {
|
||||||
}, [mediaIndex]);
|
const container = scrollContainerRef.current;
|
||||||
|
const totalWidth = container.scrollWidth - container.clientWidth;
|
||||||
|
const itemWidth = totalWidth / (mediaCount - 1);
|
||||||
|
const scrollLeft = mediaIndex * itemWidth;
|
||||||
|
container.scrollLeft = scrollLeft;
|
||||||
|
}
|
||||||
|
}, [mediaIndex, mediaCount]);
|
||||||
|
|
||||||
|
const hasScreenshots = gameDetails && gameDetails.screenshots.length > 0;
|
||||||
|
const hasMovies = gameDetails && gameDetails.movies.length > 0;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{gameDetails?.screenshots && (
|
{hasScreenshots && (
|
||||||
<div className={styles.gallerySliderContainer}>
|
<div className={styles.gallerySliderContainer}>
|
||||||
<div
|
<div
|
||||||
onMouseEnter={() => setArrowShow(true)}
|
onMouseEnter={() => setArrowShow(true)}
|
||||||
|
@ -65,33 +66,41 @@ export function GallerySlider({ gameDetails }: GallerySliderProps) {
|
||||||
{gameDetails.movies &&
|
{gameDetails.movies &&
|
||||||
gameDetails.movies.map((video: SteamMovies) => (
|
gameDetails.movies.map((video: SteamMovies) => (
|
||||||
<video
|
<video
|
||||||
|
key={video.id}
|
||||||
controls
|
controls
|
||||||
className={styles.gallerySliderMedia}
|
className={styles.gallerySliderMedia}
|
||||||
poster={video.thumbnail}
|
poster={video.thumbnail}
|
||||||
style={{ translate: `${-100 * mediaIndex}%` }}
|
style={{ translate: `${-100 * mediaIndex}%` }}
|
||||||
|
autoPlay
|
||||||
|
muted
|
||||||
>
|
>
|
||||||
<source src={video.webm.max.replace("http", "https")} />
|
<source src={video.webm.max.replace("http", "https")} />
|
||||||
</video>
|
</video>
|
||||||
))}
|
))}
|
||||||
{gameDetails.screenshots &&
|
|
||||||
gameDetails.screenshots.map((image: SteamScreenshot) => (
|
{gameDetails.screenshots.map((image: SteamScreenshot) => (
|
||||||
<img
|
<img
|
||||||
className={styles.gallerySliderMedia}
|
key={image.id}
|
||||||
src={image.path_full}
|
className={styles.gallerySliderMedia}
|
||||||
style={{ translate: `${-100 * mediaIndex}%` }}
|
src={image.path_full}
|
||||||
/>
|
style={{ translate: `${-100 * mediaIndex}%` }}
|
||||||
))}
|
/>
|
||||||
|
))}
|
||||||
|
|
||||||
{arrowShow && (
|
{arrowShow && (
|
||||||
<>
|
<>
|
||||||
<button
|
<button
|
||||||
onClick={showPrevImage}
|
onClick={showPrevImage}
|
||||||
|
type="button"
|
||||||
className={styles.gallerySliderButton}
|
className={styles.gallerySliderButton}
|
||||||
style={{ left: 0 }}
|
style={{ left: 0 }}
|
||||||
>
|
>
|
||||||
<ChevronLeftIcon className={styles.gallerySliderIcons} />
|
<ChevronLeftIcon className={styles.gallerySliderIcons} />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
onClick={showNextImage}
|
onClick={showNextImage}
|
||||||
|
type="button"
|
||||||
className={styles.gallerySliderButton}
|
className={styles.gallerySliderButton}
|
||||||
style={{ right: 0 }}
|
style={{ right: 0 }}
|
||||||
>
|
>
|
||||||
|
@ -102,28 +111,30 @@ export function GallerySlider({ gameDetails }: GallerySliderProps) {
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className={styles.gallerySliderPreview} ref={scrollContainerRef}>
|
<div className={styles.gallerySliderPreview} ref={scrollContainerRef}>
|
||||||
{gameDetails.movies &&
|
{hasMovies &&
|
||||||
gameDetails.movies.map((video: SteamMovies, i: number) => (
|
gameDetails.movies.map((video: SteamMovies, i: number) => (
|
||||||
<img
|
<img
|
||||||
|
key={video.id}
|
||||||
onClick={() => setMediaIndex(i)}
|
onClick={() => setMediaIndex(i)}
|
||||||
src={video.thumbnail}
|
src={video.thumbnail}
|
||||||
className={`${styles.gallerySliderMediaPreview} ${mediaIndex === i ? styles.gallerySliderMediaPreviewActive : ""}`}
|
className={`${styles.gallerySliderMediaPreview} ${mediaIndex === i ? styles.gallerySliderMediaPreviewActive : ""}`}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
{gameDetails.screenshots &&
|
|
||||||
gameDetails.screenshots.map(
|
{gameDetails.screenshots.map(
|
||||||
(image: SteamScreenshot, i: number) => (
|
(image: SteamScreenshot, i: number) => (
|
||||||
<img
|
<img
|
||||||
onClick={() =>
|
key={image.id}
|
||||||
setMediaIndex(
|
onClick={() =>
|
||||||
i + (gameDetails.movies ? gameDetails.movies.length : 0)
|
setMediaIndex(
|
||||||
)
|
i + (gameDetails.movies ? gameDetails.movies.length : 0)
|
||||||
}
|
)
|
||||||
className={`${styles.gallerySliderMediaPreview} ${mediaIndex === i + (gameDetails.movies ? gameDetails.movies.length : 0) ? styles.gallerySliderMediaPreviewActive : ""}`}
|
}
|
||||||
src={image.path_full}
|
className={`${styles.gallerySliderMediaPreview} ${mediaIndex === i + (gameDetails.movies ? gameDetails.movies.length : 0) ? styles.gallerySliderMediaPreviewActive : ""}`}
|
||||||
/>
|
src={image.path_full}
|
||||||
)
|
/>
|
||||||
)}
|
)
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
|
@ -92,8 +92,9 @@ export const gallerySliderMedia = style({
|
||||||
height: "100%",
|
height: "100%",
|
||||||
display: "block",
|
display: "block",
|
||||||
flexShrink: 0,
|
flexShrink: 0,
|
||||||
flexGrow: 0,
|
flexGrow: "0",
|
||||||
transition: "translate 300ms ease-in-out",
|
transition: "translate 0.3s ease-in-out",
|
||||||
|
borderRadius: "4px",
|
||||||
});
|
});
|
||||||
|
|
||||||
export const gallerySliderAnimationContainer = style({
|
export const gallerySliderAnimationContainer = style({
|
||||||
|
@ -123,8 +124,8 @@ export const gallerySliderPreview = style({
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"::-webkit-scrollbar-thumb": {
|
"::-webkit-scrollbar-thumb": {
|
||||||
width: "20%"
|
width: "20%",
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export const gallerySliderMediaPreview = style({
|
export const gallerySliderMediaPreview = style({
|
||||||
|
@ -137,6 +138,7 @@ export const gallerySliderMediaPreview = style({
|
||||||
opacity: 0.3,
|
opacity: 0.3,
|
||||||
paddingRight: "5px",
|
paddingRight: "5px",
|
||||||
transition: "translate 300ms ease-in-out",
|
transition: "translate 300ms ease-in-out",
|
||||||
|
borderRadius: "4px",
|
||||||
":hover": {
|
":hover": {
|
||||||
opacity: 1,
|
opacity: 1,
|
||||||
},
|
},
|
||||||
|
@ -156,13 +158,12 @@ export const gallerySliderButton = style({
|
||||||
cursor: "pointer",
|
cursor: "pointer",
|
||||||
transition: "background-color 100ms ease-in-out",
|
transition: "background-color 100ms ease-in-out",
|
||||||
":hover": {
|
":hover": {
|
||||||
backgroundColor: "rgb(0,0,0, 0.2)",
|
backgroundColor: "rgb(0, 0, 0, 0.2)",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export const gallerySliderIcons = style({
|
export const gallerySliderIcons = style({
|
||||||
stroke: "white",
|
fill: vars.color.muted,
|
||||||
fill: "black",
|
|
||||||
width: "2rem",
|
width: "2rem",
|
||||||
height: "2rem",
|
height: "2rem",
|
||||||
});
|
});
|
||||||
|
|
|
@ -1827,14 +1827,11 @@ app-root-path@^3.1.0:
|
||||||
resolved "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz"
|
resolved "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz"
|
||||||
integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==
|
integrity sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
=======
|
|
||||||
applescript@^1.0.0:
|
applescript@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/applescript/-/applescript-1.0.0.tgz#bb87af568cad034a4e48c4bdaf6067a3a2701317"
|
resolved "https://registry.yarnpkg.com/applescript/-/applescript-1.0.0.tgz#bb87af568cad034a4e48c4bdaf6067a3a2701317"
|
||||||
integrity sha512-yvtNHdWvtbYEiIazXAdp/NY+BBb65/DAseqlNiJQjOx9DynuzOYDbVLBJvuc0ve0VL9x6B3OHF6eH52y9hCBtQ==
|
integrity sha512-yvtNHdWvtbYEiIazXAdp/NY+BBb65/DAseqlNiJQjOx9DynuzOYDbVLBJvuc0ve0VL9x6B3OHF6eH52y9hCBtQ==
|
||||||
|
|
||||||
>>>>>>> 53e5d2938c050ead27fdc8883d58f75920d63923
|
|
||||||
argparse@^2.0.1:
|
argparse@^2.0.1:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
|
resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue