From c9e99d3852ed6794cc40ebcf4b2eda1ee57d5e20 Mon Sep 17 00:00:00 2001 From: bumyy Date: Thu, 7 Nov 2024 20:23:03 -0300 Subject: [PATCH 01/33] feat: migrated to scss --- src/renderer/src/app.scss | 130 +++++++++++++ src/renderer/src/app.tsx | 2 + .../src/components/backdrop/backdrop.css.ts | 54 ------ .../src/components/backdrop/backdrop.scss | 50 +++++ .../src/components/backdrop/backdrop.tsx | 9 +- .../checkbox-field/checkbox-field.css.ts | 41 ---- .../checkbox-field/checkbox-field.scss | 39 ++++ .../checkbox-field/checkbox-field.tsx | 10 +- .../confirmation-modal.css.ts | 13 -- .../confirmation-modal.scss | 17 ++ .../confirmation-modal/confirmation-modal.tsx | 8 +- .../src/components/game-card/game-card.css.ts | 106 ---------- .../src/components/game-card/game-card.scss | 102 ++++++++++ .../src/components/game-card/game-card.tsx | 27 +-- .../components/header/auto-update-header.scss | 32 +++ .../header/auto-update-sub-header.tsx | 23 ++- .../src/components/header/header.css.ts | 182 ------------------ .../src/components/header/header.scss | 132 +++++++++++++ src/renderer/src/components/header/header.tsx | 34 ++-- src/renderer/src/components/hero/hero.css.ts | 60 ------ src/renderer/src/components/hero/hero.scss | 56 ++++++ src/renderer/src/components/hero/hero.tsx | 14 +- src/renderer/src/components/link/link.css.ts | 9 - src/renderer/src/components/link/link.scss | 7 + src/renderer/src/components/link/link.tsx | 10 +- .../src/components/modal/modal.css.ts | 78 -------- src/renderer/src/components/modal/modal.scss | 77 ++++++++ src/renderer/src/components/modal/modal.tsx | 16 +- .../select-field/select-field.css.ts | 59 ------ .../components/select-field/select-field.scss | 49 +++++ .../components/select-field/select-field.tsx | 16 +- .../components/sidebar/sidebar-profile.css.ts | 79 -------- .../components/sidebar/sidebar-profile.scss | 77 ++++++++ .../components/sidebar/sidebar-profile.tsx | 16 +- .../src/components/sidebar/sidebar.css.ts | 126 ------------ .../src/components/sidebar/sidebar.scss | 110 +++++++++++ .../src/components/sidebar/sidebar.tsx | 44 +++-- .../components/text-field/text-field.css.ts | 89 --------- .../src/components/text-field/text-field.scss | 75 ++++++++ .../src/components/text-field/text-field.tsx | 35 ++-- .../src/components/toast/toast.css.ts | 87 --------- src/renderer/src/components/toast/toast.scss | 87 +++++++++ src/renderer/src/components/toast/toast.tsx | 23 ++- .../profile-content/profile-content.css.ts | 11 +- src/renderer/src/scss/globals.scss | 5 + 45 files changed, 1214 insertions(+), 1112 deletions(-) create mode 100644 src/renderer/src/app.scss delete mode 100644 src/renderer/src/components/backdrop/backdrop.css.ts create mode 100644 src/renderer/src/components/backdrop/backdrop.scss delete mode 100644 src/renderer/src/components/checkbox-field/checkbox-field.css.ts create mode 100644 src/renderer/src/components/checkbox-field/checkbox-field.scss delete mode 100644 src/renderer/src/components/confirmation-modal/confirmation-modal.css.ts create mode 100644 src/renderer/src/components/confirmation-modal/confirmation-modal.scss delete mode 100644 src/renderer/src/components/game-card/game-card.css.ts create mode 100644 src/renderer/src/components/game-card/game-card.scss create mode 100644 src/renderer/src/components/header/auto-update-header.scss delete mode 100644 src/renderer/src/components/header/header.css.ts create mode 100644 src/renderer/src/components/header/header.scss delete mode 100644 src/renderer/src/components/hero/hero.css.ts create mode 100644 src/renderer/src/components/hero/hero.scss delete mode 100644 src/renderer/src/components/link/link.css.ts create mode 100644 src/renderer/src/components/link/link.scss delete mode 100644 src/renderer/src/components/modal/modal.css.ts create mode 100644 src/renderer/src/components/modal/modal.scss delete mode 100644 src/renderer/src/components/select-field/select-field.css.ts create mode 100644 src/renderer/src/components/select-field/select-field.scss delete mode 100644 src/renderer/src/components/sidebar/sidebar-profile.css.ts create mode 100644 src/renderer/src/components/sidebar/sidebar-profile.scss delete mode 100644 src/renderer/src/components/sidebar/sidebar.css.ts create mode 100644 src/renderer/src/components/sidebar/sidebar.scss delete mode 100644 src/renderer/src/components/text-field/text-field.css.ts create mode 100644 src/renderer/src/components/text-field/text-field.scss delete mode 100644 src/renderer/src/components/toast/toast.css.ts create mode 100644 src/renderer/src/components/toast/toast.scss diff --git a/src/renderer/src/app.scss b/src/renderer/src/app.scss new file mode 100644 index 00000000..2f383d04 --- /dev/null +++ b/src/renderer/src/app.scss @@ -0,0 +1,130 @@ +@use "./scss/globals.scss"; + +* { + box-sizing: border-box; +} + +::-webkit-scrollbar { + width: 9px; + background-color: globals.$dark-background-color; +} + +::-webkit-scrollbar-track { + background-color: rgba(255, 255, 255, 0.03); +} + +::-webkit-scrollbar-thumb { + background-color: rgba(255, 255, 255, 0.08); + border-radius: 24px; +} + +::-webkit-scrollbar-thumb:hover { + background-color: rgba(255, 255, 255, 0.16); +} + +html, +body, +#root, +main { + height: 100%; +} + +body { + overflow: hidden; + user-select: none; + font-family: + Noto Sans, + sans-serif; + font-size: globals.$body-font-size; + color: globals.$body-color; + margin: 0; +} + +button { + padding: 0; + background-color: transparent; + border: none; + font-family: inherit; +} + +h1, +h2, +h3, +h4, +h5, +h6, +p { + margin: 0; +} + +p { + line-height: 20px; +} + +#root, +main { + display: flex; +} + +#root { + flex-direction: column; +} + +main { + overflow: hidden; +} + +input::-webkit-outer-spin-button, +input::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; +} + +label { + font-size: globals.$body-font-size; +} + +img { + -webkit-user-drag: none; +} + +progress[value] { + -webkit-appearance: none; +} + +.container { + width: 100%; + height: 100%; + overflow: hidden; + display: flex; + flex-direction: column; + container-name: globals.$app-container; + container-type: inline-size; + + &__content { + overflow-y: auto; + align-items: center; + display: flex; + flex-direction: column; + position: relative; + height: 100%; + background: linear-gradient( + 0deg, + globals.$dark-background-color 50%, + globals.$background-color 100% + ); + } +} + +.title-bar { + display: flex; + width: 100%; + height: 35px; + min-height: 35px; + background-color: globals.$dark-background-color; + align-items: center; + padding: 0 calc(globals.$spacing-unit * 2); + -webkit-app-region: drag; + z-index: 4; + border-bottom: 1px solid globals.$border-color; +} diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx index 7c572a56..ce184474 100644 --- a/src/renderer/src/app.tsx +++ b/src/renderer/src/app.tsx @@ -2,6 +2,8 @@ import { useCallback, useContext, useEffect, useRef } from "react"; import { Sidebar, BottomPanel, Header, Toast } from "@renderer/components"; +import "./app.scss"; + import { useAppDispatch, useAppSelector, diff --git a/src/renderer/src/components/backdrop/backdrop.css.ts b/src/renderer/src/components/backdrop/backdrop.css.ts deleted file mode 100644 index 1ccfe12f..00000000 --- a/src/renderer/src/components/backdrop/backdrop.css.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { keyframes } from "@vanilla-extract/css"; -import { recipe } from "@vanilla-extract/recipes"; - -import { SPACING_UNIT, vars } from "../../theme.css"; - -export const backdropFadeIn = keyframes({ - "0%": { backdropFilter: "blur(0px)", backgroundColor: "rgba(0, 0, 0, 0.5)" }, - "100%": { - backdropFilter: "blur(2px)", - backgroundColor: "rgba(0, 0, 0, 0.7)", - }, -}); - -export const backdropFadeOut = keyframes({ - "0%": { backdropFilter: "blur(2px)", backgroundColor: "rgba(0, 0, 0, 0.7)" }, - "100%": { - backdropFilter: "blur(0px)", - backgroundColor: "rgba(0, 0, 0, 0)", - }, -}); - -export const backdrop = recipe({ - base: { - animationName: backdropFadeIn, - animationDuration: "0.4s", - backgroundColor: "rgba(0, 0, 0, 0.7)", - position: "absolute", - width: "100%", - height: "100%", - display: "flex", - justifyContent: "center", - alignItems: "center", - zIndex: vars.zIndex.backdrop, - top: "0", - padding: `${SPACING_UNIT * 3}px`, - backdropFilter: "blur(2px)", - transition: "all ease 0.2s", - }, - variants: { - closing: { - true: { - animationName: backdropFadeOut, - backdropFilter: "blur(0px)", - backgroundColor: "rgba(0, 0, 0, 0)", - }, - }, - windows: { - true: { - // SPACING_UNIT * 3 + title bar spacing - paddingTop: `${SPACING_UNIT * 3 + 35}px`, - }, - }, - }, -}); diff --git a/src/renderer/src/components/backdrop/backdrop.scss b/src/renderer/src/components/backdrop/backdrop.scss new file mode 100644 index 00000000..d62ff9a9 --- /dev/null +++ b/src/renderer/src/components/backdrop/backdrop.scss @@ -0,0 +1,50 @@ +@use "../../scss/globals.scss"; + +.backdrop { + animation-name: backdrop-fade-in; + animation-duration: 0.4s; + background-color: rgba(0, 0, 0, 0.7); + position: absolute; + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + z-index: globals.$backdrop-z-index; + top: 0; + padding: calc(globals.$spacing-unit * 3); + backdrop-filter: blur(2px); + transition: all ease 0.2s; + + &--closing { + animation-name: backdrop-fade-out; + backdrop-filter: blur(0px); + background-color: rgba(0, 0, 0, 0); + } + + &--windows { + padding-top: calc(#{globals.$spacing-unit * 3} + 35); + } +} + +@keyframes backdrop-fade-in { + 0% { + backdrop-filter: blur(0px); + background-color: rgba(0, 0, 0, 0.5); + } + 100% { + backdrop-filter: blur(2px); + background-color: rgba(0, 0, 0, 0.7); + } +} + +@keyframes backdrop-fade-out { + 0% { + backdrop-filter: blur(2px); + background-color: rgba(0, 0, 0, 0.7); + } + 100% { + backdrop-filter: blur(0px); + background-color: rgba(0, 0, 0, 0); + } +} diff --git a/src/renderer/src/components/backdrop/backdrop.tsx b/src/renderer/src/components/backdrop/backdrop.tsx index f498e664..e62d42ee 100644 --- a/src/renderer/src/components/backdrop/backdrop.tsx +++ b/src/renderer/src/components/backdrop/backdrop.tsx @@ -1,4 +1,5 @@ -import * as styles from "./backdrop.css"; +import "./backdrop.scss"; +import cn from "classnames"; export interface BackdropProps { isClosing?: boolean; @@ -8,9 +9,9 @@ export interface BackdropProps { export function Backdrop({ isClosing = false, children }: BackdropProps) { return (
{children} diff --git a/src/renderer/src/components/checkbox-field/checkbox-field.css.ts b/src/renderer/src/components/checkbox-field/checkbox-field.css.ts deleted file mode 100644 index 606b226a..00000000 --- a/src/renderer/src/components/checkbox-field/checkbox-field.css.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../theme.css"; - -export const checkboxField = style({ - display: "flex", - flexDirection: "row", - alignItems: "center", - gap: `${SPACING_UNIT}px`, - cursor: "pointer", -}); - -export const checkbox = style({ - width: "20px", - height: "20px", - borderRadius: "4px", - backgroundColor: vars.color.darkBackground, - display: "flex", - justifyContent: "center", - alignItems: "center", - position: "relative", - transition: "all ease 0.2s", - border: `solid 1px ${vars.color.border}`, - ":hover": { - borderColor: "rgba(255, 255, 255, 0.5)", - }, -}); - -export const checkboxInput = style({ - width: "100%", - height: "100%", - position: "absolute", - margin: "0", - padding: "0", - opacity: "0", - cursor: "pointer", -}); - -export const checkboxLabel = style({ - cursor: "pointer", -}); diff --git a/src/renderer/src/components/checkbox-field/checkbox-field.scss b/src/renderer/src/components/checkbox-field/checkbox-field.scss new file mode 100644 index 00000000..06235687 --- /dev/null +++ b/src/renderer/src/components/checkbox-field/checkbox-field.scss @@ -0,0 +1,39 @@ +@use "../../scss/globals.scss"; + +.checkbox-field { + display: flex; + flex-direction: row; + align-items: center; + gap: globals.$spacing-unit; + cursor: pointer; + + &__checkbox { + width: 20px; + height: 20px; + border-radius: 4px; + background-color: globals.$dark-background-color; + display: flex; + justify-content: center; + align-items: center; + position: relative; + transition: all ease 0.2s; + border: solid 1px globals.$border-color; + &:hover { + border-color: rgba(255, 255, 255, 0.5); + } + } + + &__input { + width: 100%; + height: 100%; + position: absolute; + margin: 0; + padding: 0; + opacity: 0; + cursor: pointer; + } + + &__label { + cursor: pointer; + } +} diff --git a/src/renderer/src/components/checkbox-field/checkbox-field.tsx b/src/renderer/src/components/checkbox-field/checkbox-field.tsx index bb81a910..3e80f0aa 100644 --- a/src/renderer/src/components/checkbox-field/checkbox-field.tsx +++ b/src/renderer/src/components/checkbox-field/checkbox-field.tsx @@ -1,6 +1,6 @@ import { useId } from "react"; -import * as styles from "./checkbox-field.css"; import { CheckIcon } from "@primer/octicons-react"; +import "./checkbox-field.scss"; export interface CheckboxFieldProps extends React.DetailedHTMLProps< @@ -14,17 +14,17 @@ export function CheckboxField({ label, ...props }: CheckboxFieldProps) { const id = useId(); return ( -
-
+
+
{props.checked && }
-
diff --git a/src/renderer/src/components/confirmation-modal/confirmation-modal.css.ts b/src/renderer/src/components/confirmation-modal/confirmation-modal.css.ts deleted file mode 100644 index a9aec403..00000000 --- a/src/renderer/src/components/confirmation-modal/confirmation-modal.css.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { SPACING_UNIT } from "../../theme.css"; -import { style } from "@vanilla-extract/css"; - -export const actions = style({ - display: "flex", - alignSelf: "flex-end", - gap: `${SPACING_UNIT * 2}px`, -}); - -export const descriptionText = style({ - fontSize: "16px", - lineHeight: "24px", -}); diff --git a/src/renderer/src/components/confirmation-modal/confirmation-modal.scss b/src/renderer/src/components/confirmation-modal/confirmation-modal.scss new file mode 100644 index 00000000..428818c4 --- /dev/null +++ b/src/renderer/src/components/confirmation-modal/confirmation-modal.scss @@ -0,0 +1,17 @@ +@use "../../scss/globals.scss"; + +.confirmation-modal { + display: flex; + flex-direction: column; + gap: calc(globals.$spacing-unit * 2); + + &__actions { + display: flex; + align-self: flex-end; + gap: calc(globals.$spacing-unit * 2); + } + &__description { + font-size: 16px; + line-height: 24px; + } +} diff --git a/src/renderer/src/components/confirmation-modal/confirmation-modal.tsx b/src/renderer/src/components/confirmation-modal/confirmation-modal.tsx index 31929c60..eaf3526a 100644 --- a/src/renderer/src/components/confirmation-modal/confirmation-modal.tsx +++ b/src/renderer/src/components/confirmation-modal/confirmation-modal.tsx @@ -1,7 +1,7 @@ import { Button } from "../button/button"; import { Modal, type ModalProps } from "../modal/modal"; -import * as styles from "./confirmation-modal.css"; +import "./confirmation-modal.scss"; export interface ConfirmationModalProps extends Omit { confirmButtonLabel: string; @@ -31,10 +31,10 @@ export function ConfirmationModal({ return ( -
-

{descriptionText}

+
+

{descriptionText}

-
+
diff --git a/src/renderer/src/components/game-card/game-card.css.ts b/src/renderer/src/components/game-card/game-card.css.ts deleted file mode 100644 index c810130d..00000000 --- a/src/renderer/src/components/game-card/game-card.css.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../theme.css"; - -export const card = style({ - width: "100%", - height: "180px", - boxShadow: "0px 0px 15px 0px #000000", - overflow: "hidden", - borderRadius: "4px", - transition: "all ease 0.2s", - border: `solid 1px ${vars.color.border}`, - cursor: "pointer", - zIndex: "1", - ":active": { - opacity: vars.opacity.active, - }, -}); - -export const backdrop = style({ - background: "linear-gradient(0deg, rgba(0, 0, 0, 0.7) 50%, transparent 100%)", - width: "100%", - height: "100%", - display: "flex", - justifyContent: "flex-end", - flexDirection: "column", - position: "relative", -}); - -export const cover = style({ - width: "100%", - height: "100%", - objectFit: "cover", - objectPosition: "center", - position: "absolute", - zIndex: "-1", - transition: "all ease 0.2s", - selectors: { - [`${card}:hover &`]: { - transform: "scale(1.05)", - }, - }, -}); - -export const content = style({ - color: "#DADBE1", - padding: `${SPACING_UNIT}px ${SPACING_UNIT * 2}px`, - display: "flex", - alignItems: "flex-start", - gap: `${SPACING_UNIT}px`, - flexDirection: "column", - transition: "all ease 0.2s", - transform: "translateY(24px)", - selectors: { - [`${card}:hover &`]: { - transform: "translateY(0px)", - }, - }, -}); - -export const title = style({ - fontSize: "16px", - fontWeight: "bold", - textAlign: "left", -}); - -export const downloadOptions = style({ - display: "flex", - margin: "0", - padding: "0", - gap: `${SPACING_UNIT}px`, - flexWrap: "wrap", - listStyle: "none", -}); - -export const specifics = style({ - display: "flex", - gap: `${SPACING_UNIT * 2}px`, - justifyContent: "center", -}); - -export const specificsItem = style({ - gap: `${SPACING_UNIT}px`, - display: "flex", - color: vars.color.muted, - fontSize: "12px", - alignItems: "flex-end", -}); - -export const titleContainer = style({ - display: "flex", - alignItems: "center", - gap: `${SPACING_UNIT}px`, - color: vars.color.muted, -}); - -export const shopIcon = style({ - width: "20px", - height: "20px", - minWidth: "20px", -}); - -export const noDownloadsLabel = style({ - color: vars.color.body, - fontWeight: "bold", -}); diff --git a/src/renderer/src/components/game-card/game-card.scss b/src/renderer/src/components/game-card/game-card.scss new file mode 100644 index 00000000..ee4a22b1 --- /dev/null +++ b/src/renderer/src/components/game-card/game-card.scss @@ -0,0 +1,102 @@ +@use "../../scss/globals.scss"; + +.game-card { + width: 100%; + height: 180px; + box-shadow: 0px 0px 15px 0px #000000; + overflow: hidden; + border-radius: 4px; + transition: all ease 0.2s; + border: solid 1px globals.$border-color; + cursor: pointer; + z-index: 1; + + &:active { + opacity: globals.$active-opacity; + } + + &__backdrop { + background: linear-gradient(0deg, rgba(0, 0, 0, 0.7) 50%, transparent 100%); + width: 100%; + height: 100%; + display: flex; + justify-content: flex-end; + flex-direction: column; + position: relative; + } + + &__cover { + width: 100%; + height: 100%; + object-fit: cover; + object-position: center; + position: absolute; + z-index: -1; + transition: all ease 0.2s; + } + + &__content { + color: #dadbe1; + padding: globals.$spacing-unit calc(globals.$spacing-unit * 2); + display: flex; + align-items: flex-start; + gap: globals.$spacing-unit; + flex-direction: column; + transition: all ease 0.2s; + transform: translateY(24px); + } + + &__title { + font-size: 16px; + font-weight: bold; + text-align: left; + } + + &__download-options { + display: flex; + margin: 0; + padding: 0; + gap: globals.$spacing-unit; + flex-wrap: wrap; + list-style: none; + } + + &__specifics { + display: flex; + gap: calc(globals.$spacing-unit * 2); + justify-content: center; + } + + &__specifics-item { + gap: globals.$spacing-unit; + display: flex; + color: globals.$muted-color; + font-size: 12px; + align-items: flex-end; + } + + &__title-container { + display: flex; + align-items: center; + gap: globals.$spacing-unit; + color: globals.$muted-color; + } + + &__shop-icon { + width: 20px; + height: 20px; + min-width: 20px; + } + + &__no-download-label { + color: globals.$body-color; + font-weight: bold; + } + + &:hover &__cover { + transform: scale(1.05); + } + &:hover &__content { + transform: translateY(0px); + } +} diff --git a/src/renderer/src/components/game-card/game-card.tsx b/src/renderer/src/components/game-card/game-card.tsx index 869cb2d6..62290704 100644 --- a/src/renderer/src/components/game-card/game-card.tsx +++ b/src/renderer/src/components/game-card/game-card.tsx @@ -3,7 +3,8 @@ import type { CatalogueEntry, GameRepack, GameStats } from "@types"; import SteamLogo from "@renderer/assets/steam-logo.svg?react"; -import * as styles from "./game-card.css"; +import "./game-card.scss"; + import { useTranslation } from "react-i18next"; import { Badge } from "../badge/badge"; import { useCallback, useContext, useEffect, useState } from "react"; @@ -19,7 +20,7 @@ export interface GameCardProps } const shopIcon = { - steam: , + steam: , }; export function GameCard({ game, ...props }: GameCardProps) { @@ -56,25 +57,25 @@ export function GameCard({ game, ...props }: GameCardProps) { diff --git a/src/renderer/src/components/header/header.css.ts b/src/renderer/src/components/header/header.css.ts deleted file mode 100644 index 12855986..00000000 --- a/src/renderer/src/components/header/header.css.ts +++ /dev/null @@ -1,182 +0,0 @@ -import type { ComplexStyleRule } from "@vanilla-extract/css"; -import { keyframes, style } from "@vanilla-extract/css"; -import { recipe } from "@vanilla-extract/recipes"; - -import { SPACING_UNIT, vars } from "../../theme.css"; - -export const slideIn = keyframes({ - "0%": { transform: "translateX(20px)", opacity: "0" }, - "100%": { - transform: "translateX(0)", - opacity: "1", - }, -}); - -export const slideOut = keyframes({ - "0%": { transform: "translateX(0px)", opacity: "1" }, - "100%": { - transform: "translateX(20px)", - opacity: "0", - }, -}); - -export const header = recipe({ - base: { - display: "flex", - justifyContent: "space-between", - alignItems: "center", - gap: `${SPACING_UNIT * 2}px`, - WebkitAppRegion: "drag", - width: "100%", - padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 3}px`, - color: vars.color.muted, - borderBottom: `solid 1px ${vars.color.border}`, - backgroundColor: vars.color.darkBackground, - } as ComplexStyleRule, - variants: { - draggingDisabled: { - true: { - WebkitAppRegion: "no-drag", - } as ComplexStyleRule, - }, - isWindows: { - true: { - WebkitAppRegion: "no-drag", - } as ComplexStyleRule, - }, - }, -}); - -export const search = recipe({ - base: { - backgroundColor: vars.color.background, - display: "inline-flex", - transition: "all ease 0.2s", - width: "200px", - alignItems: "center", - borderRadius: "8px", - border: `solid 1px ${vars.color.border}`, - height: "40px", - WebkitAppRegion: "no-drag", - } as ComplexStyleRule, - variants: { - focused: { - true: { - width: "250px", - borderColor: "#DADBE1", - }, - false: { - ":hover": { - borderColor: "rgba(255, 255, 255, 0.5)", - }, - }, - }, - }, -}); - -export const searchInput = style({ - backgroundColor: "transparent", - border: "none", - width: "100%", - height: "100%", - outline: "none", - color: "#DADBE1", - cursor: "default", - fontFamily: "inherit", - textOverflow: "ellipsis", - ":focus": { - cursor: "text", - }, -}); - -export const actionButton = style({ - color: "inherit", - cursor: "pointer", - transition: "all ease 0.2s", - padding: `${SPACING_UNIT}px`, - ":hover": { - color: "#DADBE1", - }, -}); - -export const section = style({ - display: "flex", - alignItems: "center", - gap: `${SPACING_UNIT * 2}px`, - height: "100%", - overflow: "hidden", -}); - -export const backButton = recipe({ - base: { - color: vars.color.body, - cursor: "pointer", - WebkitAppRegion: "no-drag", - position: "absolute", - transition: "transform ease 0.2s", - animationDuration: "0.2s", - width: "16px", - height: "16px", - display: "flex", - alignItems: "center", - } as ComplexStyleRule, - variants: { - enabled: { - true: { - animationName: slideIn, - }, - false: { - opacity: "0", - pointerEvents: "none", - animationName: slideOut, - }, - }, - }, -}); - -export const title = recipe({ - base: { - transition: "all ease 0.2s", - overflow: "hidden", - textOverflow: "ellipsis", - width: "100%", - }, - variants: { - hasBackButton: { - true: { - transform: "translateX(28px)", - width: "calc(100% - 28px)", - }, - }, - }, -}); - -export const subheader = style({ - borderBottom: `solid 1px ${vars.color.border}`, - padding: `${SPACING_UNIT / 2}px ${SPACING_UNIT * 3}px`, -}); - -export const newVersionButton = style({ - display: "flex", - alignItems: "center", - justifyContent: "center", - gap: `${SPACING_UNIT}px`, - color: vars.color.body, - fontSize: "12px", - ":hover": { - textDecoration: "underline", - cursor: "pointer", - }, -}); - -export const newVersionLink = style({ - display: "flex", - alignItems: "center", - gap: `${SPACING_UNIT}px`, - color: "#8e919b", - fontSize: "12px", -}); - -export const newVersionIcon = style({ - color: vars.color.success, -}); diff --git a/src/renderer/src/components/header/header.scss b/src/renderer/src/components/header/header.scss new file mode 100644 index 00000000..065aed8d --- /dev/null +++ b/src/renderer/src/components/header/header.scss @@ -0,0 +1,132 @@ +@use "../../scss/globals.scss"; + +.header { + display: flex; + justify-content: space-between; + align-items: center; + gap: calc(globals.$spacing-unit * 2); + -webkit-app-region: drag; + width: 100%; + padding: calc(globals.$spacing-unit * 2) calc(globals.$spacing-unit * 3); + color: globals.$muted-color; + border-bottom: solid 1px globals.$border-color; + + &--dragging-disabled { + -webkit-app-region: no-drag; + } + + &--is-windows { + -webkit-app-region: no-drag; + } + + &__search { + background-color: globals.$dark-background-color; + display: inline-flex; + transition: all ease 0.2s; + width: 200px; + align-items: center; + border-radius: 8px; + border: solid 1px globals.$border-color; + height: 40px; + -webkit-app-region: no-drag; + &:hover { + border-color: rgba(255, 255, 255, 0.5); + } + + &--focused { + width: 250px; + border-color: #dadbe1; + } + } + + &__search-input { + background-color: transparent; + border: none; + width: 100%; + height: 100%; + outline: none; + color: #dadbe1; + cursor: default; + font-family: inherit; + text-overflow: ellipsis; + + &:focus { + cursor: text; + } + } + + &__action-button { + color: inherit; + cursor: pointer; + transition: all ease 0.2s; + padding: globals.$spacing-unit; + + &:hover { + color: #dadbe1; + } + } + + &__section { + display: flex; + align-items: center; + gap: calc(globals.$spacing-unit * 2); + height: 100%; + overflow: hidden; + } + + &__back-button { + color: globals.$body-color; + cursor: pointer; + -webkit-app-region: no-drag; + position: absolute; + transition: transform ease 0.2s; + animation-duration: 0.2s; + width: 16px; + height: 16px; + display: flex; + align-items: center; + opacity: 0; + pointer-events: none; + animation-name: slide-out; + + &--enabled { + animation: slide-in; + opacity: 1; + pointer-events: all; + } + } + + &__title { + transition: all ease 0.2s; + overflow: hidden; + text-overflow: ellipsis; + width: 100%; + + &--has-back-button { + transform: translateX(28px); + width: calc(100% - 28px); + } + } +} + +@keyframes slide-in { + 0% { + transform: translateX(20px); + opacity: 0; + } + 100% { + transform: translateX(0); + opacity: 1; + } +} + +@keyframes slide-out { + 0% { + transform: translateX(0px); + opacity: 1; + } + 100% { + transform: translateX(20px); + opacity: 0; + } +} diff --git a/src/renderer/src/components/header/header.tsx b/src/renderer/src/components/header/header.tsx index e0721df4..83d32caa 100644 --- a/src/renderer/src/components/header/header.tsx +++ b/src/renderer/src/components/header/header.tsx @@ -5,9 +5,11 @@ import { ArrowLeftIcon, SearchIcon, XIcon } from "@primer/octicons-react"; import { useAppDispatch, useAppSelector } from "@renderer/hooks"; -import * as styles from "./header.css"; +import "./header.scss"; + import { clearSearch } from "@renderer/features"; import { AutoUpdateSubHeader } from "./auto-update-sub-header"; +import cn from "classnames"; export interface HeaderProps { onSearch: (query: string) => void; @@ -68,16 +70,16 @@ export function Header({ onSearch, onClear, search }: HeaderProps) { return ( <>
-
+
-
-
+
+
diff --git a/src/renderer/src/components/hero/hero.css.ts b/src/renderer/src/components/hero/hero.css.ts deleted file mode 100644 index eaf0a101..00000000 --- a/src/renderer/src/components/hero/hero.css.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../theme.css"; - -export const hero = style({ - width: "100%", - height: "280px", - minHeight: "280px", - maxHeight: "280px", - borderRadius: "4px", - color: "#DADBE1", - overflow: "hidden", - boxShadow: "0px 0px 15px 0px #000000", - cursor: "pointer", - border: `solid 1px ${vars.color.border}`, - zIndex: "1", -}); - -export const heroMedia = style({ - objectFit: "cover", - objectPosition: "center", - position: "absolute", - zIndex: "-1", - width: "100%", - height: "100%", - transition: "all ease 0.2s", - imageRendering: "revert", - selectors: { - [`${hero}:hover &`]: { - transform: "scale(1.02)", - }, - }, -}); - -export const backdrop = style({ - width: "100%", - height: "100%", - background: "linear-gradient(0deg, rgba(0, 0, 0, 0.8) 25%, transparent 100%)", - position: "relative", - display: "flex", - overflow: "hidden", -}); - -export const description = style({ - maxWidth: "700px", - color: vars.color.muted, - textAlign: "left", - lineHeight: "20px", - marginTop: `${SPACING_UNIT * 2}px`, -}); - -export const content = style({ - width: "100%", - height: "100%", - padding: `${SPACING_UNIT * 4}px ${SPACING_UNIT * 3}px`, - gap: `${SPACING_UNIT * 2}px`, - display: "flex", - flexDirection: "column", - justifyContent: "flex-end", -}); diff --git a/src/renderer/src/components/hero/hero.scss b/src/renderer/src/components/hero/hero.scss new file mode 100644 index 00000000..ea14c059 --- /dev/null +++ b/src/renderer/src/components/hero/hero.scss @@ -0,0 +1,56 @@ +@use "../../scss/globals.scss"; + +.hero { + width: 100%; + height: 280px; + min-height: 280px; + max-height: 280px; + border-radius: 4px; + color: #dadbe1; + overflow: hidden; + box-shadow: 0px 0px 15px 0px #000000; + cursor: pointer; + border: solid 1px globals.$border-color; + z-index: 1; + + &__media { + object-fit: cover; + object-position: center; + position: absolute; + z-index: -1; + width: 100%; + height: 100%; + transition: all ease 0.2s; + image-rendering: revert; + } + &:hover &__media { + transform: scale(1.02); + } + + &__backdrop { + width: 100%; + height: 100%; + background: linear-gradient(0deg, rgba(0, 0, 0, 0.8) 25%, transparent 100%); + position: relative; + display: flex; + overflow: hidden; + } + + &__description { + max-width: 700px; + color: globals.$muted-color; + text-align: left; + line-height: 20px; + margin-top: calc(globals.$spacing-unit * 2); + } + + &__content { + width: 100%; + height: 100%; + padding: calc(globals.$spacing-unit * 4) calc(globals.$spacing-unit * 3); + gap: calc(globals.$spacing-unit * 2); + display: flex; + flex-direction: column; + justify-content: flex-end; + } +} diff --git a/src/renderer/src/components/hero/hero.tsx b/src/renderer/src/components/hero/hero.tsx index 9bc5514d..b7a75c47 100644 --- a/src/renderer/src/components/hero/hero.tsx +++ b/src/renderer/src/components/hero/hero.tsx @@ -1,9 +1,9 @@ import { useNavigate } from "react-router-dom"; -import * as styles from "./hero.css"; import { useEffect, useState } from "react"; import type { TrendingGame } from "@types"; import { useTranslation } from "react-i18next"; import Skeleton from "react-loading-skeleton"; +import "./hero.scss"; export function Hero() { const [featuredGameDetails, setFeaturedGameDetails] = useState< @@ -29,7 +29,7 @@ export function Hero() { }, [i18n.language]); if (isLoading) { - return ; + return ; } if (featuredGameDetails?.length) { @@ -37,17 +37,17 @@ export function Hero() { diff --git a/src/renderer/src/components/link/link.css.ts b/src/renderer/src/components/link/link.css.ts deleted file mode 100644 index 4f0e4c41..00000000 --- a/src/renderer/src/components/link/link.css.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -export const link = style({ - textDecoration: "none", - color: "#C0C1C7", - ":hover": { - textDecoration: "underline", - }, -}); diff --git a/src/renderer/src/components/link/link.scss b/src/renderer/src/components/link/link.scss new file mode 100644 index 00000000..170f10f6 --- /dev/null +++ b/src/renderer/src/components/link/link.scss @@ -0,0 +1,7 @@ +.link { + text-decoration: none; + color: #c0c1c7; + &:hover { + text-decoration: underline; + } +} diff --git a/src/renderer/src/components/link/link.tsx b/src/renderer/src/components/link/link.tsx index ffd5f89c..1c3bad76 100644 --- a/src/renderer/src/components/link/link.tsx +++ b/src/renderer/src/components/link/link.tsx @@ -1,6 +1,6 @@ import { Link as ReactRouterDomLink, LinkProps } from "react-router-dom"; import cn from "classnames"; -import * as styles from "./link.css"; +import "./link.scss"; export function Link({ children, to, className, ...props }: LinkProps) { const openExternal = (event: React.MouseEvent) => { @@ -12,7 +12,7 @@ export function Link({ children, to, className, ...props }: LinkProps) { return ( @@ -22,11 +22,7 @@ export function Link({ children, to, className, ...props }: LinkProps) { } return ( - + {children} ); diff --git a/src/renderer/src/components/modal/modal.css.ts b/src/renderer/src/components/modal/modal.css.ts deleted file mode 100644 index d9d14fda..00000000 --- a/src/renderer/src/components/modal/modal.css.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { keyframes, style } from "@vanilla-extract/css"; -import { recipe } from "@vanilla-extract/recipes"; - -import { SPACING_UNIT, vars } from "../../theme.css"; - -export const scaleFadeIn = keyframes({ - "0%": { opacity: "0", scale: "0.5" }, - "100%": { - opacity: "1", - scale: "1", - }, -}); - -export const scaleFadeOut = keyframes({ - "0%": { opacity: "1", scale: "1" }, - "100%": { - opacity: "0", - scale: "0.5", - }, -}); - -export const modal = recipe({ - base: { - animation: `${scaleFadeIn} 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running`, - backgroundColor: vars.color.background, - borderRadius: "4px", - minWidth: "400px", - maxWidth: "600px", - color: vars.color.body, - maxHeight: "100%", - border: `solid 1px ${vars.color.border}`, - overflow: "hidden", - display: "flex", - flexDirection: "column", - }, - variants: { - closing: { - true: { - animationName: scaleFadeOut, - opacity: "0", - }, - }, - large: { - true: { - width: "800px", - maxWidth: "800px", - }, - }, - }, -}); - -export const modalContent = style({ - height: "100%", - overflow: "auto", - padding: `${SPACING_UNIT * 3}px ${SPACING_UNIT * 2}px`, -}); - -export const modalHeader = style({ - display: "flex", - gap: `${SPACING_UNIT}px`, - padding: `${SPACING_UNIT * 2}px`, - borderBottom: `solid 1px ${vars.color.border}`, - justifyContent: "space-between", - alignItems: "center", -}); - -export const closeModalButton = style({ - cursor: "pointer", - transition: "all ease 0.2s", - alignSelf: "flex-start", - ":hover": { - opacity: "0.75", - }, -}); - -export const closeModalButtonIcon = style({ - color: vars.color.body, -}); diff --git a/src/renderer/src/components/modal/modal.scss b/src/renderer/src/components/modal/modal.scss new file mode 100644 index 00000000..dbaee730 --- /dev/null +++ b/src/renderer/src/components/modal/modal.scss @@ -0,0 +1,77 @@ +@use "../../scss/globals.scss"; + +.modal { + animation: scale-fade-in 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none + running; + background-color: globals.$background-color; + border-radius: 4px; + min-width: 400px; + max-width: 600px; + color: globals.$body-color; + max-height: 100%; + border: solid 1px globals.$border-color; + overflow: hidden; + display: flex; + flex-direction: column; + + &--closing { + animation-name: scale-fade-out; + opacity: 0; + } + + &--large { + width: 800px; + max-width: 800px; + } + + &__content { + height: 100%; + overflow: auto; + padding: calc(globals.$spacing-unit * 3) calc(globals.$spacing-unit * 2); + } + + &__header { + display: flex; + gap: globals.$spacing-unit; + padding: calc(globals.$spacing-unit * 2); + border-bottom: solid 1px globals.$border-color; + justify-content: space-between; + align-items: center; + } + + &__close-button { + cursor: pointer; + transition: all ease 0.2s; + align-self: flex-start; + + &:hover { + opacity: 0.75; + } + } + + &__close-button-icon { + color: globals.$body-color; + } +} + +@keyframes scale-fade-in { + 0% { + opacity: 0; + scale: 0.5; + } + 100% { + opacity: 1; + scale: 1; + } +} + +@keyframes scale-fade-out { + 0% { + opacity: 1; + scale: 1; + } + 100% { + opacity: 0; + scale: 0.5; + } +} diff --git a/src/renderer/src/components/modal/modal.tsx b/src/renderer/src/components/modal/modal.tsx index eb2894de..3eceedb3 100644 --- a/src/renderer/src/components/modal/modal.tsx +++ b/src/renderer/src/components/modal/modal.tsx @@ -2,10 +2,11 @@ import { useCallback, useEffect, useRef, useState } from "react"; import { createPortal } from "react-dom"; import { XIcon } from "@primer/octicons-react"; -import * as styles from "./modal.css"; +import "./modal.scss"; import { Backdrop } from "../backdrop/backdrop"; import { useTranslation } from "react-i18next"; +import cn from "classnames"; export interface ModalProps { visible: boolean; @@ -102,13 +103,16 @@ export function Modal({ return createPortal(
-
+

{title}

{description &&

{description}

} @@ -117,13 +121,13 @@ export function Modal({
-
{children}
+
{children}
, document.body diff --git a/src/renderer/src/components/select-field/select-field.css.ts b/src/renderer/src/components/select-field/select-field.css.ts deleted file mode 100644 index 7acd4e98..00000000 --- a/src/renderer/src/components/select-field/select-field.css.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { style } from "@vanilla-extract/css"; -import { recipe } from "@vanilla-extract/recipes"; - -import { SPACING_UNIT, vars } from "../../theme.css"; - -export const select = recipe({ - base: { - display: "inline-flex", - transition: "all ease 0.2s", - width: "fit-content", - alignItems: "center", - borderRadius: "8px", - border: `1px solid ${vars.color.border}`, - height: "40px", - minHeight: "40px", - }, - variants: { - focused: { - true: { - borderColor: "#DADBE1", - }, - false: { - ":hover": { - borderColor: "rgba(255, 255, 255, 0.5)", - }, - }, - }, - theme: { - primary: { - backgroundColor: vars.color.darkBackground, - }, - dark: { - backgroundColor: vars.color.background, - }, - }, - }, -}); - -export const option = style({ - backgroundColor: vars.color.darkBackground, - borderRight: "4px solid", - borderColor: "transparent", - borderRadius: "8px", - width: "fit-content", - height: "100%", - outline: "none", - color: "#DADBE1", - cursor: "default", - fontFamily: "inherit", - fontSize: vars.size.body, - textOverflow: "ellipsis", - padding: `${SPACING_UNIT}px`, -}); - -export const label = style({ - marginBottom: `${SPACING_UNIT}px`, - display: "block", - color: vars.color.body, -}); diff --git a/src/renderer/src/components/select-field/select-field.scss b/src/renderer/src/components/select-field/select-field.scss new file mode 100644 index 00000000..38dfc65b --- /dev/null +++ b/src/renderer/src/components/select-field/select-field.scss @@ -0,0 +1,49 @@ +@use "../../scss/globals.scss"; + +.select-field { + display: inline-flex; + transition: all ease 0.2s; + width: fit-content; + align-items: center; + border-radius: 8px; + border: 1px solid globals.$border-color; + height: 40px; + min-height: 40px; + &:hover { + border-color: rgba(255, 255, 255, 0.5); + } + + &--focused { + border-color: #dadbe1; + } + + &--primary { + background-color: globals.$dark-background-color; + } + + &--dark { + background-color: globals.$background-color; + } + + &__option { + background-color: globals.$dark-background-color; + border-right: 4px solid; + border-color: transparent; + border-radius: 8px; + width: fit-content; + height: 100%; + outline: none; + color: #dadbe1; + cursor: default; + font-family: inherit; + font-size: globals.$body-font-size; + text-overflow: ellipsis; + padding: globals.$spacing-unit; + } + + &__label { + margin-bottom: globals.$spacing-unit; + display: block; + color: globals.$body-color; + } +} diff --git a/src/renderer/src/components/select-field/select-field.tsx b/src/renderer/src/components/select-field/select-field.tsx index fb5038f6..16b266cd 100644 --- a/src/renderer/src/components/select-field/select-field.tsx +++ b/src/renderer/src/components/select-field/select-field.tsx @@ -1,13 +1,13 @@ import { useId, useState } from "react"; -import type { RecipeVariants } from "@vanilla-extract/recipes"; -import * as styles from "./select-field.css"; +import "./select-field.scss"; +import cn from "classnames"; export interface SelectProps extends React.DetailedHTMLProps< React.SelectHTMLAttributes, HTMLSelectElement > { - theme?: NonNullable>["theme"]; + theme?: "primary" | "dark"; label?: string; options?: { key: string; value: string; label: string }[]; } @@ -25,16 +25,20 @@ export function SelectField({ return (
{label && ( -
-
- {t("my_library")} +
+ {t("my_library")} - + -
    - {filteredLibrary.map((game) => ( -
  • - -
  • - ))} -
-
+ + {getGameTitle(game)} + + + + ))} + +
+
+ {hasActiveSubscription && ( + + )} +
)} + + + handleChange({ disableNsfwAlert: !form.disableNsfwAlert }) + } + /> ); } diff --git a/src/renderer/src/vite-env.d.ts b/src/renderer/src/vite-env.d.ts index b1f45c78..304dde0f 100644 --- a/src/renderer/src/vite-env.d.ts +++ b/src/renderer/src/vite-env.d.ts @@ -1,2 +1,10 @@ /// /// + +interface ImportMetaEnv { + readonly RENDERER_VITE_INTERCOM_APP_ID: string; +} + +interface ImportMeta { + readonly env: ImportMetaEnv; +} diff --git a/src/shared/index.ts b/src/shared/index.ts index 1f17ac56..173867df 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -55,6 +55,9 @@ export const removeDuplicateSpaces = (name: string) => export const replaceDotsWithSpace = (name: string) => name.replace(/\./g, " "); +export const replaceNbspWithSpace = (name: string) => + name.replace(new RegExp(String.fromCharCode(160), "g"), " "); + export const replaceUnderscoreWithSpace = (name: string) => name.replace(/_/g, " "); @@ -69,6 +72,7 @@ export const formatName = pipe( removeSpecialEditionFromName, replaceUnderscoreWithSpace, replaceDotsWithSpace, + replaceNbspWithSpace, (str) => str.replace(/DIRECTOR'S CUT/g, ""), removeSymbolsFromName, removeDuplicateSpaces, diff --git a/src/types/howlongtobeat.types.ts b/src/types/how-long-to-beat.types.ts similarity index 100% rename from src/types/howlongtobeat.types.ts rename to src/types/how-long-to-beat.types.ts diff --git a/src/types/index.ts b/src/types/index.ts index 9bb25e3f..c0269cd3 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -161,6 +161,7 @@ export interface UserPreferences { preferQuitInsteadOfHiding: boolean; runAtStartup: boolean; startMinimized: boolean; + disableNsfwAlert: boolean; } export interface Steam250Game { @@ -245,6 +246,7 @@ export interface Subscription { export interface UserDetails { id: string; username: string; + email: string | null; displayName: string; profileImageUrl: string | null; backgroundImageUrl: string | null; @@ -257,6 +259,7 @@ export interface UserProfile { id: string; displayName: string; profileImageUrl: string | null; + email: string | null; backgroundImageUrl: string | null; profileVisibility: ProfileVisibility; libraryGames: UserGame[]; @@ -373,4 +376,4 @@ export interface ComparedAchievements { export * from "./steam.types"; export * from "./real-debrid.types"; export * from "./ludusavi.types"; -export * from "./howlongtobeat.types"; +export * from "./how-long-to-beat.types"; diff --git a/yarn.lock b/yarn.lock index d241181c..0220a873 100644 --- a/yarn.lock +++ b/yarn.lock @@ -480,11 +480,6 @@ resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-2.2.2.tgz#1a6d89603fb215dc4d4178052d05b30b83c75402" integrity sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A== -"@canvas/image-data@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@canvas/image-data/-/image-data-1.0.0.tgz" - integrity sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw== - "@commitlint/cli@^19.5.0": version "19.5.0" resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.5.0.tgz#a6e2f7f8397ddf9abd5ee5870e30a1bf51b7be2b" @@ -1071,6 +1066,11 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== +"@intercom/messenger-js-sdk@^0.0.14": + version "0.0.14" + resolved "https://registry.yarnpkg.com/@intercom/messenger-js-sdk/-/messenger-js-sdk-0.0.14.tgz#a27999370cc0a82a2a57a779426df25a57891863" + integrity sha512-2dH4BDAh9EI90K7hUkAdZ76W79LM45Sd1OBX7t6Vzy8twpNiQ5X+7sH9G5hlJlkSGnf+vFWlFcy9TOYAyEs1hA== + "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" @@ -1090,21 +1090,6 @@ dependencies: minipass "^7.0.4" -"@jimp/bmp@^0.22.12": - version "0.22.12" - resolved "https://registry.yarnpkg.com/@jimp/bmp/-/bmp-0.22.12.tgz#0316044dc7b1a90274aef266d50349347fb864d4" - integrity sha512-aeI64HD0npropd+AR76MCcvvRaa+Qck6loCOS03CkkxGHN5/r336qTM5HPUdHKMDOGzqknuVPA8+kK1t03z12g== - dependencies: - "@jimp/utils" "^0.22.12" - bmp-js "^0.1.0" - -"@jimp/utils@^0.22.12": - version "0.22.12" - resolved "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz" - integrity sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q== - dependencies: - regenerator-runtime "^0.13.3" - "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" @@ -1620,7 +1605,7 @@ "@tokenizer/token@^0.3.0": version "0.3.0" - resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz" + resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== "@tootallnate/once@2": @@ -2523,11 +2508,6 @@ bluebird@^3.5.5: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bmp-js@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.1.0.tgz#e05a63f796a6c1ff25f4771ec7adadc148c07233" - integrity sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw== - boolean@^3.0.1: version "3.2.0" resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.2.0.tgz#9e5294af4e98314494cbb17979fa54ca159f116b" @@ -3139,23 +3119,6 @@ decimal.js@^10.4.3: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== -decode-bmp@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/decode-bmp/-/decode-bmp-0.2.1.tgz#cec3e0197ec3b6c60f02220f50e8757030ff2427" - integrity sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA== - dependencies: - "@canvas/image-data" "^1.0.0" - to-data-view "^1.1.0" - -decode-ico@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/decode-ico/-/decode-ico-0.4.1.tgz#e0f7373081532c7b8495bd51fb225d354e14de25" - integrity sha512-69NZfbKIzux1vBOd31al3XnMnH+2mqDhEgLdpygErm4d60N+UwA5Sq5WFjmEDQzumgB9fElojGwWG0vybVfFmA== - dependencies: - "@canvas/image-data" "^1.0.0" - decode-bmp "^0.2.0" - to-data-view "^1.1.0" - decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -3967,13 +3930,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-type@^19.0.0: - version "19.5.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-19.5.0.tgz#c13c5eca9c1c7270f6d5fbff70331b3c976f92b5" - integrity sha512-dMuq6WWnP6BpQY0zYJNpTtQWgeCImSMG0BTIzUBXvxbwc1HWP/E7AE4UWU9XSCOPGJuOHda0HpDnwM2FW+d90A== +file-type@^19.6.0: + version "19.6.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-19.6.0.tgz#b43d8870453363891884cf5e79bb3e4464f2efd3" + integrity sha512-VZR5I7k5wkD0HgFnMsq5hOsSc710MJMu5Nc5QYsbe38NN5iPV/XTObYLc/cpttRTf6lX538+5uO1ZQRhYibiZQ== dependencies: get-stream "^9.0.1" - strtok3 "^8.1.0" + strtok3 "^9.0.1" token-types "^6.0.0" uint8array-extras "^1.3.0" @@ -4529,18 +4492,6 @@ i18next@^23.11.2: dependencies: "@babel/runtime" "^7.23.2" -icojs@^0.19.4: - version "0.19.4" - resolved "https://registry.yarnpkg.com/icojs/-/icojs-0.19.4.tgz#fdbc9e61a0945ed1d331beb358d67f72cf7d78dc" - integrity sha512-86oNepPk2jAmbb96BPeucZI7HoSBobFlXDhhjIbwRb3wkQpvdBO5HO9KtMUNzMFT3qqQZsjLsfW+L0/9Rl9VqA== - dependencies: - "@jimp/bmp" "^0.22.12" - decode-ico "^0.4.1" - file-type "^19.0.0" - jpeg-js "^0.4.4" - pngjs "^7.0.0" - to-data-view "^2.0.0" - iconv-corefoundation@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz#31065e6ab2c9272154c8b0821151e2c88f1b002a" @@ -4955,11 +4906,6 @@ jiti@^1.19.1: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.6.tgz#6c7f7398dd4b3142767f9a168af2f317a428d268" integrity sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w== -jpeg-js@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.4.tgz#a9f1c6f1f9f0fa80cdb3484ed9635054d28936aa" - integrity sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -5961,10 +5907,10 @@ pe-library@^0.4.1: resolved "https://registry.yarnpkg.com/pe-library/-/pe-library-0.4.1.tgz#e269be0340dcb13aa6949d743da7d658c3e2fbea" integrity sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw== -peek-readable@^5.1.4: - version "5.2.0" - resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-5.2.0.tgz#7458f18126217c154938c32a185f5d05f3df3710" - integrity sha512-U94a+eXHzct7vAd19GH3UQ2dH4Satbng0MyYTMaQatL0pvYYL5CTPR25HBhKtecl+4bfu1/i3vC6k0hydO5Vcw== +peek-readable@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-5.3.1.tgz#9cc2c275cceda9f3d07a988f4f664c2080387dff" + integrity sha512-GVlENSDW6KHaXcd9zkZltB7tCLosKB/4Hg0fqBJkAoBgYG2Tn1xtMgXtSUuMU9AK/gCm/tTdT8mgAeF4YNeeqw== pend@~1.2.0: version "1.2.0" @@ -6011,11 +5957,6 @@ plist@^3.0.4, plist@^3.0.5, plist@^3.1.0: base64-js "^1.5.1" xmlbuilder "^15.1.1" -pngjs@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-7.0.0.tgz#a8b7446020ebbc6ac739db6c5415a65d17090e26" - integrity sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow== - possible-typed-array-names@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" @@ -6262,11 +6203,6 @@ reflect.getprototypeof@^1.0.4: globalthis "^1.0.3" which-builtin-type "^1.1.3" -regenerator-runtime@^0.13.3: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== - regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" @@ -6971,13 +6907,13 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strtok3@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-8.1.0.tgz#9234a6f42ee03bf8569c7ae0788d5fd4e67e095b" - integrity sha512-ExzDvHYPj6F6QkSNe/JxSlBxTh3OrI6wrAIz53ulxo1c4hBJ1bT9C/JrAthEKHWG9riVH3Xzg7B03Oxty6S2Lw== +strtok3@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-9.0.1.tgz#7e3d7bbd2b829c9def6a7bb90d82e240abdd32be" + integrity sha512-ERPW+XkvX9W2A+ov07iy+ZFJpVdik04GhDA4eVogiG9hpC97Kem2iucyzhFxbFRvQ5o2UckFtKZdp1hkGvnrEw== dependencies: "@tokenizer/token" "^0.3.0" - peek-readable "^5.1.4" + peek-readable "^5.3.1" sudo-prompt@^9.2.1: version "9.2.1" @@ -7154,16 +7090,6 @@ tmp@^0.2.0: resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== -to-data-view@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/to-data-view/-/to-data-view-1.1.0.tgz#08d6492b0b8deb9b29bdf1f61c23eadfa8994d00" - integrity sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ== - -to-data-view@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-data-view/-/to-data-view-2.0.0.tgz#4cc3f5c9eb59514a7436fc54c587c3c34c9b1d60" - integrity sha512-RGEM5KqlPHr+WVTPmGNAXNeFEmsBnlkxXaIfEpUYV0AST2Z5W1EGq9L/MENFrMMmL2WQr1wjkmZy/M92eKhjYA== - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" From b4014535e8987c95e7d9183eee77b95f8bf30c57 Mon Sep 17 00:00:00 2001 From: Shisuys Date: Mon, 13 Jan 2025 10:23:50 -0300 Subject: [PATCH 03/33] change pixeldrain url to gamedrivers servers --- src/main/services/download/download-manager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/services/download/download-manager.ts b/src/main/services/download/download-manager.ts index 134a74e6..8fda319e 100644 --- a/src/main/services/download/download-manager.ts +++ b/src/main/services/download/download-manager.ts @@ -263,7 +263,7 @@ export class DownloadManager { return { action: "start", game_id: game.id, - url: `https://pixeldrain.com/api/file/${id}?download`, + url: `https://cdn.pd5-gamedriveorg.workers.dev/api/file/${id}`, save_path: game.downloadPath!, }; } From f6707a5c84ef689a91acb3928608721415e672be Mon Sep 17 00:00:00 2001 From: Hachi-R Date: Thu, 16 Jan 2025 11:30:24 -0300 Subject: [PATCH 04/33] lint --- src/main/services/hosters/datanodes.ts | 3 ++- src/renderer/src/components/checkbox-field/checkbox-field.tsx | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/services/hosters/datanodes.ts b/src/main/services/hosters/datanodes.ts index d77e7d51..ae144418 100644 --- a/src/main/services/hosters/datanodes.ts +++ b/src/main/services/hosters/datanodes.ts @@ -33,7 +33,8 @@ export class DatanodesApi { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36", }, - maxRedirects: 0, validateStatus: (status: number) => status === 302 || status < 400, + maxRedirects: 0, + validateStatus: (status: number) => status === 302 || status < 400, } ); diff --git a/src/renderer/src/components/checkbox-field/checkbox-field.tsx b/src/renderer/src/components/checkbox-field/checkbox-field.tsx index a93e50d9..61cd9fda 100644 --- a/src/renderer/src/components/checkbox-field/checkbox-field.tsx +++ b/src/renderer/src/components/checkbox-field/checkbox-field.tsx @@ -15,7 +15,9 @@ export function CheckboxField({ label, ...props }: CheckboxFieldProps) { return (
-
+
Date: Thu, 16 Jan 2025 12:18:25 -0300 Subject: [PATCH 05/33] refactor: change notifications header to paragraph --- src/renderer/src/pages/settings/settings-general.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/src/pages/settings/settings-general.tsx b/src/renderer/src/pages/settings/settings-general.tsx index 3aa3044e..9916e4e6 100644 --- a/src/renderer/src/pages/settings/settings-general.tsx +++ b/src/renderer/src/pages/settings/settings-general.tsx @@ -138,7 +138,7 @@ export function SettingsGeneral() { }))} /> -

{t("notifications")}

+

{t("notifications")}

Date: Sat, 18 Jan 2025 22:03:56 -0300 Subject: [PATCH 06/33] refactor: migrate achievement panel styles from VE to SCSS + BEM --- .../achievements/achievement-panel.css.ts | 71 ------------------- .../pages/achievements/achievement-panel.scss | 70 ++++++++++++++++++ .../pages/achievements/achievement-panel.tsx | 12 ++-- .../compared-achievement-panel.tsx | 8 +-- 4 files changed, 79 insertions(+), 82 deletions(-) delete mode 100644 src/renderer/src/pages/achievements/achievement-panel.css.ts create mode 100644 src/renderer/src/pages/achievements/achievement-panel.scss diff --git a/src/renderer/src/pages/achievements/achievement-panel.css.ts b/src/renderer/src/pages/achievements/achievement-panel.css.ts deleted file mode 100644 index f8daeab9..00000000 --- a/src/renderer/src/pages/achievements/achievement-panel.css.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { style } from "@vanilla-extract/css"; -import { recipe } from "@vanilla-extract/recipes"; - -import { SPACING_UNIT, vars } from "../../theme.css"; - -export const panel = style({ - width: "100%", - padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 3}px`, - backgroundColor: vars.color.background, - display: "flex", - flexDirection: "column", - alignItems: "start", - justifyContent: "space-between", - borderBottom: `solid 1px ${vars.color.border}`, -}); - -export const content = style({ - display: "flex", - gap: `${SPACING_UNIT}px`, - justifyContent: "center", -}); - -export const actions = style({ - display: "flex", - gap: `${SPACING_UNIT}px`, -}); - -export const downloadDetailsRow = style({ - gap: `${SPACING_UNIT}px`, - display: "flex", - color: vars.color.body, - alignItems: "center", -}); - -export const downloadsLink = style({ - color: vars.color.body, - textDecoration: "underline", -}); - -export const progressBar = recipe({ - base: { - position: "absolute", - bottom: "0", - left: "0", - width: "100%", - height: "3px", - transition: "all ease 0.2s", - "::-webkit-progress-bar": { - backgroundColor: "transparent", - }, - "::-webkit-progress-value": { - backgroundColor: vars.color.muted, - }, - }, - variants: { - disabled: { - true: { - opacity: vars.opacity.disabled, - }, - }, - }, -}); - -export const link = style({ - textAlign: "start", - color: vars.color.body, - ":hover": { - textDecoration: "underline", - cursor: "pointer", - }, -}); diff --git a/src/renderer/src/pages/achievements/achievement-panel.scss b/src/renderer/src/pages/achievements/achievement-panel.scss new file mode 100644 index 00000000..8cf653ea --- /dev/null +++ b/src/renderer/src/pages/achievements/achievement-panel.scss @@ -0,0 +1,70 @@ +@use "../../scss/globals.scss"; + +.achievement-panel { + width: 100%; + padding: globals.$spacing-unit * 2 globals.$spacing-unit * 3; + background-color: var(--color-background); + display: flex; + flex-direction: column; + align-items: start; + justify-content: space-between; + border-bottom: solid 1px var(--color-border); + + &__content { + display: flex; + gap: globals.$spacing-unit; + justify-content: center; + align-items: center; + } + + &__actions { + display: flex; + gap: globals.$spacing-unit; + } + + &__download-details-row { + gap: globals.$spacing-unit; + display: flex; + color: var(--color-body); + align-items: center; + } + + &__downloads-link { + color: var(--color-body); + text-decoration: underline; + } + + &__progress-bar { + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 3px; + transition: all ease 0.2s; + + &::-webkit-progress-bar { + background-color: transparent; + } + + &::-webkit-progress-value { + background-color: var(--color-muted); + } + + &--disabled { + opacity: var(--opacity-disabled); + } + } + + &__link { + text-align: start; + color: var(--color-body); + background: none; + border: none; + padding: 0; + + &:hover { + text-decoration: underline; + cursor: pointer; + } + } +} diff --git a/src/renderer/src/pages/achievements/achievement-panel.tsx b/src/renderer/src/pages/achievements/achievement-panel.tsx index bda25a89..4da19dcd 100644 --- a/src/renderer/src/pages/achievements/achievement-panel.tsx +++ b/src/renderer/src/pages/achievements/achievement-panel.tsx @@ -4,7 +4,7 @@ import { UserAchievement } from "@types"; import { useSubscription } from "@renderer/hooks/use-subscription"; import { useUserDetails } from "@renderer/hooks"; import { vars } from "@renderer/theme.css"; -import * as styles from "./achievement-panel.css"; +import "./achievement-panel.scss"; export interface AchievementPanelProps { achievements: UserAchievement[]; @@ -28,15 +28,15 @@ export function AchievementPanel({ achievements }: AchievementPanelProps) { if (!hasActiveSubscription) { return ( -
-
+
+
{t("earned_points")} ??? / ???
@@ -49,7 +49,8 @@ export function AchievementPanel({ achievements }: AchievementPanelProps) { return (
- {t("earned_points")} + {t("earned_points")}{" "} + {achievementsPointsEarnedSum} / {achievementsPointsTotal}
diff --git a/src/renderer/src/pages/achievements/compared-achievement-panel.tsx b/src/renderer/src/pages/achievements/compared-achievement-panel.tsx index db9baa09..ac124b26 100644 --- a/src/renderer/src/pages/achievements/compared-achievement-panel.tsx +++ b/src/renderer/src/pages/achievements/compared-achievement-panel.tsx @@ -1,8 +1,8 @@ import { useTranslation } from "react-i18next"; import HydraIcon from "@renderer/assets/icons/hydra.svg?react"; import { ComparedAchievements } from "@types"; -import { SPACING_UNIT } from "@renderer/theme.css"; import { useUserDetails } from "@renderer/hooks"; +import "./achievement-panel.scss"; export interface ComparedAchievementPanelProps { achievements: ComparedAchievements; @@ -16,25 +16,25 @@ export function ComparedAchievementPanel({ return (
-
- {t("available_points")} {" "} +
+ {t("available_points")}{" "} + {" "} {achievements.achievementsPointsTotal}
{hasActiveSubscription && (
- + {achievements.owner.achievementsPointsEarnedSum ?? 0}
)}
- + {achievements.target.achievementsPointsEarnedSum}
From 86d7ced0c04fc01780eed6907d8e3f94bbf1a0cc Mon Sep 17 00:00:00 2001 From: Hachi-R Date: Sat, 18 Jan 2025 23:43:56 -0300 Subject: [PATCH 08/33] refactor: migrate achievement list styles from VE to SCSS + BEM --- .../pages/achievements/achievement-list.tsx | 50 ++-- .../achievements/achievements-skeleton.tsx | 10 +- .../src/pages/achievements/achievements.scss | 262 ++++++++++++++++++ .../compared-achievement-list.tsx | 66 +---- 4 files changed, 300 insertions(+), 88 deletions(-) create mode 100644 src/renderer/src/pages/achievements/achievements.scss diff --git a/src/renderer/src/pages/achievements/achievement-list.tsx b/src/renderer/src/pages/achievements/achievement-list.tsx index ef178b50..36ef97d4 100644 --- a/src/renderer/src/pages/achievements/achievement-list.tsx +++ b/src/renderer/src/pages/achievements/achievement-list.tsx @@ -1,11 +1,10 @@ import { useDate } from "@renderer/hooks"; import type { UserAchievement } from "@types"; import { useTranslation } from "react-i18next"; -import * as styles from "./achievements.css"; +import "./achievements.scss"; import { EyeClosedIcon } from "@primer/octicons-react"; import HydraIcon from "@renderer/assets/icons/hydra.svg?react"; import { useSubscription } from "@renderer/hooks/use-subscription"; -import { vars } from "@renderer/theme.css"; interface AchievementListProps { achievements: UserAchievement[]; @@ -17,27 +16,21 @@ export function AchievementList({ achievements }: AchievementListProps) { const { formatDateTime } = useDate(); return ( -
    +
      {achievements.map((achievement) => ( -
    • +
    • {achievement.displayName} -
      -

      +
      +

      {achievement.hidden && ( @@ -47,41 +40,36 @@ export function AchievementList({ achievements }: AchievementListProps) {

      {achievement.description}

      -
      + +
      {achievement.points != undefined ? (
      - -

      {achievement.points}

      + +

      + {achievement.points} +

      ) : ( )} {achievement.unlockTime != null && (
      {formatDateTime(achievement.unlockTime)}
      diff --git a/src/renderer/src/pages/achievements/achievements-skeleton.tsx b/src/renderer/src/pages/achievements/achievements-skeleton.tsx index f9ae81ac..7ead05fd 100644 --- a/src/renderer/src/pages/achievements/achievements-skeleton.tsx +++ b/src/renderer/src/pages/achievements/achievements-skeleton.tsx @@ -1,13 +1,13 @@ import Skeleton from "react-loading-skeleton"; -import * as styles from "./achievements.css"; +import "./achievements.scss"; export function AchievementsSkeleton() { return ( -
      -
      - +
      +
      +
      -
      +
      ); } diff --git a/src/renderer/src/pages/achievements/achievements.scss b/src/renderer/src/pages/achievements/achievements.scss new file mode 100644 index 00000000..5a5de8e6 --- /dev/null +++ b/src/renderer/src/pages/achievements/achievements.scss @@ -0,0 +1,262 @@ +@use "../../scss/globals.scss"; +@use "sass:math"; + +$hero-height: 150px; +$logo-height: 100px; +$logo-max-width: 200px; + +.achievements { + display: flex; + flex-direction: column; + overflow: hidden; + width: 100%; + height: 100%; + transition: all ease 0.3s; + + &__hero { + width: 100%; + height: $hero-height; + min-height: $hero-height; + display: flex; + flex-direction: column; + position: relative; + transition: all ease 0.2s; + + &-content { + padding: globals.$spacing-unit * 2; + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + } + + &-logo-backdrop { + width: 100%; + height: 100%; + position: absolute; + display: flex; + flex-direction: column; + justify-content: flex-end; + } + + &-image-skeleton { + height: 150px; + } + } + + &__game-logo { + width: $logo-max-width; + height: $logo-height; + object-fit: contain; + transition: all ease 0.2s; + + &:hover { + transform: scale(1.05); + } + } + + &__container { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + overflow: auto; + z-index: 1; + } + + &__table-header { + width: 100%; + background-color: var(--color-dark-background); + transition: all ease 0.2s; + border-bottom: solid 1px var(--color-border); + position: sticky; + top: 0; + z-index: 1; + + &--stuck { + box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.8); + } + } + + &__list { + list-style: none; + margin: 0; + display: flex; + flex-direction: column; + gap: globals.$spacing-unit * 2; + padding: globals.$spacing-unit * 2; + width: 100%; + background-color: var(--color-background); + } + + &__item { + display: flex; + transition: all ease 0.1s; + color: var(--color-muted); + width: 100%; + overflow: hidden; + border-radius: 4px; + padding: globals.$spacing-unit globals.$spacing-unit; + gap: globals.$spacing-unit * 2; + align-items: center; + text-align: left; + + &:hover { + background-color: rgba(255, 255, 255, 0.15); + text-decoration: none; + } + + &-image { + width: 54px; + height: 54px; + border-radius: 4px; + object-fit: cover; + + &--locked { + filter: grayscale(100%); + } + } + + &-content { + flex: 1; + } + + &-title { + display: flex; + align-items: center; + gap: 4px; + } + + &-hidden-icon { + display: flex; + color: var(--color-warning); + opacity: 0.8; + + &:hover { + opacity: 1; + } + + svg { + width: 12px; + height: 12px; + } + } + + &-eye-closed { + width: 12px; + height: 12px; + color: globals.$warning-color; + scale: 4; + } + + &-meta { + display: flex; + flex-direction: column; + gap: 8px; + } + + &-points { + display: flex; + align-items: center; + gap: 4px; + margin-right: 4px; + font-weight: 600; + + &--locked { + cursor: pointer; + color: var(--color-warning); + } + + &-icon { + width: 18px; + height: 18px; + } + + &-value { + font-size: 1.1em; + } + } + + &-unlock-time { + white-space: nowrap; + gap: 4px; + display: flex; + } + + &-compared { + display: grid; + grid-template-columns: 3fr 1fr 1fr; + + &--no-owner { + grid-template-columns: 3fr 2fr; + } + } + + &-main { + display: flex; + flex-direction: row; + align-items: center; + gap: globals.$spacing-unit; + } + + &-status { + display: flex; + padding: globals.$spacing-unit; + justify-content: center; + + &--unlocked { + white-space: nowrap; + flex-direction: row; + gap: globals.$spacing-unit; + padding: 0; + } + } + } + + &__progress-bar { + width: 100%; + height: 8px; + transition: all ease 0.2s; + + &::-webkit-progress-bar { + background-color: rgba(255, 255, 255, 0.15); + border-radius: 4px; + } + + &::-webkit-progress-value { + background-color: var(--color-muted); + border-radius: 4px; + } + } + + &__profile-avatar { + height: 54px; + width: 54px; + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + background-color: var(--color-background); + position: relative; + object-fit: cover; + + &--small { + height: 32px; + width: 32px; + } + } + + &__subscription-button { + text-decoration: none; + display: flex; + justify-content: center; + width: 100%; + gap: math.div(globals.$spacing-unit, 2); + color: var(--color-body); + cursor: pointer; + + &:hover { + text-decoration: underline; + } + } +} diff --git a/src/renderer/src/pages/achievements/compared-achievement-list.tsx b/src/renderer/src/pages/achievements/compared-achievement-list.tsx index 44aec686..1fb15c4d 100644 --- a/src/renderer/src/pages/achievements/compared-achievement-list.tsx +++ b/src/renderer/src/pages/achievements/compared-achievement-list.tsx @@ -1,12 +1,11 @@ import type { ComparedAchievements } from "@types"; -import * as styles from "./achievements.css"; +import "./achievements.scss"; import { CheckCircleIcon, EyeClosedIcon, LockIcon, } from "@primer/octicons-react"; import { useDate } from "@renderer/hooks"; -import { SPACING_UNIT } from "@renderer/theme.css"; import { useTranslation } from "react-i18next"; export interface ComparedAchievementListProps { @@ -20,39 +19,26 @@ export function ComparedAchievementList({ const { formatDateTime } = useDate(); return ( -
        +
          {achievements.achievements.map((achievement, index) => (
        • -
          +
          {achievement.displayName} -
          -

          +
          +

          {achievement.hidden && ( @@ -67,25 +53,13 @@ export function ComparedAchievementList({ {achievement.ownerStat ? ( achievement.ownerStat.unlocked ? (
          ) : ( -
          +
          ) @@ -93,25 +67,13 @@ export function ComparedAchievementList({ {achievement.targetStat.unlocked ? (
          ) : ( -
          +
          )} From b855abbab07874067d5f6ffe3a32fd6ff92e3682 Mon Sep 17 00:00:00 2001 From: Hachi-R Date: Sun, 19 Jan 2025 13:42:26 -0300 Subject: [PATCH 09/33] refactor: migrate filter item and section styles from VE to SCSS + BEM --- .../src/pages/catalogue/filter-item.tsx | 34 ++------- .../src/pages/catalogue/filter-section.tsx | 37 +++------- src/renderer/src/pages/catalogue/filter.scss | 71 +++++++++++++++++++ 3 files changed, 84 insertions(+), 58 deletions(-) create mode 100644 src/renderer/src/pages/catalogue/filter.scss diff --git a/src/renderer/src/pages/catalogue/filter-item.tsx b/src/renderer/src/pages/catalogue/filter-item.tsx index 2413bee9..dffe9268 100644 --- a/src/renderer/src/pages/catalogue/filter-item.tsx +++ b/src/renderer/src/pages/catalogue/filter-item.tsx @@ -1,5 +1,5 @@ -import { vars } from "@renderer/theme.css"; import { XIcon } from "@primer/octicons-react"; +import "./filter.scss"; interface FilterItemProps { filter: string; @@ -9,39 +9,13 @@ interface FilterItemProps { export function FilterItem({ filter, orbColor, onRemove }: FilterItemProps) { return ( -
          -
          +
          +
          {filter} diff --git a/src/renderer/src/pages/catalogue/filter-section.tsx b/src/renderer/src/pages/catalogue/filter-section.tsx index 0569ba9d..ecd00dfe 100644 --- a/src/renderer/src/pages/catalogue/filter-section.tsx +++ b/src/renderer/src/pages/catalogue/filter-section.tsx @@ -1,9 +1,8 @@ import { CheckboxField, TextField } from "@renderer/components"; import { useFormat } from "@renderer/hooks"; import { useCallback, useMemo, useState } from "react"; - +import "./filter.scss"; import List from "rc-virtual-list"; -import { vars } from "@renderer/theme.css"; import { useTranslation } from "react-i18next"; export interface FilterSectionProps { @@ -54,36 +53,18 @@ export function FilterSection({ return (
          -
          +
          -

          - {title} -

          +

          {title}

          {selectedItemsCount > 0 ? ( ) : ( - + {t("filter_count", { filterCount: formatNumber(items.length), })} @@ -102,7 +83,7 @@ export function FilterSection({ placeholder={t("search")} onChange={(e) => onSearch(e.target.value)} value={search} - containerProps={{ style: { marginBottom: 16 } }} + containerProps={{ className: "filter-section__search" }} theme="dark" /> @@ -122,7 +103,7 @@ export function FilterSection({ }} > {(item) => ( -
          +
          Date: Sun, 19 Jan 2025 13:49:21 -0300 Subject: [PATCH 10/33] refactor: migrate pagination styles from VE to SCSS + BEM --- .../src/pages/catalogue/pagination.scss | 21 ++++++++++ .../src/pages/catalogue/pagination.tsx | 40 +++++-------------- 2 files changed, 32 insertions(+), 29 deletions(-) create mode 100644 src/renderer/src/pages/catalogue/pagination.scss diff --git a/src/renderer/src/pages/catalogue/pagination.scss b/src/renderer/src/pages/catalogue/pagination.scss new file mode 100644 index 00000000..141dfe54 --- /dev/null +++ b/src/renderer/src/pages/catalogue/pagination.scss @@ -0,0 +1,21 @@ +.pagination { + display: flex; + gap: 4px; + + &__button { + width: 40px; + max-width: 40px; + max-height: 40px; + } + + &__ellipsis { + width: 40px; + display: flex; + justify-content: center; + align-items: center; + + &-text { + font-size: 16px; + } + } +} diff --git a/src/renderer/src/pages/catalogue/pagination.tsx b/src/renderer/src/pages/catalogue/pagination.tsx index 3669e902..3a7356d6 100644 --- a/src/renderer/src/pages/catalogue/pagination.tsx +++ b/src/renderer/src/pages/catalogue/pagination.tsx @@ -1,6 +1,7 @@ import { Button } from "@renderer/components/button/button"; import { ChevronLeftIcon, ChevronRightIcon } from "@primer/octicons-react"; import { useFormat } from "@renderer/hooks/use-format"; +import "./pagination.scss"; interface PaginationProps { page: number; @@ -31,17 +32,12 @@ export function Pagination({ } return ( -
          +
          {/* Previous Button */} {/* ellipsis */} -
          - ... +
          + ...
          )} @@ -81,7 +70,7 @@ export function Pagination({ diff --git a/src/renderer/src/pages/downloads/download-group.scss b/src/renderer/src/pages/downloads/download-group.scss new file mode 100644 index 00000000..504ec73a --- /dev/null +++ b/src/renderer/src/pages/downloads/download-group.scss @@ -0,0 +1,140 @@ +@use "../../scss/globals.scss"; + +.download-group { + display: flex; + flex-direction: column; + gap: calc(globals.$spacing-unit * 2); + + &__header { + display: flex; + align-items: center; + justify-content: space-between; + gap: calc(globals.$spacing-unit * 2); + + &-divider { + flex: 1; + background-color: globals.$color-border; + height: 1px; + } + + &-count { + font-weight: 400; + } + } + + &__title-wrapper { + display: flex; + align-items: center; + margin-bottom: globals.$spacing-unit; + gap: globals.$spacing-unit; + } + + &__title { + font-weight: bold; + cursor: pointer; + color: globals.$color-body; + text-align: left; + font-size: 16px; + display: block; + + &:hover { + text-decoration: underline; + } + } + + &__downloads { + width: 100%; + gap: calc(globals.$spacing-unit * 2); + display: flex; + flex-direction: column; + margin: 0; + padding: 0; + margin-top: globals.$spacing-unit; + } + + &__item { + width: 100%; + background-color: globals.$color-background; + display: flex; + border-radius: 8px; + border: solid 1px globals.$color-border; + overflow: hidden; + box-shadow: 0px 0px 5px 0px #000000; + transition: all ease 0.2s; + height: 140px; + min-height: 140px; + max-height: 140px; + position: relative; + } + + &__cover { + width: 280px; + min-width: 280px; + height: auto; + border-right: solid 1px globals.$color-border; + position: relative; + z-index: 1; + + &-content { + width: 100%; + height: 100%; + padding: globals.$spacing-unit; + display: flex; + align-items: flex-end; + justify-content: flex-end; + } + + &-backdrop { + width: 100%; + height: 100%; + background: linear-gradient( + 0deg, + rgba(0, 0, 0, 0.8) 5%, + transparent 100% + ); + display: flex; + overflow: hidden; + z-index: 1; + } + + &-image { + width: 100%; + height: 100%; + position: absolute; + z-index: -1; + } + } + + &__right-content { + display: flex; + padding: calc(globals.$spacing-unit * 2); + flex: 1; + gap: globals.$spacing-unit; + background: linear-gradient(90deg, transparent 20%, rgb(0 0 0 / 20%) 100%); + } + + &__details { + display: flex; + flex-direction: column; + flex: 1; + justify-content: center; + gap: calc(globals.$spacing-unit / 2); + font-size: 14px; + } + + &__actions { + display: flex; + align-items: center; + gap: globals.$spacing-unit; + } + + &__menu-button { + position: absolute; + top: 12px; + right: 12px; + border-radius: 50%; + border: none; + padding: 8px; + min-height: unset; + } +} diff --git a/src/renderer/src/pages/downloads/download-group.tsx b/src/renderer/src/pages/downloads/download-group.tsx index 88cf1433..192a4428 100644 --- a/src/renderer/src/pages/downloads/download-group.tsx +++ b/src/renderer/src/pages/downloads/download-group.tsx @@ -12,9 +12,8 @@ import { Downloader, formatBytes, steamUrlBuilder } from "@shared"; import { DOWNLOADER_NAME } from "@renderer/constants"; import { useAppSelector, useDownload } from "@renderer/hooks"; -import * as styles from "./download-group.css"; +import "./download-group.scss"; import { useTranslation } from "react-i18next"; -import { SPACING_UNIT, vars } from "@renderer/theme.css"; import { useMemo } from "react"; import { DropdownMenu, @@ -238,54 +237,36 @@ export function DownloadGroup({ if (!library.length) return null; return ( -
          -
          +
          +

          {title}

          - -
          -

          {library.length}

          +
          +

          {library.length}

          -
            +
              {library.map((game) => { return ( -
            • -
              -
              +
            • +
              +
              {game.title} -
              +
              {DOWNLOADER_NAME[game.downloader]}
              -
              -
              -
              +
              +
              +
              -
              +
              {selectedFileMappingMethod === FileMappingMethod.Automatic ? (

              {t("files_automatically_mapped")}

              ) : ( @@ -142,11 +144,11 @@ export function CloudSyncFilesModal({ /> )} -
                +
                  {files.map((file) => ( -
                • +
              -
              -
              -

              {t("backups")}

              - - {artifacts.length} / {backupsPerGameLimit} - -
              + {uploadingBackup && ( + + )} + +
              +

              {t("backups")}

              + + {artifacts.length} / {backupsPerGameLimit} +
              {artifacts.length > 0 ? ( -
                +
                  {artifacts.map((artifact) => ( -
                • -
                  -
                  +
                • +
                  +

                  {t("backup_from", { date: format(artifact.createdAt, "dd/MM/yyyy"), @@ -230,29 +218,33 @@ export function CloudSyncModal({ visible, onClose }: CloudSyncModalProps) { {formatBytes(artifact.artifactLengthInBytes)}

                  - + {artifact.hostname} - + {artifact.downloadOptionTitle ?? t("no_download_option_info")} - + {format(artifact.createdAt, "dd/MM/yyyy HH:mm:ss")}
                  -
                  +
                  -
                  +
                  {previews.map((media, i) => ( diff --git a/src/renderer/src/pages/game-details/game-details-content.tsx b/src/renderer/src/pages/game-details/game-details-content.tsx index bd138e81..ce00216d 100644 --- a/src/renderer/src/pages/game-details/game-details-content.tsx +++ b/src/renderer/src/pages/game-details/game-details-content.tsx @@ -7,7 +7,6 @@ import { DescriptionHeader } from "./description-header/description-header"; import { GallerySlider } from "./gallery-slider/gallery-slider"; import { Sidebar } from "./sidebar/sidebar"; -import * as styles from "./game-details.css"; import { useTranslation } from "react-i18next"; import { cloudSyncContext, gameDetailsContext } from "@renderer/context"; import { AuthPage, steamUrlBuilder } from "@shared"; @@ -15,7 +14,9 @@ import { AuthPage, steamUrlBuilder } from "@shared"; import cloudIconAnimated from "@renderer/assets/icons/cloud-animated.gif"; import { useUserDetails } from "@renderer/hooks"; import { useSubscription } from "@renderer/hooks/use-subscription"; +import "./game-details.scss"; +const HERO_HEIGHT = 300; const HERO_ANIMATION_THRESHOLD = 25; export function GameDetailsContent() { @@ -80,7 +81,7 @@ export function GameDetailsContent() { }, [objectId]); const onScroll: React.UIEventHandler = (event) => { - const heroHeight = heroRef.current?.clientHeight ?? styles.HERO_HEIGHT; + const heroHeight = heroRef.current?.clientHeight ?? HERO_HEIGHT; const scrollY = (event.target as HTMLDivElement).scrollTop; const opacity = Math.max( @@ -118,10 +119,12 @@ export function GameDetailsContent() { }, [getGameArtifacts]); return ( -
                  +
                  {game?.title} @@ -129,47 +132,38 @@ export function GameDetailsContent() {
                  -
                  +
                  -
                  +
                  {game?.title} -
                  -
                  +
                  {Array.from({ length: 6 }).map((_, index) => ( ))} diff --git a/src/renderer/src/pages/game-details/game-details.scss b/src/renderer/src/pages/game-details/game-details.scss new file mode 100644 index 00000000..899d654a --- /dev/null +++ b/src/renderer/src/pages/game-details/game-details.scss @@ -0,0 +1,270 @@ +@use "../../scss/globals.scss"; + +$hero-height: 300px; + +@keyframes slide-in { + 0% { + transform: translateY(calc(40px + globals.$spacing-unit * 2)); + opacity: 0; + } + + 100% { + transform: translateY(0); + opacity: 1; + } +} + +.game-details { + &__wrapper { + display: flex; + flex-direction: column; + overflow: hidden; + width: 100%; + height: 100%; + transition: all ease 0.3s; + + &--blurred { + filter: blur(20px); + } + } + + &__hero { + width: 100%; + height: $hero-height; + min-height: $hero-height; + display: flex; + flex-direction: column; + position: relative; + transition: all ease 0.2s; + + @media (min-width: 1250px) { + height: 350px; + min-height: 350px; + } + } + + &__hero-content { + padding: calc(globals.$spacing-unit * 2); + height: 100%; + width: 100%; + display: flex; + justify-content: space-between; + align-items: flex-end; + } + + &__hero-logo-backdrop { + width: 100%; + height: 100%; + background: linear-gradient(0deg, rgba(0, 0, 0, 0.3) 60%, transparent 100%); + position: absolute; + display: flex; + flex-direction: column; + justify-content: space-between; + } + + &__hero-image { + width: 100%; + height: $hero-height; + min-height: $hero-height; + object-fit: cover; + object-position: top; + transition: all ease 0.2s; + position: absolute; + z-index: 0; + + @media (min-width: 1250px) { + object-position: center; + height: 350px; + min-height: 350px; + } + } + + &__game-logo { + width: 300px; + align-self: flex-end; + } + + &__hero-image-skeleton { + height: 300px; + + @media (min-width: 1250px) { + height: 350px; + } + } + + &__container { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + overflow: auto; + z-index: 1; + } + + &__description-container { + display: flex; + width: 100%; + flex: 1; + background: linear-gradient( + 0deg, + globals.$background-color 50%, + globals.$dark-background-color 100% + ); + } + + &__description-content { + width: 100%; + height: 100%; + } + + &__description { + user-select: text; + line-height: 22px; + font-size: globals.$body-font-size; + padding: calc(globals.$spacing-unit * 3) calc(globals.$spacing-unit * 2); + width: 100%; + margin-left: auto; + margin-right: auto; + + @media (min-width: 1280px) { + width: 60%; + } + + img { + border-radius: 5px; + margin-top: globals.$spacing-unit; + margin-bottom: calc(globals.$spacing-unit * 3); + display: block; + width: 100%; + height: auto; + object-fit: cover; + } + + a { + color: globals.$body-color; + } + + .bb_tag { + margin-top: calc(globals.$spacing-unit * 2); + margin-bottom: calc(globals.$spacing-unit * 2); + } + } + + &__description-skeleton { + display: flex; + flex-direction: column; + gap: globals.$spacing-unit; + padding: calc(globals.$spacing-unit * 3) calc(globals.$spacing-unit * 2); + width: 100%; + margin-left: auto; + margin-right: auto; + + @media (min-width: 1280px) { + width: 60%; + line-height: 22px; + } + } + + &__randomizer-button { + animation: slide-in 0.2s; + position: fixed; + bottom: calc(globals.$spacing-unit * 3); + right: calc(9px + globals.$spacing-unit * 2); + box-shadow: rgba(255, 255, 255, 0.1) 0px 0px 10px 1px; + border: solid 2px globals.$border-color; + z-index: 1; + background-color: globals.$background-color; + + &:hover { + background-color: globals.$background-color; + box-shadow: rgba(255, 255, 255, 0.1) 0px 0px 15px 5px; + opacity: 1; + } + + &:active { + transform: scale(0.98); + } + + &:disabled { + box-shadow: none; + transform: none; + opacity: 0.8; + background-color: globals.$background-color; + } + } + + &__hero-panel-skeleton { + width: 100%; + padding: calc(globals.$spacing-unit * 2); + display: flex; + align-items: center; + background-color: globals.$background-color; + height: 72px; + border-bottom: solid 1px globals.$border-color; + } + + &__cloud-sync-button { + padding: calc(globals.$spacing-unit * 1.5) calc(globals.$spacing-unit * 2); + background-color: rgba(0, 0, 0, 0.6); + backdrop-filter: blur(20px); + border-radius: 8px; + transition: all ease 0.2s; + cursor: pointer; + min-height: 40px; + display: flex; + align-items: center; + justify-content: center; + gap: globals.$spacing-unit; + color: globals.$muted-color; + font-size: globals.$small-font-size; + border: solid 1px globals.$border-color; + box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.8); + animation: slide-in 0.3s cubic-bezier(0.33, 1, 0.68, 1); + + &:active { + opacity: 0.9; + } + + &:disabled { + opacity: globals.$disabled-opacity; + cursor: not-allowed; + } + + &:hover { + background-color: rgba(0, 0, 0, 0.5); + } + } + + &__stars-icon-container { + width: 16px; + height: 16px; + position: relative; + } + + &__stars-icon { + width: 70px; + position: absolute; + top: -28px; + left: -27px; + } + + &__cloud-icon-container { + width: 20px; + height: 16px; + display: flex; + align-items: center; + justify-content: center; + position: relative; + } + + &__cloud-icon { + width: 26px; + position: absolute; + top: -3px; + } + + &__hero-backdrop { + flex: 1; + transition: opacity 0.2s ease; + } +} diff --git a/src/renderer/src/pages/game-details/game-details.tsx b/src/renderer/src/pages/game-details/game-details.tsx index 4fbcc855..d43ecff9 100644 --- a/src/renderer/src/pages/game-details/game-details.tsx +++ b/src/renderer/src/pages/game-details/game-details.tsx @@ -11,7 +11,6 @@ import starsIconAnimated from "@renderer/assets/icons/stars-animated.gif"; import { useTranslation } from "react-i18next"; import { SkeletonTheme } from "react-loading-skeleton"; import { GameDetailsSkeleton } from "./game-details-skeleton"; -import * as styles from "./game-details.css"; import { vars } from "@renderer/theme.css"; @@ -27,6 +26,7 @@ import { GameOptionsModal, RepacksModal } from "./modals"; import { Downloader, getDownloadersForUri } from "@shared"; import { CloudSyncModal } from "./cloud-sync-modal/cloud-sync-modal"; import { CloudSyncFilesModal } from "./cloud-sync-files-modal/cloud-sync-files-modal"; +import "./game-details.scss"; export default function GameDetails() { const [randomGame, setRandomGame] = useState(null); @@ -185,23 +185,16 @@ export default function GameDetails() { {fromRandomizer && ( @@ -109,7 +108,7 @@ export function HeroPanelActions() { onClick={closeGame} theme="outline" disabled={deleting} - className={styles.heroPanelAction} + className="hero-panel-actions__action" > {t("close")} @@ -122,7 +121,7 @@ export function HeroPanelActions() { onClick={openGame} theme="outline" disabled={deleting || isGameRunning} - className={styles.heroPanelAction} + className="hero-panel-actions__action" > {t("play")} @@ -135,7 +134,7 @@ export function HeroPanelActions() { onClick={() => setShowRepacksModal(true)} theme="outline" disabled={isGameDownloading || !repacks.length} - className={styles.heroPanelAction} + className="hero-panel-actions__action" > {t("download")} @@ -154,16 +153,14 @@ export function HeroPanelActions() { if (game) { return ( -
                  +
                  {gameActionButton()} - -
                  - +
                  @@ -178,13 +169,7 @@ export function DownloadSettingsModal({
                  -
                  +
                  {t("no_write_permission")} @@ -212,7 +197,7 @@ export function DownloadSettingsModal({ } /> -

                  +

                  diff --git a/src/renderer/src/pages/game-details/modals/game-options-modal.scss b/src/renderer/src/pages/game-details/modals/game-options-modal.scss new file mode 100644 index 00000000..0a3c0246 --- /dev/null +++ b/src/renderer/src/pages/game-details/modals/game-options-modal.scss @@ -0,0 +1,24 @@ +@use "../../../scss/globals.scss"; + +.game-options-modal { + &__container { + display: flex; + gap: calc(globals.$spacing-unit * 2); + flex-direction: column; + } + + &__header { + display: flex; + flex-direction: column; + gap: globals.$spacing-unit; + } + + &__header-description { + font-weight: 400; + } + + &__row { + display: flex; + gap: globals.$spacing-unit; + } +} diff --git a/src/renderer/src/pages/game-details/modals/game-options-modal.tsx b/src/renderer/src/pages/game-details/modals/game-options-modal.tsx index b06de28a..2a826c04 100644 --- a/src/renderer/src/pages/game-details/modals/game-options-modal.tsx +++ b/src/renderer/src/pages/game-details/modals/game-options-modal.tsx @@ -10,6 +10,7 @@ import { RemoveGameFromLibraryModal } from "./remove-from-library-modal"; import { ResetAchievementsModal } from "./reset-achievements-modal"; import { FileDirectoryIcon, FileIcon } from "@primer/octicons-react"; import { debounce } from "lodash-es"; +import "./game-options-modal.scss"; export interface GameOptionsModalProps { visible: boolean; @@ -199,10 +200,10 @@ export function GameOptionsModal({ onClose={onClose} large={true} > -

                  -
                  +
                  +

                  {t("executable_section_title")}

                  -

                  +

                  {t("executable_section_description")}

                  diff --git a/src/renderer/src/pages/game-details/modals/remove-from-library-modal.scss b/src/renderer/src/pages/game-details/modals/remove-from-library-modal.scss new file mode 100644 index 00000000..9c390d67 --- /dev/null +++ b/src/renderer/src/pages/game-details/modals/remove-from-library-modal.scss @@ -0,0 +1,11 @@ +@use "../../../scss/globals.scss"; + +.remove-from-library-modal { + &__actions { + display: flex; + width: 100%; + justify-content: flex-end; + align-items: center; + gap: globals.$spacing-unit; + } +} diff --git a/src/renderer/src/pages/game-details/modals/remove-from-library-modal.tsx b/src/renderer/src/pages/game-details/modals/remove-from-library-modal.tsx index 39789872..85cea8cd 100644 --- a/src/renderer/src/pages/game-details/modals/remove-from-library-modal.tsx +++ b/src/renderer/src/pages/game-details/modals/remove-from-library-modal.tsx @@ -1,7 +1,7 @@ import { useTranslation } from "react-i18next"; import { Button, Modal } from "@renderer/components"; -import * as styles from "./remove-from-library-modal.css"; import type { Game } from "@types"; +import "./remove-from-library-modal.scss"; interface RemoveGameFromLibraryModalProps { visible: boolean; @@ -30,7 +30,7 @@ export function RemoveGameFromLibraryModal({ description={t("remove_from_library_description", { game: game.title })} onClose={onClose} > -
                  +
                  diff --git a/src/renderer/src/pages/game-details/modals/repacks-modal.scss b/src/renderer/src/pages/game-details/modals/repacks-modal.scss new file mode 100644 index 00000000..a575b291 --- /dev/null +++ b/src/renderer/src/pages/game-details/modals/repacks-modal.scss @@ -0,0 +1,28 @@ +@use "../../../scss/globals.scss"; + +.repacks-modal { + &__repacks { + display: flex; + gap: globals.$spacing-unit; + flex-direction: column; + } + + &__repack-button { + display: flex; + text-align: left; + flex-direction: column; + align-items: flex-start; + gap: globals.$spacing-unit; + color: globals.$body-color; + padding: calc(globals.$spacing-unit * 2); + } + + &__repack-title { + color: globals.$muted-color; + word-break: break-word; + } + + &__repack-info { + font-size: globals.$small-font-size; + } +} diff --git a/src/renderer/src/pages/game-details/modals/repacks-modal.tsx b/src/renderer/src/pages/game-details/modals/repacks-modal.tsx index 635c7f99..0dac3bd0 100644 --- a/src/renderer/src/pages/game-details/modals/repacks-modal.tsx +++ b/src/renderer/src/pages/game-details/modals/repacks-modal.tsx @@ -4,14 +4,13 @@ import { useTranslation } from "react-i18next"; import { Badge, Button, Modal, TextField } from "@renderer/components"; import type { GameRepack } from "@types"; -import * as styles from "./repacks-modal.css"; - import { SPACING_UNIT } from "@renderer/theme.css"; import { DownloadSettingsModal } from "./download-settings-modal"; import { gameDetailsContext } from "@renderer/context"; import { Downloader } from "@shared"; import { orderBy } from "lodash-es"; import { useDate } from "@renderer/hooks"; +import "./repacks-modal.scss"; export interface RepacksModalProps { visible: boolean; @@ -90,7 +89,7 @@ export function RepacksModal({
                  -
                  +
                  {filteredRepacks.map((repack) => { const isLastDownloadedOption = checkIfLastDownloadedOption(repack); @@ -99,17 +98,15 @@ export function RepacksModal({ key={repack.id} theme="dark" onClick={() => handleRepackClick(repack)} - className={styles.repackButton} + className="repacks-modal__repack-button" > -

                  - {repack.title} -

                  +

                  {repack.title}

                  {isLastDownloadedOption && ( {t("last_downloaded_option")} )} -

                  +

                  {repack.fileSize} - {repack.repacker} -{" "} {repack.uploadDate ? formatDate(repack.uploadDate!) : ""}

                  diff --git a/src/renderer/src/pages/game-details/modals/reset-achievements-modal.scss b/src/renderer/src/pages/game-details/modals/reset-achievements-modal.scss new file mode 100644 index 00000000..b41be41d --- /dev/null +++ b/src/renderer/src/pages/game-details/modals/reset-achievements-modal.scss @@ -0,0 +1,11 @@ +@use "../../../scss/globals.scss"; + +.reset-achievements-modal { + &__actions { + display: flex; + width: 100%; + justify-content: flex-end; + align-items: center; + gap: globals.$spacing-unit; + } +} diff --git a/src/renderer/src/pages/game-details/modals/reset-achievements-modal.tsx b/src/renderer/src/pages/game-details/modals/reset-achievements-modal.tsx index 642d32ba..fc71e2d0 100644 --- a/src/renderer/src/pages/game-details/modals/reset-achievements-modal.tsx +++ b/src/renderer/src/pages/game-details/modals/reset-achievements-modal.tsx @@ -1,7 +1,8 @@ import { useTranslation } from "react-i18next"; import { Button, Modal } from "@renderer/components"; -import * as styles from "./remove-from-library-modal.css"; import type { Game } from "@types"; +import "./reset-achievements-modal.scss"; + type ResetAchievementsModalProps = Readonly<{ visible: boolean; game: Game; @@ -34,7 +35,7 @@ export function ResetAchievementsModal({ game: game.title, })} > -
                  +
                  diff --git a/src/renderer/src/pages/game-details/sidebar-section/sidebar-section.scss b/src/renderer/src/pages/game-details/sidebar-section/sidebar-section.scss new file mode 100644 index 00000000..5ea421c3 --- /dev/null +++ b/src/renderer/src/pages/game-details/sidebar-section/sidebar-section.scss @@ -0,0 +1,40 @@ +@use "../../../scss/globals.scss"; + +.sidebar-section { + &__button { + height: 72px; + padding: calc(globals.$spacing-unit * 2) calc(globals.$spacing-unit * 2); + display: flex; + align-items: center; + background-color: globals.$background-color; + color: globals.$muted-color; + width: 100%; + cursor: pointer; + transition: all ease 0.2s; + gap: globals.$spacing-unit; + font-size: globals.$body-font-size; + font-weight: bold; + + &:hover { + background-color: rgba(255, 255, 255, 0.05); + } + + &:active { + opacity: globals.$active-opacity; + } + } + + &__chevron { + transition: transform ease 0.2s; + + &--open { + transform: rotate(180deg); + } + } + + &__content { + overflow: hidden; + transition: max-height 0.4s cubic-bezier(0, 1, 0, 1); + position: relative; + } +} diff --git a/src/renderer/src/pages/game-details/sidebar-section/sidebar-section.tsx b/src/renderer/src/pages/game-details/sidebar-section/sidebar-section.tsx index e24f677b..42697fe3 100644 --- a/src/renderer/src/pages/game-details/sidebar-section/sidebar-section.tsx +++ b/src/renderer/src/pages/game-details/sidebar-section/sidebar-section.tsx @@ -1,7 +1,6 @@ import { ChevronDownIcon } from "@primer/octicons-react"; import { useEffect, useRef, useState } from "react"; - -import * as styles from "./sidebar-section.css"; +import "./sidebar-section.scss"; export interface SidebarSectionProps { title: string; @@ -22,23 +21,25 @@ export function SidebarSection({ title, children }: SidebarSectionProps) { }, [isOpen, children, height]); return ( -
                  +
                  {children} diff --git a/src/renderer/src/pages/game-details/sidebar/how-long-to-beat-section.tsx b/src/renderer/src/pages/game-details/sidebar/how-long-to-beat-section.tsx index d63879f5..138826ff 100644 --- a/src/renderer/src/pages/game-details/sidebar/how-long-to-beat-section.tsx +++ b/src/renderer/src/pages/game-details/sidebar/how-long-to-beat-section.tsx @@ -2,9 +2,8 @@ import Skeleton, { SkeletonTheme } from "react-loading-skeleton"; import { useTranslation } from "react-i18next"; import type { HowLongToBeatCategory } from "@types"; import { vars } from "@renderer/theme.css"; - -import * as styles from "./sidebar.css"; import { SidebarSection } from "../sidebar-section/sidebar-section"; +import "./sidebar.scss"; const durationTranslation: Record = { Hours: "hours", @@ -32,15 +31,12 @@ export function HowLongToBeatSection({ return ( -
                    +
                      {howLongToBeatData ? howLongToBeatData.map((category) => ( -
                    • +
                    • -

                      +

                      {getDuration(category.duration)}

                      @@ -62,7 +58,7 @@ export function HowLongToBeatSection({ : Array.from({ length: 4 }).map((_, index) => ( ))}
                    diff --git a/src/renderer/src/pages/game-details/sidebar/sidebar.scss b/src/renderer/src/pages/game-details/sidebar/sidebar.scss new file mode 100644 index 00000000..15bc74c3 --- /dev/null +++ b/src/renderer/src/pages/game-details/sidebar/sidebar.scss @@ -0,0 +1,174 @@ +@use "../../../scss/globals.scss"; + +.content-sidebar { + border-left: solid 1px globals.$border-color; + background-color: globals.$dark-background-color; + width: 100%; + height: 100%; + + @media (min-width: 1024px) { + max-width: 300px; + width: 100%; + } + + @media (min-width: 1280px) { + width: 100%; + max-width: 400px; + } +} + +.requirement { + &__button-container { + width: 100%; + display: flex; + } + + &__button { + border: solid 1px globals.$border-color; + border-left: none; + border-right: none; + border-radius: 0; + width: 100%; + } + + &__details { + padding: calc(globals.$spacing-unit * 2); + line-height: 22px; + font-size: globals.$body-font-size; + + a { + display: flex; + color: globals.$body-color; + } + } + + &__details-skeleton { + display: flex; + flex-direction: column; + gap: globals.$spacing-unit; + padding: calc(globals.$spacing-unit * 2); + font-size: globals.$body-font-size; + } +} + +.how-long-to-beat { + &__categories-list { + margin: 0; + padding: calc(globals.$spacing-unit * 2); + display: flex; + flex-direction: column; + gap: calc(globals.$spacing-unit * 2); + } + + &__category { + display: flex; + flex-direction: column; + gap: calc(globals.$spacing-unit / 2); + background: linear-gradient( + 90deg, + transparent 20%, + rgb(255 255 255 / 2%) 100% + ); + border-radius: 4px; + padding: globals.$spacing-unit calc(globals.$spacing-unit * 2); + border: solid 1px globals.$border-color; + } + + &__category-label { + color: globals.$muted-color; + } + + &__category-skeleton { + border: solid 1px globals.$border-color; + border-radius: 4px; + height: 76px; + } +} + +.stats { + &__section { + display: flex; + gap: calc(globals.$spacing-unit * 2); + padding: calc(globals.$spacing-unit * 2); + justify-content: space-between; + transition: max-height ease 0.5s; + overflow: hidden; + + @media (min-width: 1024px) { + flex-direction: column; + } + + @media (min-width: 1280px) { + flex-direction: row; + } + } + + &__category-title { + font-size: globals.$small-font-size; + font-weight: bold; + display: flex; + align-items: center; + gap: globals.$spacing-unit; + } + + &__category { + display: flex; + flex-direction: row; + gap: calc(globals.$spacing-unit / 2); + justify-content: space-between; + align-items: center; + } +} + +.list { + list-style: none; + margin: 0; + display: flex; + flex-direction: column; + gap: calc(globals.$spacing-unit * 2); + padding: calc(globals.$spacing-unit * 2); + + &__item { + display: flex; + cursor: pointer; + transition: all ease 0.1s; + color: globals.$muted-color; + width: 100%; + overflow: hidden; + border-radius: 4px; + padding: globals.$spacing-unit; + gap: calc(globals.$spacing-unit * 2); + align-items: center; + text-align: left; + + &:hover { + background-color: rgba(255, 255, 255, 0.15); + text-decoration: none; + } + } + + &__item-image { + width: 54px; + height: 54px; + border-radius: 4px; + object-fit: cover; + + &--locked { + filter: grayscale(100%); + } + } +} + +.subscription-required-button { + text-decoration: none; + display: flex; + justify-content: center; + width: 100%; + gap: calc(globals.$spacing-unit / 2); + color: globals.$warning-color; + cursor: pointer; + + &:hover { + text-decoration: underline; + } +} diff --git a/src/renderer/src/pages/game-details/sidebar/sidebar.tsx b/src/renderer/src/pages/game-details/sidebar/sidebar.tsx index 7787b22a..27c3ee47 100644 --- a/src/renderer/src/pages/game-details/sidebar/sidebar.tsx +++ b/src/renderer/src/pages/game-details/sidebar/sidebar.tsx @@ -7,7 +7,6 @@ import type { import { useTranslation } from "react-i18next"; import { Button, Link } from "@renderer/components"; -import * as styles from "./sidebar.css"; import { gameDetailsContext } from "@renderer/context"; import { useDate, useFormat, useUserDetails } from "@renderer/hooks"; import { @@ -20,8 +19,8 @@ import { HowLongToBeatSection } from "./how-long-to-beat-section"; import { howLongToBeatEntriesTable } from "@renderer/dexie"; import { SidebarSection } from "../sidebar-section/sidebar-section"; import { buildGameAchievementPath } from "@renderer/helpers"; -import { SPACING_UNIT } from "@renderer/theme.css"; import { useSubscription } from "@renderer/hooks/use-subscription"; +import "./sidebar.scss"; const fakeAchievements: UserAchievement[] = [ { @@ -64,7 +63,6 @@ export function Sidebar() { }>({ isLoading: true, data: null }); const { userDetails, hasActiveSubscription } = useUserDetails(); - const [activeRequirement, setActiveRequirement] = useState("minimum"); @@ -72,10 +70,8 @@ export function Sidebar() { useContext(gameDetailsContext); const { showHydraCloudModal } = useSubscription(); - const { t } = useTranslation("game_details"); const { formatDateTime } = useDate(); - const { numberFormatter } = useFormat(); useEffect(() => { @@ -118,7 +114,7 @@ export function Sidebar() { }, [objectId, shop, gameTitle]); return ( -
                  Date: Sun, 19 Jan 2025 19:42:18 -0300 Subject: [PATCH 15/33] fix: border color --- src/renderer/src/pages/downloads/download-group.scss | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/renderer/src/pages/downloads/download-group.scss b/src/renderer/src/pages/downloads/download-group.scss index 4b8f910f..382c600a 100644 --- a/src/renderer/src/pages/downloads/download-group.scss +++ b/src/renderer/src/pages/downloads/download-group.scss @@ -13,7 +13,7 @@ &-divider { flex: 1; - background-color: globals.$color-border; + background-color: globals.$border-color; height: 1px; } @@ -57,7 +57,7 @@ background-color: globals.$color-background; display: flex; border-radius: 8px; - border: solid 1px globals.$color-border; + border: solid 1px globals.$border-color; overflow: hidden; box-shadow: 0px 0px 5px 0px #000000; transition: all ease 0.2s; @@ -71,7 +71,7 @@ width: 280px; min-width: 280px; height: auto; - border-right: solid 1px globals.$color-border; + border-right: solid 1px globals.$border-color; position: relative; z-index: 1; From 88fe3d8f07dff2954a6042a7f3c432ed5c6d522c Mon Sep 17 00:00:00 2001 From: Hachi-R Date: Sun, 19 Jan 2025 19:48:48 -0300 Subject: [PATCH 16/33] fix: background color --- src/renderer/src/pages/downloads/download-group.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/src/pages/downloads/download-group.scss b/src/renderer/src/pages/downloads/download-group.scss index 382c600a..321458e9 100644 --- a/src/renderer/src/pages/downloads/download-group.scss +++ b/src/renderer/src/pages/downloads/download-group.scss @@ -54,7 +54,7 @@ &__item { width: 100%; - background-color: globals.$color-background; + background-color: globals.$background-color; display: flex; border-radius: 8px; border: solid 1px globals.$border-color; From cbe94665d0b6729d0c53f1c2aab30c77c9ff3a42 Mon Sep 17 00:00:00 2001 From: Hachi-R Date: Sun, 19 Jan 2025 19:49:55 -0300 Subject: [PATCH 17/33] fix --- src/renderer/src/pages/downloads/download-group.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/src/pages/downloads/download-group.scss b/src/renderer/src/pages/downloads/download-group.scss index 321458e9..2c5e9701 100644 --- a/src/renderer/src/pages/downloads/download-group.scss +++ b/src/renderer/src/pages/downloads/download-group.scss @@ -32,7 +32,7 @@ &__title { font-weight: bold; cursor: pointer; - color: var(--color-body); + color: globals.$body-color; text-align: left; font-size: 16px; display: block; From c44b5fa6af2e3bab76981a223d256c18bdf448bb Mon Sep 17 00:00:00 2001 From: Hachi-R Date: Sun, 19 Jan 2025 20:27:38 -0300 Subject: [PATCH 18/33] refactor: migrate home page styles from VE to SCSS + BEM --- src/renderer/src/pages/home/home.scss | 103 ++++++++++++++++++++++++++ src/renderer/src/pages/home/home.tsx | 37 ++++----- 2 files changed, 118 insertions(+), 22 deletions(-) create mode 100644 src/renderer/src/pages/home/home.scss diff --git a/src/renderer/src/pages/home/home.scss b/src/renderer/src/pages/home/home.scss new file mode 100644 index 00000000..878b84f1 --- /dev/null +++ b/src/renderer/src/pages/home/home.scss @@ -0,0 +1,103 @@ +@use "../../scss/globals.scss"; + +.home { + &__content { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + gap: calc(globals.$spacing-unit * 3); + padding: calc(globals.$spacing-unit * 3); + flex: 1; + overflow-y: auto; + } + + &__header { + display: flex; + gap: globals.$spacing-unit; + justify-content: space-between; + align-items: center; + } + + &__buttons-list { + display: flex; + list-style: none; + margin: 0; + padding: 0; + gap: globals.$spacing-unit; + } + + &__cards { + display: grid; + grid-template-columns: repeat(1, 1fr); + gap: calc(globals.$spacing-unit * 2); + transition: all ease 0.2s; + + @media (min-width: 768px) { + grid-template-columns: repeat(2, 1fr); + } + + @media (min-width: 1250px) { + grid-template-columns: repeat(3, 1fr); + } + + @media (min-width: 1600px) { + grid-template-columns: repeat(4, 1fr); + } + } + + &__card-skeleton { + width: 100%; + height: 180px; + box-shadow: 0px 0px 15px 0px #000000; + overflow: hidden; + border-radius: 4px; + transition: all ease 0.2s; + z-index: 1; + + &:active { + opacity: globals.$active-opacity; + } + } + + &__no-results { + height: 100%; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + gap: 16px; + grid-column: 1 / -1; + } + + &__flame-icon { + width: 30px; + top: -10px; + left: -5px; + position: absolute; + } + + &__stars-icon { + width: 70px; + position: absolute; + top: -28px; + left: -27px; + } + + &__icon-wrapper { + width: 16px; + height: 16px; + position: relative; + } + + &__title-icon { + width: 24px; + height: 24px; + position: relative; + } + + &__title { + display: flex; + gap: globals.$spacing-unit; + } +} diff --git a/src/renderer/src/pages/home/home.tsx b/src/renderer/src/pages/home/home.tsx index abaaba84..c083d2b6 100644 --- a/src/renderer/src/pages/home/home.tsx +++ b/src/renderer/src/pages/home/home.tsx @@ -11,10 +11,10 @@ import flameIconStatic from "@renderer/assets/icons/flame-static.png"; import flameIconAnimated from "@renderer/assets/icons/flame-animated.gif"; import starsIconAnimated from "@renderer/assets/icons/stars-animated.gif"; -import * as styles from "./home.css"; -import { SPACING_UNIT, vars } from "@renderer/theme.css"; +import { vars } from "@renderer/theme.css"; import { buildGameDetailsPath } from "@renderer/helpers"; import { CatalogueCategory } from "@shared"; +import "./home.scss"; export default function Home() { const { t } = useTranslation("home"); @@ -95,13 +95,13 @@ export default function Home() { return ( -
                  +

                  {t("featured")}

                  -
                  -
                    +
                    +
                      {categories.map((category) => (
                    -

                    +

                    {currentCatalogueCategory === CatalogueCategory.Hot && ( -
                    +
                    Flame animation
                    )} @@ -174,10 +167,10 @@ export default function Home() { {t(currentCatalogueCategory)}

                    -
                    +
                    {isLoading ? Array.from({ length: 12 }).map((_, index) => ( - + )) : catalogue[currentCatalogueCategory].map((result) => ( Date: Mon, 20 Jan 2025 12:45:24 -0300 Subject: [PATCH 19/33] refactor: migrate profile page styles from VE to SCSS + BEM --- .../edit-profile-modal.scss | 57 ++++++++ .../edit-profile-modal/edit-profile-modal.tsx | 26 +--- .../profile/profile-content/friends-box.scss | 62 ++++++++ .../profile/profile-content/friends-box.tsx | 23 ++- .../profile-content/locked-profile.scss | 24 ++++ .../profile-content/locked-profile.tsx | 7 +- .../profile-content/profile-content.scss | 89 ++++++++++++ .../profile-content/profile-content.tsx | 26 ++-- .../profile-content/recent-games-box.scss | 71 ++++++++++ .../profile-content/recent-games-box.tsx | 21 ++- .../user-library-game-card.scss | 134 ++++++++++++++++++ .../user-library-game-card.tsx | 93 ++---------- .../profile-content/user-stats-box.scss | 75 ++++++++++ .../profile-content/user-stats-box.tsx | 45 +++--- .../profile/profile-hero/profile-hero.scss | 124 ++++++++++++++++ .../profile/profile-hero/profile-hero.tsx | 70 ++++----- src/renderer/src/pages/profile/profile.scss | 10 ++ src/renderer/src/pages/profile/profile.tsx | 8 +- .../report-profile/report-profile.scss | 24 ++++ .../profile/report-profile/report-profile.tsx | 15 +- .../upload-background-image-button.scss | 11 ++ .../upload-background-image-button.tsx | 8 +- 22 files changed, 786 insertions(+), 237 deletions(-) create mode 100644 src/renderer/src/pages/profile/edit-profile-modal/edit-profile-modal.scss create mode 100644 src/renderer/src/pages/profile/profile-content/friends-box.scss create mode 100644 src/renderer/src/pages/profile/profile-content/locked-profile.scss create mode 100644 src/renderer/src/pages/profile/profile-content/profile-content.scss create mode 100644 src/renderer/src/pages/profile/profile-content/recent-games-box.scss create mode 100644 src/renderer/src/pages/profile/profile-content/user-library-game-card.scss create mode 100644 src/renderer/src/pages/profile/profile-content/user-stats-box.scss create mode 100644 src/renderer/src/pages/profile/profile-hero/profile-hero.scss create mode 100644 src/renderer/src/pages/profile/profile.scss create mode 100644 src/renderer/src/pages/profile/report-profile/report-profile.scss create mode 100644 src/renderer/src/pages/profile/upload-background-image-button/upload-background-image-button.scss diff --git a/src/renderer/src/pages/profile/edit-profile-modal/edit-profile-modal.scss b/src/renderer/src/pages/profile/edit-profile-modal/edit-profile-modal.scss new file mode 100644 index 00000000..2575def1 --- /dev/null +++ b/src/renderer/src/pages/profile/edit-profile-modal/edit-profile-modal.scss @@ -0,0 +1,57 @@ +@use "../../../scss/globals.scss"; + +.edit-profile-modal { + &__form { + display: flex; + flex-direction: column; + justify-content: center; + width: 350px; + } + + &__content { + gap: calc(globals.$spacing-unit * 3); + display: flex; + flex-direction: column; + } + + &__hint { + margin-top: calc(globals.$spacing-unit * 2); + } + + &__submit { + align-self: end; + margin-top: calc(globals.$spacing-unit * 3); + width: 100%; + } + + &__avatar-container { + align-self: center; + display: flex; + color: globals.$body-color; + justify-content: center; + align-items: center; + background-color: globals.$background-color; + position: relative; + cursor: pointer; + } + + &__avatar-overlay { + position: absolute; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.7); + color: globals.$muted-color; + z-index: 1; + cursor: pointer; + display: flex; + justify-content: center; + transition: all ease 0.2s; + align-items: center; + border-radius: 4px; + opacity: 0; + } + + &__avatar-container:hover &__avatar-overlay { + opacity: 1; + } +} diff --git a/src/renderer/src/pages/profile/edit-profile-modal/edit-profile-modal.tsx b/src/renderer/src/pages/profile/edit-profile-modal/edit-profile-modal.tsx index b9e1927f..d5cb12a8 100644 --- a/src/renderer/src/pages/profile/edit-profile-modal/edit-profile-modal.tsx +++ b/src/renderer/src/pages/profile/edit-profile-modal/edit-profile-modal.tsx @@ -13,13 +13,12 @@ import { } from "@renderer/components"; import { useToast, useUserDetails } from "@renderer/hooks"; -import { SPACING_UNIT } from "@renderer/theme.css"; import { yupResolver } from "@hookform/resolvers/yup"; import * as yup from "yup"; -import * as styles from "./edit-profile-modal.css"; import { userProfileContext } from "@renderer/context"; +import "./edit-profile-modal.scss"; interface FormValues { profileImageUrl?: string; @@ -80,20 +79,9 @@ export function EditProfileModal(
                    -
                    +
                    -
                    +
                    @@ -167,7 +155,7 @@ export function EditProfileModal( />
                    - + @@ -175,7 +163,7 @@ export function EditProfileModal( diff --git a/src/renderer/src/pages/profile/profile-content/user-stats-box.scss b/src/renderer/src/pages/profile/profile-content/user-stats-box.scss new file mode 100644 index 00000000..c19fb612 --- /dev/null +++ b/src/renderer/src/pages/profile/profile-content/user-stats-box.scss @@ -0,0 +1,75 @@ +@use "../../../scss/globals.scss"; + +.user-stats { + &__box { + background-color: globals.$background-color; + border-radius: 4px; + border: solid 1px globals.$border-color; + padding: calc(globals.$spacing-unit * 2); + } + + &__section-header { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: calc(globals.$spacing-unit * 2); + } + + &__list { + list-style: none; + margin: 0; + padding: 0; + display: flex; + flex-direction: column; + gap: calc(globals.$spacing-unit * 2); + } + + &__list-item { + display: flex; + flex-direction: column; + transition: all ease 0.1s; + color: globals.$muted-color; + width: 100%; + overflow: hidden; + border-radius: 4px; + padding: globals.$spacing-unit; + gap: globals.$spacing-unit; + + &:hover { + background-color: rgba(255, 255, 255, 0.15); + text-decoration: none; + } + } + + &__list-title { + font-weight: bold; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + &__list-description { + display: flex; + align-items: center; + gap: globals.$spacing-unit; + } + + &__stats-row { + display: flex; + justify-content: space-between; + } + + &__link { + text-align: start; + color: globals.$body-color; + + &--warning { + color: globals.$warning-color; + } + + &:hover { + text-decoration: underline; + cursor: pointer; + } + } +} diff --git a/src/renderer/src/pages/profile/profile-content/user-stats-box.tsx b/src/renderer/src/pages/profile/profile-content/user-stats-box.tsx index b33afab5..26ec79f4 100644 --- a/src/renderer/src/pages/profile/profile-content/user-stats-box.tsx +++ b/src/renderer/src/pages/profile/profile-content/user-stats-box.tsx @@ -1,4 +1,3 @@ -import * as styles from "./profile-content.css"; import { useCallback, useContext } from "react"; import { userProfileContext } from "@renderer/context"; import { useTranslation } from "react-i18next"; @@ -7,7 +6,7 @@ import { MAX_MINUTES_TO_SHOW_IN_PLAYTIME } from "@renderer/constants"; import HydraIcon from "@renderer/assets/icons/hydra.svg?react"; import { useSubscription } from "@renderer/hooks/use-subscription"; import { ClockIcon, TrophyIcon } from "@primer/octicons-react"; -import { vars } from "@renderer/theme.css"; +import "./user-stats-box.scss"; export function UserStatsBox() { const { showHydraCloudModal } = useSubscription(); @@ -36,22 +35,20 @@ export function UserStatsBox() { return (
                    -
                    +

                    {t("stats")}

                    -
                    -
                      +
                      +
                        {(isMe || userStats.unlockedAchievementSum !== undefined) && ( -
                      • -

                        +
                      • +

                        {t("achievements_unlocked")}

                        {userStats.unlockedAchievementSum !== undefined ? ( -
                        -

                        +

                        +

                        {userStats.unlockedAchievementSum}{" "} {t("achievements")}

                        @@ -60,9 +57,9 @@ export function UserStatsBox() { @@ -71,13 +68,11 @@ export function UserStatsBox() { )} {(isMe || userStats.achievementsPointsEarnedSum !== undefined) && ( -
                      • -

                        {t("earned_points")}

                        +
                      • +

                        {t("earned_points")}

                        {userStats.achievementsPointsEarnedSum !== undefined ? ( -
                        -

                        +

                        +

                        {numberFormatter.format( userStats.achievementsPointsEarnedSum.value @@ -94,9 +89,9 @@ export function UserStatsBox() { @@ -104,10 +99,10 @@ export function UserStatsBox() {

                      • )} -
                      • -

                        {t("total_play_time")}

                        -
                        -

                        +

                      • +

                        {t("total_play_time")}

                        +
                        +

                        {formatPlayTime(userStats.totalPlayTimeInSeconds.value)}

                        diff --git a/src/renderer/src/pages/profile/profile-hero/profile-hero.scss b/src/renderer/src/pages/profile/profile-hero/profile-hero.scss new file mode 100644 index 00000000..8be99794 --- /dev/null +++ b/src/renderer/src/pages/profile/profile-hero/profile-hero.scss @@ -0,0 +1,124 @@ +@use "../../../scss/globals.scss"; + +.profile-hero { + &__content-box { + display: flex; + flex-direction: column; + position: relative; + } + + &__background { + &-image { + position: absolute; + width: 100%; + height: 100%; + object-fit: cover; + } + + &-overlay { + width: 100%; + height: 100%; + z-index: 1; + background: linear-gradient(135deg, rgb(0 0 0 / 40%), rgb(0 0 0 / 30%)); + + &--transparent { + background: transparent; + } + } + } + + &__user-information { + display: flex; + padding: calc(globals.$spacing-unit * 7) calc(globals.$spacing-unit * 3); + align-items: center; + gap: calc(globals.$spacing-unit * 2); + } + + &__avatar-button { + width: 96px; + min-width: 96px; + height: 96px; + border-radius: 4px; + display: flex; + justify-content: center; + align-items: center; + background-color: globals.$background-color; + border: solid 1px globals.$border-color; + box-shadow: 0px 0px 5px 0px rgba(0, 0, 0, 0.7); + cursor: pointer; + transition: all ease 0.3s; + color: globals.$muted-color; + position: relative; + + &:hover { + box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.7); + } + } + + &__information { + display: flex; + flex-direction: column; + gap: globals.$spacing-unit; + align-items: flex-start; + color: globals.$muted-color; + z-index: 1; + overflow: hidden; + } + + &__display-name { + font-weight: bold; + overflow: hidden; + text-overflow: ellipsis; + width: 100%; + display: flex; + align-items: center; + position: relative; + text-shadow: 0 0 5px rgb(0 0 0 / 40%); + } + + &__current-game { + &-wrapper { + display: flex; + flex-direction: column; + gap: calc(globals.$spacing-unit / 2); + } + + &-details { + display: flex; + flex-direction: row; + gap: globals.$spacing-unit; + align-items: center; + } + } + + &__hero-panel { + width: 100%; + height: 72px; + min-height: 72px; + padding: calc(globals.$spacing-unit * 2) calc(globals.$spacing-unit * 3); + display: flex; + gap: globals.$spacing-unit; + justify-content: space-between; + backdrop-filter: blur(15px); + border-top: solid 1px rgba(255, 255, 255, 0.1); + box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.5); + background-color: rgba(0, 0, 0, 0.3); + + &--transparent { + background: transparent; + } + } + + &__actions { + display: flex; + gap: globals.$spacing-unit; + justify-content: flex-end; + flex: 1; + } + + &__button { + &--outline { + border-color: globals.$body-color; + } + } +} diff --git a/src/renderer/src/pages/profile/profile-hero/profile-hero.tsx b/src/renderer/src/pages/profile/profile-hero/profile-hero.tsx index 0aaee611..c8225bfb 100644 --- a/src/renderer/src/pages/profile/profile-hero/profile-hero.tsx +++ b/src/renderer/src/pages/profile/profile-hero/profile-hero.tsx @@ -1,6 +1,3 @@ -import { SPACING_UNIT, vars } from "@renderer/theme.css"; - -import * as styles from "./profile-hero.css"; import { useCallback, useContext, useMemo, useState } from "react"; import { userProfileContext } from "@renderer/context"; import { @@ -27,14 +24,12 @@ import type { FriendRequestAction } from "@types"; import { EditProfileModal } from "../edit-profile-modal/edit-profile-modal"; import Skeleton from "react-loading-skeleton"; import { UploadBackgroundImageButton } from "../upload-background-image-button/upload-background-image-button"; +import "./profile-hero.scss"; type FriendAction = | FriendRequestAction | ("BLOCK" | "UNDO_FRIENDSHIP" | "SEND"); -const backgroundImageLayer = - "linear-gradient(135deg, rgb(0 0 0 / 40%), rgb(0 0 0 / 30%))"; - export function ProfileHero() { const [showEditProfileModal, setShowEditProfileModal] = useState(false); const [isPerformingAction, setIsPerformingAction] = useState(false); @@ -127,7 +122,7 @@ export function ProfileHero() { theme="outline" onClick={() => setShowEditProfileModal(true)} disabled={isPerformingAction} - style={{ borderColor: vars.color.body }} + className="profile-hero__button--outline" > {t("edit_profile")} @@ -152,7 +147,7 @@ export function ProfileHero() { theme="outline" onClick={() => handleFriendAction(userProfile.id, "SEND")} disabled={isPerformingAction} - style={{ borderColor: vars.color.body }} + className="profile-hero__button--outline" > {t("add_friend")} @@ -187,7 +182,7 @@ export function ProfileHero() { handleFriendAction(userProfile.id, "UNDO_FRIENDSHIP") } disabled={isPerformingAction} - style={{ borderColor: vars.color.body }} + className="profile-hero__button--outline" > {t("undo_friendship")} @@ -201,10 +196,10 @@ export function ProfileHero() { @@ -219,7 +214,7 @@ export function ProfileHero() { handleFriendAction(userProfile.relation!.AId, "ACCEPTED") } disabled={isPerformingAction} - style={{ borderColor: vars.color.body }} + className="profile-hero__button--outline" > {t("accept_request")} @@ -279,34 +274,28 @@ export function ProfileHero() { />
                        {backgroundImage && ( )}
                        -
                        +
                        -
                        +
                        {userProfile ? ( -

                        +

                        {userProfile?.displayName}

                        ) : ( @@ -326,8 +315,8 @@ export function ProfileHero() { )} {currentGame && ( -
                        -
                        +
                        +
                        -
                        - {profileActions} -
                        +
                        {profileActions}
                        diff --git a/src/renderer/src/pages/profile/profile.scss b/src/renderer/src/pages/profile/profile.scss new file mode 100644 index 00000000..0e3bcf0a --- /dev/null +++ b/src/renderer/src/pages/profile/profile.scss @@ -0,0 +1,10 @@ +@use "../../scss/globals.scss"; + +.profile { + &__wrapper { + width: 100%; + display: flex; + flex-direction: column; + gap: calc(globals.$spacing-unit * 3); + } +} diff --git a/src/renderer/src/pages/profile/profile.tsx b/src/renderer/src/pages/profile/profile.tsx index e6b4f5b3..d3fb6957 100644 --- a/src/renderer/src/pages/profile/profile.tsx +++ b/src/renderer/src/pages/profile/profile.tsx @@ -1,18 +1,16 @@ import { ProfileContent } from "./profile-content/profile-content"; import { SkeletonTheme } from "react-loading-skeleton"; -import { vars } from "@renderer/theme.css"; - -import * as styles from "./profile.css"; import { UserProfileContextProvider } from "@renderer/context"; import { useParams } from "react-router-dom"; +import "./profile.scss"; export default function Profile() { const { userId } = useParams(); return ( - -
                        + +
                        diff --git a/src/renderer/src/pages/profile/report-profile/report-profile.scss b/src/renderer/src/pages/profile/report-profile/report-profile.scss new file mode 100644 index 00000000..6c0ca923 --- /dev/null +++ b/src/renderer/src/pages/profile/report-profile/report-profile.scss @@ -0,0 +1,24 @@ +@use "../../../scss/globals.scss"; + +.report-profile { + &__button { + align-self: flex-end; + color: globals.$muted-color; + gap: globals.$spacing-unit; + display: flex; + cursor: pointer; + align-items: center; + font-size: globals.$small-font-size; + } + + &__form { + display: flex; + flex-direction: column; + gap: calc(globals.$spacing-unit * 2); + } + + &__submit { + margin-top: globals.$spacing-unit; + align-self: flex-end; + } +} diff --git a/src/renderer/src/pages/profile/report-profile/report-profile.tsx b/src/renderer/src/pages/profile/report-profile/report-profile.tsx index f859b7f3..04afea51 100644 --- a/src/renderer/src/pages/profile/report-profile/report-profile.tsx +++ b/src/renderer/src/pages/profile/report-profile/report-profile.tsx @@ -1,15 +1,14 @@ import { ReportIcon } from "@primer/octicons-react"; -import * as styles from "./report-profile.css"; import { Button, Modal, SelectField, TextField } from "@renderer/components"; import { useCallback, useContext, useEffect, useState } from "react"; import { Controller, useForm } from "react-hook-form"; import { useTranslation } from "react-i18next"; import * as yup from "yup"; -import { SPACING_UNIT } from "@renderer/theme.css"; import { userProfileContext } from "@renderer/context"; import { yupResolver } from "@hookform/resolvers/yup"; import { useToast } from "@renderer/hooks"; +import "./report-profile.scss"; const reportReasons = ["hate", "sexual_content", "violence", "spam", "other"]; @@ -75,13 +74,7 @@ export function ReportProfile() { title={t("report_profile")} clickOutsideToClose={false} > - +
                    -
                    +

                    Hydra Cloud

                    -
                    +
                    {getHydraCloudSectionContent().description}
                    -
                    +

                    {t("blocked_users")}

                    {blockedUsers.length > 0 ? ( -
                      +
                        {blockedUsers.map((user) => { return ( -
                      • -
                        +
                      • +
                        handleUnblockClick(user.id)} disabled={isUnblocking} > diff --git a/src/renderer/src/pages/settings/settings-behavior.scss b/src/renderer/src/pages/settings/settings-behavior.scss new file mode 100644 index 00000000..693ef08a --- /dev/null +++ b/src/renderer/src/pages/settings/settings-behavior.scss @@ -0,0 +1,13 @@ +@use "../../scss/globals.scss"; + +.settings-behavior { + &__checkbox-container { + opacity: globals.$disabled-opacity; + cursor: not-allowed; + + &--enabled { + opacity: 1; + cursor: pointer; + } + } +} diff --git a/src/renderer/src/pages/settings/settings-behavior.tsx b/src/renderer/src/pages/settings/settings-behavior.tsx index 28c50256..b7bbdfaa 100644 --- a/src/renderer/src/pages/settings/settings-behavior.tsx +++ b/src/renderer/src/pages/settings/settings-behavior.tsx @@ -4,6 +4,7 @@ import { useTranslation } from "react-i18next"; import { CheckboxField } from "@renderer/components"; import { useAppSelector } from "@renderer/hooks"; import { settingsContext } from "@renderer/context"; +import "./settings-behavior.scss"; export function SettingsBehavior() { const userPreferences = useAppSelector( @@ -77,10 +78,11 @@ export function SettingsBehavior() { )} {showRunAtStartup && ( -
                        +
                        { diff --git a/src/renderer/src/pages/settings/settings-download-sources.scss b/src/renderer/src/pages/settings/settings-download-sources.scss new file mode 100644 index 00000000..6ef42283 --- /dev/null +++ b/src/renderer/src/pages/settings/settings-download-sources.scss @@ -0,0 +1,56 @@ +@use "../../scss/globals.scss"; + +.settings-download-sources { + &__list { + padding: 0; + margin: 0; + gap: calc(globals.$spacing-unit * 2); + display: flex; + flex-direction: column; + } + + &__item { + display: flex; + flex-direction: column; + background-color: globals.$dark-background-color; + border-radius: 8px; + padding: calc(globals.$spacing-unit * 2); + gap: globals.$spacing-unit; + border: solid 1px globals.$border-color; + transition: all ease 0.2s; + + &--syncing { + opacity: globals.$disabled-opacity; + } + } + + &__item-header { + margin-bottom: globals.$spacing-unit; + display: flex; + flex-direction: column; + gap: globals.$spacing-unit; + } + + &__header { + display: flex; + justify-content: space-between; + align-items: center; + } + + &__navigate-button { + display: flex; + align-items: center; + gap: globals.$spacing-unit; + color: globals.$muted-color; + text-decoration: underline; + cursor: pointer; + background: none; + border: none; + padding: 0; + + &:disabled { + cursor: default; + text-decoration: none; + } + } +} diff --git a/src/renderer/src/pages/settings/settings-download-sources.tsx b/src/renderer/src/pages/settings/settings-download-sources.tsx index cacd1910..11afa630 100644 --- a/src/renderer/src/pages/settings/settings-download-sources.tsx +++ b/src/renderer/src/pages/settings/settings-download-sources.tsx @@ -3,7 +3,6 @@ import { useContext, useEffect, useState } from "react"; import { TextField, Button, Badge } from "@renderer/components"; import { useTranslation } from "react-i18next"; -import * as styles from "./settings-download-sources.css"; import type { DownloadSource } from "@types"; import { NoEntryIcon, PlusCircleIcon, SyncIcon } from "@primer/octicons-react"; import { AddDownloadSourceModal } from "./add-download-source-modal"; @@ -14,6 +13,7 @@ import { downloadSourcesTable } from "@renderer/dexie"; import { downloadSourcesWorker } from "@renderer/workers"; import { useNavigate } from "react-router-dom"; import { setFilters, clearFilters } from "@renderer/features"; +import "./settings-download-sources.scss"; export function SettingsDownloadSources() { const [showAddDownloadSourceModal, setShowAddDownloadSourceModal] = @@ -118,7 +118,7 @@ export function SettingsDownloadSources() {

                        {t("download_sources_description")}

                        -
                        +
                        -
                          +
                            {downloadSources.map((downloadSource) => (
                          • -
                            +

                            {downloadSource.name}

                            @@ -161,7 +159,7 @@ export function SettingsDownloadSources() { + } placeholder="API Token" - containerProps={{ style: { marginTop: `${SPACING_UNIT}px` } }} hint={ @@ -109,14 +114,6 @@ export function SettingsRealDebrid() { } /> )} - - ); } diff --git a/src/renderer/src/pages/settings/settings.scss b/src/renderer/src/pages/settings/settings.scss new file mode 100644 index 00000000..49b228bc --- /dev/null +++ b/src/renderer/src/pages/settings/settings.scss @@ -0,0 +1,27 @@ +@use "../../scss/globals.scss"; + +.settings { + &__container { + padding: 24px; + width: 100%; + display: flex; + } + + &__content { + background-color: globals.$background-color; + width: 100%; + height: 100%; + padding: calc(globals.$spacing-unit * 3); + border: solid 1px globals.$border-color; + box-shadow: 0px 0px 15px 0px #000000; + border-radius: 8px; + gap: calc(globals.$spacing-unit * 2); + display: flex; + flex-direction: column; + } + + &__categories { + display: flex; + gap: globals.$spacing-unit; + } +} diff --git a/src/renderer/src/pages/settings/settings.tsx b/src/renderer/src/pages/settings/settings.tsx index 5fba6c5d..75989aed 100644 --- a/src/renderer/src/pages/settings/settings.tsx +++ b/src/renderer/src/pages/settings/settings.tsx @@ -1,11 +1,8 @@ import { Button } from "@renderer/components"; - -import * as styles from "./settings.css"; import { useTranslation } from "react-i18next"; import { SettingsRealDebrid } from "./settings-real-debrid"; import { SettingsGeneral } from "./settings-general"; import { SettingsBehavior } from "./settings-behavior"; - import { SettingsDownloadSources } from "./settings-download-sources"; import { SettingsContextConsumer, @@ -14,10 +11,10 @@ import { import { SettingsAccount } from "./settings-account"; import { useUserDetails } from "@renderer/hooks"; import { useMemo } from "react"; +import "./settings.scss"; export default function Settings() { const { t } = useTranslation("settings"); - const { userDetails } = useUserDetails(); const categories = useMemo(() => { @@ -57,9 +54,9 @@ export default function Settings() { }; return ( -
                            -
                            -
                            +
                            +
                            +
                            {categories.map((category, index) => ( diff --git a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-item.scss b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-item.scss new file mode 100644 index 00000000..715684e2 --- /dev/null +++ b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-item.scss @@ -0,0 +1,64 @@ +@use "../../../scss/globals.scss"; + +.user-friend-item { + &__container { + display: flex; + gap: calc(globals.$spacing-unit * 3); + align-items: center; + border-radius: 4px; + border: solid 1px globals.$border-color; + width: 100%; + height: 54px; + min-height: 54px; + transition: all ease 0.2s; + position: relative; + + &:hover { + background-color: rgba(255, 255, 255, 0.15); + } + } + + &__button { + display: flex; + align-items: center; + position: absolute; + cursor: pointer; + height: 100%; + width: 100%; + flex-direction: row; + color: globals.$body-color; + gap: calc(globals.$spacing-unit + globals.$spacing-unit / 2); + padding: 0 globals.$spacing-unit; + } + + &__display-name { + font-weight: bold; + font-size: globals.$body-font-size; + text-align: left; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + + &__accept-button { + cursor: pointer; + color: globals.$body-color; + width: 28px; + height: 28px; + + &:hover { + color: globals.$success-color; + } + } + + &__cancel-button { + cursor: pointer; + color: globals.$body-color; + width: 28px; + height: 28px; + + &:hover { + color: globals.$danger-color; + } + } +} diff --git a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-item.tsx b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-item.tsx index 38f0dd25..13a22357 100644 --- a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-item.tsx +++ b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-item.tsx @@ -1,8 +1,7 @@ import { CheckCircleIcon, XCircleIcon } from "@primer/octicons-react"; -import * as styles from "./user-friend-modal.css"; -import { SPACING_UNIT } from "@renderer/theme.css"; import { useTranslation } from "react-i18next"; import { Avatar } from "@renderer/components"; +import "./user-friend-item.scss"; export type UserFriendItemProps = { userId: string; @@ -31,10 +30,9 @@ export const UserFriendItem = (props: UserFriendItemProps) => { const getRequestDescription = () => { if (type === "ACCEPTED" || type === null) return null; - return ( - {type == "SENT" ? t("request_sent") : t("request_received")} + {type === "SENT" ? t("request_sent") : t("request_received")} ); }; @@ -45,7 +43,7 @@ export const UserFriendItem = (props: UserFriendItemProps) => { if (type === "SENT") { return (
                            -
                            {getRequestActions()} diff --git a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-add-friend.scss b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-add-friend.scss new file mode 100644 index 00000000..8c896a9e --- /dev/null +++ b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-add-friend.scss @@ -0,0 +1,21 @@ +@use "../../../scss/globals.scss"; + +.user-friend-modal-add-friend { + &__actions { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + gap: globals.$spacing-unit; + } + + &__button { + align-self: end; + } + + &__pending-container { + display: flex; + flex-direction: column; + gap: calc(globals.$spacing-unit * 2); + } +} diff --git a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-add-friend.tsx b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-add-friend.tsx index 23444e70..2bcf5ba7 100644 --- a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-add-friend.tsx +++ b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-add-friend.tsx @@ -1,10 +1,10 @@ import { Button, TextField } from "@renderer/components"; import { useToast, useUserDetails } from "@renderer/hooks"; -import { SPACING_UNIT } from "@renderer/theme.css"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; import { UserFriendItem } from "./user-friend-item"; +import "./user-friend-modal-add-friend.scss"; export interface UserFriendModalAddFriendProps { closeModal: () => void; @@ -76,15 +76,7 @@ export const UserFriendModalAddFriend = ({ return ( <> -
                            +
                            -
                            +

                            {t("pending")}

                            {friendRequests.length === 0 &&

                            {t("no_pending_invites")}

                            } {friendRequests.map((request) => { diff --git a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-list.scss b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-list.scss new file mode 100644 index 00000000..eaf0e527 --- /dev/null +++ b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-list.scss @@ -0,0 +1,16 @@ +@use "../../../scss/globals.scss"; + +.user-friend-modal-list { + display: flex; + flex-direction: column; + gap: calc(globals.$spacing-unit * 2); + max-height: 400px; + overflow-y: scroll; + + &__skeleton { + width: 100%; + height: 54px; + overflow: hidden; + border-radius: 4px; + } +} diff --git a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-list.tsx b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-list.tsx index d104e676..610816fa 100644 --- a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-list.tsx +++ b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal-list.tsx @@ -1,4 +1,3 @@ -import { SPACING_UNIT, vars } from "@renderer/theme.css"; import type { UserFriend } from "@types"; import { useEffect, useRef, useState } from "react"; import { UserFriendItem } from "./user-friend-item"; @@ -6,6 +5,7 @@ import { useNavigate } from "react-router-dom"; import { useToast, useUserDetails } from "@renderer/hooks"; import { useTranslation } from "react-i18next"; import Skeleton, { SkeletonTheme } from "react-loading-skeleton"; +import "./user-friend-modal-list.scss"; export interface UserFriendModalListProps { userId: string; @@ -94,41 +94,21 @@ export const UserFriendModalList = ({ }; return ( - -
                            + +
                            {!isLoading && friends.length === 0 &&

                            {t("no_friends_added")}

                            } - {friends.map((friend) => { - return ( - - ); - })} - {isLoading && ( - ( + - )} + ))} + {isLoading && }
                            ); diff --git a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal.scss b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal.scss new file mode 100644 index 00000000..550c0fd9 --- /dev/null +++ b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal.scss @@ -0,0 +1,34 @@ +@use "../../../scss/globals.scss"; + +.user-friend-modal { + &__container { + display: flex; + width: 500px; + flex-direction: column; + gap: calc(globals.$spacing-unit * 2); + } + + &__header { + display: flex; + gap: globals.$spacing-unit; + align-items: center; + } + + &__friend-code-button { + color: globals.$body-color; + cursor: pointer; + display: flex; + gap: calc(globals.$spacing-unit / 2); + align-items: center; + transition: all ease 0.2s; + + &:hover { + color: globals.$muted-color; + } + } + + &__tabs { + display: flex; + gap: globals.$spacing-unit; + } +} diff --git a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal.tsx b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal.tsx index d827fa20..93997777 100644 --- a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal.tsx +++ b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal.tsx @@ -1,12 +1,11 @@ import { Button, Modal } from "@renderer/components"; -import { SPACING_UNIT } from "@renderer/theme.css"; import { useCallback, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { UserFriendModalAddFriend } from "./user-friend-modal-add-friend"; import { useToast, useUserDetails } from "@renderer/hooks"; import { UserFriendModalList } from "./user-friend-modal-list"; import { CopyIcon } from "@primer/octicons-react"; -import * as styles from "./user-friend-modal.css"; +import "./user-friend-modal.scss"; export enum UserFriendModalTab { FriendsList, @@ -27,15 +26,11 @@ export const UserFriendModal = ({ userId, }: UserFriendsModalProps) => { const { t } = useTranslation("user_profile"); - const tabs = [t("friends_list"), t("add_friends")]; - const [currentTab, setCurrentTab] = useState( initialTab || UserFriendModalTab.FriendsList ); - const { showSuccessToast } = useToast(); - const { userDetails } = useUserDetails(); const isMe = userDetails?.id == userId; @@ -64,44 +59,29 @@ export const UserFriendModal = ({ return ( -
                            +
                            {isMe && ( <> -
                            +

                            {t("your_friend_code")}

                            -
                            - {tabs.map((tab, index) => { - return ( - - ); - })} +
                            + {tabs.map((tab, index) => ( + + ))}
                            )} From c7bc868fbba262e85574c3bc4630568c36c4d9d2 Mon Sep 17 00:00:00 2001 From: Hachi-R Date: Tue, 21 Jan 2025 15:56:54 -0300 Subject: [PATCH 24/33] refactor: migrate playtime styles from VE to SCSS + BEM --- .../game-details/hero/hero-panel-playtime.scss | 15 +++++++++++++++ .../game-details/hero/hero-panel-playtime.tsx | 13 +++---------- 2 files changed, 18 insertions(+), 10 deletions(-) create mode 100644 src/renderer/src/pages/game-details/hero/hero-panel-playtime.scss diff --git a/src/renderer/src/pages/game-details/hero/hero-panel-playtime.scss b/src/renderer/src/pages/game-details/hero/hero-panel-playtime.scss new file mode 100644 index 00000000..c8a1de09 --- /dev/null +++ b/src/renderer/src/pages/game-details/hero/hero-panel-playtime.scss @@ -0,0 +1,15 @@ +@use "../../../scss/globals.scss"; + +.hero-panel-playtime { + &__download-details { + gap: globals.$spacing-unit; + display: flex; + color: globals.$body-color; + align-items: center; + } + + &__downloads-link { + color: globals.$body-color; + text-decoration: underline; + } +} diff --git a/src/renderer/src/pages/game-details/hero/hero-panel-playtime.tsx b/src/renderer/src/pages/game-details/hero/hero-panel-playtime.tsx index 7955694b..567858c3 100644 --- a/src/renderer/src/pages/game-details/hero/hero-panel-playtime.tsx +++ b/src/renderer/src/pages/game-details/hero/hero-panel-playtime.tsx @@ -1,24 +1,18 @@ import { useContext, useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; -import * as styles from "./hero-panel.css"; import { formatDownloadProgress } from "@renderer/helpers"; import { useDate, useDownload, useFormat } from "@renderer/hooks"; import { Link } from "@renderer/components"; - import { gameDetailsContext } from "@renderer/context"; import { MAX_MINUTES_TO_SHOW_IN_PLAYTIME } from "@renderer/constants"; +import "./hero-panel-playtime.scss"; export function HeroPanelPlaytime() { const [lastTimePlayed, setLastTimePlayed] = useState(""); - const { game, isGameRunning } = useContext(gameDetailsContext); - const { t } = useTranslation("game_details"); - const { numberFormatter } = useFormat(); - const { progress, lastPacket } = useDownload(); - const { formatDistance } = useDate(); useEffect(() => { @@ -55,8 +49,8 @@ export function HeroPanelPlaytime() { game.status === "active" && lastPacket?.game.id === game.id; const downloadInProgressInfo = ( -
                            - +
                            + {game.status === "active" ? t("download_in_progress") : t("download_paused")} @@ -81,7 +75,6 @@ export function HeroPanelPlaytime() { return ( <>

                            {t("playing_now")}

                            - {hasDownload && downloadInProgressInfo} ); From 28a2f1dda5796eda394f887f4ffa5152926b3f75 Mon Sep 17 00:00:00 2001 From: Hachi-R Date: Tue, 21 Jan 2025 17:41:58 -0300 Subject: [PATCH 25/33] refactor: fix some styles in game details modals --- .../modals/download-settings-modal.scss | 3 +- .../modals/game-options-modal.scss | 68 ++++- .../modals/game-options-modal.tsx | 234 +++++++++--------- 3 files changed, 189 insertions(+), 116 deletions(-) diff --git a/src/renderer/src/pages/game-details/modals/download-settings-modal.scss b/src/renderer/src/pages/game-details/modals/download-settings-modal.scss index 5aa58197..d98a95ad 100644 --- a/src/renderer/src/pages/game-details/modals/download-settings-modal.scss +++ b/src/renderer/src/pages/game-details/modals/download-settings-modal.scss @@ -10,11 +10,12 @@ &__downloads-path-field { display: flex; + flex-direction: column; gap: globals.$spacing-unit; } &__hint-text { - font-size: globals.$small-font-size; + font-size: 12px; color: globals.$body-color; } diff --git a/src/renderer/src/pages/game-details/modals/game-options-modal.scss b/src/renderer/src/pages/game-details/modals/game-options-modal.scss index 0a3c0246..00113260 100644 --- a/src/renderer/src/pages/game-details/modals/game-options-modal.scss +++ b/src/renderer/src/pages/game-details/modals/game-options-modal.scss @@ -7,18 +7,80 @@ flex-direction: column; } - &__header { + &__section { display: flex; flex-direction: column; gap: globals.$spacing-unit; } - &__header-description { - font-weight: 400; + &__header { + display: flex; + flex-direction: column; + gap: globals.$spacing-unit; + + &-description { + font-weight: 400; + } } &__row { display: flex; gap: globals.$spacing-unit; } + + &__executable-field { + display: flex; + flex-direction: column; + gap: globals.$spacing-unit; + + &-input { + width: 100%; + } + + &-buttons { + display: flex; + gap: globals.$spacing-unit; + } + } + + &__wine-prefix { + display: flex; + flex-direction: column; + gap: calc(globals.$spacing-unit * 2); + + &-input { + width: 100%; + } + } + + &__launch-options { + display: flex; + flex-direction: column; + gap: globals.$spacing-unit; + + &-input { + width: 100%; + } + } + + &__downloads { + display: flex; + flex-direction: column; + gap: globals.$spacing-unit; + } + + &__danger-zone { + display: flex; + flex-direction: column; + gap: globals.$spacing-unit; + + &-description { + font-weight: 400; + } + + &-buttons { + display: flex; + gap: globals.$spacing-unit; + } + } } diff --git a/src/renderer/src/pages/game-details/modals/game-options-modal.tsx b/src/renderer/src/pages/game-details/modals/game-options-modal.tsx index 2a826c04..ec6a8b07 100644 --- a/src/renderer/src/pages/game-details/modals/game-options-modal.tsx +++ b/src/renderer/src/pages/game-details/modals/game-options-modal.tsx @@ -2,7 +2,6 @@ import { useContext, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import { Button, Modal, TextField } from "@renderer/components"; import type { Game } from "@types"; -import * as styles from "./game-options-modal.css"; import { gameDetailsContext } from "@renderer/context"; import { DeleteGameModal } from "@renderer/pages/downloads/delete-game-modal"; import { useDownload, useToast, useUserDetails } from "@renderer/hooks"; @@ -179,14 +178,12 @@ export function GameOptionsModal({ onClose={() => setShowDeleteModal(false)} deleteGame={handleDeleteGame} /> - setShowRemoveGameModal(false)} removeGameFromLibrary={handleRemoveGameFromLibrary} game={game} /> - setShowResetAchievementsModal(false)} @@ -201,58 +198,65 @@ export function GameOptionsModal({ large={true} >
                            -
                            -

                            {t("executable_section_title")}

                            -

                            - {t("executable_section_description")} -

                            +
                            +
                            +

                            {t("executable_section_title")}

                            +

                            + {t("executable_section_description")} +

                            +
                            + +
                            + + + {game.executablePath && ( + + )} + + } + /> + + {game.executablePath && ( +
                            + + +
                            + )} +
                            - - - {game.executablePath && ( - - )} - - } - /> - - {game.executablePath && ( -
                            - - -
                            - )} - {shouldShowWinePrefixConfiguration && ( -
                            -
                            +
                            +

                            {t("wine_prefix")}

                            -

                            +

                            {t("wine_prefix_description")}

                            @@ -287,11 +291,13 @@ export function GameOptionsModal({ )} {shouldShowLaunchOptionsConfiguration && ( -
                            -

                            {t("launch_options")}

                            -

                            - {t("launch_options_description")} -

                            +
                            +
                            +

                            {t("launch_options")}

                            +

                            + {t("launch_options_description")} +

                            +
                            )} -
                            -

                            {t("downloads_secion_title")}

                            -

                            - {t("downloads_section_description")} -

                            +
                            +
                            +

                            {t("downloads_secion_title")}

                            +

                            + {t("downloads_section_description")} +

                            +
                            + +
                            + + {game.downloadPath && ( + + )} +
                            -
                            - - {game.downloadPath && ( +
                            +
                            +

                            {t("danger_zone_section_title")}

                            +

                            + {t("danger_zone_section_description")} +

                            +
                            + +
                            - )} -
                            -
                            -

                            {t("danger_zone_section_title")}

                            -

                            - {t("danger_zone_section_description")} -

                            -
                            + -
                            - - - - - + +
                            From 52f7647c79139587d5265093a028a4f268ea493d Mon Sep 17 00:00:00 2001 From: Hachi-R Date: Tue, 21 Jan 2025 18:09:08 -0300 Subject: [PATCH 26/33] refactor: remove css-in-ts styles from all pages --- .../pages/downloads/delete-game-modal.css.ts | 11 - .../src/pages/downloads/download-group.css.ts | 109 -------- .../src/pages/downloads/downloads.css.ts | 37 --- .../cloud-sync-files-modal.css.ts | 27 -- .../cloud-sync-modal/cloud-sync-modal.css.ts | 65 ----- .../description-header.css.ts | 19 -- .../gallery-slider/gallery-slider.css.ts | 131 ---------- .../pages/game-details/game-details.css.ts | 234 ----------------- .../hero/hero-panel-actions.css.ts | 18 -- .../pages/game-details/hero/hero-panel.css.ts | 77 ------ .../modals/download-settings-modal.css.ts | 45 ---- .../modals/game-options-modal.css.ts | 24 -- .../modals/remove-from-library-modal.css.ts | 11 - .../game-details/modals/repacks-modal.css.ts | 19 -- .../sidebar-section/sidebar-section.css.ts | 37 --- .../pages/game-details/sidebar/sidebar.css.ts | 169 ------------- .../src/pages/home/catalogue-home.css.ts | 24 -- src/renderer/src/pages/home/home.css.ts | 77 ------ .../edit-profile-modal.css.ts | 36 --- .../profile-content/locked-profile.css.ts | 24 -- .../profile-content/profile-content.css.ts | 237 ------------------ .../profile/profile-hero/profile-hero.css.ts | 90 ------- src/renderer/src/pages/profile/profile.css.ts | 9 - .../report-profile/report-profile.css.ts | 12 - .../upload-background-image-button.css.ts | 12 - .../pages/settings/settings-account.css.ts | 39 --- .../settings/settings-download-sources.css.ts | 58 ----- .../settings/settings-real-debrid.css.ts | 13 - .../src/pages/settings/settings.css.ts | 27 -- .../user-friend-modal.css.ts | 79 ------ 30 files changed, 1770 deletions(-) delete mode 100644 src/renderer/src/pages/downloads/delete-game-modal.css.ts delete mode 100644 src/renderer/src/pages/downloads/download-group.css.ts delete mode 100644 src/renderer/src/pages/downloads/downloads.css.ts delete mode 100644 src/renderer/src/pages/game-details/cloud-sync-files-modal/cloud-sync-files-modal.css.ts delete mode 100644 src/renderer/src/pages/game-details/cloud-sync-modal/cloud-sync-modal.css.ts delete mode 100644 src/renderer/src/pages/game-details/description-header/description-header.css.ts delete mode 100644 src/renderer/src/pages/game-details/gallery-slider/gallery-slider.css.ts delete mode 100644 src/renderer/src/pages/game-details/game-details.css.ts delete mode 100644 src/renderer/src/pages/game-details/hero/hero-panel-actions.css.ts delete mode 100644 src/renderer/src/pages/game-details/hero/hero-panel.css.ts delete mode 100644 src/renderer/src/pages/game-details/modals/download-settings-modal.css.ts delete mode 100644 src/renderer/src/pages/game-details/modals/game-options-modal.css.ts delete mode 100644 src/renderer/src/pages/game-details/modals/remove-from-library-modal.css.ts delete mode 100644 src/renderer/src/pages/game-details/modals/repacks-modal.css.ts delete mode 100644 src/renderer/src/pages/game-details/sidebar-section/sidebar-section.css.ts delete mode 100644 src/renderer/src/pages/game-details/sidebar/sidebar.css.ts delete mode 100644 src/renderer/src/pages/home/catalogue-home.css.ts delete mode 100644 src/renderer/src/pages/home/home.css.ts delete mode 100644 src/renderer/src/pages/profile/edit-profile-modal/edit-profile-modal.css.ts delete mode 100644 src/renderer/src/pages/profile/profile-content/locked-profile.css.ts delete mode 100644 src/renderer/src/pages/profile/profile-content/profile-content.css.ts delete mode 100644 src/renderer/src/pages/profile/profile-hero/profile-hero.css.ts delete mode 100644 src/renderer/src/pages/profile/profile.css.ts delete mode 100644 src/renderer/src/pages/profile/report-profile/report-profile.css.ts delete mode 100644 src/renderer/src/pages/profile/upload-background-image-button/upload-background-image-button.css.ts delete mode 100644 src/renderer/src/pages/settings/settings-account.css.ts delete mode 100644 src/renderer/src/pages/settings/settings-download-sources.css.ts delete mode 100644 src/renderer/src/pages/settings/settings-real-debrid.css.ts delete mode 100644 src/renderer/src/pages/settings/settings.css.ts delete mode 100644 src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal.css.ts diff --git a/src/renderer/src/pages/downloads/delete-game-modal.css.ts b/src/renderer/src/pages/downloads/delete-game-modal.css.ts deleted file mode 100644 index ca6c3888..00000000 --- a/src/renderer/src/pages/downloads/delete-game-modal.css.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT } from "../../theme.css"; - -export const deleteActionsButtonsCtn = style({ - display: "flex", - width: "100%", - justifyContent: "end", - alignItems: "center", - gap: `${SPACING_UNIT}px`, -}); diff --git a/src/renderer/src/pages/downloads/download-group.css.ts b/src/renderer/src/pages/downloads/download-group.css.ts deleted file mode 100644 index cbbb4f8e..00000000 --- a/src/renderer/src/pages/downloads/download-group.css.ts +++ /dev/null @@ -1,109 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../theme.css"; - -export const downloadTitleWrapper = style({ - display: "flex", - alignItems: "center", - marginBottom: `${SPACING_UNIT}px`, - gap: `${SPACING_UNIT}px`, -}); - -export const downloadTitle = style({ - fontWeight: "bold", - cursor: "pointer", - color: vars.color.body, - textAlign: "left", - fontSize: "16px", - display: "block", - ":hover": { - textDecoration: "underline", - }, -}); - -export const downloads = style({ - width: "100%", - gap: `${SPACING_UNIT * 2}px`, - display: "flex", - flexDirection: "column", - margin: "0", - padding: "0", - marginTop: `${SPACING_UNIT}px`, -}); - -export const downloadCover = style({ - width: "280px", - minWidth: "280px", - height: "auto", - borderRight: `solid 1px ${vars.color.border}`, - position: "relative", - zIndex: "1", -}); - -export const downloadCoverContent = style({ - width: "100%", - height: "100%", - padding: `${SPACING_UNIT}px`, - display: "flex", - alignItems: "flex-end", - justifyContent: "flex-end", -}); - -export const downloadCoverBackdrop = style({ - width: "100%", - height: "100%", - background: "linear-gradient(0deg, rgba(0, 0, 0, 0.8) 5%, transparent 100%)", - display: "flex", - overflow: "hidden", - zIndex: "1", -}); - -export const downloadCoverImage = style({ - width: "100%", - height: "100%", - position: "absolute", - zIndex: "-1", -}); - -export const download = style({ - width: "100%", - backgroundColor: vars.color.background, - display: "flex", - borderRadius: "8px", - border: `solid 1px ${vars.color.border}`, - overflow: "hidden", - boxShadow: "0px 0px 5px 0px #000000", - transition: "all ease 0.2s", - height: "140px", - minHeight: "140px", - maxHeight: "140px", -}); - -export const downloadDetails = style({ - display: "flex", - flexDirection: "column", - flex: "1", - justifyContent: "center", - gap: `${SPACING_UNIT / 2}px`, - fontSize: "14px", -}); - -export const downloadRightContent = style({ - display: "flex", - padding: `${SPACING_UNIT * 2}px`, - flex: "1", - gap: `${SPACING_UNIT}px`, - background: "linear-gradient(90deg, transparent 20%, rgb(0 0 0 / 20%) 100%)", -}); - -export const downloadActions = style({ - display: "flex", - alignItems: "center", - gap: `${SPACING_UNIT}px`, -}); - -export const downloadGroup = style({ - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT * 2}px`, -}); diff --git a/src/renderer/src/pages/downloads/downloads.css.ts b/src/renderer/src/pages/downloads/downloads.css.ts deleted file mode 100644 index abb3c30b..00000000 --- a/src/renderer/src/pages/downloads/downloads.css.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT } from "../../theme.css"; - -export const downloadsContainer = style({ - display: "flex", - padding: `${SPACING_UNIT * 3}px`, - flexDirection: "column", - width: "100%", -}); - -export const downloadGroups = style({ - display: "flex", - gap: `${SPACING_UNIT * 3}px`, - flexDirection: "column", -}); - -export const arrowIcon = style({ - width: "60px", - height: "60px", - borderRadius: "50%", - backgroundColor: "rgba(255, 255, 255, 0.06)", - display: "flex", - alignItems: "center", - justifyContent: "center", - marginBottom: `${SPACING_UNIT * 2}px`, -}); - -export const noDownloads = style({ - display: "flex", - width: "100%", - height: "100%", - justifyContent: "center", - alignItems: "center", - flexDirection: "column", - gap: `${SPACING_UNIT}px`, -}); diff --git a/src/renderer/src/pages/game-details/cloud-sync-files-modal/cloud-sync-files-modal.css.ts b/src/renderer/src/pages/game-details/cloud-sync-files-modal/cloud-sync-files-modal.css.ts deleted file mode 100644 index 0dbab770..00000000 --- a/src/renderer/src/pages/game-details/cloud-sync-files-modal/cloud-sync-files-modal.css.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../../theme.css"; - -export const mappingMethods = style({ - display: "grid", - gap: `${SPACING_UNIT}px`, - gridTemplateColumns: "repeat(2, 1fr)", -}); - -export const fileList = style({ - listStyle: "none", - margin: "0", - padding: "0", - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT}px`, - marginTop: `${SPACING_UNIT * 2}px`, -}); - -export const fileItem = style({ - flex: 1, - color: vars.color.muted, - textDecoration: "underline", - display: "flex", - cursor: "pointer", -}); diff --git a/src/renderer/src/pages/game-details/cloud-sync-modal/cloud-sync-modal.css.ts b/src/renderer/src/pages/game-details/cloud-sync-modal/cloud-sync-modal.css.ts deleted file mode 100644 index dc2d0031..00000000 --- a/src/renderer/src/pages/game-details/cloud-sync-modal/cloud-sync-modal.css.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { keyframes, style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../../theme.css"; - -export const rotate = keyframes({ - "0%": { transform: "rotate(0deg)" }, - "100%": { - transform: "rotate(360deg)", - }, -}); - -export const artifacts = style({ - display: "flex", - gap: `${SPACING_UNIT}px`, - flexDirection: "column", - listStyle: "none", - margin: "0", - padding: "0", -}); - -export const artifactButton = style({ - display: "flex", - textAlign: "left", - flexDirection: "row", - alignItems: "center", - gap: `${SPACING_UNIT}px`, - color: vars.color.body, - padding: `${SPACING_UNIT * 2}px`, - backgroundColor: vars.color.darkBackground, - border: `1px solid ${vars.color.border}`, - borderRadius: "4px", - justifyContent: "space-between", -}); - -export const syncIcon = style({ - animationName: rotate, - animationDuration: "1s", - animationIterationCount: "infinite", - animationTimingFunction: "linear", -}); - -export const progress = style({ - width: "100%", - height: "5px", - "::-webkit-progress-bar": { - backgroundColor: vars.color.darkBackground, - }, - "::-webkit-progress-value": { - backgroundColor: vars.color.muted, - }, -}); - -export const manageFilesButton = style({ - margin: "0", - padding: "0", - alignSelf: "flex-start", - fontSize: 14, - cursor: "pointer", - textDecoration: "underline", - color: vars.color.body, - ":disabled": { - cursor: "not-allowed", - opacity: vars.opacity.disabled, - }, -}); diff --git a/src/renderer/src/pages/game-details/description-header/description-header.css.ts b/src/renderer/src/pages/game-details/description-header/description-header.css.ts deleted file mode 100644 index 45856f31..00000000 --- a/src/renderer/src/pages/game-details/description-header/description-header.css.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../../theme.css"; - -export const descriptionHeader = style({ - width: "100%", - padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 2}px`, - display: "flex", - justifyContent: "space-between", - alignItems: "center", - backgroundColor: vars.color.background, - height: "72px", -}); - -export const descriptionHeaderInfo = style({ - display: "flex", - gap: `${SPACING_UNIT}px`, - flexDirection: "column", -}); diff --git a/src/renderer/src/pages/game-details/gallery-slider/gallery-slider.css.ts b/src/renderer/src/pages/game-details/gallery-slider/gallery-slider.css.ts deleted file mode 100644 index d4f8084a..00000000 --- a/src/renderer/src/pages/game-details/gallery-slider/gallery-slider.css.ts +++ /dev/null @@ -1,131 +0,0 @@ -import { recipe } from "@vanilla-extract/recipes"; -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../../theme.css"; - -export const gallerySliderContainer = style({ - padding: `${SPACING_UNIT * 3}px ${SPACING_UNIT * 2}px`, - width: "100%", - display: "flex", - flexDirection: "column", - alignItems: "center", -}); - -export const gallerySliderMedia = style({ - width: "100%", - height: "100%", - display: "block", - flexShrink: "0", - flexGrow: "0", - transition: "translate 0.3s ease-in-out", - borderRadius: "4px", - alignSelf: "center", -}); - -export const gallerySliderAnimationContainer = style({ - width: "100%", - height: "100%", - display: "flex", - position: "relative", - overflow: "hidden", - "@media": { - "(min-width: 1280px)": { - width: "60%", - }, - }, -}); - -export const gallerySliderPreview = style({ - width: "100%", - padding: `${SPACING_UNIT}px 0`, - height: "100%", - display: "flex", - position: "relative", - overflowX: "auto", - overflowY: "hidden", - gap: `${SPACING_UNIT / 2}px`, - "@media": { - "(min-width: 1280px)": { - width: "60%", - }, - }, - "::-webkit-scrollbar-thumb": { - width: "20%", - }, - "::-webkit-scrollbar": { - height: "10px", - }, -}); - -export const mediaPreviewButton = recipe({ - base: { - cursor: "pointer", - width: "20%", - display: "block", - flexShrink: "0", - flexGrow: "0", - opacity: "0.3", - transition: "translate 0.3s ease-in-out, opacity 0.2s ease", - borderRadius: "4px", - border: `solid 1px ${vars.color.border}`, - overflow: "hidden", - ":hover": { - opacity: "0.8", - }, - }, - variants: { - active: { - true: { - opacity: "1", - }, - }, - }, -}); - -export const mediaPreview = style({ - width: "100%", - display: "flex", -}); - -export const gallerySliderButton = recipe({ - base: { - position: "absolute", - alignSelf: "center", - cursor: "pointer", - backgroundColor: "rgba(0, 0, 0, 0.4)", - transition: "all 0.2s ease-in-out", - borderRadius: "50%", - color: vars.color.muted, - width: "48px", - height: "48px", - ":hover": { - backgroundColor: "rgba(0, 0, 0, 0.6)", - }, - ":active": { - transform: "scale(0.95)", - }, - }, - variants: { - direction: { - left: { - left: "0", - marginLeft: `${SPACING_UNIT}px`, - transform: `translateX(${-(48 + SPACING_UNIT)}px)`, - }, - right: { - right: "0", - marginRight: `${SPACING_UNIT}px`, - transform: `translateX(${48 + SPACING_UNIT}px)`, - }, - }, - visible: { - true: { - transform: "translateX(0)", - opacity: "1", - }, - false: { - opacity: "0", - }, - }, - }, -}); diff --git a/src/renderer/src/pages/game-details/game-details.css.ts b/src/renderer/src/pages/game-details/game-details.css.ts deleted file mode 100644 index 228b2aeb..00000000 --- a/src/renderer/src/pages/game-details/game-details.css.ts +++ /dev/null @@ -1,234 +0,0 @@ -import { globalStyle, keyframes, style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../theme.css"; -import { recipe } from "@vanilla-extract/recipes"; - -export const HERO_HEIGHT = 300; - -export const slideIn = keyframes({ - "0%": { transform: `translateY(${40 + SPACING_UNIT * 2}px)`, opacity: "0px" }, - "100%": { transform: "translateY(0)", opacity: "1" }, -}); - -export const wrapper = recipe({ - base: { - display: "flex", - flexDirection: "column", - overflow: "hidden", - width: "100%", - height: "100%", - transition: "all ease 0.3s", - }, - variants: { - blurredContent: { - true: { - filter: "blur(20px)", - }, - }, - }, -}); - -export const hero = style({ - width: "100%", - height: `${HERO_HEIGHT}px`, - minHeight: `${HERO_HEIGHT}px`, - display: "flex", - flexDirection: "column", - position: "relative", - transition: "all ease 0.2s", - "@media": { - "(min-width: 1250px)": { - height: "350px", - minHeight: "350px", - }, - }, -}); - -export const heroContent = style({ - padding: `${SPACING_UNIT * 2}px`, - height: "100%", - width: "100%", - display: "flex", - justifyContent: "space-between", - alignItems: "flex-end", -}); - -export const heroLogoBackdrop = style({ - width: "100%", - height: "100%", - background: "linear-gradient(0deg, rgba(0, 0, 0, 0.3) 60%, transparent 100%)", - position: "absolute", - display: "flex", - flexDirection: "column", - justifyContent: "space-between", -}); - -export const heroImage = style({ - width: "100%", - height: `${HERO_HEIGHT}px`, - minHeight: `${HERO_HEIGHT}px`, - objectFit: "cover", - objectPosition: "top", - transition: "all ease 0.2s", - position: "absolute", - zIndex: "0", - "@media": { - "(min-width: 1250px)": { - objectPosition: "center", - height: "350px", - minHeight: "350px", - }, - }, -}); - -export const gameLogo = style({ - width: 300, - alignSelf: "flex-end", -}); - -export const heroImageSkeleton = style({ - height: "300px", - "@media": { - "(min-width: 1250px)": { - height: "350px", - }, - }, -}); - -export const container = style({ - width: "100%", - height: "100%", - display: "flex", - flexDirection: "column", - overflow: "auto", - zIndex: "1", -}); - -export const descriptionContainer = style({ - display: "flex", - width: "100%", - flex: "1", - background: `linear-gradient(0deg, ${vars.color.background} 50%, ${vars.color.darkBackground} 100%)`, -}); - -export const descriptionContent = style({ - width: "100%", - height: "100%", -}); - -export const description = style({ - userSelect: "text", - lineHeight: "22px", - fontSize: "16px", - padding: `${SPACING_UNIT * 3}px ${SPACING_UNIT * 2}px`, - "@media": { - "(min-width: 1280px)": { - width: "60%", - }, - }, - width: "100%", - marginLeft: "auto", - marginRight: "auto", -}); - -export const descriptionSkeleton = style({ - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT}px`, - padding: `${SPACING_UNIT * 3}px ${SPACING_UNIT * 2}px`, - width: "100%", - "@media": { - "(min-width: 1280px)": { - width: "60%", - lineHeight: "22px", - }, - }, - marginLeft: "auto", - marginRight: "auto", -}); - -export const randomizerButton = style({ - animationName: slideIn, - animationDuration: "0.2s", - position: "fixed", - bottom: `${SPACING_UNIT * 3}px`, - /* Scroll bar + spacing */ - right: `${9 + SPACING_UNIT * 2}px`, - boxShadow: "rgba(255, 255, 255, 0.1) 0px 0px 10px 1px", - border: `solid 2px ${vars.color.border}`, - zIndex: "1", - backgroundColor: vars.color.background, - ":hover": { - backgroundColor: vars.color.background, - boxShadow: "rgba(255, 255, 255, 0.1) 0px 0px 15px 5px", - opacity: "1", - }, - ":active": { - transform: "scale(0.98)", - }, - ":disabled": { - boxShadow: "none", - transform: "none", - opacity: "0.8", - backgroundColor: vars.color.background, - }, -}); - -export const heroPanelSkeleton = style({ - width: "100%", - padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 2}px`, - display: "flex", - alignItems: "center", - backgroundColor: vars.color.background, - height: "72px", - borderBottom: `solid 1px ${vars.color.border}`, -}); - -globalStyle(".bb_tag", { - marginTop: `${SPACING_UNIT * 2}px`, - marginBottom: `${SPACING_UNIT * 2}px`, -}); - -globalStyle(`${description} img`, { - borderRadius: "5px", - marginTop: `${SPACING_UNIT}px`, - marginBottom: `${SPACING_UNIT * 3}px`, - display: "block", - width: "100%", - height: "auto", - objectFit: "cover", -}); - -globalStyle(`${description} a`, { - color: vars.color.body, -}); - -export const cloudSyncButton = style({ - padding: `${SPACING_UNIT * 1.5}px ${SPACING_UNIT * 2}px`, - backgroundColor: "rgba(0, 0, 0, 0.6)", - backdropFilter: "blur(20px)", - borderRadius: "8px", - transition: "all ease 0.2s", - cursor: "pointer", - minHeight: "40px", - display: "flex", - alignItems: "center", - justifyContent: "center", - gap: `${SPACING_UNIT}px`, - color: vars.color.muted, - fontSize: "14px", - border: `solid 1px ${vars.color.border}`, - boxShadow: "0px 0px 10px 0px rgba(0, 0, 0, 0.8)", - animation: `${slideIn} 0.2s cubic-bezier(0.33, 1, 0.68, 1) 0s 1 normal none running`, - animationDuration: "0.3s", - ":active": { - opacity: "0.9", - }, - ":disabled": { - opacity: vars.opacity.disabled, - cursor: "not-allowed", - }, - ":hover": { - backgroundColor: "rgba(0, 0, 0, 0.5)", - }, -}); diff --git a/src/renderer/src/pages/game-details/hero/hero-panel-actions.css.ts b/src/renderer/src/pages/game-details/hero/hero-panel-actions.css.ts deleted file mode 100644 index ac9e6df1..00000000 --- a/src/renderer/src/pages/game-details/hero/hero-panel-actions.css.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../../theme.css"; - -export const heroPanelAction = style({ - border: `solid 1px ${vars.color.muted}`, -}); - -export const actions = style({ - display: "flex", - gap: `${SPACING_UNIT * 2}px`, -}); - -export const separator = style({ - width: "1px", - backgroundColor: vars.color.muted, - opacity: "0.2", -}); diff --git a/src/renderer/src/pages/game-details/hero/hero-panel.css.ts b/src/renderer/src/pages/game-details/hero/hero-panel.css.ts deleted file mode 100644 index 3fdbc73b..00000000 --- a/src/renderer/src/pages/game-details/hero/hero-panel.css.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { style } from "@vanilla-extract/css"; -import { recipe } from "@vanilla-extract/recipes"; - -import { SPACING_UNIT, vars } from "../../../theme.css"; - -export const panel = recipe({ - base: { - width: "100%", - height: "72px", - minHeight: "72px", - padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 3}px`, - backgroundColor: vars.color.darkBackground, - display: "flex", - alignItems: "center", - justifyContent: "space-between", - transition: "all ease 0.2s", - borderBottom: `solid 1px ${vars.color.border}`, - position: "sticky", - overflow: "hidden", - top: "0", - zIndex: "2", - }, - variants: { - stuck: { - true: { - boxShadow: "0px 0px 15px 0px rgba(0, 0, 0, 0.8)", - }, - }, - }, -}); - -export const content = style({ - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT}px`, -}); - -export const actions = style({ - display: "flex", - gap: `${SPACING_UNIT}px`, -}); - -export const downloadDetailsRow = style({ - gap: `${SPACING_UNIT}px`, - display: "flex", - color: vars.color.body, - alignItems: "center", -}); - -export const downloadsLink = style({ - color: vars.color.body, - textDecoration: "underline", -}); - -export const progressBar = recipe({ - base: { - position: "absolute", - bottom: "0", - left: "0", - width: "100%", - height: "3px", - transition: "all ease 0.2s", - "::-webkit-progress-bar": { - backgroundColor: "transparent", - }, - "::-webkit-progress-value": { - backgroundColor: vars.color.muted, - }, - }, - variants: { - disabled: { - true: { - opacity: vars.opacity.disabled, - }, - }, - }, -}); diff --git a/src/renderer/src/pages/game-details/modals/download-settings-modal.css.ts b/src/renderer/src/pages/game-details/modals/download-settings-modal.css.ts deleted file mode 100644 index 3a776736..00000000 --- a/src/renderer/src/pages/game-details/modals/download-settings-modal.css.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../../theme.css"; - -export const container = style({ - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT * 3}px`, - width: "100%", -}); - -export const downloadsPathField = style({ - display: "flex", - gap: `${SPACING_UNIT}px`, -}); - -export const hintText = style({ - fontSize: "12px", - color: vars.color.body, -}); - -export const downloaders = style({ - display: "grid", - gap: `${SPACING_UNIT}px`, - gridTemplateColumns: "repeat(2, 1fr)", -}); - -export const downloaderOption = style({ - position: "relative", - ":only-child": { - gridColumn: "1 / -1", - }, -}); - -export const downloaderIcon = style({ - position: "absolute", - left: `${SPACING_UNIT * 2}px`, -}); - -export const pathError = style({ - cursor: "pointer", - ":hover": { - textDecoration: "underline", - }, -}); diff --git a/src/renderer/src/pages/game-details/modals/game-options-modal.css.ts b/src/renderer/src/pages/game-details/modals/game-options-modal.css.ts deleted file mode 100644 index f844a686..00000000 --- a/src/renderer/src/pages/game-details/modals/game-options-modal.css.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT } from "../../../theme.css"; - -export const optionsContainer = style({ - display: "flex", - gap: `${SPACING_UNIT * 2}px`, - flexDirection: "column", -}); - -export const gameOptionHeader = style({ - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT}px`, -}); - -export const gameOptionHeaderDescription = style({ - fontWeight: "400", -}); - -export const gameOptionRow = style({ - display: "flex", - gap: `${SPACING_UNIT}px`, -}); diff --git a/src/renderer/src/pages/game-details/modals/remove-from-library-modal.css.ts b/src/renderer/src/pages/game-details/modals/remove-from-library-modal.css.ts deleted file mode 100644 index 2c70717d..00000000 --- a/src/renderer/src/pages/game-details/modals/remove-from-library-modal.css.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT } from "../../../theme.css"; - -export const deleteActionsButtonsCtn = style({ - display: "flex", - width: "100%", - justifyContent: "end", - alignItems: "center", - gap: `${SPACING_UNIT}px`, -}); diff --git a/src/renderer/src/pages/game-details/modals/repacks-modal.css.ts b/src/renderer/src/pages/game-details/modals/repacks-modal.css.ts deleted file mode 100644 index 8d54e402..00000000 --- a/src/renderer/src/pages/game-details/modals/repacks-modal.css.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../../theme.css"; - -export const repacks = style({ - display: "flex", - gap: `${SPACING_UNIT}px`, - flexDirection: "column", -}); - -export const repackButton = style({ - display: "flex", - textAlign: "left", - flexDirection: "column", - alignItems: "flex-start", - gap: `${SPACING_UNIT}px`, - color: vars.color.body, - padding: `${SPACING_UNIT * 2}px`, -}); diff --git a/src/renderer/src/pages/game-details/sidebar-section/sidebar-section.css.ts b/src/renderer/src/pages/game-details/sidebar-section/sidebar-section.css.ts deleted file mode 100644 index cd9fdc8f..00000000 --- a/src/renderer/src/pages/game-details/sidebar-section/sidebar-section.css.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { recipe } from "@vanilla-extract/recipes"; -import { SPACING_UNIT, vars } from "../../../theme.css"; -import { style } from "@vanilla-extract/css"; - -export const sidebarSectionButton = style({ - height: "72px", - padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 2}px`, - display: "flex", - alignItems: "center", - backgroundColor: vars.color.background, - color: vars.color.muted, - width: "100%", - cursor: "pointer", - transition: "all ease 0.2s", - gap: `${SPACING_UNIT}px`, - fontSize: "14px", - fontWeight: "bold", - ":hover": { - backgroundColor: "rgba(255, 255, 255, 0.05)", - }, - ":active": { - opacity: vars.opacity.active, - }, -}); - -export const chevron = recipe({ - base: { - transition: "transform ease 0.2s", - }, - variants: { - open: { - true: { - transform: "rotate(180deg)", - }, - }, - }, -}); diff --git a/src/renderer/src/pages/game-details/sidebar/sidebar.css.ts b/src/renderer/src/pages/game-details/sidebar/sidebar.css.ts deleted file mode 100644 index aa27cd42..00000000 --- a/src/renderer/src/pages/game-details/sidebar/sidebar.css.ts +++ /dev/null @@ -1,169 +0,0 @@ -import { globalStyle, style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../../theme.css"; -import { recipe } from "@vanilla-extract/recipes"; - -export const contentSidebar = style({ - borderLeft: `solid 1px ${vars.color.border}`, - backgroundColor: vars.color.darkBackground, - width: "100%", - height: "100%", - "@media": { - "(min-width: 1024px)": { - maxWidth: "300px", - width: "100%", - }, - "(min-width: 1280px)": { - width: "100%", - maxWidth: "400px", - }, - }, -}); - -export const requirementButtonContainer = style({ - width: "100%", - display: "flex", -}); - -export const requirementButton = style({ - border: `solid 1px ${vars.color.border};`, - borderLeft: "none", - borderRight: "none", - borderRadius: "0", - width: "100%", -}); - -export const requirementsDetails = style({ - padding: `${SPACING_UNIT * 2}px`, - lineHeight: "22px", - fontSize: "16px", -}); - -export const requirementsDetailsSkeleton = style({ - display: "flex", - flexDirection: "column", - gap: "8px", - padding: `${SPACING_UNIT * 2}px`, - fontSize: "16px", -}); - -export const howLongToBeatCategoriesList = style({ - margin: "0", - padding: `${SPACING_UNIT * 2}px`, - display: "flex", - flexDirection: "column", - gap: "16px", -}); - -export const howLongToBeatCategory = style({ - display: "flex", - flexDirection: "column", - gap: "4px", - background: - "linear-gradient(90deg, transparent 20%, rgb(255 255 255 / 2%) 100%)", - borderRadius: "4px", - padding: `8px 16px`, - border: `solid 1px ${vars.color.border}`, -}); - -export const howLongToBeatCategoryLabel = style({ - color: vars.color.muted, -}); - -export const howLongToBeatCategorySkeleton = style({ - border: `solid 1px ${vars.color.border}`, - borderRadius: "4px", - height: "76px", -}); - -export const statsSection = style({ - display: "flex", - gap: `${SPACING_UNIT * 2}px`, - padding: `${SPACING_UNIT * 2}px`, - justifyContent: "space-between", - transition: "max-height ease 0.5s", - overflow: "hidden", - "@media": { - "(min-width: 1024px)": { - flexDirection: "column", - }, - "(min-width: 1280px)": { - flexDirection: "row", - }, - }, -}); - -export const statsCategoryTitle = style({ - fontSize: "14px", - fontWeight: "bold", - display: "flex", - alignItems: "center", - gap: `${SPACING_UNIT}px`, -}); - -export const statsCategory = style({ - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT / 2}px`, -}); - -globalStyle(`${requirementsDetails} a`, { - display: "flex", - color: vars.color.body, -}); - -export const list = style({ - listStyle: "none", - margin: "0", - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT * 2}px`, - padding: `${SPACING_UNIT * 2}px`, -}); - -export const listItem = style({ - display: "flex", - cursor: "pointer", - transition: "all ease 0.1s", - color: vars.color.muted, - width: "100%", - overflow: "hidden", - borderRadius: "4px", - padding: `${SPACING_UNIT}px ${SPACING_UNIT}px`, - gap: `${SPACING_UNIT * 2}px`, - alignItems: "center", - textAlign: "left", - ":hover": { - backgroundColor: "rgba(255, 255, 255, 0.15)", - textDecoration: "none", - }, -}); - -export const listItemImage = recipe({ - base: { - width: "54px", - height: "54px", - borderRadius: "4px", - objectFit: "cover", - }, - variants: { - unlocked: { - false: { - filter: "grayscale(100%)", - }, - }, - }, -}); - -export const subscriptionRequiredButton = style({ - textDecoration: "none", - display: "flex", - justifyContent: "center", - width: "100%", - gap: `${SPACING_UNIT / 2}px`, - color: vars.color.warning, - cursor: "pointer", - ":hover": { - textDecoration: "underline", - }, -}); diff --git a/src/renderer/src/pages/home/catalogue-home.css.ts b/src/renderer/src/pages/home/catalogue-home.css.ts deleted file mode 100644 index a13d58f4..00000000 --- a/src/renderer/src/pages/home/catalogue-home.css.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT } from "../../theme.css"; - -export const catalogueCategories = style({ - display: "flex", - gap: `${SPACING_UNIT}px`, -}); - -export const content = style({ - width: "100%", - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT * 3}px`, - padding: `${SPACING_UNIT * 3}px`, - flex: "1", -}); - -export const cards = style({ - display: "grid", - gridTemplateColumns: "repeat(2, 1fr)", - gap: `${SPACING_UNIT * 2}px`, - transition: "all ease 0.2s", -}); diff --git a/src/renderer/src/pages/home/home.css.ts b/src/renderer/src/pages/home/home.css.ts deleted file mode 100644 index 4c605377..00000000 --- a/src/renderer/src/pages/home/home.css.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../theme.css"; - -export const homeHeader = style({ - display: "flex", - gap: `${SPACING_UNIT}px`, - justifyContent: "space-between", - alignItems: "center", -}); - -export const content = style({ - width: "100%", - height: "100%", - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT * 3}px`, - padding: `${SPACING_UNIT * 3}px`, - flex: "1", - overflowY: "auto", -}); - -export const cards = style({ - display: "grid", - gridTemplateColumns: "repeat(1, 1fr)", - gap: `${SPACING_UNIT * 2}px`, - transition: "all ease 0.2s", - "@media": { - "(min-width: 768px)": { - gridTemplateColumns: "repeat(2, 1fr)", - }, - "(min-width: 1250px)": { - gridTemplateColumns: "repeat(3, 1fr)", - }, - "(min-width: 1600px)": { - gridTemplateColumns: "repeat(4, 1fr)", - }, - }, -}); - -export const cardSkeleton = style({ - width: "100%", - height: "180px", - boxShadow: "0px 0px 15px 0px #000000", - overflow: "hidden", - borderRadius: "4px", - transition: "all ease 0.2s", - zIndex: "1", - ":active": { - opacity: vars.opacity.active, - }, -}); - -export const noResults = style({ - height: "100%", - display: "flex", - alignItems: "center", - justifyContent: "center", - flexDirection: "column", - gap: "16px", - gridColumn: "1 / -1", -}); - -export const buttonsList = style({ - display: "flex", - listStyle: "none", - margin: "0", - padding: "0", - gap: `${SPACING_UNIT}px`, -}); - -export const flameIcon = style({ - width: "30px", - top: "-10px", - left: "-5px", - position: "absolute", -}); diff --git a/src/renderer/src/pages/profile/edit-profile-modal/edit-profile-modal.css.ts b/src/renderer/src/pages/profile/edit-profile-modal/edit-profile-modal.css.ts deleted file mode 100644 index 8dd1df51..00000000 --- a/src/renderer/src/pages/profile/edit-profile-modal/edit-profile-modal.css.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { vars } from "../../../theme.css"; -import { globalStyle, style } from "@vanilla-extract/css"; - -export const profileAvatarEditContainer = style({ - alignSelf: "center", - // width: "132px", - // height: "132px", - display: "flex", - // borderRadius: "4px", - color: vars.color.body, - justifyContent: "center", - alignItems: "center", - backgroundColor: vars.color.background, - position: "relative", - cursor: "pointer", -}); - -export const profileAvatarEditOverlay = style({ - position: "absolute", - width: "100%", - height: "100%", - backgroundColor: "rgba(0, 0, 0, 0.7)", - color: vars.color.muted, - zIndex: "1", - cursor: "pointer", - display: "flex", - justifyContent: "center", - transition: "all ease 0.2s", - alignItems: "center", - borderRadius: "4px", - opacity: "0", -}); - -globalStyle(`${profileAvatarEditContainer}:hover ${profileAvatarEditOverlay}`, { - opacity: "1", -}); diff --git a/src/renderer/src/pages/profile/profile-content/locked-profile.css.ts b/src/renderer/src/pages/profile/profile-content/locked-profile.css.ts deleted file mode 100644 index bf5494b6..00000000 --- a/src/renderer/src/pages/profile/profile-content/locked-profile.css.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { SPACING_UNIT } from "../../../theme.css"; - -import { style } from "@vanilla-extract/css"; - -export const container = style({ - display: "flex", - width: "100%", - height: "100%", - justifyContent: "center", - alignItems: "center", - flexDirection: "column", - gap: `${SPACING_UNIT}px`, -}); - -export const lockIcon = style({ - width: "60px", - height: "60px", - borderRadius: "50%", - backgroundColor: "rgba(255, 255, 255, 0.06)", - display: "flex", - alignItems: "center", - justifyContent: "center", - marginBottom: `${SPACING_UNIT * 2}px`, -}); diff --git a/src/renderer/src/pages/profile/profile-content/profile-content.css.ts b/src/renderer/src/pages/profile/profile-content/profile-content.css.ts deleted file mode 100644 index 9bd2b027..00000000 --- a/src/renderer/src/pages/profile/profile-content/profile-content.css.ts +++ /dev/null @@ -1,237 +0,0 @@ -import { vars, SPACING_UNIT } from "../../../theme.css"; -import { globalStyle, style } from "@vanilla-extract/css"; - -export const gameCover = style({ - transition: "all ease 0.2s", - boxShadow: "0 8px 10px -2px rgba(0, 0, 0, 0.5)", - width: "100%", - position: "relative", - ":before": { - content: "", - top: "0", - left: "0", - width: "100%", - height: "172%", - position: "absolute", - background: - "linear-gradient(35deg, rgba(0, 0, 0, 0.1) 0%, rgba(0, 0, 0, 0.07) 51.5%, rgba(255, 255, 255, 0.15) 54%, rgba(255, 255, 255, 0.15) 100%)", - transition: "all ease 0.3s", - transform: "translateY(-36%)", - opacity: "0.5", - }, -}); - -export const game = style({ - transition: "all ease 0.2s", - ":hover": { - transform: "scale(1.05)", - }, -}); - -globalStyle(`${gameCover}:hover::before`, { - opacity: "1", - transform: "translateY(-20%)", -}); - -export const box = style({ - backgroundColor: vars.color.background, - borderRadius: "4px", - border: `solid 1px ${vars.color.border}`, - padding: `${SPACING_UNIT * 2}px`, -}); - -export const sectionHeader = style({ - display: "flex", - alignItems: "center", - justifyContent: "space-between", - marginBottom: `${SPACING_UNIT * 2}px`, -}); - -export const list = style({ - listStyle: "none", - margin: "0", - padding: "0", - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT * 2}px`, -}); - -export const friend = style({ - display: "flex", - gap: `${SPACING_UNIT}px`, - alignItems: "center", -}); - -export const friendName = style({ - color: vars.color.muted, - fontWeight: "bold", - fontSize: vars.size.body, -}); - -export const rightContent = style({ - width: "100%", - height: "100%", - display: "flex", - gap: `${SPACING_UNIT * 2}px`, - flexDirection: "column", - transition: "all ease 0.2s", - "@media": { - "(min-width: 1024px)": { - maxWidth: "300px", - width: "100%", - }, - "(min-width: 1280px)": { - width: "100%", - maxWidth: "400px", - }, - }, -}); - -export const listItem = style({ - display: "flex", - cursor: "pointer", - transition: "all ease 0.1s", - color: vars.color.muted, - width: "100%", - overflow: "hidden", - borderRadius: "4px", - padding: `${SPACING_UNIT}px ${SPACING_UNIT}px`, - gap: `${SPACING_UNIT * 2}px`, - alignItems: "center", - ":hover": { - backgroundColor: "rgba(255, 255, 255, 0.15)", - textDecoration: "none", - }, -}); - -export const statsListItem = style({ - display: "flex", - flexDirection: "column", - transition: "all ease 0.1s", - color: vars.color.muted, - width: "100%", - overflow: "hidden", - borderRadius: "4px", - padding: `${SPACING_UNIT}px ${SPACING_UNIT}px`, - gap: `${SPACING_UNIT}px`, - ":hover": { - backgroundColor: "rgba(255, 255, 255, 0.15)", - textDecoration: "none", - }, -}); - -export const gamesGrid = style({ - listStyle: "none", - margin: "0", - padding: "0", - display: "grid", - gap: `${SPACING_UNIT * 2}px`, - gridTemplateColumns: "repeat(2, 1fr)", - "@container": { - [`app-container (min-width: 900px)`]: { - gridTemplateColumns: "repeat(4, 1fr)", - }, - [`app-container (min-width: 1300px)`]: { - gridTemplateColumns: "repeat(5, 1fr)", - }, - [`app-container (min-width: 2000px)`]: { - gridTemplateColumns: "repeat(6, 1fr)", - }, - [`app-container (min-width: 2600px)`]: { - gridTemplateColumns: "repeat(8, 1fr)", - }, - [`app-container (min-width: 3000px)`]: { - gridTemplateColumns: "repeat(12, 1fr)", - }, - }, -}); - -export const telescopeIcon = style({ - width: "60px", - height: "60px", - borderRadius: "50%", - backgroundColor: "rgba(255, 255, 255, 0.06)", - display: "flex", - alignItems: "center", - justifyContent: "center", - marginBottom: `${SPACING_UNIT * 2}px`, -}); - -export const noGames = style({ - display: "flex", - width: "100%", - height: "100%", - justifyContent: "center", - alignItems: "center", - flexDirection: "column", - gap: `${SPACING_UNIT}px`, -}); - -export const listItemImage = style({ - width: "32px", - height: "32px", - borderRadius: "4px", - objectFit: "cover", -}); - -export const listItemDetails = style({ - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT / 2}px`, - overflow: "hidden", -}); - -export const listItemTitle = style({ - fontWeight: "bold", - overflow: "hidden", - whiteSpace: "nowrap", - textOverflow: "ellipsis", -}); - -export const listItemDescription = style({ - display: "flex", - alignItems: "center", - gap: `${SPACING_UNIT}px`, -}); - -export const defaultAvatarWrapper = style({ - width: "32px", - height: "32px", - display: "flex", - justifyContent: "center", - alignItems: "center", - backgroundColor: vars.color.background, - border: `solid 1px ${vars.color.border}`, - borderRadius: "4px", -}); - -export const achievementsProgressBar = style({ - width: "100%", - height: "4px", - transition: "all ease 0.2s", - "::-webkit-progress-bar": { - backgroundColor: "rgba(255, 255, 255, 0.15)", - borderRadius: "4px", - }, - "::-webkit-progress-value": { - backgroundColor: vars.color.muted, - borderRadius: "4px", - }, -}); - -export const link = style({ - textAlign: "start", - color: vars.color.body, - ":hover": { - textDecoration: "underline", - cursor: "pointer", - }, -}); - -export const gameCardStats = style({ - width: "100%", - height: "100%", - transition: "transform 0.5s ease-in-out", - flexShrink: "0", - flexGrow: "0", -}); diff --git a/src/renderer/src/pages/profile/profile-hero/profile-hero.css.ts b/src/renderer/src/pages/profile/profile-hero/profile-hero.css.ts deleted file mode 100644 index 2080e445..00000000 --- a/src/renderer/src/pages/profile/profile-hero/profile-hero.css.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { SPACING_UNIT, vars } from "../../../theme.css"; -import { style } from "@vanilla-extract/css"; - -export const profileContentBox = style({ - display: "flex", - flexDirection: "column", - position: "relative", -}); - -export const profileAvatarButton = style({ - width: "96px", - minWidth: "96px", - height: "96px", - borderRadius: "4px", - display: "flex", - justifyContent: "center", - alignItems: "center", - backgroundColor: vars.color.background, - border: `solid 1px ${vars.color.border}`, - boxShadow: "0px 0px 5px 0px rgba(0, 0, 0, 0.7)", - cursor: "pointer", - transition: "all ease 0.3s", - color: vars.color.muted, - position: "relative", - ":hover": { - boxShadow: "0px 0px 10px 0px rgba(0, 0, 0, 0.7)", - }, -}); - -export const profileAvatar = style({ - height: "100%", - width: "100%", - objectFit: "cover", - overflow: "hidden", -}); - -export const profileInformation = style({ - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT}px`, - alignItems: "flex-start", - color: "#c0c1c7", - zIndex: 1, - overflow: "hidden", -}); - -export const profileDisplayName = style({ - fontWeight: "bold", - overflow: "hidden", - textOverflow: "ellipsis", - width: "100%", - display: "flex", - alignItems: "center", - position: "relative", - textShadow: "0 0 5px rgb(0 0 0 / 40%)", -}); - -export const heroPanel = style({ - width: "100%", - height: "72px", - minHeight: "72px", - padding: `${SPACING_UNIT * 2}px ${SPACING_UNIT * 3}px`, - display: "flex", - gap: `${SPACING_UNIT}px`, - justifyContent: "space-between", - backdropFilter: `blur(15px)`, - borderTop: `solid 1px rgba(255, 255, 255, 0.1)`, - boxShadow: "0px 0px 15px 0px rgba(0, 0, 0, 0.5)", - backgroundColor: "rgba(0, 0, 0, 0.3)", -}); - -export const userInformation = style({ - display: "flex", - padding: `${SPACING_UNIT * 7}px ${SPACING_UNIT * 3}px`, - alignItems: "center", - gap: `${SPACING_UNIT * 2}px`, -}); - -export const currentGameWrapper = style({ - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT / 2}px`, -}); - -export const currentGameDetails = style({ - display: "flex", - flexDirection: "row", - gap: `${SPACING_UNIT}px`, - alignItems: "center", -}); diff --git a/src/renderer/src/pages/profile/profile.css.ts b/src/renderer/src/pages/profile/profile.css.ts deleted file mode 100644 index 68f5fa56..00000000 --- a/src/renderer/src/pages/profile/profile.css.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { SPACING_UNIT } from "../../theme.css"; -import { style } from "@vanilla-extract/css"; - -export const wrapper = style({ - width: "100%", - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT * 3}px`, -}); diff --git a/src/renderer/src/pages/profile/report-profile/report-profile.css.ts b/src/renderer/src/pages/profile/report-profile/report-profile.css.ts deleted file mode 100644 index ba53fd62..00000000 --- a/src/renderer/src/pages/profile/report-profile/report-profile.css.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { SPACING_UNIT, vars } from "../../../theme.css"; -import { style } from "@vanilla-extract/css"; - -export const reportButton = style({ - alignSelf: "flex-end", - color: vars.color.muted, - gap: `${SPACING_UNIT}px`, - display: "flex", - cursor: "pointer", - alignItems: "center", - fontSize: "12px", -}); diff --git a/src/renderer/src/pages/profile/upload-background-image-button/upload-background-image-button.css.ts b/src/renderer/src/pages/profile/upload-background-image-button/upload-background-image-button.css.ts deleted file mode 100644 index 9a4e2c8f..00000000 --- a/src/renderer/src/pages/profile/upload-background-image-button/upload-background-image-button.css.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { style } from "@vanilla-extract/css"; -import { vars } from "../../../theme.css"; - -export const uploadBackgroundImageButton = style({ - position: "absolute", - top: 16, - right: 16, - borderColor: vars.color.body, - boxShadow: "0px 0px 10px 0px rgba(0, 0, 0, 0.8)", - backgroundColor: "rgba(0, 0, 0, 0.1)", - backdropFilter: "blur(20px)", -}); diff --git a/src/renderer/src/pages/settings/settings-account.css.ts b/src/renderer/src/pages/settings/settings-account.css.ts deleted file mode 100644 index 8fbb3845..00000000 --- a/src/renderer/src/pages/settings/settings-account.css.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../theme.css"; - -export const form = style({ - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT * 3}px`, -}); - -export const blockedUser = style({ - display: "flex", - minWidth: "240px", - justifyContent: "space-between", - alignItems: "center", - backgroundColor: vars.color.darkBackground, - border: `1px solid ${vars.color.border}`, - borderRadius: "4px", - padding: `${SPACING_UNIT}px`, -}); - -export const unblockButton = style({ - color: vars.color.muted, - cursor: "pointer", - transition: "all ease 0.2s", - ":hover": { - opacity: "0.7", - }, -}); - -export const blockedUsersList = style({ - padding: "0", - margin: "0", - listStyle: "none", - display: "flex", - flexDirection: "column", - alignItems: "flex-start", - gap: `${SPACING_UNIT}px`, -}); diff --git a/src/renderer/src/pages/settings/settings-download-sources.css.ts b/src/renderer/src/pages/settings/settings-download-sources.css.ts deleted file mode 100644 index caa93ce8..00000000 --- a/src/renderer/src/pages/settings/settings-download-sources.css.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { style } from "@vanilla-extract/css"; -import { SPACING_UNIT, vars } from "../../theme.css"; -import { recipe } from "@vanilla-extract/recipes"; - -export const downloadSources = style({ - padding: "0", - margin: "0", - gap: `${SPACING_UNIT * 2}px`, - display: "flex", - flexDirection: "column", -}); - -export const downloadSourceItem = recipe({ - base: { - display: "flex", - flexDirection: "column", - backgroundColor: vars.color.darkBackground, - borderRadius: "8px", - padding: `${SPACING_UNIT * 2}px`, - gap: `${SPACING_UNIT}px`, - border: `solid 1px ${vars.color.border}`, - transition: "all ease 0.2s", - }, - variants: { - isSyncing: { - true: { - opacity: vars.opacity.disabled, - }, - }, - }, -}); - -export const downloadSourceItemHeader = style({ - marginBottom: `${SPACING_UNIT}px`, - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT}px`, -}); - -export const downloadSourcesHeader = style({ - display: "flex", - justifyContent: "space-between", - alignItems: "center", -}); - -export const navigateToCatalogueButton = style({ - display: "flex", - alignItems: "center", - gap: `${SPACING_UNIT}px`, - color: vars.color.muted, - textDecoration: "underline", - cursor: "pointer", - - ":disabled": { - cursor: "default", - textDecoration: "none", - }, -}); diff --git a/src/renderer/src/pages/settings/settings-real-debrid.css.ts b/src/renderer/src/pages/settings/settings-real-debrid.css.ts deleted file mode 100644 index 0dfc9d78..00000000 --- a/src/renderer/src/pages/settings/settings-real-debrid.css.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT } from "../../theme.css"; - -export const form = style({ - display: "flex", - flexDirection: "column", - gap: `${SPACING_UNIT}px`, -}); - -export const description = style({ - marginBottom: `${SPACING_UNIT * 2}px`, -}); diff --git a/src/renderer/src/pages/settings/settings.css.ts b/src/renderer/src/pages/settings/settings.css.ts deleted file mode 100644 index 9f607ece..00000000 --- a/src/renderer/src/pages/settings/settings.css.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { style } from "@vanilla-extract/css"; - -import { SPACING_UNIT, vars } from "../../theme.css"; - -export const container = style({ - padding: "24px", - width: "100%", - display: "flex", -}); - -export const content = style({ - backgroundColor: vars.color.background, - width: "100%", - height: "100%", - padding: `${SPACING_UNIT * 3}px`, - border: `solid 1px ${vars.color.border}`, - boxShadow: "0px 0px 15px 0px #000000", - borderRadius: "8px", - gap: `${SPACING_UNIT * 2}px`, - display: "flex", - flexDirection: "column", -}); - -export const settingsCategories = style({ - display: "flex", - gap: `${SPACING_UNIT}px`, -}); diff --git a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal.css.ts b/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal.css.ts deleted file mode 100644 index a164c900..00000000 --- a/src/renderer/src/pages/shared-modals/user-friend-modal/user-friend-modal.css.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { SPACING_UNIT, vars } from "../../../theme.css"; -import { style } from "@vanilla-extract/css"; - -export const friendListDisplayName = style({ - fontWeight: "bold", - fontSize: vars.size.body, - textAlign: "left", - overflow: "hidden", - textOverflow: "ellipsis", - whiteSpace: "nowrap", -}); - -export const friendListContainer = style({ - display: "flex", - gap: `${SPACING_UNIT * 3}px`, - alignItems: "center", - borderRadius: "4px", - border: `solid 1px ${vars.color.border}`, - width: "100%", - height: "54px", - minHeight: "54px", - transition: "all ease 0.2s", - position: "relative", - ":hover": { - backgroundColor: "rgba(255, 255, 255, 0.15)", - }, -}); - -export const friendListButton = style({ - display: "flex", - alignItems: "center", - position: "absolute", - cursor: "pointer", - height: "100%", - width: "100%", - flexDirection: "row", - color: vars.color.body, - gap: `${SPACING_UNIT + SPACING_UNIT / 2}px`, - padding: `0 ${SPACING_UNIT}px`, -}); - -export const friendRequestItem = style({ - color: vars.color.body, - ":hover": { - backgroundColor: "rgba(255, 255, 255, 0.15)", - }, -}); - -export const acceptRequestButton = style({ - cursor: "pointer", - color: vars.color.body, - width: "28px", - height: "28px", - ":hover": { - color: vars.color.success, - }, -}); - -export const cancelRequestButton = style({ - cursor: "pointer", - color: vars.color.body, - width: "28px", - height: "28px", - ":hover": { - color: vars.color.danger, - }, -}); - -export const friendCodeButton = style({ - color: vars.color.body, - cursor: "pointer", - display: "flex", - gap: `${SPACING_UNIT / 2}px`, - alignItems: "center", - transition: "all ease 0.2s", - ":hover": { - color: vars.color.muted, - }, -}); From b86746287f853668e5de34e53b9d8d5ec69f5cc8 Mon Sep 17 00:00:00 2001 From: Chubby Granny Chaser Date: Thu, 23 Jan 2025 14:03:28 +0000 Subject: [PATCH 27/33] chore: refactoring toast --- .eslintrc.cjs | 1 + .gitignore | 2 + .storybook/app.css.ts | 85 ++ .storybook/main.ts | 31 + .storybook/preview.ts | 22 + package.json | 14 +- .../update-user-preferences.ts | 7 + .../services/download/download-manager.ts | 9 +- src/renderer/src/app.tsx | 47 +- .../src/components/toast/toast.css.ts | 54 +- src/renderer/src/components/toast/toast.tsx | 79 +- src/stories/button.stories.tsx | 74 ++ src/stories/toast.stories.tsx | 115 ++ tsconfig.web.json | 4 +- yarn.lock | 1156 ++++++++++++++++- 15 files changed, 1602 insertions(+), 98 deletions(-) create mode 100644 .storybook/app.css.ts create mode 100644 .storybook/main.ts create mode 100644 .storybook/preview.ts create mode 100644 src/stories/button.stories.tsx create mode 100644 src/stories/toast.stories.tsx diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 6da066af..99f9d206 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -7,6 +7,7 @@ module.exports = { "plugin:jsx-a11y/recommended", "@electron-toolkit/eslint-config-ts/recommended", "plugin:prettier/recommended", + "plugin:storybook/recommended" ], rules: { "@typescript-eslint/explicit-function-return-type": "off", diff --git a/.gitignore b/.gitignore index 36e620fc..f9f32977 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,5 @@ aria2/ # Sentry Config File .env.sentry-build-plugin + +*storybook.log diff --git a/.storybook/app.css.ts b/.storybook/app.css.ts new file mode 100644 index 00000000..2fc9d074 --- /dev/null +++ b/.storybook/app.css.ts @@ -0,0 +1,85 @@ +import { createContainer, globalStyle } from "@vanilla-extract/css"; +import { vars } from "../src/renderer/src/theme.css"; + +export const appContainer = createContainer(); + +globalStyle("*", { + boxSizing: "border-box", +}); + +globalStyle("::-webkit-scrollbar", { + width: "9px", + backgroundColor: vars.color.darkBackground, +}); + +globalStyle("::-webkit-scrollbar-track", { + backgroundColor: "rgba(255, 255, 255, 0.03)", +}); + +globalStyle("::-webkit-scrollbar-thumb", { + backgroundColor: "rgba(255, 255, 255, 0.08)", + borderRadius: "24px", +}); + +globalStyle("::-webkit-scrollbar-thumb:hover", { + backgroundColor: "rgba(255, 255, 255, 0.16)", +}); + +globalStyle("html, body, #root, main", { + height: "100%", +}); + +globalStyle("body", { + userSelect: "none", + fontFamily: "Noto Sans, sans-serif", + fontSize: vars.size.body, + color: vars.color.body, + margin: "0", +}); + +globalStyle("button", { + padding: "0", + backgroundColor: "transparent", + border: "none", + fontFamily: "inherit", +}); + +globalStyle("h1, h2, h3, h4, h5, h6, p", { + margin: 0, +}); + +globalStyle("p", { + lineHeight: "20px", +}); + +globalStyle("#root, main", { + display: "flex", +}); + +globalStyle("#root", { + flexDirection: "column", +}); + +globalStyle( + "input::-webkit-outer-spin-button, input::-webkit-inner-spin-button", + { + WebkitAppearance: "none", + margin: "0", + } +); + +globalStyle("label", { + fontSize: vars.size.body, +}); + +globalStyle("input[type=number]", { + MozAppearance: "textfield", +}); + +globalStyle("img", { + WebkitUserDrag: "none", +} as Record); + +globalStyle("progress[value]", { + WebkitAppearance: "none", +}); diff --git a/.storybook/main.ts b/.storybook/main.ts new file mode 100644 index 00000000..09ee45fd --- /dev/null +++ b/.storybook/main.ts @@ -0,0 +1,31 @@ +import { resolve } from "path"; +import type { StorybookConfig } from "@storybook/react-vite"; +import { vanillaExtractPlugin } from "@vanilla-extract/vite-plugin"; + +const config: StorybookConfig = { + stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], + addons: [ + "@storybook/addon-onboarding", + "@storybook/addon-essentials", + "@chromatic-com/storybook", + "@storybook/addon-interactions", + ], + framework: { + name: "@storybook/react-vite", + options: {}, + }, + viteFinal: (config) => { + return { + ...config, + resolve: { + alias: { + "@renderer": resolve("src/renderer/src"), + "@locales": resolve("src/locales"), + "@shared": resolve("src/shared"), + }, + }, + plugins: [...config.plugins, vanillaExtractPlugin()], + }; + }, +}; +export default config; diff --git a/.storybook/preview.ts b/.storybook/preview.ts new file mode 100644 index 00000000..f451e2ee --- /dev/null +++ b/.storybook/preview.ts @@ -0,0 +1,22 @@ +import type { Preview } from "@storybook/react"; + +import "@fontsource/noto-sans/400.css"; +import "@fontsource/noto-sans/500.css"; +import "@fontsource/noto-sans/700.css"; + +import "react-loading-skeleton/dist/skeleton.css"; + +import "./app.css"; + +const preview: Preview = { + parameters: { + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + }, +}; + +export default preview; diff --git a/package.json b/package.json index f7fac4ca..a9e4aa10 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,9 @@ "build:mac": "electron-vite build && electron-builder --mac", "build:linux": "electron-vite build && electron-builder --linux", "prepare": "husky", - "knex:migrate:make": "knex --knexfile src/main/knexfile.ts migrate:make --esm" + "knex:migrate:make": "knex --knexfile src/main/knexfile.ts migrate:make --esm", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" }, "dependencies": { "@electron-toolkit/preload": "^3.0.0", @@ -82,11 +84,19 @@ }, "devDependencies": { "@aws-sdk/client-s3": "^3.705.0", + "@chromatic-com/storybook": "^3.2.4", "@commitlint/cli": "^19.6.0", "@commitlint/config-conventional": "^19.6.0", "@electron-toolkit/eslint-config-prettier": "^2.0.0", "@electron-toolkit/eslint-config-ts": "^2.0.0", "@electron-toolkit/tsconfig": "^1.0.1", + "@storybook/addon-essentials": "^8.5.1", + "@storybook/addon-interactions": "^8.5.1", + "@storybook/addon-onboarding": "^8.5.1", + "@storybook/blocks": "^8.5.1", + "@storybook/react": "^8.5.1", + "@storybook/react-vite": "^8.5.1", + "@storybook/test": "^8.5.1", "@swc/core": "^1.4.16", "@types/auto-launch": "^5.0.5", "@types/color": "^3.0.6", @@ -109,11 +119,13 @@ "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-react": "^7.37.2", "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-storybook": "^0.11.2", "husky": "^9.1.7", "prettier": "^3.4.2", "react": "^18.2.0", "react-dom": "^18.2.0", "sass-embedded": "^1.80.6", + "storybook": "^8.5.1", "ts-node": "^10.9.2", "typescript": "^5.3.3", "vite": "^5.0.12", diff --git a/src/main/events/user-preferences/update-user-preferences.ts b/src/main/events/user-preferences/update-user-preferences.ts index 6001a85c..433e7742 100644 --- a/src/main/events/user-preferences/update-user-preferences.ts +++ b/src/main/events/user-preferences/update-user-preferences.ts @@ -3,6 +3,7 @@ import { registerEvent } from "../register-event"; import type { UserPreferences } from "@types"; import i18next from "i18next"; import { db, levelKeys } from "@main/level"; +import { Crypto } from "@main/services"; const updateUserPreferences = async ( _event: Electron.IpcMainInvokeEvent, @@ -21,6 +22,12 @@ const updateUserPreferences = async ( i18next.changeLanguage(preferences.language); } + if (preferences.realDebridApiToken) { + preferences.realDebridApiToken = Crypto.encrypt( + preferences.realDebridApiToken + ); + } + await db.put( levelKeys.userPreferences, { diff --git a/src/main/services/download/download-manager.ts b/src/main/services/download/download-manager.ts index cb2526b6..0b7a621b 100644 --- a/src/main/services/download/download-manager.ts +++ b/src/main/services/download/download-manager.ts @@ -25,17 +25,20 @@ export class DownloadManager { ) { PythonRPC.spawn( download?.status === "active" - ? await this.getDownloadPayload(download).catch(() => undefined) + ? await this.getDownloadPayload(download).catch((err) => { + logger.error("Error getting download payload", err); + return undefined; + }) : undefined, downloadsToSeed?.map((download) => ({ - game_id: `${download.shop}-${download.objectId}`, + game_id: levelKeys.game(download.shop, download.objectId), url: download.uri, save_path: download.downloadPath, })) ); if (download) { - this.downloadingGameId = `${download.shop}-${download.objectId}`; + this.downloadingGameId = levelKeys.game(download.shop, download.objectId); } } diff --git a/src/renderer/src/app.tsx b/src/renderer/src/app.tsx index b03fb540..ac6c2293 100644 --- a/src/renderer/src/app.tsx +++ b/src/renderer/src/app.tsx @@ -29,6 +29,7 @@ import { downloadSourcesWorker } from "./workers"; import { downloadSourcesTable } from "./dexie"; import { useSubscription } from "./hooks/use-subscription"; import { HydraCloudModal } from "./pages/shared-modals/hydra-cloud/hydra-cloud-modal"; +import { SPACING_UNIT } from "./theme.css"; export interface AppProps { children: React.ReactNode; @@ -212,22 +213,22 @@ export function App() { const id = crypto.randomUUID(); const channel = new BroadcastChannel(`download_sources:sync:${id}`); - channel.onmessage = (event: MessageEvent) => { + channel.onmessage = async (event: MessageEvent) => { const newRepacksCount = event.data; window.electron.publishNewRepacksNotification(newRepacksCount); updateRepacks(); - downloadSourcesTable.toArray().then((downloadSources) => { - downloadSources - .filter((source) => !source.fingerprint) - .forEach((downloadSource) => { - window.electron - .putDownloadSource(downloadSource.objectIds) - .then(({ fingerprint }) => { - downloadSourcesTable.update(downloadSource.id, { fingerprint }); - }); - }); - }); + const downloadSources = await downloadSourcesTable.toArray(); + + downloadSources + .filter((source) => !source.fingerprint) + .forEach(async (downloadSource) => { + const { fingerprint } = await window.electron.putDownloadSource( + downloadSource.objectIds + ); + + downloadSourcesTable.update(downloadSource.id, { fingerprint }); + }); }; downloadSourcesWorker.postMessage(["SYNC_DOWNLOAD_SOURCES", id]); @@ -250,12 +251,22 @@ export function App() {
                            )} - +
                            + +
                            void; } const INITIAL_PROGRESS = 100; -export function Toast({ visible, message, type, onClose }: ToastProps) { +export function Toast({ + visible, + message, + type, + duration = 5000, + onClose, +}: Readonly) { const [isClosing, setIsClosing] = useState(false); const [progress, setProgress] = useState(INITIAL_PROGRESS); @@ -31,7 +38,7 @@ export function Toast({ visible, message, type, onClose }: ToastProps) { closingAnimation.current = requestAnimationFrame( function animateClosing(time) { - if (time - zero <= 200) { + if (time - zero <= 150) { closingAnimation.current = requestAnimationFrame(animateClosing); } else { onClose(); @@ -43,17 +50,13 @@ export function Toast({ visible, message, type, onClose }: ToastProps) { useEffect(() => { if (visible) { const zero = performance.now(); - progressAnimation.current = requestAnimationFrame( function animateProgress(time) { const elapsed = time - zero; - - const progress = Math.min(elapsed / 2500, 1); + const progress = Math.min(elapsed / duration, 1); const currentValue = INITIAL_PROGRESS + (0 - INITIAL_PROGRESS) * progress; - setProgress(currentValue); - if (progress < 1) { progressAnimation.current = requestAnimationFrame(animateProgress); } else { @@ -70,34 +73,56 @@ export function Toast({ visible, message, type, onClose }: ToastProps) { setIsClosing(false); }; } - return () => {}; - }, [startAnimateClosing, visible]); + }, [startAnimateClosing, duration, visible]); if (!visible) return null; return (
                            -
                            - {type === "success" && ( - - )} - - {type === "error" && } - - {type === "warning" && } - {message} -
                            - - +
                            + {type === "success" && ( + + )} + + {type === "error" && ( + + )} + + {type === "warning" && } + + {message} + + +
                            + +

                            + This is a really really long message that should wrap to the next + line +

                            +
                            diff --git a/src/stories/button.stories.tsx b/src/stories/button.stories.tsx new file mode 100644 index 00000000..aa3d7004 --- /dev/null +++ b/src/stories/button.stories.tsx @@ -0,0 +1,74 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { Button } from "@renderer/components"; + +const meta = { + title: "Components/Button", + component: Button, + parameters: { + layout: "centered", + }, + tags: ["autodocs"], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +// Primary button (default) +export const Primary: Story = { + args: { + children: "Primary Button", + theme: "primary", + }, +}; + +// Outline variant +export const Outline: Story = { + args: { + children: "Outline Button", + theme: "outline", + }, +}; + +// Dark variant +export const Dark: Story = { + args: { + children: "Dark Button", + theme: "dark", + }, +}; + +// Danger variant +export const Danger: Story = { + args: { + children: "Danger Button", + theme: "danger", + }, +}; + +// Disabled state +export const Disabled: Story = { + args: { + children: "Disabled Button", + disabled: true, + }, +}; + +// Button with icon example +export const WithIcon: Story = { + args: { + children: ( + <> + 🚀 + Button with Icon + + ), + }, +}; + +// Different sizes example using className +export const CustomClassName: Story = { + args: { + children: "Custom Class Button", + className: "custom-class", + }, +}; diff --git a/src/stories/toast.stories.tsx b/src/stories/toast.stories.tsx new file mode 100644 index 00000000..3f0efe4f --- /dev/null +++ b/src/stories/toast.stories.tsx @@ -0,0 +1,115 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { Toast } from "@renderer/components"; +import { useState } from "react"; + +const meta = { + title: "Components/Toast", + component: Toast, + parameters: { + layout: "centered", + }, + tags: ["autodocs"], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +// Base stories for each variant +export const Success: Story = { + args: { + visible: true, + message: "Operation completed successfully", + type: "success", + onClose: () => {}, + }, +}; + +export const Error: Story = { + args: { + visible: true, + message: "An error occurred", + type: "error", + onClose: () => {}, + }, +}; + +export const Warning: Story = { + args: { + visible: true, + message: "Please review before proceeding", + type: "warning", + onClose: () => {}, + }, +}; + +// Interactive story with toggle functionality +const InteractiveToastTemplate = () => { + const [visible, setVisible] = useState(true); + + return ( +
                            + + +
                            + setVisible(false)} + /> +
                            +
                            + ); +}; + +export const Interactive: Story = { + render: () => , +}; + +// Long message example +export const LongMessage: Story = { + args: { + visible: true, + message: + "This is a very long message that demonstrates how the toast component handles text wrapping and content overflow in cases where the message is extensive", + type: "success", + onClose: () => {}, + }, +}; + +// Story with auto-close behavior +const AutoCloseToastTemplate = () => { + const [visible, setVisible] = useState(true); + + return ( +
                            + + setVisible(false)} + /> +
                            + ); +}; + +export const AutoClose: Story = { + render: () => , +}; diff --git a/tsconfig.web.json b/tsconfig.web.json index ca29bd89..6dc0c4ab 100644 --- a/tsconfig.web.json +++ b/tsconfig.web.json @@ -6,7 +6,9 @@ "src/renderer/src/**/*.tsx", "src/preload/*.d.ts", "src/locales/index.ts", - "src/shared/**/*" + "src/shared/**/*", + "src/stories/**/*", + ".storybook/**/*" ], "compilerOptions": { "composite": true, diff --git a/yarn.lock b/yarn.lock index 3a4656b4..000c2a11 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,6 +7,11 @@ resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz" integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A== +"@adobe/css-tools@^4.4.0": + version "4.4.1" + resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.1.tgz#2447a230bfe072c1659e6815129c03cf170710e3" + integrity sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ== + "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" @@ -625,15 +630,7 @@ "@babel/highlight" "^7.24.2" picocolors "^1.0.0" -"@babel/code-frame@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== - dependencies: - "@babel/highlight" "^7.24.7" - picocolors "^1.0.0" - -"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== @@ -642,6 +639,14 @@ js-tokens "^4.0.0" picocolors "^1.0.0" +"@babel/code-frame@^7.24.7": + version "7.24.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" + integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== + dependencies: + "@babel/highlight" "^7.24.7" + picocolors "^1.0.0" + "@babel/compat-data@^7.23.5": version "7.24.4" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz" @@ -657,7 +662,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== -"@babel/core@^7.18.5": +"@babel/core@^7.18.5", "@babel/core@^7.18.9": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== @@ -761,6 +766,17 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" +"@babel/generator@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.5.tgz#e44d4ab3176bbcaf78a5725da5f1dc28802a9458" + integrity sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw== + dependencies: + "@babel/parser" "^7.26.5" + "@babel/types" "^7.26.5" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + "@babel/helper-compilation-targets@^7.23.6": version "7.23.6" resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz" @@ -1047,6 +1063,13 @@ dependencies: "@babel/types" "^7.26.3" +"@babel/parser@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.5.tgz#6fec9aebddef25ca57a935c86dbb915ae2da3e1f" + integrity sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw== + dependencies: + "@babel/types" "^7.26.5" + "@babel/plugin-syntax-typescript@^7.23.3": version "7.24.1" resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz" @@ -1082,7 +1105,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7": +"@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== @@ -1125,6 +1148,19 @@ "@babel/parser" "^7.25.9" "@babel/types" "^7.25.9" +"@babel/traverse@^7.18.9": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.5.tgz#6d0be3e772ff786456c1a37538208286f6e79021" + integrity sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.5" + "@babel/parser" "^7.26.5" + "@babel/template" "^7.25.9" + "@babel/types" "^7.26.5" + debug "^4.3.1" + globals "^11.1.0" + "@babel/traverse@^7.24.5": version "7.24.5" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz" @@ -1192,6 +1228,14 @@ "@babel/helper-validator-identifier" "^7.24.5" to-fast-properties "^2.0.0" +"@babel/types@^7.18.9", "@babel/types@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.5.tgz#7a1e1c01d28e26d1fe7f8ec9567b3b92b9d07747" + integrity sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg== + dependencies: + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/types@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2" @@ -1223,6 +1267,17 @@ resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-2.2.2.tgz#1a6d89603fb215dc4d4178052d05b30b83c75402" integrity sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A== +"@chromatic-com/storybook@^3.2.4": + version "3.2.4" + resolved "https://registry.yarnpkg.com/@chromatic-com/storybook/-/storybook-3.2.4.tgz#8cb44d9475be18675498b17a6c6ad479872a35f1" + integrity sha512-5/bOOYxfwZ2BktXeqcCpOVAoR6UCoeART5t9FVy22hoo8F291zOuX4y3SDgm10B1GVU/ZTtJWPT2X9wZFlxYLg== + dependencies: + chromatic "^11.15.0" + filesize "^10.0.12" + jsonfile "^6.1.0" + react-confetti "^6.1.0" + strip-ansi "^7.1.0" + "@commitlint/cli@^19.6.0": version "19.6.0" resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.6.0.tgz#98e7fc8501cc38b6eef4b7f61e19b15f3c53700e" @@ -1518,6 +1573,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== +"@esbuild/aix-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" + integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== + "@esbuild/android-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" @@ -1528,6 +1588,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== +"@esbuild/android-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" + integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== + "@esbuild/android-arm@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" @@ -1538,6 +1603,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== +"@esbuild/android-arm@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" + integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== + "@esbuild/android-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" @@ -1548,6 +1618,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== +"@esbuild/android-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" + integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== + "@esbuild/darwin-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" @@ -1558,6 +1633,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== +"@esbuild/darwin-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" + integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== + "@esbuild/darwin-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" @@ -1568,6 +1648,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== +"@esbuild/darwin-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" + integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== + "@esbuild/freebsd-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" @@ -1578,6 +1663,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== +"@esbuild/freebsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" + integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== + "@esbuild/freebsd-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" @@ -1588,6 +1678,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== +"@esbuild/freebsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" + integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== + "@esbuild/linux-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" @@ -1598,6 +1693,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== +"@esbuild/linux-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" + integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== + "@esbuild/linux-arm@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" @@ -1608,6 +1708,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== +"@esbuild/linux-arm@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" + integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== + "@esbuild/linux-ia32@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" @@ -1618,6 +1723,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== +"@esbuild/linux-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" + integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== + "@esbuild/linux-loong64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" @@ -1628,6 +1738,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== +"@esbuild/linux-loong64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" + integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== + "@esbuild/linux-mips64el@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" @@ -1638,6 +1753,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== +"@esbuild/linux-mips64el@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" + integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== + "@esbuild/linux-ppc64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" @@ -1648,6 +1768,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== +"@esbuild/linux-ppc64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" + integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== + "@esbuild/linux-riscv64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" @@ -1658,6 +1783,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== +"@esbuild/linux-riscv64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" + integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== + "@esbuild/linux-s390x@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" @@ -1668,6 +1798,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== +"@esbuild/linux-s390x@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" + integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== + "@esbuild/linux-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" @@ -1678,6 +1813,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== +"@esbuild/linux-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" + integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== + +"@esbuild/netbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" + integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== + "@esbuild/netbsd-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" @@ -1688,6 +1833,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== +"@esbuild/netbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" + integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== + +"@esbuild/openbsd-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" + integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== + "@esbuild/openbsd-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" @@ -1698,6 +1853,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== +"@esbuild/openbsd-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" + integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== + "@esbuild/sunos-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" @@ -1708,6 +1868,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== +"@esbuild/sunos-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" + integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== + "@esbuild/win32-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" @@ -1718,6 +1883,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== +"@esbuild/win32-arm64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" + integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== + "@esbuild/win32-ia32@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" @@ -1728,6 +1898,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== +"@esbuild/win32-ia32@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" + integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== + "@esbuild/win32-x64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz" @@ -1738,6 +1913,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== +"@esbuild/win32-x64@0.24.2": + version "0.24.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" + integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== + "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" @@ -1855,6 +2035,14 @@ dependencies: minipass "^7.0.4" +"@joshwooding/vite-plugin-react-docgen-typescript@0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.4.2.tgz#c2591d2d7b02160341672d6bf3cc248dd60f2530" + integrity sha512-feQ+ntr+8hbVudnsTUapiMN9q8T90XA1d5jn9QzY09sNoj4iD9wi0PY1vsBFTda4ZjEaxRK9S81oarR2nj7TFQ== + dependencies: + magic-string "^0.27.0" + react-docgen-typescript "^2.2.2" + "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" @@ -1879,7 +2067,7 @@ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/sourcemap-codec@^1.4.15", "@jridgewell/sourcemap-codec@^1.5.0": +"@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.15", "@jridgewell/sourcemap-codec@^1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== @@ -1917,6 +2105,13 @@ lodash "^4.17.15" tmp-promise "^3.0.2" +"@mdx-js/react@^3.0.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.1.0.tgz#c4522e335b3897b9a845db1dbdd2f966ae8fb0ed" + integrity sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ== + dependencies: + "@types/mdx" "^2.0.0" + "@napi-rs/nice-android-arm-eabi@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz#9a0cba12706ff56500df127d6f4caf28ddb94936" @@ -2301,6 +2496,15 @@ resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.19.2.tgz#0c896535473291cb41f152c180bedd5680a3b273" integrity sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA== +"@rollup/pluginutils@^5.0.2": + version "5.1.4" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz#bb94f1f9eaaac944da237767cdfee6c5b2262d4a" + integrity sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^4.0.2" + "@rollup/pluginutils@^5.0.5": version "5.1.0" resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz" @@ -3026,6 +3230,255 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" +"@storybook/addon-actions@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-8.5.1.tgz#9a8bf4c5bf4801310a5e299dd21ad69494373b7e" + integrity sha512-oBBSpOJ6/rCdbdU1JxGCLernaCxALLWDIeZk6tLoQbtbsx/czD1sodqjcujjKwbQwNyZTf8xR8zsCSzG06dWDw== + dependencies: + "@storybook/global" "^5.0.0" + "@types/uuid" "^9.0.1" + dequal "^2.0.2" + polished "^4.2.2" + uuid "^9.0.0" + +"@storybook/addon-backgrounds@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-8.5.1.tgz#07087aa07e22ae864737842e72f442a820833afd" + integrity sha512-4NFRFblPbRP3D4o4sSbJ1x9SMncP4+SHdSqKIovTjb+zOhqYPFYWMTinzEndUnBSDGREldHUvHjROuxrD/0qzA== + dependencies: + "@storybook/global" "^5.0.0" + memoizerific "^1.11.3" + ts-dedent "^2.0.0" + +"@storybook/addon-controls@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-8.5.1.tgz#21d9372c08c16c026a34abb35b87a9dcf5aafa7f" + integrity sha512-RA/SPXW1chfsWaV8Lv/aXJNZJ8hasDEXQ1C5xRCt+T8DFvPqRZGgUfIpsiZ80AKp5RzufT9KL+39piPMljhKXA== + dependencies: + "@storybook/global" "^5.0.0" + dequal "^2.0.2" + ts-dedent "^2.0.0" + +"@storybook/addon-docs@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-8.5.1.tgz#78b43c9fdb8d5daef6ea8008e687f17156d2f3d0" + integrity sha512-XhELkuNFOa8q2rF/AXTwnKZth7lCFqkfR5VuEAQ+g9hv2p6I/VGlTddylzjdaZKhiy4p8O9DrzGdLFj+oxOpMw== + dependencies: + "@mdx-js/react" "^3.0.0" + "@storybook/blocks" "8.5.1" + "@storybook/csf-plugin" "8.5.1" + "@storybook/react-dom-shim" "8.5.1" + react "^16.8.0 || ^17.0.0 || ^18.0.0" + react-dom "^16.8.0 || ^17.0.0 || ^18.0.0" + ts-dedent "^2.0.0" + +"@storybook/addon-essentials@^8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-8.5.1.tgz#b465183e6a805f6f0d456937b97d67ee340b7401" + integrity sha512-jPGrZ7j+RWistrsgpvjUBvLpWRuOeDNdV014ggHBxDMNX9GWb1GSubWW2Tlo7BfOuUvjICVAjI4KMp/IC/jwZg== + dependencies: + "@storybook/addon-actions" "8.5.1" + "@storybook/addon-backgrounds" "8.5.1" + "@storybook/addon-controls" "8.5.1" + "@storybook/addon-docs" "8.5.1" + "@storybook/addon-highlight" "8.5.1" + "@storybook/addon-measure" "8.5.1" + "@storybook/addon-outline" "8.5.1" + "@storybook/addon-toolbars" "8.5.1" + "@storybook/addon-viewport" "8.5.1" + ts-dedent "^2.0.0" + +"@storybook/addon-highlight@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-8.5.1.tgz#859c7dc0c388eb3b95ff57931c2d2b14f65d854f" + integrity sha512-nhwx39DuWy2OFP+AQg8EzYP3giM+rQ0OIdAXgAjDVdKk2sGj43gwNYS9wQzXeczEUiSEjQk0JJwBqjF+GtSrag== + dependencies: + "@storybook/global" "^5.0.0" + +"@storybook/addon-interactions@^8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-interactions/-/addon-interactions-8.5.1.tgz#0e2b8a7c52daebae2586e02834c72623b0532816" + integrity sha512-tXCKBIWjwhVuSRRoEiPx+u0D4oqMkctTzysfoCw2sqftIT8t2yHyviX29s87z2NH+DNqzBGGDG1UUaLe5qq3Fw== + dependencies: + "@storybook/global" "^5.0.0" + "@storybook/instrumenter" "8.5.1" + "@storybook/test" "8.5.1" + polished "^4.2.2" + ts-dedent "^2.2.0" + +"@storybook/addon-measure@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-8.5.1.tgz#b42d5c53147dd439af341692776b23b2be269bd1" + integrity sha512-Goc/IRh0aYT7zfDP9fgwL+DFX52DylanoBf0uGf59IQ7sEJHbwWm0OpiSEDo+NbtytbG83UOQamT7aQxhQo7Zw== + dependencies: + "@storybook/global" "^5.0.0" + tiny-invariant "^1.3.1" + +"@storybook/addon-onboarding@^8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-onboarding/-/addon-onboarding-8.5.1.tgz#239019adb8660a203f546888f3e3563053fccdcd" + integrity sha512-ooa59cAz9sJHFbStIL3/kpBpLM9xZGQa2zmSn8TMCMUq1TM/rJARYD4SNj4BeBsLH24wFHI9SXf15Cln8EhASg== + +"@storybook/addon-outline@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-8.5.1.tgz#3aea68aab5a7fb972d8911191efa95e3ac034298" + integrity sha512-LM3wG5bUgAAEgDS4MD1dw2VStduSYTMc/rNgaTExVVr7pPeuAgkfyIUriP3P0i7x5jweSb2aGzaTuy3PUHAWfg== + dependencies: + "@storybook/global" "^5.0.0" + ts-dedent "^2.0.0" + +"@storybook/addon-toolbars@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-8.5.1.tgz#b8bc1aabd934b205c11c4a6ed7e2db433fdbe215" + integrity sha512-01Odzujfq/g9u1ZTmH/X3I9cCnsNzG/wuyhzFr/T99jerx8QG/U45iYYph2Ytw6A5AtYyCnPYmsTsI+phjUvuA== + +"@storybook/addon-viewport@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-8.5.1.tgz#068d5c74b22de06cf47d0a0addb4acb2291caa73" + integrity sha512-kKCXZT3keUEQulv2tOzRSl/GdFA2JeFjHmks/n7qQLY0zDqdx/C7K9jUECcrOJiLclZwTJvHA3YXrglVJoa6Hw== + dependencies: + memoizerific "^1.11.3" + +"@storybook/blocks@8.5.1", "@storybook/blocks@^8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-8.5.1.tgz#9e274d605e57390483007a9ed8b6cb073a8889f6" + integrity sha512-xUjnOa9udmHhlBTZ+bmMHeU1M9a5OnvnX8urQ0TrNpSyHH7HoPd3xZC4fzz73nSJNMVHIYMZYsz2pj/WfeA/hg== + dependencies: + "@storybook/csf" "0.1.12" + "@storybook/icons" "^1.2.12" + ts-dedent "^2.0.0" + +"@storybook/builder-vite@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-8.5.1.tgz#222b72daee2225e800e3668bae26ebb81a759c47" + integrity sha512-m7nzMmXL8ySRDp3AWsd18xB/mRVFdGnCbXeC2HREQVsu1WFkvcHtksvF4x1BOeeL73eokD2/GzgpCjAS0xVvbw== + dependencies: + "@storybook/csf-plugin" "8.5.1" + browser-assert "^1.2.1" + ts-dedent "^2.0.0" + +"@storybook/components@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-8.5.1.tgz#f2ac82c5c8e3350b736bad8ccc99c1b4e4fccb78" + integrity sha512-dgZfIIRdI7yA9bYb1rhWzbvU4AnbndAeNhLouxHJkUR5r2Ycp9mJba5UNynN1slgDOxB+VMnq1fWKyfWQrBqnw== + +"@storybook/core@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-8.5.1.tgz#cc2bfcf03b9b9ac2dd5c44ac4853ac94c86c23ac" + integrity sha512-4zxjclENpZYuNY1fZJE4a7hd8Ho/SiOSN2B57fsIi1qCpKax3JU3J59ZcAWT0iidy5qgM2qMcWbrl0Bl/tWamA== + dependencies: + "@storybook/csf" "0.1.12" + better-opn "^3.0.2" + browser-assert "^1.2.1" + esbuild "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0" + esbuild-register "^3.5.0" + jsdoc-type-pratt-parser "^4.0.0" + process "^0.11.10" + recast "^0.23.5" + semver "^7.6.2" + util "^0.12.5" + ws "^8.2.3" + +"@storybook/csf-plugin@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-8.5.1.tgz#626efa6db0009145e6ffa6019b34d8d48b17041c" + integrity sha512-8GFrQgJ+/hzWAj9o4XK8m7UFPLxf0w3RwX0ZMPeb6zDhq/1BUE97AjKFb4Oexkh4I67Pycv4gRUOY9+tXF/1DA== + dependencies: + unplugin "^1.3.1" + +"@storybook/csf@0.1.12": + version "0.1.12" + resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.12.tgz#1dcfa0f398a69b834c563884b5f747db3d5a81df" + integrity sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw== + dependencies: + type-fest "^2.19.0" + +"@storybook/csf@^0.1.11": + version "0.1.13" + resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.13.tgz#c8a9bea2ae518a3d9700546748fa30a8b07f7f80" + integrity sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q== + dependencies: + type-fest "^2.19.0" + +"@storybook/global@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed" + integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== + +"@storybook/icons@^1.2.12": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@storybook/icons/-/icons-1.3.1.tgz#38824f388a3313f687ee80439cd8aa8ab9a02f41" + integrity sha512-tgiD2v9v/4sjGOliemoP/8bUe4+ZFpehcqdCVQcPiGZfV0kSBv34Ge+MafeKqM7SLwvGesrbOEOakaogSqGxiQ== + +"@storybook/instrumenter@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/instrumenter/-/instrumenter-8.5.1.tgz#cdd9df7f1beaf3c1878f1d86d0228a4969a8b5a8" + integrity sha512-wMAhsIzwOh/xXKANAP3IbtXxRWFAZtpRisB0sy8WVTPS3a1L1cA6X+U80Ex/omek6L0FZwKZSKmmfkDeZkYnCQ== + dependencies: + "@storybook/global" "^5.0.0" + "@vitest/utils" "^2.1.1" + +"@storybook/manager-api@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-8.5.1.tgz#5e574ec19e6fcb8709337716628b44057557e923" + integrity sha512-Oj9kPYbp/82LRQ+rsc0ZH0fkzeiT2U1kvubmNiRjtopQHCP3UTVnvWIXC9zSRFKmS+NaAdd0JYsIBvE8fjnoqQ== + +"@storybook/preview-api@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-8.5.1.tgz#d21b6a72adc3692ec3128aef4b3ad8cee749ac28" + integrity sha512-fLR7nvAbjHVLazDA6CLy9O/bpBzKDKqxyBp6SybTBPYa76IzsX8ITSMMt1YcP6rOGhVgcKNA9iBNxRddjLIV0Q== + +"@storybook/react-dom-shim@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-8.5.1.tgz#57dbf09c616ed655289b5050c171a1b02f7ae028" + integrity sha512-peDiT6A1zyODKd7tVQIiFNU42Iolca67h3kkOQPb7nm/Czf2yIa/BHw+yiNDZx82eCIEvBy1Xf7lnjH8PD61xA== + +"@storybook/react-vite@^8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-8.5.1.tgz#23ff362ebe7bf7d985a395a7950cd953327116bc" + integrity sha512-ccsPJXjR7WMS/t7R5nJpPtqRzJxjsllqVMNGk9xxoLasWDf3vOLohgyCgt63ws8iOMh26lqZsFyPyWFcpKW/hQ== + dependencies: + "@joshwooding/vite-plugin-react-docgen-typescript" "0.4.2" + "@rollup/pluginutils" "^5.0.2" + "@storybook/builder-vite" "8.5.1" + "@storybook/react" "8.5.1" + find-up "^5.0.0" + magic-string "^0.30.0" + react-docgen "^7.0.0" + resolve "^1.22.8" + tsconfig-paths "^4.2.0" + +"@storybook/react@8.5.1", "@storybook/react@^8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-8.5.1.tgz#f5b90f0e82f8936a64b8b01ee4034586e398747a" + integrity sha512-wKhR9SZUbpYUxRDAYUHH4fZHVxiNG43PxT1uvLfX/i7TPMw+wW+G3Q2yrgms1oHmqqRCvlnGHwT5/t9FFxN31w== + dependencies: + "@storybook/components" "8.5.1" + "@storybook/global" "^5.0.0" + "@storybook/manager-api" "8.5.1" + "@storybook/preview-api" "8.5.1" + "@storybook/react-dom-shim" "8.5.1" + "@storybook/theming" "8.5.1" + +"@storybook/test@8.5.1", "@storybook/test@^8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/test/-/test-8.5.1.tgz#f795df493345347e2d7ad46aa28effedc7f1da8e" + integrity sha512-V0sEXqL5kS0YKugCqWgmCpNODdlCCiVlPqm3i+E2+G97DR980BwXf8J6VPscQDRS9ZG39BrM83Aau6Anxrt1Tg== + dependencies: + "@storybook/csf" "0.1.12" + "@storybook/global" "^5.0.0" + "@storybook/instrumenter" "8.5.1" + "@testing-library/dom" "10.4.0" + "@testing-library/jest-dom" "6.5.0" + "@testing-library/user-event" "14.5.2" + "@vitest/expect" "2.0.5" + "@vitest/spy" "2.0.5" + +"@storybook/theming@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.5.1.tgz#40906550f82a05cab280ccd7afe8b1d1a4cf320f" + integrity sha512-sg61vY1gM8w42CIi28vo//6E1gHgHLNBNaRhkfvLFpu9PuhAcVWLwBDZq0BoKmDMxRxbSPV2gvIKeXdOtbSCJw== + "@svgr/babel-plugin-add-jsx-attribute@8.0.0": version "8.0.0" resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz" @@ -3197,6 +3650,38 @@ dependencies: defer-to-connect "^2.0.0" +"@testing-library/dom@10.4.0": + version "10.4.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.0.tgz#82a9d9462f11d240ecadbf406607c6ceeeff43a8" + integrity sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/runtime" "^7.12.5" + "@types/aria-query" "^5.0.1" + aria-query "5.3.0" + chalk "^4.1.0" + dom-accessibility-api "^0.5.9" + lz-string "^1.5.0" + pretty-format "^27.0.2" + +"@testing-library/jest-dom@6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz#50484da3f80fb222a853479f618a9ce5c47bfe54" + integrity sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA== + dependencies: + "@adobe/css-tools" "^4.4.0" + aria-query "^5.0.0" + chalk "^3.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.6.3" + lodash "^4.17.21" + redent "^3.0.0" + +"@testing-library/user-event@14.5.2": + version "14.5.2" + resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" + integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== + "@thaunknown/thirty-two@^1.0.3": version "1.0.3" resolved "https://registry.npmjs.org/@thaunknown/thirty-two/-/thirty-two-1.0.3.tgz" @@ -3234,12 +3719,17 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@types/aria-query@^5.0.1": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" + integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== + "@types/auto-launch@^5.0.5": version "5.0.5" resolved "https://registry.npmjs.org/@types/auto-launch/-/auto-launch-5.0.5.tgz" integrity sha512-/nGvQZSzM/pvCMCh4Gt2kIeiUmOP/cKGJbjlInI+A+5MoV/7XmT56DJ6EU8bqc3+ItxEe4UC2GVspmPzcCc8cg== -"@types/babel__core@^7.20.5": +"@types/babel__core@^7.18.0", "@types/babel__core@^7.20.5": version "7.20.5" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== @@ -3272,6 +3762,13 @@ dependencies: "@babel/types" "^7.20.7" +"@types/babel__traverse@^7.18.0": + version "7.20.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" + integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + dependencies: + "@babel/types" "^7.20.7" + "@types/cacheable-request@^6.0.1": version "6.0.3" resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" @@ -3315,6 +3812,11 @@ dependencies: "@types/ms" "*" +"@types/doctrine@^0.0.9": + version "0.0.9" + resolved "https://registry.yarnpkg.com/@types/doctrine/-/doctrine-0.0.9.tgz#d86a5f452a15e3e3113b99e39616a9baa0f9863f" + integrity sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA== + "@types/estree@1.0.6": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" @@ -3392,6 +3894,11 @@ dependencies: "@types/node" "*" +"@types/mdx@^2.0.0": + version "2.0.13" + resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd" + integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== + "@types/minimatch@*": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" @@ -3460,6 +3967,11 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/resolve@^1.20.2": + version "1.20.6" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.6.tgz#e6e60dad29c2c8c206c026e6dd8d6d1bdda850b8" + integrity sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ== + "@types/responselike@^1.0.0": version "1.0.3" resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz" @@ -3489,6 +4001,11 @@ resolved "https://registry.npmjs.org/@types/user-agents/-/user-agents-1.0.4.tgz" integrity sha512-AjeFc4oX5WPPflgKfRWWJfkEk7Wu82fnj1rROPsiqFt6yElpdGFg8Srtm/4PU4rA9UiDUZlruGPgcwTMQlwq4w== +"@types/uuid@^9.0.1": + version "9.0.8" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" + integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== + "@types/verror@^1.10.3": version "1.10.10" resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.10.tgz#d5a4b56abac169bfbc8b23d291363a682e6fa087" @@ -3535,6 +4052,14 @@ "@typescript-eslint/types" "7.18.0" "@typescript-eslint/visitor-keys" "7.18.0" +"@typescript-eslint/scope-manager@8.21.0": + version "8.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.21.0.tgz#d08d94e2a34b4ccdcc975543c25bb62917437500" + integrity sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA== + dependencies: + "@typescript-eslint/types" "8.21.0" + "@typescript-eslint/visitor-keys" "8.21.0" + "@typescript-eslint/type-utils@7.18.0": version "7.18.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" @@ -3550,6 +4075,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== +"@typescript-eslint/types@8.21.0": + version "8.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.21.0.tgz#58f30aec8db8212fd886835dc5969cdf47cb29f5" + integrity sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A== + "@typescript-eslint/typescript-estree@7.18.0": version "7.18.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" @@ -3564,6 +4094,20 @@ semver "^7.6.0" ts-api-utils "^1.3.0" +"@typescript-eslint/typescript-estree@8.21.0": + version "8.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.21.0.tgz#5ce71acdbed3b97b959f6168afba5a03c88f69a9" + integrity sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg== + dependencies: + "@typescript-eslint/types" "8.21.0" + "@typescript-eslint/visitor-keys" "8.21.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.0.0" + "@typescript-eslint/utils@7.18.0": version "7.18.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" @@ -3574,6 +4118,16 @@ "@typescript-eslint/types" "7.18.0" "@typescript-eslint/typescript-estree" "7.18.0" +"@typescript-eslint/utils@^8.8.1": + version "8.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.21.0.tgz#bc4874fbc30feb3298b926e3b03d94570b3999c5" + integrity sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "8.21.0" + "@typescript-eslint/types" "8.21.0" + "@typescript-eslint/typescript-estree" "8.21.0" + "@typescript-eslint/visitor-keys@7.18.0": version "7.18.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" @@ -3582,6 +4136,14 @@ "@typescript-eslint/types" "7.18.0" eslint-visitor-keys "^3.4.3" +"@typescript-eslint/visitor-keys@8.21.0": + version "8.21.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.21.0.tgz#a89744c4cdc83b5c761eb5878befe6c33d1481b2" + integrity sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w== + dependencies: + "@typescript-eslint/types" "8.21.0" + eslint-visitor-keys "^4.2.0" + "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" @@ -3669,6 +4231,56 @@ "@types/babel__core" "^7.20.5" react-refresh "^0.14.0" +"@vitest/expect@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-2.0.5.tgz#f3745a6a2c18acbea4d39f5935e913f40d26fa86" + integrity sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA== + dependencies: + "@vitest/spy" "2.0.5" + "@vitest/utils" "2.0.5" + chai "^5.1.1" + tinyrainbow "^1.2.0" + +"@vitest/pretty-format@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.0.5.tgz#91d2e6d3a7235c742e1a6cc50e7786e2f2979b1e" + integrity sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ== + dependencies: + tinyrainbow "^1.2.0" + +"@vitest/pretty-format@2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.1.8.tgz#88f47726e5d0cf4ba873d50c135b02e4395e2bca" + integrity sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ== + dependencies: + tinyrainbow "^1.2.0" + +"@vitest/spy@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-2.0.5.tgz#590fc07df84a78b8e9dd976ec2090920084a2b9f" + integrity sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA== + dependencies: + tinyspy "^3.0.0" + +"@vitest/utils@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.0.5.tgz#6f8307a4b6bc6ceb9270007f73c67c915944e926" + integrity sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ== + dependencies: + "@vitest/pretty-format" "2.0.5" + estree-walker "^3.0.3" + loupe "^3.1.1" + tinyrainbow "^1.2.0" + +"@vitest/utils@^2.1.1": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.1.8.tgz#f8ef85525f3362ebd37fd25d268745108d6ae388" + integrity sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA== + dependencies: + "@vitest/pretty-format" "2.1.8" + loupe "^3.1.2" + tinyrainbow "^1.2.0" + "@xmldom/xmldom@^0.8.8": version "0.8.10" resolved "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz" @@ -3728,7 +4340,7 @@ acorn@^8.11.3, acorn@^8.9.0: resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== -acorn@^8.8.1: +acorn@^8.14.0, acorn@^8.8.1: version "8.14.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== @@ -3811,6 +4423,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + ansi-styles@^6.1.0: version "6.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" @@ -3902,7 +4519,14 @@ aria-hidden@^1.1.1: dependencies: tslib "^2.0.0" -aria-query@^5.3.2: +aria-query@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== + dependencies: + dequal "^2.0.3" + +aria-query@^5.0.0, aria-query@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== @@ -3999,11 +4623,23 @@ assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== +assertion-error@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" + integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== + ast-types-flow@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== +ast-types@^0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.16.1.tgz#7a9da1617c9081bc121faafe91711b4c8bb81da2" + integrity sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg== + dependencies: + tslib "^2.0.1" + astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -4093,6 +4729,13 @@ bep53-range@^2.0.0: resolved "https://registry.yarnpkg.com/bep53-range/-/bep53-range-2.0.0.tgz#a1770475661b4b814c4359e4b66f7cbd88de2b10" integrity sha512-sMm2sV5PRs0YOVk0LTKtjuIprVzxgTQUsrGX/7Yph2Rm4FO2Fqqtq7hNjsOB5xezM4v4+5rljCgK++UeQJZguA== +better-opn@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-3.0.2.tgz#f96f35deaaf8f34144a4102651babcf00d1d8817" + integrity sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ== + dependencies: + open "^8.0.4" + better-sqlite3@^11.7.0: version "11.7.0" resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.7.0.tgz#3eaa0f54f9e57d0a100d980e42320f8b9a4cd676" @@ -4166,6 +4809,11 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" +browser-assert@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/browser-assert/-/browser-assert-1.2.1.tgz#9aaa5a2a8c74685c2ae05bfe46efd606f068c200" + integrity sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ== + browserslist@^4.22.2, browserslist@^4.23.1: version "4.24.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.0.tgz#a1325fe4bc80b64fda169629fc01b3d6cecd38d4" @@ -4336,6 +4984,14 @@ call-bound@^1.0.2: call-bind "^1.0.8" get-intrinsic "^1.2.5" +call-bound@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" + integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== + dependencies: + call-bind-apply-helpers "^1.0.1" + get-intrinsic "^1.2.6" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -4356,6 +5012,17 @@ caniuse-lite@^1.0.30001688: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz#f2d15e3aaf8e18f76b2b8c1481abde063b8104c8" integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w== +chai@^5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/chai/-/chai-5.1.2.tgz#3afbc340b994ae3610ca519a6c70ace77ad4378d" + integrity sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw== + dependencies: + assertion-error "^2.0.1" + check-error "^2.1.1" + deep-eql "^5.0.1" + loupe "^3.1.0" + pathval "^2.0.0" + chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -4365,6 +5032,14 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -4378,6 +5053,11 @@ chalk@^5.3.0: resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== +check-error@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" + integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== + chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" @@ -4408,6 +5088,11 @@ chownr@^3.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== +chromatic@^11.15.0: + version "11.25.1" + resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-11.25.1.tgz#1ab40277f43451628e748030d80def40f5cd1f32" + integrity sha512-D0NdcGOSy84hqgNnSY7FM4TzB77RymRTowjm4hb1CV4wbk1djKTV4SJbbYVCzHFD+n/NOg/wtZ9Y7sjiRdy8dA== + chromium-pickle-js@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" @@ -4694,6 +5379,11 @@ css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -4797,6 +5487,11 @@ dedent@^1.5.1, dedent@^1.5.3: resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== +deep-eql@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" + integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -4838,6 +5533,11 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -4857,6 +5557,11 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== +dequal@^2.0.2, dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + detect-libc@^2.0.0, detect-libc@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" @@ -4947,6 +5652,16 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +dom-accessibility-api@^0.5.9: + version "0.5.16" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" + integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== + +dom-accessibility-api@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" + integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== + dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -4988,6 +5703,15 @@ dunder-proto@^1.0.0: es-errors "^1.3.0" gopd "^1.2.0" +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -5316,6 +6040,44 @@ es6-promise@^4.2.8: resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== +esbuild-register@^3.5.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.6.0.tgz#cf270cfa677baebbc0010ac024b823cbf723a36d" + integrity sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg== + dependencies: + debug "^4.3.4" + +"esbuild@^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0": + version "0.24.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d" + integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA== + optionalDependencies: + "@esbuild/aix-ppc64" "0.24.2" + "@esbuild/android-arm" "0.24.2" + "@esbuild/android-arm64" "0.24.2" + "@esbuild/android-x64" "0.24.2" + "@esbuild/darwin-arm64" "0.24.2" + "@esbuild/darwin-x64" "0.24.2" + "@esbuild/freebsd-arm64" "0.24.2" + "@esbuild/freebsd-x64" "0.24.2" + "@esbuild/linux-arm" "0.24.2" + "@esbuild/linux-arm64" "0.24.2" + "@esbuild/linux-ia32" "0.24.2" + "@esbuild/linux-loong64" "0.24.2" + "@esbuild/linux-mips64el" "0.24.2" + "@esbuild/linux-ppc64" "0.24.2" + "@esbuild/linux-riscv64" "0.24.2" + "@esbuild/linux-s390x" "0.24.2" + "@esbuild/linux-x64" "0.24.2" + "@esbuild/netbsd-arm64" "0.24.2" + "@esbuild/netbsd-x64" "0.24.2" + "@esbuild/openbsd-arm64" "0.24.2" + "@esbuild/openbsd-x64" "0.24.2" + "@esbuild/sunos-x64" "0.24.2" + "@esbuild/win32-arm64" "0.24.2" + "@esbuild/win32-ia32" "0.24.2" + "@esbuild/win32-x64" "0.24.2" + esbuild@^0.21.3, esbuild@^0.21.5: version "0.21.5" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" @@ -5452,6 +6214,15 @@ eslint-plugin-react@^7.37.2: string.prototype.matchall "^4.0.11" string.prototype.repeat "^1.0.0" +eslint-plugin-storybook@^0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-storybook/-/eslint-plugin-storybook-0.11.2.tgz#a46f8fa2b87d15f66251e832a10d5481fc73a028" + integrity sha512-0Z4DUklJrC+GHjCRXa7PYfPzWC15DaVnwaOYenpgXiCEijXPZkLKCms+rHhtoRcWccP7Z8DpOOaP1gc3P9oOwg== + dependencies: + "@storybook/csf" "^0.1.11" + "@typescript-eslint/utils" "^8.8.1" + ts-dedent "^2.2.0" + eslint-scope@^7.2.2: version "7.2.2" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" @@ -5465,6 +6236,11 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + eslint@^8.56.0: version "8.57.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" @@ -5523,6 +6299,11 @@ espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" +esprima@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + esquery@^1.4.2: version "1.6.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" @@ -5547,6 +6328,13 @@ estree-walker@^2.0.2: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== +estree-walker@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" + integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== + dependencies: + "@types/estree" "^1.0.0" + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -5612,6 +6400,17 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -5680,6 +6479,11 @@ filelist@^1.0.4: dependencies: minimatch "^5.0.1" +filesize@^10.0.12: + version "10.1.6" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-10.1.6.tgz#31194da825ac58689c0bce3948f33ce83aabd361" + integrity sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w== + fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -5894,6 +6698,14 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-proto@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stdin@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" @@ -6362,6 +7174,14 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" +is-arguments@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" @@ -6448,6 +7268,13 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.2" +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + is-data-view@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" @@ -6470,6 +7297,11 @@ is-date-object@^1.1.0: call-bound "^1.0.2" has-tostringtag "^1.0.2" +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -6494,6 +7326,16 @@ is-generator-function@^1.0.10: dependencies: has-tostringtag "^1.0.0" +is-generator-function@^1.0.7: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -6636,6 +7478,13 @@ is-typed-array@^1.1.13: dependencies: which-typed-array "^1.1.14" +is-typed-array@^1.1.3: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" @@ -6661,6 +7510,13 @@ is-weakset@^2.0.3: call-bind "^1.0.7" get-intrinsic "^1.2.4" +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -6739,6 +7595,11 @@ jsbn@1.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== +jsdoc-type-pratt-parser@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz#ff6b4a3f339c34a6c188cbf50a16087858d22113" + integrity sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg== + jsdom@^24.0.0: version "24.1.3" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-24.1.3.tgz#88e4a07cb9dd21067514a619e9f17b090a394a9f" @@ -6806,7 +7667,7 @@ json-stringify-safe@^5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^2.2.3: +json5@^2.2.2, json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -6818,7 +7679,7 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonfile@^6.0.1: +jsonfile@^6.0.1, jsonfile@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== @@ -7074,6 +7935,11 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +loupe@^3.1.0, loupe@^3.1.1, loupe@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.2.tgz#c86e0696804a02218f2206124c45d8b15291a240" + integrity sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg== + lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -7110,6 +7976,11 @@ lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== +lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== + magic-string@0.30.8: version "0.30.8" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613" @@ -7117,6 +7988,20 @@ magic-string@0.30.8: dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" +magic-string@^0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" + integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.4.13" + +magic-string@^0.30.0: + version "0.30.17" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + magic-string@^0.30.10: version "0.30.11" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.11.tgz#301a6f93b3e8c2cb13ac1a7a673492c0dfd12954" @@ -7160,6 +8045,11 @@ make-fetch-happen@^10.0.3: socks-proxy-agent "^7.0.0" ssri "^9.0.0" +map-or-similar@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" + integrity sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg== + matcher@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" @@ -7184,6 +8074,13 @@ media-query-parser@^2.0.2: dependencies: "@babel/runtime" "^7.12.5" +memoizerific@^1.11.3: + version "1.11.3" + resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" + integrity sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog== + dependencies: + map-or-similar "^1.5.0" + meow@^12.0.1: version "12.1.1" resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" @@ -7194,7 +8091,7 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4: +micromatch@^4.0.4, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -7234,6 +8131,11 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== +min-indent@^1.0.0, min-indent@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + minimatch@^10.0.0: version "10.0.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" @@ -7617,6 +8519,15 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +open@^8.0.4: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -7768,6 +8679,11 @@ pathe@^1.1.1, pathe@^1.1.2: resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== +pathval@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" + integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== + pe-library@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/pe-library/-/pe-library-0.4.1.tgz#e269be0340dcb13aa6949d743da7d658c3e2fbea" @@ -7798,6 +8714,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + piscina@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/piscina/-/piscina-4.7.0.tgz#68936fc77128db00541366531330138e366dc851" @@ -7823,6 +8744,13 @@ plist@^3.0.4, plist@^3.0.5, plist@^3.1.0: base64-js "^1.5.1" xmlbuilder "^15.1.1" +polished@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/polished/-/polished-4.3.1.tgz#5a00ae32715609f83d89f6f31d0f0261c6170548" + integrity sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA== + dependencies: + "@babel/runtime" "^7.17.8" + possible-typed-array-names@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" @@ -7872,6 +8800,20 @@ prettier@^3.4.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== +pretty-format@^27.0.2: + version "27.5.1" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" + integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== + dependencies: + ansi-regex "^5.0.1" + ansi-styles "^5.0.0" + react-is "^17.0.1" + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -7980,7 +8922,35 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@^18.2.0: +react-confetti@^6.1.0: + version "6.2.2" + resolved "https://registry.yarnpkg.com/react-confetti/-/react-confetti-6.2.2.tgz#b72888889b10b6707a91adca919dd35c653f4bb2" + integrity sha512-K+kTyOPgX+ZujMZ+Rmb7pZdHBvg+DzinG/w4Eh52WOB8/pfO38efnnrtEZNJmjTvLxc16RBYO+tPM68Fg8viBA== + dependencies: + tween-functions "^1.2.0" + +react-docgen-typescript@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz#4611055e569edc071204aadb20e1c93e1ab1659c" + integrity sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg== + +react-docgen@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-7.1.0.tgz#4b41e557dab939a5157be09ee532fd09c07d99fc" + integrity sha512-APPU8HB2uZnpl6Vt/+0AFoVYgSRtfiP6FLrZgPPTDmqSb2R4qZRbgd0A3VzIFxDt5e+Fozjx79WjLWnF69DK8g== + dependencies: + "@babel/core" "^7.18.9" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + "@types/babel__core" "^7.18.0" + "@types/babel__traverse" "^7.18.0" + "@types/doctrine" "^0.0.9" + "@types/resolve" "^1.20.2" + doctrine "^3.0.0" + resolve "^1.22.1" + strip-indent "^4.0.0" + +"react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", react-dom@^18.2.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== @@ -8006,6 +8976,11 @@ react-is@^16.13.1, react-is@^16.7.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-is@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== + react-is@^18.2.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" @@ -8072,7 +9047,7 @@ react-style-singleton@^2.2.1: invariant "^2.2.4" tslib "^2.0.0" -react@^18.2.0: +"react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18.2.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== @@ -8102,6 +9077,17 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +recast@^0.23.5: + version "0.23.9" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.9.tgz#587c5d3a77c2cfcb0c18ccce6da4361528c2587b" + integrity sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q== + dependencies: + ast-types "^0.16.1" + esprima "~4.0.0" + source-map "~0.6.1" + tiny-invariant "^1.3.3" + tslib "^2.0.1" + rechoir@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" @@ -8109,6 +9095,14 @@ rechoir@^0.8.0: dependencies: resolve "^1.20.0" +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + redux-thunk@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3" @@ -8219,6 +9213,15 @@ resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" +resolve@^1.22.1, resolve@^1.22.8: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + resolve@^2.0.0-next.5: version "2.0.0-next.5" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" @@ -8531,7 +9534,7 @@ semver@^6.2.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: +semver@^7.3.2, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -8692,7 +9695,7 @@ source-map-support@^0.5.19: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0: +source-map@^0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -8719,6 +9722,13 @@ stat-mode@^1.0.0: resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465" integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== +storybook@^8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.5.1.tgz#672513ccbf92776acb8ee42263cf08da7752bfe2" + integrity sha512-HuaAFA97j2w4i/1EHKj6X4iDiVzPrXzQpmTEE1tLD1QXzqrQKKHse+Ggc8AGMuLTAzxA6xmrX9xibgMNWCgvRA== + dependencies: + "@storybook/core" "8.5.1" + "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -8830,13 +9840,32 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1: +strip-ansi@^7.0.1, strip-ansi@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-4.0.0.tgz#b41379433dd06f5eae805e21d631e07ee670d853" + integrity sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA== + dependencies: + min-indent "^1.0.1" + strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -8999,6 +10028,11 @@ tiny-case@^1.0.3: resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== +tiny-invariant@^1.3.1, tiny-invariant@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" + integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== + tiny-typed-emitter@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5" @@ -9009,6 +10043,16 @@ tinyexec@^0.3.0: resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.1.tgz#0ab0daf93b43e2c211212396bdb836b468c97c98" integrity sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ== +tinyrainbow@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" + integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== + +tinyspy@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" + integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== + tmp-promise@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" @@ -9080,6 +10124,16 @@ ts-api-utils@^1.3.0: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== +ts-api-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.0.tgz#b9d7d5f7ec9f736f4d0f09758b8607979044a900" + integrity sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ== + +ts-dedent@^2.0.0, ts-dedent@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" + integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== + ts-node@^10.9.2: version "10.9.2" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" @@ -9099,7 +10153,16 @@ ts-node@^10.9.2: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@^2.0.0, tslib@^2.1.0: +tsconfig-paths@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -9116,6 +10179,11 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +tween-functions@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff" + integrity sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -9263,6 +10331,14 @@ unplugin@1.0.1: webpack-sources "^3.2.3" webpack-virtual-modules "^0.5.0" +unplugin@^1.3.1: + version "1.16.1" + resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.16.1.tgz#a844d2e3c3b14a4ac2945c42be80409321b61199" + integrity sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w== + dependencies: + acorn "^8.14.0" + webpack-virtual-modules "^0.6.2" + untildify@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" @@ -9328,7 +10404,18 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@^9.0.1: +util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +uuid@^9.0.0, uuid@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== @@ -9427,6 +10514,11 @@ webpack-virtual-modules@^0.5.0: resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== +webpack-virtual-modules@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8" + integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== + whatwg-encoding@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" @@ -9528,6 +10620,18 @@ which-typed-array@^1.1.16: gopd "^1.0.1" has-tostringtag "^1.0.2" +which-typed-array@^1.1.2: + version "1.1.18" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad" + integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" + for-each "^0.3.3" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -9584,7 +10688,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.18.0: +ws@^8.18.0, ws@^8.2.3: version "8.18.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== From 6da648b21c04594898c9b6e2a802123e500b7947 Mon Sep 17 00:00:00 2001 From: Shisuys Date: Sun, 26 Jan 2025 10:41:08 -0300 Subject: [PATCH 28/33] Create a downloader for the gamedrivers bypass --- src/main/services/download/download-manager.ts | 10 ++++++++++ src/renderer/src/constants.ts | 1 + src/shared/constants.ts | 1 + src/shared/index.ts | 1 + 4 files changed, 13 insertions(+) diff --git a/src/main/services/download/download-manager.ts b/src/main/services/download/download-manager.ts index 8fda319e..aa26ce06 100644 --- a/src/main/services/download/download-manager.ts +++ b/src/main/services/download/download-manager.ts @@ -260,6 +260,16 @@ export class DownloadManager { case Downloader.PixelDrain: { const id = game.uri!.split("/").pop(); + return { + action: "start", + game_id: game.id, + url: `https://pixeldrain.com/api/file/${id}?download`, + save_path: game.downloadPath!, + }; + } + case Downloader.GameDrive: { + const id = game.uri!.split("/").pop(); + return { action: "start", game_id: game.id, diff --git a/src/renderer/src/constants.ts b/src/renderer/src/constants.ts index d0797caf..a1d9919b 100644 --- a/src/renderer/src/constants.ts +++ b/src/renderer/src/constants.ts @@ -9,6 +9,7 @@ export const DOWNLOADER_NAME = { [Downloader.PixelDrain]: "PixelDrain", [Downloader.Qiwi]: "Qiwi", [Downloader.Datanodes]: "Datanodes", + [Downloader.GameDrive]: "GameDrive", }; export const MAX_MINUTES_TO_SHOW_IN_PLAYTIME = 120; diff --git a/src/shared/constants.ts b/src/shared/constants.ts index 6b332d40..cca1d3bc 100644 --- a/src/shared/constants.ts +++ b/src/shared/constants.ts @@ -5,6 +5,7 @@ export enum Downloader { PixelDrain, Qiwi, Datanodes, + GameDrive, } export enum DownloadSourceStatus { diff --git a/src/shared/index.ts b/src/shared/index.ts index 7d612a17..b22a3cac 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -88,6 +88,7 @@ export const getDownloadersForUri = (uri: string) => { if (uri.startsWith("https://pixeldrain.com")) return [Downloader.PixelDrain]; if (uri.startsWith("https://qiwi.gg")) return [Downloader.Qiwi]; if (uri.startsWith("https://datanodes.to")) return [Downloader.Datanodes]; + if (uri.startsWith("https://pd.cybar.xyz")) return [Downloader.GameDrive]; if (realDebridHosts.some((host) => uri.startsWith(host))) return [Downloader.RealDebrid]; From 032293b339be8e565f210d34bd8de4be3847c763 Mon Sep 17 00:00:00 2001 From: 7ROBE <75377870+7ROBE@users.noreply.github.com> Date: Thu, 30 Jan 2025 04:45:22 +0300 Subject: [PATCH 29/33] Update translation.json --- src/locales/ar/translation.json | 772 ++++++++++++++++---------------- 1 file changed, 397 insertions(+), 375 deletions(-) diff --git a/src/locales/ar/translation.json b/src/locales/ar/translation.json index 35a64d2d..15a24a7d 100644 --- a/src/locales/ar/translation.json +++ b/src/locales/ar/translation.json @@ -1,417 +1,439 @@ { - "language_name": "اَلْعَرَبِيَّةُ", + "language_name": "العربية", "app": { "successfully_signed_in": "تم تسجيل الدخول بنجاح" }, "home": { - "featured": "مُتَمَيِّز", - "surprise_me": "فَاجِئْنِي", - "no_results": "لَمْ يُعْثَرْ عَلَى نَتائِج", - "start_typing": "اِبْدَأْ بِالْكِتَابَةِ لِلْبَحْثِ...", - "hot": "اَلْأَكْثَرُ شُيُوعًا الْآن", - "weekly": "📅 أَفْضَلُ أَلْعَابِ الْأُسْبُوعِ", - "achievements": "🏆 أَلْعَابٌ لِلتَّغَلُّبِ عَلَيْهَا" + "featured": "مميز", + "surprise_me": "مفاجئني", + "no_results": "لم يتم العثور على نتائج", + "start_typing": "ابدأ الكتابة للبحث...", + "hot": "الأكثر شيوعًا الآن", + "weekly": "📅 أفضل ألعاب الأسبوع", + "achievements": "🏆 ألعاب للتغلب عليها" }, "sidebar": { - "catalogue": "الْفِهْرِسُ", - "downloads": "التَّنْزِيلَاتُ", - "settings": "الإعْدَادَاتُ", - "my_library": "مَكْتَبَتِي", - "downloading_metadata": "{{title}} (جَارٍ تَنْزِيلُ الْبَيَانَاتِ الْوَصْفِيَّةِ...)", - "paused": "{{title}} (مُوْقَفٌ)", - "downloading": "{{title}} ({{percentage}} - جَارٍ التَّنْزِيلُ...)", - "filter": "تَصْفِيَةُ الْمَكْتَبَةِ", - "home": "الرَّئِيسِيَّةُ", - "queued": "{{title}} (فِي الْانْتِظَارِ)", - "game_has_no_executable": "اللُّعْبَةُ لَيْسَ لَدَيْهَا مِلَفٌّ تَنْفِيذِيٌّ مُحَدَّدٌ", - "sign_in": "تَسْجِيلُ الدُّخُولِ", - "friends": "الْأَصْدِقَاءُ", - "need_help": "هَلْ تَحْتَاجُ إِلَى مُسَاعَدَةٍ؟" + "catalogue": "الكـتالوج", + "downloads": "التنزيلات", + "settings": "الإعدادات", + "my_library": "مكتبتي", + "downloading_metadata": "{{title}} (جارٍ تنزيل البيانات الوصفية...)", + "paused": "{{title}} (معلّق)", + "downloading": "{{title}} ({{percentage}} - جاري التنزيل...)", + "filter": "تصفية المكتبة", + "home": "الرئيسية", + "queued": "{{title}} (في قائمة الانتظار)", + "game_has_no_executable": "اللعبة لا تحتوي على ملف تشغيل", + "sign_in": "تسجيل الدخول", + "friends": "الأصدقاء", + "need_help": "تحتاج مساعدة؟" }, "header": { - "search": "بَحْثُ الْأَلْعَابِ", - "home": "الرَّئِيسِيَّةُ", - "catalogue": "الْفِهْرِسُ", - "downloads": "التَّنْزِيلَاتُ", - "search_results": "نَتائِجُ الْبَحْثِ", - "settings": "الإعْدَادَاتُ", - "version_available_install": "الْإِصْدَارُ {{version}} مَتَوَفِّرٌ. انْقُرْ هُنَا لِإِعَادَةِ التَّشْغِيلِ وَالتَّثْبِيتِ.", - "version_available_download": "الْإِصْدَارُ {{version}} مَتَوَفِّرٌ. انْقُرْ هُنَا لِلتَّنْزِيلِ." + "search": "ابحث عن الألعاب", + "home": "الرئيسية", + "catalogue": "الكـتالوج", + "downloads": "التنزيلات", + "search_results": "نتائج البحث", + "settings": "الإعدادات", + "version_available_install": "الإصدار {{version}} متوفر. انقر هنا لإعادة التشغيل والتثبيت.", + "version_available_download": "الإصدار {{version}} متوفر. انقر هنا للتنزيل." }, "bottom_panel": { - "no_downloads_in_progress": "لَا تَوْجَدُ تَنْزِيلَاتٌ جَارِيَةٌ", - "downloading_metadata": "جَارٍ تَنْزِيلُ الْبَيَانَاتِ الْوَصْفِيَّةِ لِـ {{title}}...", - "downloading": "جَارٍ تَنْزِيلُ {{title}}... ({{percentage}} مَكْتُومٌ) - الِاكْتِمَالُ {{eta}} - {{speed}}", - "calculating_eta": "جَارٍ تَنْزِيلُ {{title}}... ({{percentage}} مَكْتُومٌ) - جَارٍ حِسَابُ الْوَقْتِ الْمُتَبَقِّي...", - "checking_files": "جَارٍ التَّحَقُّقُ مِنْ مَلَفَّاتِ {{title}}... ({{percentage}} مَكْتُومٌ)" + "no_downloads_in_progress": "لا توجد تنزيلات قيد التقدم", + "downloading_metadata": "جارٍ تنزيل البيانات الوصفية لـ {{title}}...", + "downloading": "جارٍ تنزيل {{title}}... ({{percentage}} اكتمال) - الوقت المتبقي {{eta}} - السرعة {{speed}}", + "calculating_eta": "جارٍ تنزيل {{title}}... ({{percentage}} اكتمال) - جاري حساب الوقت المتبقي...", + "checking_files": "جارٍ فحص ملفات {{title}}... ({{percentage}} اكتمال)" }, "catalogue": { - "search": "تَصْفِيَةٌ...", - "developers": "الْمُطَوِّرُونَ", - "genres": "الْأَنْوَاعُ", - "tags": "الْعَلَامَاتُ", - "publishers": "النَّاشِرُونَ", - "download_sources": "مَصَادِرُ التَّنْزِيلِ", - "result_count": "{{resultCount}} نَتائِجُ", - "filter_count": "{{filterCount}} مَتَوَفِّرٌ", - "clear_filters": "مَسْحُ {{filterCount}} الْمُخْتَارَةِ" + "search": "تصفية...", + "developers": "المطورون", + "genres": "الأنواع", + "tags": "العلامات", + "publishers": "الناشرون", + "download_sources": "مصادر التنزيل", + "result_count": "{{resultCount}} نتيجة", + "filter_count": "{{filterCount}} متاح", + "clear_filters": "مسح {{filterCount}} المحددة" }, "game_details": { - "open_download_options": "فَتْحُ خِيَارَاتِ التَّنْزِيلِ", - "download_options_zero": "لَا تَوْجَدُ خِيَارَاتُ تَنْزِيلٍ", - "download_options_one": "{{count}} خِيَارُ تَنْزِيلٍ", - "download_options_other": "{{count}} خِيَارَاتُ تَنْزِيلٍ", - "updated_at": "تَمَّ التَّحْدِيثُ فِي {{updated_at}}", - "install": "تَثْبِيتٌ", - "resume": "اسْتِئْنَافٌ", - "pause": "إِيقَافٌ", - "cancel": "إِلْغَاءٌ", - "remove": "إِزَالَةٌ", - "space_left_on_disk": "{{space}} مُتَبَقٍّ عَلَى الْقُرْصِ", - "eta": "الِاكْتِمَالُ {{eta}}", - "calculating_eta": "جَارٍ حِسَابُ الْوَقْتِ الْمُتَبَقِّي...", - "downloading_metadata": "جَارٍ تَنْزِيلُ الْبَيَانَاتِ الْوَصْفِيَّةِ...", - "filter": "تَصْفِيَةُ الْإِصْدَارَاتِ الْمُعَادِ تَغْلِيفُهَا", - "requirements": "مُتَطَلَّبَاتُ النِّظَامِ", - "minimum": "الْأَدْنَى", - "recommended": "الْمُوَصَّى بِهِ", - "paused": "مُوْقَفٌ", - "release_date": "تَمَّ الْإِصْدَارُ فِي {{date}}", - "publisher": "نُشِرَ بِوَاسِطَةِ {{publisher}}", - "hours": "سَاعَاتٌ", - "minutes": "دَقَائِقُ", - "amount_hours": "{{amount}} سَاعَاتٌ", - "amount_minutes": "{{amount}} دَقَائِقُ", - "accuracy": "دِقَّةٌ {{accuracy}}%", - "add_to_library": "إِضَافَةٌ إِلَى الْمَكْتَبَةِ", - "remove_from_library": "إِزَالَةٌ مِنَ الْمَكْتَبَةِ", - "no_downloads": "لَا تَوْجَدُ تَنْزِيلَاتٌ مَتَوَفِّرَةٌ", - "play_time": "لُعِبَ لِمُدَّةِ {{amount}}", - "last_time_played": "آخِرُ مَرَّةٍ لُعِبَتْ {{period}}", - "not_played_yet": "لَمْ تَلْعَبْ {{title}} بَعْدُ", - "next_suggestion": "الِاقْتِرَاحُ التَّالِي", - "play": "لَعِبٌ", - "deleting": "جَارٍ حَذْفُ الْمُثَبِّتِ...", - "close": "إِغْلَاقٌ", - "playing_now": "جَارِي اللَّعِبُ الْآن", - "change": "تَغْيِيرٌ", - "repacks_modal_description": "اخْتَرِ الْإِصْدَارَ الْمُعَادَ تَغْلِيفُهُ الَّذِي تُرِيدُ تَنْزِيلَهُ", - "select_folder_hint": "لِتَغْيِيرِ الْمَجَلَّدِ الافْتِرَاضِيِّ، اذْهَبْ إِلَى <0>الإعْدَادَاتِ", - "download_now": "تَنْزِيلٌ الْآن", - "no_shop_details": "لَمْ يَتَمَكَّنْ مِنْ اسْتِرْدَادِ تَفَاصِيلِ الْمَتْجَرِ.", - "download_options": "خِيَارَاتُ التَّنْزِيلِ", - "download_path": "مَسَارُ التَّنْزِيلِ", - "previous_screenshot": "لَقْطَةُ الشَّاشَةِ السَّابِقَةُ", - "next_screenshot": "لَقْطَةُ الشَّاشَةِ التَّالِيَةُ", - "screenshot": "لَقْطَةُ الشَّاشَةِ {{number}}", - "open_screenshot": "فَتْحُ لَقْطَةِ الشَّاشَةِ {{number}}", - "download_settings": "إعْدَادَاتُ التَّنْزِيلِ", - "downloader": "الْمُنَزِّلُ", - "select_executable": "تَحْدِيدٌ", - "no_executable_selected": "لَمْ يُحَدَّدْ مِلَفٌّ تَنْفِيذِيٌّ", - "open_folder": "فَتْحُ الْمَجَلَّدِ", - "open_download_location": "مُشَاهَدَةُ الْمَلَفَّاتِ الْمُنَزَّلَةِ", - "create_shortcut": "إِنْشَاءُ طَرِيقٍ مُخْتَصَرٍ عَلَى سَطْحِ الْمَكْتَبِ", - "clear": "مَسْحٌ", - "remove_files": "إِزَالَةُ الْمَلَفَّاتِ", - "remove_from_library_title": "هَلْ أَنْتَ مُتَأَكِّدٌ؟", - "remove_from_library_description": "سَيُؤَدِّي هَذَا إِلَى إِزَالَةِ {{game}} مِنْ مَكْتَبَتِكَ", - "options": "خِيَارَاتٌ", - "executable_section_title": "الْمِلَفُّ التَّنْفِيذِيُّ", - "executable_section_description": "مَسَارُ الْمِلَفِّ الَّذِي سَيَتِمُّ تَنْفِيذُهُ عِنْدَ النَّقْرِ عَلَى \"لَعِبٌ\"", - "downloads_secion_title": "التَّنْزِيلَاتُ", - "downloads_section_description": "تَحَقَّقْ مِنَ التَّحْدِيثَاتِ أَوِ الْإِصْدَارَاتِ الْأُخْرَى لِهَذِهِ اللُّعْبَةِ", - "danger_zone_section_title": "مِنْطَقَةُ الْخَطَرِ", - "danger_zone_section_description": "إِزَالَةُ هَذِهِ اللُّعْبَةِ مِنْ مَكْتَبَتِكَ أَوِ الْمَلَفَّاتِ الْمُنَزَّلَةِ بِوَاسِطَةِ Hydra", - "download_in_progress": "جَارٍ التَّنْزِيلُ", - "download_paused": "التَّنْزِيلُ مُوْقَفٌ", - "last_downloaded_option": "خِيَارُ التَّنْزِيلِ الْأَخِيرُ", - "create_shortcut_success": "تَمَّ إِنْشَاءُ الطَّرِيقِ الْمُخْتَصَرِ بِنَجَاحٍ", - "create_shortcut_error": "خَطَأٌ فِي إِنْشَاءِ الطَّرِيقِ الْمُخْتَصَرِ", - "nsfw_content_title": "هَذِهِ اللُّعْبَةُ تَحْتَوِي عَلَى مُحْتَوًى غَيْرِ لَائِقٍ", - "nsfw_content_description": "{{title}} تَحْتَوِي عَلَى مُحْتَوًى قَدْ لَا يَكُونُ مُنَاسِبًا لِجَمِيعِ الْأَعْمَارِ. هَلْ أَنْتَ مُتَأَكِّدٌ مِنْ أَنَّكَ تُرِيدُ الْمُتَابَعَةَ؟", - "allow_nsfw_content": "الْمُتَابَعَةُ", - "refuse_nsfw_content": "الرُّجُوعُ", - "stats": "الإحْصَائِيَّاتُ", - "download_count": "التَّنْزِيلَاتُ", - "player_count": "اللَّاعِبُونَ النَّشِطُونَ", - "download_error": "هَذَا خِيَارُ التَّنْزِيلِ غَيْرُ مَتَوَفِّرٍ", - "download": "تَنْزِيلٌ", - "executable_path_in_use": "الْمِلَفُّ التَّنْفِيذِيُّ مُسْتَخْدَمٌ بِوَاسِطَةِ \"{{game}}\"", - "warning": "تَنْبِيهٌ:", - "hydra_needs_to_remain_open": "لِهَذَا التَّنْزِيلِ، يَجِبُ أَنْ يَبْقَى Hydra مَفْتُوحًا حَتَّى يَتِمَّ الِاكْتِمَالُ. إِذَا أُغْلِقَ Hydra قَبْلَ الِاكْتِمَالِ، سَتَفْقِدُ تَقَدُّمَكَ.", - "achievements": "الإِنْجَازَاتُ", - "achievements_count": "الإِنْجَازَاتُ {{unlockedCount}}/{{achievementsCount}}", - "cloud_save": "حِفْظٌ سَحَابِيٌّ", - "cloud_save_description": "احْفَظْ تَقَدُّمَكَ فِي السَّحَابَةِ وَاسْتَمِرَّ فِي اللَّعِبِ عَلَى أَيِّ جِهَازٍ", - "backups": "الْنُسَخُ الِاحْتِيَاطِيَّةُ", - "install_backup": "تَثْبِيتٌ", - "delete_backup": "حَذْفٌ", - "create_backup": "نُسْخَةٌ احْتِيَاطِيَّةٌ جَدِيدَةٌ", - "last_backup_date": "آخِرُ نُسْخَةٍ احْتِيَاطِيَّةٍ فِي {{date}}", - "no_backup_preview": "لَمْ يُعْثَرْ عَلَى أَيِّ أَلْعَابٍ مَحْفُوظَةٍ لِهَذَا الْعُنْوَانِ", - "restoring_backup": "جَارٍ اسْتِعَادَةُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ ({{progress}} مَكْتُومٌ)...", - "uploading_backup": "جَارٍ رَفْعُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ...", - "no_backups": "لَمْ تَقُمْ بِإِنْشَاءِ أَيِّ نُسَخٍ احْتِيَاطِيَّةٍ لِهَذِهِ اللُّعْبَةِ بَعْدُ", - "backup_uploaded": "تَمَّ رَفْعُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ", - "backup_deleted": "تَمَّ حَذْفُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ", - "backup_restored": "تَمَّ اسْتِعَادَةُ النُّسْخَةِ الِاحْتِيَاطِيَّةِ", - "see_all_achievements": "عَرْضُ جَمِيعِ الإِنْجَازَاتِ", - "sign_in_to_see_achievements": "سَجِّلِ الدُّخُولَ لِعَرْضِ الإِنْجَازَاتِ", - "mapping_method_automatic": "آلِيٌّ", - "mapping_method_manual": "يَدَوِيٌّ", - "mapping_method_label": "طَرِيقَةُ التَّحْدِيدِ", - "files_automatically_mapped": "تَمَّ تَحْدِيدُ الْمَلَفَّاتِ تِلْقَائِيًّا", - "no_backups_created": "لَمْ تُنْشَأْ أَيُّ نُسَخٍ احْتِيَاطِيَّةٍ لِهَذِهِ اللُّعْبَةِ", - "manage_files": "إِدَارَةُ الْمَلَفَّاتِ", - "loading_save_preview": "جَارٍ الْبَحْثُ عَنْ أَلْعَابٍ مَحْفُوظَةٍ...", - "wine_prefix": "بَادِئَةُ Wine", - "wine_prefix_description": "بَادِئَةُ Wine الْمُسْتَخْدَمَةُ لِتَشْغِيلِ هَذِهِ اللُّعْبَةِ", - "launch_options": "خِيَارَاتُ الْإِطْلَاقِ", - "launch_options_description": "يُمْكِنُ لِلْمُسْتَخْدِمِينَ الْمُتَقَدِّمِينَ إِدْخَالُ تَعْدِيلَاتٍ عَلَى خِيَارَاتِ الْإِطْلَاقِ", - "launch_options_placeholder": "لَمْ يُحَدَّدْ أَيُّ مُعَامِلٍ", - "no_download_option_info": "لَا تَوْجَدُ مَعْلُومَاتٌ مَتَوَفِّرَةٌ", - "backup_deletion_failed": "فَشَلَ فِي حَذْفِ النُّسْخَةِ الِاحْتِيَاطِيَّةِ", - "max_number_of_artifacts_reached": "تَمَّ بَلُوغُ الْعَدَدِ الْأَقْصَى لِلنُّسَخِ الِاحْتِيَاطِيَّةِ لِهَذِهِ اللُّعْبَةِ", - "achievements_not_sync": "تَعَرَّفْ عَلَى كَيْفِيَّةِ مَزْجِ إِنْجَازَاتِكَ", - "manage_files_description": "إِدَارَةُ الْمَلَفَّاتِ الَّتِي سَيَتِمُّ نَسْخُهَا احْتِيَاطِيًّا وَاسْتِعَادَتُهَا", - "select_folder": "تَحْدِيدُ الْمَجَلَّدِ", - "backup_from": "نُسْخَةٌ احْتِيَاطِيَّةٌ مِنْ {{date}}", - "custom_backup_location_set": "تَمَّ تَحْدِيدُ مَوْقِعِ النُّسْخَةِ الِاحْتِيَاطِيَّةِ الْمُخَصَّصِ", - "no_directory_selected": "لَمْ يُحَدَّدْ أَيُّ دَلِيلٍ" + "open_download_options": "فتح خيارات التنزيل", + "download_options_zero": "لا توجد خيارات تنزيل", + "download_options_one": "خيار تنزيل واحد", + "download_options_other": "{{count}} خيارات تنزيل", + "updated_at": "تم التحديث في {{updated_at}}", + "install": "تثبيت", + "resume": "استئناف", + "pause": "إيقاف مؤقت", + "cancel": "إلغاء", + "remove": "إزالة", + "space_left_on_disk": "{{space}} متبقي على القرص", + "eta": "الانتهاء {{eta}}", + "calculating_eta": "جارٍ حساب الوقت المتبقي...", + "downloading_metadata": "جارٍ تنزيل البيانات الوصفية...", + "filter": "تصفية الحزم المعاد تعبئتها", + "requirements": "متطلبات النظام", + "minimum": "الحد الأدنى", + "recommended": "مُوصى به", + "paused": "معلّق", + "release_date": "تاريخ الإصدار {{date}}", + "publisher": "نشر بواسطة {{publisher}}", + "hours": "ساعات", + "minutes": "دقائق", + "amount_hours": "{{amount}} ساعات", + "amount_minutes": "{{amount}} دقائق", + "accuracy": "دقة {{accuracy}}%", + "add_to_library": "إضافة إلى المكتبة", + "remove_from_library": "إزالة من المكتبة", + "no_downloads": "لا توجد تنزيلات متاحة", + "play_time": "لعب لمدة {{amount}}", + "last_time_played": "آخر تشغيل {{period}}", + "not_played_yet": "لم تلعب {{title}} بعد", + "next_suggestion": "الاقتراح التالي", + "play": "تشغيل", + "deleting": "جارٍ حذف المثبت...", + "close": "إغلاق", + "playing_now": "يتم التشغيل الآن", + "change": "تغيير", + "repacks_modal_description": "اختر الحزمة المعاد تعبئتها التي تريد تنزيلها", + "select_folder_hint": "لتغيير المجلد الافتراضي، انتقل إلى <0>الإعدادات", + "download_now": "تنزيل الآن", + "no_shop_details": "تعذر الحصول على تفاصيل المتجر.", + "download_options": "خيارات التنزيل", + "download_path": "مسار التنزيل", + "previous_screenshot": "لقطة الشاشة السابقة", + "next_screenshot": "لقطة الشاشة التالية", + "screenshot": "لقطة الشاشة {{number}}", + "open_screenshot": "فتح لقطة الشاشة {{number}}", + "download_settings": "إعدادات التنزيل", + "downloader": "أداة التنزيل", + "select_executable": "تحديد", + "no_executable_selected": "لم يتم تحديد ملف تشغيل", + "open_folder": "فتح المجلد", + "open_download_location": "عرض الملفات المحملة", + "create_shortcut": "إنشاء اختصار على سطح المكتب", + "clear": "مسح", + "remove_files": "إزالة الملفات", + "remove_from_library_title": "هل أنت متأكد؟", + "remove_from_library_description": "سيؤدي هذا إلى إزالة {{game}} من مكتبتك", + "options": "خيارات", + "executable_section_title": "ملف التشغيل", + "executable_section_description": "مسار الملف الذي سيتم تشغيله عند النقر على \"تشغيل\"", + "downloads_secion_title": "التنزيلات", + "downloads_section_description": "تحقق من التحديثات أو الإصدارات الأخرى لهذه اللعبة", + "danger_zone_section_title": "منطقة الخطر", + "danger_zone_section_description": "إزالة هذه اللعبة من مكتبتك أو الملفات التي تم تنزيلها بواسطة Hydra", + "download_in_progress": "تنزيل قيد التقدم", + "download_paused": "التنزيل معلق", + "last_downloaded_option": "خيار التنزيل الأخير", + "create_shortcut_success": "تم إنشاء الاختصار بنجاح", + "create_shortcut_error": "خطأ في إنشاء الاختصار", + "nsfw_content_title": "هذه اللعبة تحتوي على محتوى غير لائق", + "nsfw_content_description": "{{title}} يحتوي على محتوى قد لا يناسب جميع الأعمار. هل تريد المتابعة؟", + "allow_nsfw_content": "متابعة", + "refuse_nsfw_content": "رجوع", + "stats": "الإحصائيات", + "download_count": "مرات التنزيل", + "player_count": "اللاعبون النشطون", + "download_error": "خيار التنزيل هذا غير متاح", + "download": "تنزيل", + "executable_path_in_use": "مسار التشغيل مستخدم بالفعل بواسطة \"{{game}}\"", + "warning": "تحذير:", + "hydra_needs_to_remain_open": "لهذا التنزيل، يجب أن يبقى Hydra مفتوحًا حتى اكتماله. إذا أغلق Hydra قبل الاكتمال، ستفقد تقدمك.", + "achievements": "الإنجازات", + "achievements_count": "الإنجازات {{unlockedCount}}/{{achievementsCount}}", + "cloud_save": "حفظ سحابي", + "cloud_save_description": "احفظ تقدمك على السحابة واستمر في اللعب من أي جهاز", + "backups": "النسخ الاحتياطية", + "install_backup": "تثبيت", + "delete_backup": "حذف", + "create_backup": "نسخة احتياطية جديدة", + "last_backup_date": "آخر نسخة احتياطية في {{date}}", + "no_backup_preview": "لم يتم العثور على حفظات لهذا العنوان", + "restoring_backup": "جارٍ استعادة النسخة الاحتياطية ({{progress}} اكتمال)...", + "uploading_backup": "جارٍ رفع النسخة الاحتياطية...", + "no_backups": "لم تقم بإنشاء أي نسخ احتياطية لهذه اللعبة بعد", + "backup_uploaded": "تم رفع النسخة الاحتياطية", + "backup_deleted": "تم حذف النسخة الاحتياطية", + "backup_restored": "تم استعادة النسخة الاحتياطية", + "see_all_achievements": "عرض جميع الإنجازات", + "sign_in_to_see_achievements": "سجل الدخول لعرض الإنجازات", + "mapping_method_automatic": "تلقائي", + "mapping_method_manual": "يدوي", + "mapping_method_label": "طريقة التعيين", + "files_automatically_mapped": "تم تعيين الملفات تلقائيًا", + "no_backups_created": "لم يتم إنشاء نسخ احتياطية لهذه اللعبة", + "manage_files": "إدارة الملفات", + "loading_save_preview": "جارٍ البحث عن حفظات الألعاب...", + "wine_prefix": "بادئة Wine", + "wine_prefix_description": "بادئة Wine المستخدمة لتشغيل هذه اللعبة", + "launch_options": "خيارات التشغيل", + "launch_options_description": "يمكن للمستخدمين المتقدمين إدخال تعديلات على خيارات التشغيل (ميزة تجريبية)", + "launch_options_placeholder": "لم يتم تحديد أي معاملات", + "no_download_option_info": "لا توجد معلومات متاحة", + "backup_deletion_failed": "فشل حذف النسخة الاحتياطية", + "max_number_of_artifacts_reached": "تم الوصول إلى الحد الأقصى لعدد النسخ الاحتياطية لهذه اللعبة", + "achievements_not_sync": "تعرف على كيفية مزامنة إنجازاتك", + "manage_files_description": "إدارة الملفات التي سيتم نسخها احتياطيًا واستعادتها", + "select_folder": "حدد المجلد", + "backup_from": "نسخة احتياطية من {{date}}", + "custom_backup_location_set": "تم تعيين موقع نسخ احتياطي مخصص", + "no_directory_selected": "لم يتم تحديد مجلد", + "no_write_permission": "لا يمكن التنزيل إلى هذا المجلد. انقر هنا لمعرفة المزيد.", + "reset_achievements": "إعادة تعيين الإنجازات", + "reset_achievements_description": "سيؤدي هذا إلى إعادة تعيين جميع إنجازات {{game}}", + "reset_achievements_title": "هل أنت متأكد؟", + "reset_achievements_success": "تم إعادة تعيين الإنجازات بنجاح", + "reset_achievements_error": "فشل إعادة تعيين الإنجازات" }, "activation": { - "title": "تَفْعِيلُ Hydra", - "installation_id": "مُعَرِّفُ التَّثْبِيتِ:", - "enter_activation_code": "أَدْخِلْ رَمْزَ التَّفْعِيلِ", - "message": "إِذَا كُنْتَ لَا تَعْرِفُ أَيْنَ تَطْلُبُ هَذَا، فَلا يَجِبُ أَنْ تَكُونَ لَدَيْكَ.", - "activate": "تَفْعِيلٌ", - "loading": "جَارٍ التَّحْمِيلُ..." + "title": "تفعيل Hydra", + "installation_id": "معرف التثبيت:", + "enter_activation_code": "أدخل رمز التفعيل الخاص بك", + "message": "إذا كنت لا تعرف أين تطلب هذا، فلا يجب أن يكون لديك هذا.", + "activate": "تفعيل", + "loading": "جارٍ التحميل..." }, "downloads": { - "resume": "اسْتِئْنَافٌ", - "pause": "إِيقَافٌ", - "eta": "الِاكْتِمَالُ {{eta}}", - "paused": "مُوْقَفٌ", - "verifying": "جَارٍ التَّحَقُّقُ...", - "completed": "مَكْتُومٌ", - "removed": "لَمْ يُنَزَّلْ", - "cancel": "إِلْغَاءٌ", - "filter": "تَصْفِيَةُ الْأَلْعَابِ الْمُنَزَّلَةِ", - "remove": "إِزَالَةٌ", - "downloading_metadata": "جَارٍ تَنْزِيلُ الْبَيَانَاتِ الْوَصْفِيَّةِ...", - "deleting": "جَارٍ حَذْفُ الْمُثَبِّتِ...", - "delete": "حَذْفُ الْمُثَبِّتِ", - "delete_modal_title": "هَلْ أَنْتَ مُتَأَكِّدٌ؟", - "delete_modal_description": "سَيُؤَدِّي هَذَا إِلَى إِزَالَةِ جَمِيعِ مَلَفَّاتِ التَّثْبِيتِ مِنْ حَاسُوبِكَ", - "install": "تَثْبِيتٌ", - "download_in_progress": "جَارٍ التَّنْفِيذُ", - "queued_downloads": "التَّنْزِيلَاتُ فِي الْانْتِظَارِ", - "downloads_completed": "مَكْتُومٌ", - "queued": "فِي الْانْتِظَارِ", - "no_downloads_title": "فَرَاغٌ تَامٌ", - "no_downloads_description": "لَمْ تَقُمْ بِتَنْزِيلِ أَيِّ شَيْءٍ بِاسْتِخْدَامِ Hydra بَعْدُ، لَكِنَّهُ لَيْسَ مُتَأَخِّرًا لِلْبَدْءِ.", - "checking_files": "جَارٍ التَّحَقُّقُ مِنَ الْمَلَفَّاتِ...", - "seeding": "الْبَذْرُ", - "stop_seeding": "إِيقَافُ الْبَذْرِ", - "resume_seeding": "اسْتِئْنَافُ الْبَذْرِ", - "options": "إِدَارَةٌ" + "resume": "استئناف", + "pause": "إيقاف مؤقت", + "eta": "الانتهاء {{eta}}", + "paused": "معلّق", + "verifying": "جارٍ التحقق...", + "completed": "مكتمل", + "removed": "غير محمل", + "cancel": "إلغاء", + "filter": "تصفية الألعاب المحملة", + "remove": "إزالة", + "downloading_metadata": "جارٍ تنزيل البيانات الوصفية...", + "deleting": "جارٍ حذف المثبت...", + "delete": "إزالة المثبت", + "delete_modal_title": "هل أنت متأكد؟", + "delete_modal_description": "سيؤدي هذا إلى إزالة جميع ملفات التثبيت من جهازك", + "install": "تثبيت", + "download_in_progress": "قيد التقدم", + "queued_downloads": "التنزيلات في قائمة الانتظار", + "downloads_completed": "مكتمل", + "queued": "في قائمة الانتظار", + "no_downloads_title": "فارغ جدًا", + "no_downloads_description": "لم تقم بتنزيل أي شيء باستخدام Hydra بعد، ولكن لم يفت الأوان للبدء.", + "checking_files": "جارٍ فحص الملفات...", + "seeding": "التوزيع", + "stop_seeding": "إيقاف التوزيع", + "resume_seeding": "استئناف التوزيع", + "options": "إدارة" }, "settings": { - "downloads_path": "مَسَارُ التَّنْزِيلَاتِ", - "change": "تَحْدِيثٌ", - "notifications": "الإِشْعَارَاتُ", - "enable_download_notifications": "عِنْدَ اكْتِمَالِ التَّنْزِيلِ", - "enable_repack_list_notifications": "عِنْدَ إِضَافَةِ إِصْدَارٍ مُعَادٍ تَغْلِيفِهِ جَدِيدٍ", - "real_debrid_api_token_label": "رَمْزُ واجهة برمجة التطبيقات Real-Debrid", - "quit_app_instead_hiding": "لا تُخْفِ Hydra عِنْدَ الإِغْلَاقِ", - "launch_with_system": "تَشْغِيلُ Hydra عِنْدَ بَدْءِ النِّظَامِ", - "general": "عَامٌ", - "behavior": "سُلُوكٌ", - "download_sources": "مَصَادِرُ التَّنْزِيلِ", - "language": "اللُّغَةُ", - "real_debrid_api_token": "رَمْزُ واجهة برمجة التطبيقات", - "enable_real_debrid": "تَمْكِينُ Real-Debrid", - "real_debrid_description": "Real-Debrid هُوَ مُنَزِّلٌ غَيْرُ مَقْيُودٍ يَتِيحُ لَكَ تَنْزِيلَ الْمَلَفَّاتِ بِسُرْعَةٍ، مَحْدُودٌ فَقَطْ بِسُرْعَةِ الْإِنْتَرْنِتِ لَدَيْكَ.", - "real_debrid_invalid_token": "رَمْزُ واجهة برمجة التطبيقات غَيْرُ صَالِحٍ", - "real_debrid_api_token_hint": "يُمْكِنُكَ الْحُصُولُ عَلَى رَمْزِ واجهة برمجة التطبيقات <0>هُنَا", - "real_debrid_free_account_error": "الْحِسَابُ \"{{username}}\" هُوَ حِسَابٌ مَجَّانِيٌّ. يَرْجَى الِاشْتِرَاكُ فِي Real-Debrid", - "real_debrid_linked_message": "تَمَّ رَبْطُ الْحِسَابِ \"{{username}}\"", - "save_changes": "حِفْظُ التَّغْيِيرَاتِ", - "changes_saved": "تَمَّ حِفْظُ التَّغْيِيرَاتِ بِنَجَاحٍ", - "download_sources_description": "سَتَقُومُ Hydra بِجَلْبِ رَوَابِطِ التَّنْزِيلِ مِنْ هَذِهِ الْمَصَادِرِ. يَجِبُ أَنْ يَكُونَ عُنْوَانُ URL لِلْمَصْدَرِ رَابِطًا مُبَاشِرًا إِلَى مِلَفٍّ .json يَحْتَوِي عَلَى رَوَابِطِ التَّنْزِيلِ.", - "validate_download_source": "تَصْدِيقٌ", - "remove_download_source": "إِزَالَةٌ", - "add_download_source": "إِضَافَةُ مَصْدَرٍ", - "download_count_zero": "لَا تَوْجَدُ خِيَارَاتُ تَنْزِيلٍ", - "download_count_one": "{{countFormatted}} خِيَارُ تَنْزِيلٍ", - "download_count_other": "{{countFormatted}} خِيَارَاتُ تَنْزِيلٍ", - "download_source_url": "عُنْوَانُ مَصْدَرِ التَّنْزِيلِ", - "add_download_source_description": "أَدْخِلْ عُنْوَانَ URL لِمِلَفٍّ .json", - "download_source_up_to_date": "مُحَدَّثٌ", - "download_source_errored": "خَطَأٌ", - "sync_download_sources": "مَزْجُ الْمَصَادِرِ", - "removed_download_source": "تَمَّ إِزَالَةُ مَصْدَرِ التَّنْزِيلِ", - "added_download_source": "تَمَّتْ إِضَافَةُ مَصْدَرِ التَّنْزِيلِ", - "download_sources_synced": "تَمَّ مَزْجُ جَمِيعِ مَصَادِرِ التَّنْزِيلِ", - "insert_valid_json_url": "أَدْخِلْ عُنْوَانَ JSON صَالِحًا", - "found_download_option_zero": "لَمْ يُعْثَرْ عَلَى خِيَارِ تَنْزِيلٍ", - "found_download_option_one": "عُثِرَ عَلَى {{countFormatted}} خِيَارِ تَنْزِيلٍ", - "found_download_option_other": "عُثِرَ عَلَى {{countFormatted}} خِيَارَاتِ تَنْزِيلٍ", - "import": "اسْتِيرَادٌ", - "public": "عَامٌ", - "private": "خَاصٌ", - "friends_only": "الْأَصْدِقَاءُ فَقَطْ", - "privacy": "الْخُصُوصِيَّةُ", - "profile_visibility": "رُؤْيَةُ الْمَلَفِّ الشَّخْصِيِّ", - "profile_visibility_description": "اخْتَرْ مَنْ يُمْكِنُهُ رُؤْيَةُ مَلَفِّكَ الشَّخْصِيِّ وَمَكْتَبَتِكَ", - "required_field": "هَذَا الْحَقْلُ مَطْلُوبٌ", - "source_already_exists": "تَمَّتْ إِضَافَةُ هَذَا الْمَصْدَرِ مِنْ قَبْلُ", - "must_be_valid_url": "يَجِبُ أَنْ يَكُونَ الْمَصْدَرُ عُنْوَانَ URL صَالِحًا", - "blocked_users": "الْمُسْتَخْدِمُونَ الْمَحْظُورُونَ", - "user_unblocked": "تَمَّ إِزَالَةُ حَظْرِ الْمُسْتَخْدِمِ", - "enable_achievement_notifications": "عِنْدَ فَتْحِ إِنْجَازٍ", - "launch_minimized": "تَشْغِيلُ Hydra مُصَغَّرًا", - "disable_nsfw_alert": "تَعْطِيلُ تَنْبِيهِ الْمُحْتَوَى غَيْرِ اللَّائِقِ", - "seed_after_download_complete": "الْبَذْرُ بَعْدَ اكْتِمَالِ التَّنْزِيلِ", - "show_hidden_achievement_description": "إِظْهَارُ وَصْفِ الإِنْجَازَاتِ الْمَخْفِيَّةِ قَبْلَ فَتْحِهَا" + "downloads_path": "مسار التنزيلات", + "change": "تحديث", + "notifications": "الإشعارات", + "enable_download_notifications": "عند اكتمال التنزيل", + "enable_repack_list_notifications": "عند إضافة حزمة معاد تعبئتها جديدة", + "real_debrid_api_token_label": "رمز واجهة برمجة تطبيقات Real-Debrid", + "quit_app_instead_hiding": "لا تخفي Hydra عند الإغلاق", + "launch_with_system": "تشغيل Hydra مع بدء النظام", + "general": "عام", + "behavior": "السلوك", + "download_sources": "مصادر التنزيل", + "language": "اللغة", + "real_debrid_api_token": "رمز API", + "enable_real_debrid": "تفعيل Real-Debrid", + "real_debrid_description": "Real-Debrid هو أداة تنزيل غير مقيدة تتيح لك تنزيل الملفات بسرعة، مقيدة فقط بسرعة الإنترنت لديك.", + "real_debrid_invalid_token": "رمز API غير صالح", + "real_debrid_api_token_hint": "يمكنك الحصول على رمز API الخاص بك <0>هنا", + "real_debrid_free_account_error": "الحساب \"{{username}}\" هو حساب مجاني. يرجى الاشتراك في Real-Debrid", + "real_debrid_linked_message": "تم ربط الحساب \"{{username}}\"", + "save_changes": "حفظ التغييرات", + "changes_saved": "تم حفظ التغييرات بنجاح", + "download_sources_description": "سيقوم Hydra بجلب روابط التنزيل من هذه المصادر. يجب أن يكون عنوان URL المصدر رابطًا مباشرًا لملف .json يحتوي على روابط التنزيل.", + "validate_download_source": "تحقق", + "remove_download_source": "إزالة", + "add_download_source": "إضافة مصدر", + "download_count_zero": "لا توجد خيارات تنزيل", + "download_count_one": "{{countFormatted}} خيار تنزيل", + "download_count_other": "{{countFormatted}} خيارات تنزيل", + "download_source_url": "عنوان URL لمصدر التنزيل", + "add_download_source_description": "أدخل عنوان URL لملف .json", + "download_source_up_to_date": "محدث", + "download_source_errored": "خطأ", + "sync_download_sources": "مزامنة المصادر", + "removed_download_source": "تمت إزالة مصدر التنزيل", + "added_download_source": "تمت إضافة مصدر التنزيل", + "download_sources_synced": "تمت مزامنة جميع مصادر التنزيل", + "insert_valid_json_url": "أدخل عنوان JSON صالح", + "found_download_option_zero": "لم يتم العثور على خيارات تنزيل", + "found_download_option_one": "تم العثور على {{countFormatted}} خيار تنزيل", + "found_download_option_other": "تم العثور على {{countFormatted}} خيارات تنزيل", + "import": "استيراد", + "public": "عام", + "private": "خاص", + "friends_only": "الأصدقاء فقط", + "privacy": "الخصوصية", + "profile_visibility": "رؤية الملف الشخصي", + "profile_visibility_description": "اختر من يمكنه رؤية ملفك الشخصي ومكتبتك", + "required_field": "هذا الحقل مطلوب", + "source_already_exists": "تمت إضافة هذا المصدر مسبقًا", + "must_be_valid_url": "يجب أن يكون المصدر عنوان URL صالحًا", + "blocked_users": "المستخدمون المحظورون", + "user_unblocked": "تم إلغاء حظر المستخدم", + "enable_achievement_notifications": "عند فتح إنجاز", + "launch_minimized": "تشغيل Hydra مصغرًا", + "disable_nsfw_alert": "تعطيل تنبيه المحتوى غير اللائق", + "seed_after_download_complete": "التوزيع بعد اكتمال التنزيل", + "show_hidden_achievement_description": "عرض وصف الإنجازات المخفية قبل فتحها", + "account": "الحساب", + "no_users_blocked": "لا يوجد مستخدمون محظورون", + "subscription_active_until": "اشتراك Hydra Cloud نشط حتى {{date}}", + "manage_subscription": "إدارة الاشتراك", + "update_email": "تحديث البريد الإلكتروني", + "update_password": "تحديث كلمة المرور", + "current_email": "البريد الإلكتروني الحالي:", + "no_email_account": "لم تقم بتعيين بريد إلكتروني بعد", + "account_data_updated_successfully": "تم تحديث بيانات الحساب بنجاح", + "renew_subscription": "تجديد اشتراك Hydra Cloud", + "subscription_expired_at": "انتهى اشتراكك في {{date}}", + "no_subscription": "استمتع بـ Hydra بأفضل طريقة ممكنة", + "become_subscriber": "كن مشتركًا في Hydra Cloud", + "subscription_renew_cancelled": "تم تعطيل التجديد التلقائي", + "subscription_renews_on": "سيتم تجديد اشتراكك في {{date}}", + "bill_sent_until": "سيتم إرسال فاتورتك التالية حتى هذا اليوم" }, "notifications": { - "download_complete": "اكْتِمَالُ التَّنْزِيلِ", - "game_ready_to_install": "{{title}} جَاهِزٌ لِلتَّثْبِيتِ", - "repack_list_updated": "تَمَّ تَحْدِيثُ قَائِمَةِ الإِصْدَارَاتِ الْمُعَادَةِ تَغْلِيفُهَا", - "repack_count_one": "{{count}} إِصْدَارٌ مُعَادٌ تَغْلِيفُهُ أُضِيفَ", - "repack_count_other": "{{count}} إِصْدَارَاتٌ مُعَادَةٌ تَغْلِيفُهَا أُضِيفَتْ", - "new_update_available": "الْإِصْدَارُ {{version}} مَتَوَفِّرٌ", - "restart_to_install_update": "أَعِدْ تَشْغِيلَ Hydra لِتَثْبِيتِ التَّحْدِيثِ", - "notification_achievement_unlocked_title": "تَمَّ فَتْحُ إِنْجَازٍ لِـ {{game}}", - "notification_achievement_unlocked_body": "{{achievement}} وَ{{count}} أُخْرَى تَمَّ فَتْحُهَا" + "download_complete": "اكتمل التنزيل", + "game_ready_to_install": "{{title}} جاهز للتثبيت", + "repack_list_updated": "تم تحديث قائمة الحزم المعاد تعبئتها", + "repack_count_one": "تمت إضافة {{count}} حزمة معاد تعبئتها", + "repack_count_other": "تمت إضافة {{count}} حزم معاد تعبئتها", + "new_update_available": "الإصدار {{version}} متوفر", + "restart_to_install_update": "أعد تشغيل Hydra لتثبيت التحديث", + "notification_achievement_unlocked_title": "تم فتح إنجاز لـ {{game}}", + "notification_achievement_unlocked_body": "{{achievement}} و {{count}} آخرين تم فتحهم" }, "system_tray": { - "open": "فَتْحُ Hydra", - "quit": "الْخُرُوجُ" + "open": "فتح Hydra", + "quit": "خروج" }, "game_card": { - "no_downloads": "لَا تَوْجَدُ تَنْزِيلَاتٌ مَتَوَفِّرَةٌ" + "no_downloads": "لا توجد تنزيلات متاحة" }, "binary_not_found_modal": { - "title": "الْبَرَامِجُ غَيْرُ مُثَبَّتَةٍ", - "description": "لَمْ يُعْثَرْ عَلَى مَلَفَّاتٍ تَنْفِيذِيَّةٍ لِـ Wine أَوْ Lutris عَلَى نِظَامِكَ", - "instructions": "تَحَقَّقْ مِنَ الطَّرِيقَةِ الصَّحِيحَةِ لِتَثْبِيتِ أَيٍّ مِنْهُمَا عَلَى تَوْزِيعَةِ Linux لَدَيْكَ لِتَعْمَلَ اللُّعْبَةُ بِشَكْلٍ طَبِيعِيٍّ" + "title": "البرامج غير مثبتة", + "description": "لم يتم العثور على ملفات تشغيل Wine أو Lutris على نظامك", + "instructions": "تحقق من الطريقة الصحيحة لتثبيت أي منها على توزيعة لينكس الخاصة بك حتى تعمل اللعبة بشكل طبيعي" }, "modal": { - "close": "زِرُّ الإِغْلَاقِ" + "close": "زر الإغلاق" }, "forms": { - "toggle_password_visibility": "تَبْدِيلُ رُؤْيَةِ كَلِمَةِ الْمَرُورِ" + "toggle_password_visibility": "تبديل رؤية كلمة المرور" }, "user_profile": { - "amount_hours": "{{amount}} سَاعَاتٌ", - "amount_minutes": "{{amount}} دَقَائِقُ", - "last_time_played": "آخِرُ مَرَّةٍ لُعِبَتْ {{period}}", - "activity": "النَّشَاطُ الْأَخِيرُ", - "library": "الْمَكْتَبَةُ", - "total_play_time": "إِجْمَالِيُّ وَقْتِ اللَّعِبِ", - "no_recent_activity_title": "هَمَمْ... لَا شَيْءَ هُنَا", - "no_recent_activity_description": "لَمْ تَلْعَبْ أَيَّ أَلْعَابٍ مُؤَخَّرًا. حَانَ الْوَقْتُ لِتَغْيِيرِ ذَلِكَ!", - "display_name": "اسْمُ الْعَرْضِ", - "saving": "جَارٍ الْحِفْظُ", - "save": "حِفْظٌ", - "edit_profile": "تَحْرِيرُ الْمَلَفِّ الشَّخْصِيِّ", - "saved_successfully": "تَمَّ الْحِفْظُ بِنَجَاحٍ", - "try_again": "الرَّجَاءُ الْمُحَاوَلَةُ مَرَّةً أُخْرَى", - "sign_out_modal_title": "هَلْ أَنْتَ مُتَأَكِّدٌ؟", - "cancel": "إِلْغَاءٌ", - "successfully_signed_out": "تَمَّ تَسْجِيلُ الْخُرُوجِ بِنَجَاحٍ", - "sign_out": "تَسْجِيلُ الْخُرُوجِ", - "playing_for": "جَارِي اللَّعِبُ لِمُدَّةِ {{amount}}", - "sign_out_modal_text": "مَكْتَبَتُكَ مُرْتَبِطَةٌ بِحِسَابِكَ الْحَالِيِّ. عِنْدَ تَسْجِيلِ الْخُرُوجِ، لَنْ تَكُونَ مَكْتَبَتُكَ مَرْئِيَّةً بَعْدَ الْآنِ، وَلَنْ يَتِمَّ حِفْظُ أَيِّ تَقَدُّمٍ. هَلْ تُرِيدُ الْمُتَابَعَةَ مَعَ تَسْجِيلِ الْخُرُوجِ؟", - "add_friends": "إِضَافَةُ الْأَصْدِقَاءِ", - "add": "إِضَافَةٌ", - "friend_code": "رَمْزُ الصَّدِيقِ", - "see_profile": "رُؤْيَةُ الْمَلَفِّ الشَّخْصِيِّ", - "sending": "جَارٍ الْإِرْسَالُ", - "friend_request_sent": "تَمَّ إِرْسَالُ طَلَبِ الصَّدَاقَةِ", - "friends": "الْأَصْدِقَاءُ", - "friends_list": "قَائِمَةُ الْأَصْدِقَاءِ", - "user_not_found": "الْمُسْتَخْدِمُ غَيْرُ مَوْجُودٍ", - "block_user": "حَظْرُ الْمُسْتَخْدِمِ", - "add_friend": "إِضَافَةُ صَدِيقٍ", - "request_sent": "تَمَّ إِرْسَالُ الطَّلَبِ", - "request_received": "تَمَّ اسْتِقْبَالُ الطَّلَبِ", - "accept_request": "قَبُولُ الطَّلَبِ", - "ignore_request": "تَجَاهُلُ الطَّلَبِ", - "cancel_request": "إِلْغَاءُ الطَّلَبِ", - "undo_friendship": "إِلْغَاءُ الصَّدَاقَةِ", - "request_accepted": "تَمَّ قَبُولُ الطَّلَبِ", - "user_blocked_successfully": "تَمَّ حَظْرُ الْمُسْتَخْدِمِ بِنَجَاحٍ", - "user_block_modal_text": "سَيُؤَدِّي هَذَا إِلَى حَظْرِ {{displayName}}", - "blocked_users": "الْمُسْتَخْدِمُونَ الْمَحْظُورُونَ", - "unblock": "إِزَالَةُ الْحَظْرِ", - "no_friends_added": "لَيْسَ لَدَيْكَ أَصْدِقَاءٌ مُضَافُونَ", - "pending": "قَيْدُ الْانْتِظَارِ", - "no_pending_invites": "لَيْسَ لَدَيْكَ دَعَوَاتٌ قَيْدُ الْانْتِظَارِ", - "no_blocked_users": "لَيْسَ لَدَيْكَ مُسْتَخْدِمُونَ مَحْظُورُونَ", - "friend_code_copied": "تَمَّ نَسْخُ رَمْزِ الصَّدِيقِ", - "undo_friendship_modal_text": "سَيُؤَدِّي هَذَا إِلَى إِلْغَاءِ صَدَاقَتِكَ مَعَ {{displayName}}", - "privacy_hint": "لِتَعْدِيلِ مَنْ يُمْكِنُهُ رُؤْيَةُ هَذَا، اذْهَبْ إِلَى <0>الإعْدَادَاتِ", - "locked_profile": "هَذَا الْمَلَفُّ الشَّخْصِيُّ خَاصٌّ", - "image_process_failure": "فَشَلَ أَثْنَاءَ مُعَالَجَةِ الصُّورَةِ", - "required_field": "هَذَا الْحَقْلُ مَطْلُوبٌ", - "displayname_min_length": "يَجِبُ أَنْ يَكُونَ اسْمُ الْعَرْضِ عَلَى الْأَقَلِّ 3 أَحْرُفٍ", - "displayname_max_length": "يَجِبُ أَنْ يَكُونَ اسْمُ الْعَرْضِ عَلَى الْأَكْثَرِ 50 حَرْفًا", - "report_profile": "تَقْرِيرٌ عَنْ هَذَا الْمَلَفِّ الشَّخْصِيِّ", - "report_reason": "لِمَاذَا تُقَدِّمُ تَقْرِيرًا عَنْ هَذَا الْمَلَفِّ الشَّخْصِيِّ؟", - "report_description": "مَعْلُومَاتٌ إِضَافِيَّةٌ", - "report_description_placeholder": "مَعْلُومَاتٌ إِضَافِيَّةٌ", - "report": "تَقْرِيرٌ", - "report_reason_hate": "خِطَابُ الْكُرْهِ", - "report_reason_sexual_content": "مُحْتَوًى جِنْسِيٌّ", - "report_reason_violence": "عُنْفٌ", - "report_reason_spam": "رَاسِلَةٌ عَشْوَائِيَّةٌ", - "report_reason_other": "آخَرُ", - "profile_reported": "تَمَّ تَقْرِيرُ الْمَلَفِّ الشَّخْصِيِّ", - "your_friend_code": "رَمْزُ صَدِيقِكَ:", - "upload_banner": "رَفْعُ لَافِتَةٍ", - "uploading_banner": "جَارٍ رَفْعُ اللَّافِتَةِ...", - "background_image_updated": "تَمَّ تَحْدِيثُ صُورَةِ الْخَلْفِيَّةِ", - "stats": "الإحْصَائِيَّاتُ", - "achievements": "الإِنْجَازَاتُ", - "games": "الْأَلْعَابُ", - "top_percentile": "الْأَفْضَلُ {{percentile}}%", - "ranking_updated_weekly": "التَّرْتِيبُ يُحَدَّثُ أُسْبُوعِيًّا", - "playing": "جَارِي اللَّعِبُ {{game}}", - "achievements_unlocked": "الإِنْجَازَاتُ الْمَفْتُوحَةُ", - "earned_points": "النَّقَاطُ الْمَكْسُوبَةُ", - "show_achievements_on_profile": "عَرْضُ إِنْجَازَاتِكَ عَلَى مَلَفِّكَ الشَّخْصِيِّ", - "show_points_on_profile": "عَرْضُ النَّقَاطِ الْمَكْسُوبَةِ عَلَى مَلَفِّكَ الشَّخْصِيِّ" + "amount_hours": "{{amount}} ساعات", + "amount_minutes": "{{amount}} دقائق", + "last_time_played": "آخر تشغيل {{period}}", + "activity": "النشاط الأخير", + "library": "المكتبة", + "total_play_time": "إجمالي وقت اللعب", + "no_recent_activity_title": "همم... لا شيء هنا", + "no_recent_activity_description": "لم تلعب أي ألعاب مؤخرًا. حان الوقت لتغيير ذلك!", + "display_name": "اسم العرض", + "saving": "جارٍ الحفظ", + "save": "حفظ", + "edit_profile": "تعديل الملف الشخصي", + "saved_successfully": "تم الحفظ بنجاح", + "try_again": "يرجى المحاولة مرة أخرى", + "sign_out_modal_title": "هل أنت متأكد؟", + "cancel": "إلغاء", + "successfully_signed_out": "تم تسجيل الخروج بنجاح", + "sign_out": "تسجيل الخروج", + "playing_for": "يلعب لمدة {{amount}}", + "sign_out_modal_text": "مكتبتك مرتبطة بحسابك الحالي. عند تسجيل الخروج، لن تكون مكتبتك مرئية بعد الآن، ولن يتم حفظ أي تقدم. هل تتابع تسجيل الخروج؟", + "add_friends": "إضافة أصدقاء", + "add": "إضافة", + "friend_code": "رمز الصديق", + "see_profile": "عرض الملف الشخصي", + "sending": "جارٍ الإرسال", + "friend_request_sent": "تم إرسال طلب الصداقة", + "friends": "الأصدقاء", + "friends_list": "قائمة الأصدقاء", + "user_not_found": "المستخدم غير موجود", + "block_user": "حظر المستخدم", + "add_friend": "إضافة صديق", + "request_sent": "تم إرسال الطلب", + "request_received": "تم استلام الطلب", + "accept_request": "قبول الطلب", + "ignore_request": "تجاهل الطلب", + "cancel_request": "إلغاء الطلب", + "undo_friendship": "إلغاء الصداقة", + "request_accepted": "تم قبول الطلب", + "user_blocked_successfully": "تم حظر المستخدم بنجاح", + "user_block_modal_text": "سيؤدي هذا إلى حظر {{displayName}}", + "blocked_users": "المستخدمون المحظورون", + "unblock": "إلغاء الحظر", + "no_friends_added": "ليس لديك أصدقاء مضافون", + "pending": "قيد الانتظار", + "no_pending_invites": "ليس لديك دعوات معلقة", + "no_blocked_users": "ليس لديك مستخدمون محظورون", + "friend_code_copied": "تم نسخ رمز الصديق", + "undo_friendship_modal_text": "سيؤدي هذا إلى إلغاء صداقتك مع {{displayName}}", + "privacy_hint": "لضبط من يمكنه رؤية هذا، انتقل إلى <0>الإعدادات", + "locked_profile": "هذا الملف الشخصي خاص", + "image_process_failure": "فشل معالجة الصورة", + "required_field": "هذا الحقل مطلوب", + "displayname_min_length": "يجب أن يكون اسم العرض على الأقل 3 أحرف", + "displayname_max_length": "يجب ألا يتجاوز اسم العرض 50 حرفًا", + "report_profile": "الإبلاغ عن هذا الملف الشخصي", + "report_reason": "لماذا تقوم بالإبلاغ عن هذا الملف الشخصي؟", + "report_description": "معلومات إضافية", + "report_description_placeholder": "معلومات إضافية", + "report": "الإبلاغ", + "report_reason_hate": "خطاب كراهية", + "report_reason_sexual_content": "محتوى جنسي", + "report_reason_violence": "عنف", + "report_reason_spam": "بريد عشوائي", + "report_reason_other": "أخرى", + "profile_reported": "تم الإبلاغ عن الملف الشخصي", + "your_friend_code": "رمز صديقك:", + "upload_banner": "تحميل بانر", + "uploading_banner": "جارٍ تحميل البانر...", + "background_image_updated": "تم تحديث صورة الخلفية", + "stats": "الإحصائيات", + "achievements": "إنجازات", + "games": "الألعاب", + "top_percentile": "ال{{percentile}}% الأعلى", + "ranking_updated_weekly": "يتم تحديث التصنيف أسبوعيًا", + "playing": "يلعب {{game}}", + "achievements_unlocked": "الإنجازات المفتوحة", + "earned_points": "النقاط المكتسبة", + "show_achievements_on_profile": "عرض إنجازاتك على ملفك الشخصي", + "show_points_on_profile": "عرض نقاطك المكتسبة على ملفك الشخصي" }, "achievement": { - "achievement_unlocked": "إِنْجَازٌ مَفْتُوحٌ", - "user_achievements": "إِنْجَازَاتُ {{displayName}}", - "your_achievements": "إِنْجَازَاتُكَ", - "unlocked_at": "تَمَّ الْفَتْحُ فِي: {{date}}", - "subscription_needed": "يَحْتَاجُ اشْتِرَاكُ Hydra Cloud لِرُؤْيَةِ هَذَا الْمُحْتَوَى", - "new_achievements_unlocked": "تَمَّ فَتْحُ {{achievementCount}} إِنْجَازَاتٍ جَدِيدَةٍ مِنْ {{gameCount}} أَلْعَابٍ", - "achievement_progress": "{{unlockedCount}}/{{totalCount}} إِنْجَازَاتٍ", - "achievements_unlocked_for_game": "تَمَّ فَتْحُ {{achievementCount}} إِنْجَازَاتٍ جَدِيدَةٍ لِـ {{gameTitle}}", - "hidden_achievement_tooltip": "هَذَا إِنْجَازٌ مَخْفِيٌّ", - "achievement_earn_points": "اكْسِبْ {{points}} نَقَاطًا بِهَذَا الإِنْجَازِ", - "earned_points": "النَّقَاطُ الْمَكْسُوبَةُ:", - "available_points": "النَّقَاطُ الْمُتَوَفِّرَةُ:", - "how_to_earn_achievements_points": "كَيْفَ تَكْسِبُ نَقَاطَ الإِنْجَازَاتِ؟" + "achievement_unlocked": "تم فتح الإنجاز", + "user_achievements": "إنجازات {{displayName}}", + "your_achievements": "إنجازاتك", + "unlocked_at": "تم الفتح في: {{date}}", + "subscription_needed": "يحتاج إلى اشتراك Hydra Cloud لرؤية هذا المحتوى", + "new_achievements_unlocked": "تم فتح {{achievementCount}} إنجازات جديدة من {{gameCount}} ألعاب", + "achievement_progress": "{{unlockedCount}}/{{totalCount}} إنجازات", + "achievements_unlocked_for_game": "تم فتح {{achievementCount}} إنجازات جديدة لـ {{gameTitle}}", + "hidden_achievement_tooltip": "هذا إنجاز مخفي", + "achievement_earn_points": "اكسب {{points}} نقطة مع هذا الإنجاز", + "earned_points": "النقاط المكتسبة:", + "available_points": "النقاط المتاحة:", + "how_to_earn_achievements_points": "كيفية كسب نقاط الإنجازات؟" }, "hydra_cloud": { - "subscription_tour_title": "اشْتِرَاكُ Hydra Cloud", - "subscribe_now": "اشْتَرِكِ الْآنَ", - "cloud_saving": "حِفْظٌ سَحَابِيٌّ", - "cloud_achievements": "حِفْظُ إِنْجَازَاتِكَ فِي السَّحَابَةِ", - "animated_profile_picture": "صُورُ الْمَلَفِّ الشَّخْصِيِّ الْمُتَحَرِّكَةِ", - "premium_support": "الدَّعْمُ الْمُتَقَدِّمُ", - "show_and_compare_achievements": "عَرْضٌ وَمُقَارَنَةُ إِنْجَازَاتِكَ مَعَ مُسْتَخْدِمِينَ آخَرِينَ", - "animated_profile_banner": "لَافِتَةُ الْمَلَفِّ الشَّخْصِيِّ الْمُتَحَرِّكَةِ", + "subscription_tour_title": "اشتراك Hydra Cloud", + "subscribe_now": "اشترك الآن", + "cloud_saving": "حفظ سحابي", + "cloud_achievements": "احفظ إنجازاتك على السحابة", + "animated_profile_picture": "صورة ملف شخصي متحركة", + "premium_support": "دعم ممتاز", + "show_and_compare_achievements": "اعرض وقارن إنجازاتك مع المستخدمين الآخرين", + "animated_profile_banner": "بانر ملف شخصي متحرك", "hydra_cloud": "Hydra Cloud", - "hydra_cloud_feature_found": "لَقَدْ اكْتَشَفْتَ مِيزَةً مِنْ Hydra Cloud!", - "learn_more": "تَعَلَّمْ أَكْثَرَ" + "hydra_cloud_feature_found": "لقد اكتشفت ميزة Hydra Cloud!", + "learn_more": "معرفة المزيد" } } From a3a1271b639063395790f393ec3f070635568d19 Mon Sep 17 00:00:00 2001 From: Lianela <140931995+Lianela@users.noreply.github.com> Date: Sat, 1 Feb 2025 02:57:51 -0300 Subject: [PATCH 30/33] updated es translation.json added missing strings --- src/locales/es/translation.json | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json index 931ee058..153d782b 100644 --- a/src/locales/es/translation.json +++ b/src/locales/es/translation.json @@ -175,7 +175,16 @@ "backup_from": "Copia de seguridad de {{date}}", "custom_backup_location_set": "Se configuró la carpeta de copia de seguridad", "clear": "Limpiar", - "no_directory_selected": "No se seleccionó un directorio" + "no_directory_selected": "No se seleccionó un directorio", + "launch_options": "Opciones de Inicio", + "launch_options_description": "Los usuarios avanzados pueden introducir sus propias modificaciones de opciones de inicio (característica experimental)", + "launch_options_placeholder": "Sin parámetro específicado", + "no_write_permission": "No se puede descargar en este directorio. Presiona aquí para aprender más.", + "reset_achievements": "Reiniciar logros", + "reset_achievements_description": "Esto reiniciará todos los logros de {{game}}", + "reset_achievements_title": "¿Estás seguro?", + "reset_achievements_success": "Logros reiniciados exitosamente", + "reset_achievements_error": "Se produjo un error al reiniciar los logros" }, "activation": { "title": "Activar Hydra", @@ -271,7 +280,23 @@ "launch_minimized": "Iniciar Hydra minimizado", "disable_nsfw_alert": "Desactivar alerta NSFW", "seed_after_download_complete": "Realizar seeding después de que se completa la descarga", - "show_hidden_achievement_description": "Ocultar descripción de logros ocultos antes de desbloquearlos" + "show_hidden_achievement_description": "Ocultar descripción de logros ocultos antes de desbloquearlos", + "account": "Cuenta", + "account_data_updated_successfully": "Datos de la cuenta actualizados", + "bill_sent_until": "Tú próxima factura se enviará el {{date}}", + "current_email": "Correo actual:", + "manage_subscription": "Gestionar suscripción", + "no_email_account": "No has configurado un correo aún", + "no_subscription": "Disfruta Hydra de la mejor manera", + "no_users_blocked": "No tienes usuarios bloqueados", + "notifications": "Notificaciones", + "renew_subscription": "Renovar Hydra Cloud", + "subscription_active_until": "Tú Hydra Cloud está activa hasta {{date}}", + "subscription_expired_at": "Tú suscripción expiró el {{date}}", + "subscription_renew_cancelled": "Está desactivada la renovación automática", + "subscription_renews_on": "Tú suscripción se renueva el {{date}}", + "update_email": "Actualizar correo", + "update_password": "Actualizar contraseña" }, "notifications": { "download_complete": "Descarga completada", From f37b1f3d12d04b53770629c87b431d17411f2cdd Mon Sep 17 00:00:00 2001 From: Lianela <140931995+Lianela@users.noreply.github.com> Date: Sat, 1 Feb 2025 03:38:31 -0300 Subject: [PATCH 31/33] Update src/locales/es/translation.json Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- src/locales/es/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/es/translation.json b/src/locales/es/translation.json index 153d782b..c8667d6c 100644 --- a/src/locales/es/translation.json +++ b/src/locales/es/translation.json @@ -291,7 +291,7 @@ "no_users_blocked": "No tienes usuarios bloqueados", "notifications": "Notificaciones", "renew_subscription": "Renovar Hydra Cloud", - "subscription_active_until": "Tú Hydra Cloud está activa hasta {{date}}", + "subscription_active_until": "Tu Hydra Cloud está activa hasta {{date}}", "subscription_expired_at": "Tú suscripción expiró el {{date}}", "subscription_renew_cancelled": "Está desactivada la renovación automática", "subscription_renews_on": "Tú suscripción se renueva el {{date}}", From 1ed13d8a91ee744a9fb58332ee3c641a42ad5620 Mon Sep 17 00:00:00 2001 From: Shisuys Date: Sat, 1 Feb 2025 16:20:14 -0300 Subject: [PATCH 32/33] Revert "Create a downloader for the gamedrivers bypass" This reverts commit 6da648b21c04594898c9b6e2a802123e500b7947. --- src/main/services/download/download-manager.ts | 10 ---------- src/renderer/src/constants.ts | 1 - src/shared/constants.ts | 1 - src/shared/index.ts | 1 - 4 files changed, 13 deletions(-) diff --git a/src/main/services/download/download-manager.ts b/src/main/services/download/download-manager.ts index aa26ce06..8fda319e 100644 --- a/src/main/services/download/download-manager.ts +++ b/src/main/services/download/download-manager.ts @@ -260,16 +260,6 @@ export class DownloadManager { case Downloader.PixelDrain: { const id = game.uri!.split("/").pop(); - return { - action: "start", - game_id: game.id, - url: `https://pixeldrain.com/api/file/${id}?download`, - save_path: game.downloadPath!, - }; - } - case Downloader.GameDrive: { - const id = game.uri!.split("/").pop(); - return { action: "start", game_id: game.id, diff --git a/src/renderer/src/constants.ts b/src/renderer/src/constants.ts index a1d9919b..d0797caf 100644 --- a/src/renderer/src/constants.ts +++ b/src/renderer/src/constants.ts @@ -9,7 +9,6 @@ export const DOWNLOADER_NAME = { [Downloader.PixelDrain]: "PixelDrain", [Downloader.Qiwi]: "Qiwi", [Downloader.Datanodes]: "Datanodes", - [Downloader.GameDrive]: "GameDrive", }; export const MAX_MINUTES_TO_SHOW_IN_PLAYTIME = 120; diff --git a/src/shared/constants.ts b/src/shared/constants.ts index e22c0c2c..f2bcc793 100644 --- a/src/shared/constants.ts +++ b/src/shared/constants.ts @@ -5,7 +5,6 @@ export enum Downloader { PixelDrain, Qiwi, Datanodes, - GameDrive, } export enum DownloadSourceStatus { diff --git a/src/shared/index.ts b/src/shared/index.ts index b22a3cac..7d612a17 100644 --- a/src/shared/index.ts +++ b/src/shared/index.ts @@ -88,7 +88,6 @@ export const getDownloadersForUri = (uri: string) => { if (uri.startsWith("https://pixeldrain.com")) return [Downloader.PixelDrain]; if (uri.startsWith("https://qiwi.gg")) return [Downloader.Qiwi]; if (uri.startsWith("https://datanodes.to")) return [Downloader.Datanodes]; - if (uri.startsWith("https://pd.cybar.xyz")) return [Downloader.GameDrive]; if (realDebridHosts.some((host) => uri.startsWith(host))) return [Downloader.RealDebrid]; From 24f58673cfd970f530063af418cabf8372ec7381 Mon Sep 17 00:00:00 2001 From: Chubby Granny Chaser Date: Sat, 1 Feb 2025 19:33:09 +0000 Subject: [PATCH 33/33] fix: fixing css issues --- .eslintrc.cjs | 1 - .storybook/app.css.ts | 85 -- .storybook/main.ts | 31 - .storybook/preview.ts | 22 - package.json | 14 +- .../src/pages/settings/settings-behavior.tsx | 14 +- .../src/pages/settings/settings-general.tsx | 10 +- src/stories/button.stories.tsx | 74 -- src/stories/toast.stories.tsx | 115 -- yarn.lock | 1156 +---------------- 10 files changed, 41 insertions(+), 1481 deletions(-) delete mode 100644 .storybook/app.css.ts delete mode 100644 .storybook/main.ts delete mode 100644 .storybook/preview.ts delete mode 100644 src/stories/button.stories.tsx delete mode 100644 src/stories/toast.stories.tsx diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 90489b6d..6da066af 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -7,7 +7,6 @@ module.exports = { "plugin:jsx-a11y/recommended", "@electron-toolkit/eslint-config-ts/recommended", "plugin:prettier/recommended", - "plugin:storybook/recommended", ], rules: { "@typescript-eslint/explicit-function-return-type": "off", diff --git a/.storybook/app.css.ts b/.storybook/app.css.ts deleted file mode 100644 index 2fc9d074..00000000 --- a/.storybook/app.css.ts +++ /dev/null @@ -1,85 +0,0 @@ -import { createContainer, globalStyle } from "@vanilla-extract/css"; -import { vars } from "../src/renderer/src/theme.css"; - -export const appContainer = createContainer(); - -globalStyle("*", { - boxSizing: "border-box", -}); - -globalStyle("::-webkit-scrollbar", { - width: "9px", - backgroundColor: vars.color.darkBackground, -}); - -globalStyle("::-webkit-scrollbar-track", { - backgroundColor: "rgba(255, 255, 255, 0.03)", -}); - -globalStyle("::-webkit-scrollbar-thumb", { - backgroundColor: "rgba(255, 255, 255, 0.08)", - borderRadius: "24px", -}); - -globalStyle("::-webkit-scrollbar-thumb:hover", { - backgroundColor: "rgba(255, 255, 255, 0.16)", -}); - -globalStyle("html, body, #root, main", { - height: "100%", -}); - -globalStyle("body", { - userSelect: "none", - fontFamily: "Noto Sans, sans-serif", - fontSize: vars.size.body, - color: vars.color.body, - margin: "0", -}); - -globalStyle("button", { - padding: "0", - backgroundColor: "transparent", - border: "none", - fontFamily: "inherit", -}); - -globalStyle("h1, h2, h3, h4, h5, h6, p", { - margin: 0, -}); - -globalStyle("p", { - lineHeight: "20px", -}); - -globalStyle("#root, main", { - display: "flex", -}); - -globalStyle("#root", { - flexDirection: "column", -}); - -globalStyle( - "input::-webkit-outer-spin-button, input::-webkit-inner-spin-button", - { - WebkitAppearance: "none", - margin: "0", - } -); - -globalStyle("label", { - fontSize: vars.size.body, -}); - -globalStyle("input[type=number]", { - MozAppearance: "textfield", -}); - -globalStyle("img", { - WebkitUserDrag: "none", -} as Record); - -globalStyle("progress[value]", { - WebkitAppearance: "none", -}); diff --git a/.storybook/main.ts b/.storybook/main.ts deleted file mode 100644 index 09ee45fd..00000000 --- a/.storybook/main.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { resolve } from "path"; -import type { StorybookConfig } from "@storybook/react-vite"; -import { vanillaExtractPlugin } from "@vanilla-extract/vite-plugin"; - -const config: StorybookConfig = { - stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], - addons: [ - "@storybook/addon-onboarding", - "@storybook/addon-essentials", - "@chromatic-com/storybook", - "@storybook/addon-interactions", - ], - framework: { - name: "@storybook/react-vite", - options: {}, - }, - viteFinal: (config) => { - return { - ...config, - resolve: { - alias: { - "@renderer": resolve("src/renderer/src"), - "@locales": resolve("src/locales"), - "@shared": resolve("src/shared"), - }, - }, - plugins: [...config.plugins, vanillaExtractPlugin()], - }; - }, -}; -export default config; diff --git a/.storybook/preview.ts b/.storybook/preview.ts deleted file mode 100644 index f451e2ee..00000000 --- a/.storybook/preview.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { Preview } from "@storybook/react"; - -import "@fontsource/noto-sans/400.css"; -import "@fontsource/noto-sans/500.css"; -import "@fontsource/noto-sans/700.css"; - -import "react-loading-skeleton/dist/skeleton.css"; - -import "./app.css"; - -const preview: Preview = { - parameters: { - controls: { - matchers: { - color: /(background|color)$/i, - date: /Date$/i, - }, - }, - }, -}; - -export default preview; diff --git a/package.json b/package.json index a9e4aa10..f7fac4ca 100644 --- a/package.json +++ b/package.json @@ -29,9 +29,7 @@ "build:mac": "electron-vite build && electron-builder --mac", "build:linux": "electron-vite build && electron-builder --linux", "prepare": "husky", - "knex:migrate:make": "knex --knexfile src/main/knexfile.ts migrate:make --esm", - "storybook": "storybook dev -p 6006", - "build-storybook": "storybook build" + "knex:migrate:make": "knex --knexfile src/main/knexfile.ts migrate:make --esm" }, "dependencies": { "@electron-toolkit/preload": "^3.0.0", @@ -84,19 +82,11 @@ }, "devDependencies": { "@aws-sdk/client-s3": "^3.705.0", - "@chromatic-com/storybook": "^3.2.4", "@commitlint/cli": "^19.6.0", "@commitlint/config-conventional": "^19.6.0", "@electron-toolkit/eslint-config-prettier": "^2.0.0", "@electron-toolkit/eslint-config-ts": "^2.0.0", "@electron-toolkit/tsconfig": "^1.0.1", - "@storybook/addon-essentials": "^8.5.1", - "@storybook/addon-interactions": "^8.5.1", - "@storybook/addon-onboarding": "^8.5.1", - "@storybook/blocks": "^8.5.1", - "@storybook/react": "^8.5.1", - "@storybook/react-vite": "^8.5.1", - "@storybook/test": "^8.5.1", "@swc/core": "^1.4.16", "@types/auto-launch": "^5.0.5", "@types/color": "^3.0.6", @@ -119,13 +109,11 @@ "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-react": "^7.37.2", "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-storybook": "^0.11.2", "husky": "^9.1.7", "prettier": "^3.4.2", "react": "^18.2.0", "react-dom": "^18.2.0", "sass-embedded": "^1.80.6", - "storybook": "^8.5.1", "ts-node": "^10.9.2", "typescript": "^5.3.3", "vite": "^5.0.12", diff --git a/src/renderer/src/pages/settings/settings-behavior.tsx b/src/renderer/src/pages/settings/settings-behavior.tsx index 28c50256..c1bdcf10 100644 --- a/src/renderer/src/pages/settings/settings-behavior.tsx +++ b/src/renderer/src/pages/settings/settings-behavior.tsx @@ -28,13 +28,15 @@ export function SettingsBehavior() { useEffect(() => { if (userPreferences) { setForm({ - preferQuitInsteadOfHiding: userPreferences.preferQuitInsteadOfHiding, - runAtStartup: userPreferences.runAtStartup, - startMinimized: userPreferences.startMinimized, - disableNsfwAlert: userPreferences.disableNsfwAlert, - seedAfterDownloadComplete: userPreferences.seedAfterDownloadComplete, + preferQuitInsteadOfHiding: + userPreferences.preferQuitInsteadOfHiding ?? false, + runAtStartup: userPreferences.runAtStartup ?? false, + startMinimized: userPreferences.startMinimized ?? false, + disableNsfwAlert: userPreferences.disableNsfwAlert ?? false, + seedAfterDownloadComplete: + userPreferences.seedAfterDownloadComplete ?? false, showHiddenAchievementsDescription: - userPreferences.showHiddenAchievementsDescription, + userPreferences.showHiddenAchievementsDescription ?? false, }); } }, [userPreferences]); diff --git a/src/renderer/src/pages/settings/settings-general.tsx b/src/renderer/src/pages/settings/settings-general.tsx index ba0411a5..52d47abf 100644 --- a/src/renderer/src/pages/settings/settings-general.tsx +++ b/src/renderer/src/pages/settings/settings-general.tsx @@ -65,18 +65,20 @@ export function SettingsGeneral() { (language) => language === userPreferences.language ) ?? languageKeys.find((language) => { - return language.startsWith(userPreferences.language.split("-")[0]); + return language.startsWith( + userPreferences.language?.split("-")[0] ?? "en" + ); }); setForm((prev) => ({ ...prev, downloadsPath: userPreferences.downloadsPath ?? defaultDownloadsPath, downloadNotificationsEnabled: - userPreferences.downloadNotificationsEnabled, + userPreferences.downloadNotificationsEnabled ?? false, repackUpdatesNotificationsEnabled: - userPreferences.repackUpdatesNotificationsEnabled, + userPreferences.repackUpdatesNotificationsEnabled ?? false, achievementNotificationsEnabled: - userPreferences.achievementNotificationsEnabled, + userPreferences.achievementNotificationsEnabled ?? false, language: language ?? "en", })); } diff --git a/src/stories/button.stories.tsx b/src/stories/button.stories.tsx deleted file mode 100644 index aa3d7004..00000000 --- a/src/stories/button.stories.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react"; -import { Button } from "@renderer/components"; - -const meta = { - title: "Components/Button", - component: Button, - parameters: { - layout: "centered", - }, - tags: ["autodocs"], -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -// Primary button (default) -export const Primary: Story = { - args: { - children: "Primary Button", - theme: "primary", - }, -}; - -// Outline variant -export const Outline: Story = { - args: { - children: "Outline Button", - theme: "outline", - }, -}; - -// Dark variant -export const Dark: Story = { - args: { - children: "Dark Button", - theme: "dark", - }, -}; - -// Danger variant -export const Danger: Story = { - args: { - children: "Danger Button", - theme: "danger", - }, -}; - -// Disabled state -export const Disabled: Story = { - args: { - children: "Disabled Button", - disabled: true, - }, -}; - -// Button with icon example -export const WithIcon: Story = { - args: { - children: ( - <> - 🚀 - Button with Icon - - ), - }, -}; - -// Different sizes example using className -export const CustomClassName: Story = { - args: { - children: "Custom Class Button", - className: "custom-class", - }, -}; diff --git a/src/stories/toast.stories.tsx b/src/stories/toast.stories.tsx deleted file mode 100644 index 3f0efe4f..00000000 --- a/src/stories/toast.stories.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react"; -import { Toast } from "@renderer/components"; -import { useState } from "react"; - -const meta = { - title: "Components/Toast", - component: Toast, - parameters: { - layout: "centered", - }, - tags: ["autodocs"], -} satisfies Meta; - -export default meta; -type Story = StoryObj; - -// Base stories for each variant -export const Success: Story = { - args: { - visible: true, - message: "Operation completed successfully", - type: "success", - onClose: () => {}, - }, -}; - -export const Error: Story = { - args: { - visible: true, - message: "An error occurred", - type: "error", - onClose: () => {}, - }, -}; - -export const Warning: Story = { - args: { - visible: true, - message: "Please review before proceeding", - type: "warning", - onClose: () => {}, - }, -}; - -// Interactive story with toggle functionality -const InteractiveToastTemplate = () => { - const [visible, setVisible] = useState(true); - - return ( -
                            - - -
                            - setVisible(false)} - /> -
                            -
                            - ); -}; - -export const Interactive: Story = { - render: () => , -}; - -// Long message example -export const LongMessage: Story = { - args: { - visible: true, - message: - "This is a very long message that demonstrates how the toast component handles text wrapping and content overflow in cases where the message is extensive", - type: "success", - onClose: () => {}, - }, -}; - -// Story with auto-close behavior -const AutoCloseToastTemplate = () => { - const [visible, setVisible] = useState(true); - - return ( -
                            - - setVisible(false)} - /> -
                            - ); -}; - -export const AutoClose: Story = { - render: () => , -}; diff --git a/yarn.lock b/yarn.lock index 000c2a11..3a4656b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,11 +7,6 @@ resolved "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz" integrity sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A== -"@adobe/css-tools@^4.4.0": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@adobe/css-tools/-/css-tools-4.4.1.tgz#2447a230bfe072c1659e6815129c03cf170710e3" - integrity sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ== - "@ampproject/remapping@^2.2.0": version "2.3.0" resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz" @@ -630,15 +625,6 @@ "@babel/highlight" "^7.24.2" picocolors "^1.0.0" -"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": - version "7.26.2" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" - integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== - dependencies: - "@babel/helper-validator-identifier" "^7.25.9" - js-tokens "^4.0.0" - picocolors "^1.0.0" - "@babel/code-frame@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" @@ -647,6 +633,15 @@ "@babel/highlight" "^7.24.7" picocolors "^1.0.0" +"@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== + dependencies: + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" + picocolors "^1.0.0" + "@babel/compat-data@^7.23.5": version "7.24.4" resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz" @@ -662,7 +657,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.3.tgz#99488264a56b2aded63983abd6a417f03b92ed02" integrity sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g== -"@babel/core@^7.18.5", "@babel/core@^7.18.9": +"@babel/core@^7.18.5": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.0.tgz#d78b6023cc8f3114ccf049eb219613f74a747b40" integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== @@ -766,17 +761,6 @@ "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" -"@babel/generator@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.5.tgz#e44d4ab3176bbcaf78a5725da5f1dc28802a9458" - integrity sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw== - dependencies: - "@babel/parser" "^7.26.5" - "@babel/types" "^7.26.5" - "@jridgewell/gen-mapping" "^0.3.5" - "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^3.0.2" - "@babel/helper-compilation-targets@^7.23.6": version "7.23.6" resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz" @@ -1063,13 +1047,6 @@ dependencies: "@babel/types" "^7.26.3" -"@babel/parser@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.5.tgz#6fec9aebddef25ca57a935c86dbb915ae2da3e1f" - integrity sha512-SRJ4jYmXRqV1/Xc+TIVG84WjHBXKlxO9sHQnA2Pf12QQEAp1LOh6kDzNHXcUnbH1QI0FDoPPVOt+vyUDucxpaw== - dependencies: - "@babel/types" "^7.26.5" - "@babel/plugin-syntax-typescript@^7.23.3": version "7.24.1" resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz" @@ -1105,7 +1082,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.17.8", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7": +"@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7": version "7.26.0" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.26.0.tgz#8600c2f595f277c60815256418b85356a65173c1" integrity sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw== @@ -1148,19 +1125,6 @@ "@babel/parser" "^7.25.9" "@babel/types" "^7.25.9" -"@babel/traverse@^7.18.9": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.5.tgz#6d0be3e772ff786456c1a37538208286f6e79021" - integrity sha512-rkOSPOw+AXbgtwUga3U4u8RpoK9FEFWBNAlTpcnkLFjL5CT+oyHNuUUC/xx6XefEJ16r38r8Bc/lfp6rYuHeJQ== - dependencies: - "@babel/code-frame" "^7.26.2" - "@babel/generator" "^7.26.5" - "@babel/parser" "^7.26.5" - "@babel/template" "^7.25.9" - "@babel/types" "^7.26.5" - debug "^4.3.1" - globals "^11.1.0" - "@babel/traverse@^7.24.5": version "7.24.5" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.5.tgz" @@ -1228,14 +1192,6 @@ "@babel/helper-validator-identifier" "^7.24.5" to-fast-properties "^2.0.0" -"@babel/types@^7.18.9", "@babel/types@^7.26.5": - version "7.26.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.5.tgz#7a1e1c01d28e26d1fe7f8ec9567b3b92b9d07747" - integrity sha512-L6mZmwFDK6Cjh1nRCLXpa6no13ZIioJDz7mdkzHv399pThrTa/k0nUlNaenOeh2kWu/iaOQYElEpKPUswUa9Vg== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - "@babel/types@^7.24.7": version "7.24.7" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2" @@ -1267,17 +1223,6 @@ resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-2.2.2.tgz#1a6d89603fb215dc4d4178052d05b30b83c75402" integrity sha512-UNtPCbrwrenpmrXuRwn9jYpPoweNXj8X5sMvYgsqYyaH8jQ6LfUJSk3dJLnBK+6sfYPrF4iAIo5sd5HQ+tg75A== -"@chromatic-com/storybook@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@chromatic-com/storybook/-/storybook-3.2.4.tgz#8cb44d9475be18675498b17a6c6ad479872a35f1" - integrity sha512-5/bOOYxfwZ2BktXeqcCpOVAoR6UCoeART5t9FVy22hoo8F291zOuX4y3SDgm10B1GVU/ZTtJWPT2X9wZFlxYLg== - dependencies: - chromatic "^11.15.0" - filesize "^10.0.12" - jsonfile "^6.1.0" - react-confetti "^6.1.0" - strip-ansi "^7.1.0" - "@commitlint/cli@^19.6.0": version "19.6.0" resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-19.6.0.tgz#98e7fc8501cc38b6eef4b7f61e19b15f3c53700e" @@ -1573,11 +1518,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== -"@esbuild/aix-ppc64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz#38848d3e25afe842a7943643cbcd387cc6e13461" - integrity sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA== - "@esbuild/android-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" @@ -1588,11 +1528,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== -"@esbuild/android-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz#f592957ae8b5643129fa889c79e69cd8669bb894" - integrity sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg== - "@esbuild/android-arm@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" @@ -1603,11 +1538,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== -"@esbuild/android-arm@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.24.2.tgz#72d8a2063aa630308af486a7e5cbcd1e134335b3" - integrity sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q== - "@esbuild/android-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" @@ -1618,11 +1548,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== -"@esbuild/android-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.24.2.tgz#9a7713504d5f04792f33be9c197a882b2d88febb" - integrity sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw== - "@esbuild/darwin-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" @@ -1633,11 +1558,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== -"@esbuild/darwin-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz#02ae04ad8ebffd6e2ea096181b3366816b2b5936" - integrity sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA== - "@esbuild/darwin-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" @@ -1648,11 +1568,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== -"@esbuild/darwin-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz#9ec312bc29c60e1b6cecadc82bd504d8adaa19e9" - integrity sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA== - "@esbuild/freebsd-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" @@ -1663,11 +1578,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== -"@esbuild/freebsd-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz#5e82f44cb4906d6aebf24497d6a068cfc152fa00" - integrity sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg== - "@esbuild/freebsd-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" @@ -1678,11 +1588,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== -"@esbuild/freebsd-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz#3fb1ce92f276168b75074b4e51aa0d8141ecce7f" - integrity sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q== - "@esbuild/linux-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" @@ -1693,11 +1598,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== -"@esbuild/linux-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz#856b632d79eb80aec0864381efd29de8fd0b1f43" - integrity sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg== - "@esbuild/linux-arm@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" @@ -1708,11 +1608,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== -"@esbuild/linux-arm@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz#c846b4694dc5a75d1444f52257ccc5659021b736" - integrity sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA== - "@esbuild/linux-ia32@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" @@ -1723,11 +1618,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== -"@esbuild/linux-ia32@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz#f8a16615a78826ccbb6566fab9a9606cfd4a37d5" - integrity sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw== - "@esbuild/linux-loong64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" @@ -1738,11 +1628,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== -"@esbuild/linux-loong64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz#1c451538c765bf14913512c76ed8a351e18b09fc" - integrity sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ== - "@esbuild/linux-mips64el@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" @@ -1753,11 +1638,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== -"@esbuild/linux-mips64el@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz#0846edeefbc3d8d50645c51869cc64401d9239cb" - integrity sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw== - "@esbuild/linux-ppc64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" @@ -1768,11 +1648,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== -"@esbuild/linux-ppc64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz#8e3fc54505671d193337a36dfd4c1a23b8a41412" - integrity sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw== - "@esbuild/linux-riscv64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" @@ -1783,11 +1658,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== -"@esbuild/linux-riscv64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz#6a1e92096d5e68f7bb10a0d64bb5b6d1daf9a694" - integrity sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q== - "@esbuild/linux-s390x@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" @@ -1798,11 +1668,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== -"@esbuild/linux-s390x@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz#ab18e56e66f7a3c49cb97d337cd0a6fea28a8577" - integrity sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw== - "@esbuild/linux-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" @@ -1813,16 +1678,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== -"@esbuild/linux-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz#8140c9b40da634d380b0b29c837a0b4267aff38f" - integrity sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q== - -"@esbuild/netbsd-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz#65f19161432bafb3981f5f20a7ff45abb2e708e6" - integrity sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw== - "@esbuild/netbsd-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" @@ -1833,16 +1688,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== -"@esbuild/netbsd-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz#7a3a97d77abfd11765a72f1c6f9b18f5396bcc40" - integrity sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw== - -"@esbuild/openbsd-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz#58b00238dd8f123bfff68d3acc53a6ee369af89f" - integrity sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A== - "@esbuild/openbsd-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" @@ -1853,11 +1698,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== -"@esbuild/openbsd-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz#0ac843fda0feb85a93e288842936c21a00a8a205" - integrity sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA== - "@esbuild/sunos-x64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" @@ -1868,11 +1708,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== -"@esbuild/sunos-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz#8b7aa895e07828d36c422a4404cc2ecf27fb15c6" - integrity sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig== - "@esbuild/win32-arm64@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" @@ -1883,11 +1718,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== -"@esbuild/win32-arm64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz#c023afb647cabf0c3ed13f0eddfc4f1d61c66a85" - integrity sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ== - "@esbuild/win32-ia32@0.19.12": version "0.19.12" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" @@ -1898,11 +1728,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== -"@esbuild/win32-ia32@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz#96c356132d2dda990098c8b8b951209c3cd743c2" - integrity sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA== - "@esbuild/win32-x64@0.19.12": version "0.19.12" resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz" @@ -1913,11 +1738,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== -"@esbuild/win32-x64@0.24.2": - version "0.24.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz#34aa0b52d0fbb1a654b596acfa595f0c7b77a77b" - integrity sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg== - "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" @@ -2035,14 +1855,6 @@ dependencies: minipass "^7.0.4" -"@joshwooding/vite-plugin-react-docgen-typescript@0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.4.2.tgz#c2591d2d7b02160341672d6bf3cc248dd60f2530" - integrity sha512-feQ+ntr+8hbVudnsTUapiMN9q8T90XA1d5jn9QzY09sNoj4iD9wi0PY1vsBFTda4ZjEaxRK9S81oarR2nj7TFQ== - dependencies: - magic-string "^0.27.0" - react-docgen-typescript "^2.2.2" - "@jridgewell/gen-mapping@^0.3.5": version "0.3.5" resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" @@ -2067,7 +1879,7 @@ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/sourcemap-codec@^1.4.13", "@jridgewell/sourcemap-codec@^1.4.15", "@jridgewell/sourcemap-codec@^1.5.0": +"@jridgewell/sourcemap-codec@^1.4.15", "@jridgewell/sourcemap-codec@^1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== @@ -2105,13 +1917,6 @@ lodash "^4.17.15" tmp-promise "^3.0.2" -"@mdx-js/react@^3.0.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.1.0.tgz#c4522e335b3897b9a845db1dbdd2f966ae8fb0ed" - integrity sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ== - dependencies: - "@types/mdx" "^2.0.0" - "@napi-rs/nice-android-arm-eabi@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz#9a0cba12706ff56500df127d6f4caf28ddb94936" @@ -2496,15 +2301,6 @@ resolved "https://registry.yarnpkg.com/@remix-run/router/-/router-1.19.2.tgz#0c896535473291cb41f152c180bedd5680a3b273" integrity sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA== -"@rollup/pluginutils@^5.0.2": - version "5.1.4" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz#bb94f1f9eaaac944da237767cdfee6c5b2262d4a" - integrity sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ== - dependencies: - "@types/estree" "^1.0.0" - estree-walker "^2.0.2" - picomatch "^4.0.2" - "@rollup/pluginutils@^5.0.5": version "5.1.0" resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz" @@ -3230,255 +3026,6 @@ "@smithy/types" "^3.7.2" tslib "^2.6.2" -"@storybook/addon-actions@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-8.5.1.tgz#9a8bf4c5bf4801310a5e299dd21ad69494373b7e" - integrity sha512-oBBSpOJ6/rCdbdU1JxGCLernaCxALLWDIeZk6tLoQbtbsx/czD1sodqjcujjKwbQwNyZTf8xR8zsCSzG06dWDw== - dependencies: - "@storybook/global" "^5.0.0" - "@types/uuid" "^9.0.1" - dequal "^2.0.2" - polished "^4.2.2" - uuid "^9.0.0" - -"@storybook/addon-backgrounds@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-backgrounds/-/addon-backgrounds-8.5.1.tgz#07087aa07e22ae864737842e72f442a820833afd" - integrity sha512-4NFRFblPbRP3D4o4sSbJ1x9SMncP4+SHdSqKIovTjb+zOhqYPFYWMTinzEndUnBSDGREldHUvHjROuxrD/0qzA== - dependencies: - "@storybook/global" "^5.0.0" - memoizerific "^1.11.3" - ts-dedent "^2.0.0" - -"@storybook/addon-controls@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-controls/-/addon-controls-8.5.1.tgz#21d9372c08c16c026a34abb35b87a9dcf5aafa7f" - integrity sha512-RA/SPXW1chfsWaV8Lv/aXJNZJ8hasDEXQ1C5xRCt+T8DFvPqRZGgUfIpsiZ80AKp5RzufT9KL+39piPMljhKXA== - dependencies: - "@storybook/global" "^5.0.0" - dequal "^2.0.2" - ts-dedent "^2.0.0" - -"@storybook/addon-docs@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-docs/-/addon-docs-8.5.1.tgz#78b43c9fdb8d5daef6ea8008e687f17156d2f3d0" - integrity sha512-XhELkuNFOa8q2rF/AXTwnKZth7lCFqkfR5VuEAQ+g9hv2p6I/VGlTddylzjdaZKhiy4p8O9DrzGdLFj+oxOpMw== - dependencies: - "@mdx-js/react" "^3.0.0" - "@storybook/blocks" "8.5.1" - "@storybook/csf-plugin" "8.5.1" - "@storybook/react-dom-shim" "8.5.1" - react "^16.8.0 || ^17.0.0 || ^18.0.0" - react-dom "^16.8.0 || ^17.0.0 || ^18.0.0" - ts-dedent "^2.0.0" - -"@storybook/addon-essentials@^8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-essentials/-/addon-essentials-8.5.1.tgz#b465183e6a805f6f0d456937b97d67ee340b7401" - integrity sha512-jPGrZ7j+RWistrsgpvjUBvLpWRuOeDNdV014ggHBxDMNX9GWb1GSubWW2Tlo7BfOuUvjICVAjI4KMp/IC/jwZg== - dependencies: - "@storybook/addon-actions" "8.5.1" - "@storybook/addon-backgrounds" "8.5.1" - "@storybook/addon-controls" "8.5.1" - "@storybook/addon-docs" "8.5.1" - "@storybook/addon-highlight" "8.5.1" - "@storybook/addon-measure" "8.5.1" - "@storybook/addon-outline" "8.5.1" - "@storybook/addon-toolbars" "8.5.1" - "@storybook/addon-viewport" "8.5.1" - ts-dedent "^2.0.0" - -"@storybook/addon-highlight@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-highlight/-/addon-highlight-8.5.1.tgz#859c7dc0c388eb3b95ff57931c2d2b14f65d854f" - integrity sha512-nhwx39DuWy2OFP+AQg8EzYP3giM+rQ0OIdAXgAjDVdKk2sGj43gwNYS9wQzXeczEUiSEjQk0JJwBqjF+GtSrag== - dependencies: - "@storybook/global" "^5.0.0" - -"@storybook/addon-interactions@^8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-interactions/-/addon-interactions-8.5.1.tgz#0e2b8a7c52daebae2586e02834c72623b0532816" - integrity sha512-tXCKBIWjwhVuSRRoEiPx+u0D4oqMkctTzysfoCw2sqftIT8t2yHyviX29s87z2NH+DNqzBGGDG1UUaLe5qq3Fw== - dependencies: - "@storybook/global" "^5.0.0" - "@storybook/instrumenter" "8.5.1" - "@storybook/test" "8.5.1" - polished "^4.2.2" - ts-dedent "^2.2.0" - -"@storybook/addon-measure@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-measure/-/addon-measure-8.5.1.tgz#b42d5c53147dd439af341692776b23b2be269bd1" - integrity sha512-Goc/IRh0aYT7zfDP9fgwL+DFX52DylanoBf0uGf59IQ7sEJHbwWm0OpiSEDo+NbtytbG83UOQamT7aQxhQo7Zw== - dependencies: - "@storybook/global" "^5.0.0" - tiny-invariant "^1.3.1" - -"@storybook/addon-onboarding@^8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-onboarding/-/addon-onboarding-8.5.1.tgz#239019adb8660a203f546888f3e3563053fccdcd" - integrity sha512-ooa59cAz9sJHFbStIL3/kpBpLM9xZGQa2zmSn8TMCMUq1TM/rJARYD4SNj4BeBsLH24wFHI9SXf15Cln8EhASg== - -"@storybook/addon-outline@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-outline/-/addon-outline-8.5.1.tgz#3aea68aab5a7fb972d8911191efa95e3ac034298" - integrity sha512-LM3wG5bUgAAEgDS4MD1dw2VStduSYTMc/rNgaTExVVr7pPeuAgkfyIUriP3P0i7x5jweSb2aGzaTuy3PUHAWfg== - dependencies: - "@storybook/global" "^5.0.0" - ts-dedent "^2.0.0" - -"@storybook/addon-toolbars@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-toolbars/-/addon-toolbars-8.5.1.tgz#b8bc1aabd934b205c11c4a6ed7e2db433fdbe215" - integrity sha512-01Odzujfq/g9u1ZTmH/X3I9cCnsNzG/wuyhzFr/T99jerx8QG/U45iYYph2Ytw6A5AtYyCnPYmsTsI+phjUvuA== - -"@storybook/addon-viewport@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/addon-viewport/-/addon-viewport-8.5.1.tgz#068d5c74b22de06cf47d0a0addb4acb2291caa73" - integrity sha512-kKCXZT3keUEQulv2tOzRSl/GdFA2JeFjHmks/n7qQLY0zDqdx/C7K9jUECcrOJiLclZwTJvHA3YXrglVJoa6Hw== - dependencies: - memoizerific "^1.11.3" - -"@storybook/blocks@8.5.1", "@storybook/blocks@^8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/blocks/-/blocks-8.5.1.tgz#9e274d605e57390483007a9ed8b6cb073a8889f6" - integrity sha512-xUjnOa9udmHhlBTZ+bmMHeU1M9a5OnvnX8urQ0TrNpSyHH7HoPd3xZC4fzz73nSJNMVHIYMZYsz2pj/WfeA/hg== - dependencies: - "@storybook/csf" "0.1.12" - "@storybook/icons" "^1.2.12" - ts-dedent "^2.0.0" - -"@storybook/builder-vite@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/builder-vite/-/builder-vite-8.5.1.tgz#222b72daee2225e800e3668bae26ebb81a759c47" - integrity sha512-m7nzMmXL8ySRDp3AWsd18xB/mRVFdGnCbXeC2HREQVsu1WFkvcHtksvF4x1BOeeL73eokD2/GzgpCjAS0xVvbw== - dependencies: - "@storybook/csf-plugin" "8.5.1" - browser-assert "^1.2.1" - ts-dedent "^2.0.0" - -"@storybook/components@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-8.5.1.tgz#f2ac82c5c8e3350b736bad8ccc99c1b4e4fccb78" - integrity sha512-dgZfIIRdI7yA9bYb1rhWzbvU4AnbndAeNhLouxHJkUR5r2Ycp9mJba5UNynN1slgDOxB+VMnq1fWKyfWQrBqnw== - -"@storybook/core@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-8.5.1.tgz#cc2bfcf03b9b9ac2dd5c44ac4853ac94c86c23ac" - integrity sha512-4zxjclENpZYuNY1fZJE4a7hd8Ho/SiOSN2B57fsIi1qCpKax3JU3J59ZcAWT0iidy5qgM2qMcWbrl0Bl/tWamA== - dependencies: - "@storybook/csf" "0.1.12" - better-opn "^3.0.2" - browser-assert "^1.2.1" - esbuild "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0" - esbuild-register "^3.5.0" - jsdoc-type-pratt-parser "^4.0.0" - process "^0.11.10" - recast "^0.23.5" - semver "^7.6.2" - util "^0.12.5" - ws "^8.2.3" - -"@storybook/csf-plugin@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/csf-plugin/-/csf-plugin-8.5.1.tgz#626efa6db0009145e6ffa6019b34d8d48b17041c" - integrity sha512-8GFrQgJ+/hzWAj9o4XK8m7UFPLxf0w3RwX0ZMPeb6zDhq/1BUE97AjKFb4Oexkh4I67Pycv4gRUOY9+tXF/1DA== - dependencies: - unplugin "^1.3.1" - -"@storybook/csf@0.1.12": - version "0.1.12" - resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.12.tgz#1dcfa0f398a69b834c563884b5f747db3d5a81df" - integrity sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw== - dependencies: - type-fest "^2.19.0" - -"@storybook/csf@^0.1.11": - version "0.1.13" - resolved "https://registry.yarnpkg.com/@storybook/csf/-/csf-0.1.13.tgz#c8a9bea2ae518a3d9700546748fa30a8b07f7f80" - integrity sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q== - dependencies: - type-fest "^2.19.0" - -"@storybook/global@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@storybook/global/-/global-5.0.0.tgz#b793d34b94f572c1d7d9e0f44fac4e0dbc9572ed" - integrity sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ== - -"@storybook/icons@^1.2.12": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@storybook/icons/-/icons-1.3.1.tgz#38824f388a3313f687ee80439cd8aa8ab9a02f41" - integrity sha512-tgiD2v9v/4sjGOliemoP/8bUe4+ZFpehcqdCVQcPiGZfV0kSBv34Ge+MafeKqM7SLwvGesrbOEOakaogSqGxiQ== - -"@storybook/instrumenter@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/instrumenter/-/instrumenter-8.5.1.tgz#cdd9df7f1beaf3c1878f1d86d0228a4969a8b5a8" - integrity sha512-wMAhsIzwOh/xXKANAP3IbtXxRWFAZtpRisB0sy8WVTPS3a1L1cA6X+U80Ex/omek6L0FZwKZSKmmfkDeZkYnCQ== - dependencies: - "@storybook/global" "^5.0.0" - "@vitest/utils" "^2.1.1" - -"@storybook/manager-api@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/manager-api/-/manager-api-8.5.1.tgz#5e574ec19e6fcb8709337716628b44057557e923" - integrity sha512-Oj9kPYbp/82LRQ+rsc0ZH0fkzeiT2U1kvubmNiRjtopQHCP3UTVnvWIXC9zSRFKmS+NaAdd0JYsIBvE8fjnoqQ== - -"@storybook/preview-api@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/preview-api/-/preview-api-8.5.1.tgz#d21b6a72adc3692ec3128aef4b3ad8cee749ac28" - integrity sha512-fLR7nvAbjHVLazDA6CLy9O/bpBzKDKqxyBp6SybTBPYa76IzsX8ITSMMt1YcP6rOGhVgcKNA9iBNxRddjLIV0Q== - -"@storybook/react-dom-shim@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/react-dom-shim/-/react-dom-shim-8.5.1.tgz#57dbf09c616ed655289b5050c171a1b02f7ae028" - integrity sha512-peDiT6A1zyODKd7tVQIiFNU42Iolca67h3kkOQPb7nm/Czf2yIa/BHw+yiNDZx82eCIEvBy1Xf7lnjH8PD61xA== - -"@storybook/react-vite@^8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/react-vite/-/react-vite-8.5.1.tgz#23ff362ebe7bf7d985a395a7950cd953327116bc" - integrity sha512-ccsPJXjR7WMS/t7R5nJpPtqRzJxjsllqVMNGk9xxoLasWDf3vOLohgyCgt63ws8iOMh26lqZsFyPyWFcpKW/hQ== - dependencies: - "@joshwooding/vite-plugin-react-docgen-typescript" "0.4.2" - "@rollup/pluginutils" "^5.0.2" - "@storybook/builder-vite" "8.5.1" - "@storybook/react" "8.5.1" - find-up "^5.0.0" - magic-string "^0.30.0" - react-docgen "^7.0.0" - resolve "^1.22.8" - tsconfig-paths "^4.2.0" - -"@storybook/react@8.5.1", "@storybook/react@^8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-8.5.1.tgz#f5b90f0e82f8936a64b8b01ee4034586e398747a" - integrity sha512-wKhR9SZUbpYUxRDAYUHH4fZHVxiNG43PxT1uvLfX/i7TPMw+wW+G3Q2yrgms1oHmqqRCvlnGHwT5/t9FFxN31w== - dependencies: - "@storybook/components" "8.5.1" - "@storybook/global" "^5.0.0" - "@storybook/manager-api" "8.5.1" - "@storybook/preview-api" "8.5.1" - "@storybook/react-dom-shim" "8.5.1" - "@storybook/theming" "8.5.1" - -"@storybook/test@8.5.1", "@storybook/test@^8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/test/-/test-8.5.1.tgz#f795df493345347e2d7ad46aa28effedc7f1da8e" - integrity sha512-V0sEXqL5kS0YKugCqWgmCpNODdlCCiVlPqm3i+E2+G97DR980BwXf8J6VPscQDRS9ZG39BrM83Aau6Anxrt1Tg== - dependencies: - "@storybook/csf" "0.1.12" - "@storybook/global" "^5.0.0" - "@storybook/instrumenter" "8.5.1" - "@testing-library/dom" "10.4.0" - "@testing-library/jest-dom" "6.5.0" - "@testing-library/user-event" "14.5.2" - "@vitest/expect" "2.0.5" - "@vitest/spy" "2.0.5" - -"@storybook/theming@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-8.5.1.tgz#40906550f82a05cab280ccd7afe8b1d1a4cf320f" - integrity sha512-sg61vY1gM8w42CIi28vo//6E1gHgHLNBNaRhkfvLFpu9PuhAcVWLwBDZq0BoKmDMxRxbSPV2gvIKeXdOtbSCJw== - "@svgr/babel-plugin-add-jsx-attribute@8.0.0": version "8.0.0" resolved "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz" @@ -3650,38 +3197,6 @@ dependencies: defer-to-connect "^2.0.0" -"@testing-library/dom@10.4.0": - version "10.4.0" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.0.tgz#82a9d9462f11d240ecadbf406607c6ceeeff43a8" - integrity sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^5.0.1" - aria-query "5.3.0" - chalk "^4.1.0" - dom-accessibility-api "^0.5.9" - lz-string "^1.5.0" - pretty-format "^27.0.2" - -"@testing-library/jest-dom@6.5.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz#50484da3f80fb222a853479f618a9ce5c47bfe54" - integrity sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA== - dependencies: - "@adobe/css-tools" "^4.4.0" - aria-query "^5.0.0" - chalk "^3.0.0" - css.escape "^1.5.1" - dom-accessibility-api "^0.6.3" - lodash "^4.17.21" - redent "^3.0.0" - -"@testing-library/user-event@14.5.2": - version "14.5.2" - resolved "https://registry.yarnpkg.com/@testing-library/user-event/-/user-event-14.5.2.tgz#db7257d727c891905947bd1c1a99da20e03c2ebd" - integrity sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ== - "@thaunknown/thirty-two@^1.0.3": version "1.0.3" resolved "https://registry.npmjs.org/@thaunknown/thirty-two/-/thirty-two-1.0.3.tgz" @@ -3719,17 +3234,12 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/aria-query@^5.0.1": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.4.tgz#1a31c3d378850d2778dabb6374d036dcba4ba708" - integrity sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw== - "@types/auto-launch@^5.0.5": version "5.0.5" resolved "https://registry.npmjs.org/@types/auto-launch/-/auto-launch-5.0.5.tgz" integrity sha512-/nGvQZSzM/pvCMCh4Gt2kIeiUmOP/cKGJbjlInI+A+5MoV/7XmT56DJ6EU8bqc3+ItxEe4UC2GVspmPzcCc8cg== -"@types/babel__core@^7.18.0", "@types/babel__core@^7.20.5": +"@types/babel__core@^7.20.5": version "7.20.5" resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz" integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== @@ -3762,13 +3272,6 @@ dependencies: "@babel/types" "^7.20.7" -"@types/babel__traverse@^7.18.0": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" - integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== - dependencies: - "@babel/types" "^7.20.7" - "@types/cacheable-request@^6.0.1": version "6.0.3" resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" @@ -3812,11 +3315,6 @@ dependencies: "@types/ms" "*" -"@types/doctrine@^0.0.9": - version "0.0.9" - resolved "https://registry.yarnpkg.com/@types/doctrine/-/doctrine-0.0.9.tgz#d86a5f452a15e3e3113b99e39616a9baa0f9863f" - integrity sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA== - "@types/estree@1.0.6": version "1.0.6" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" @@ -3894,11 +3392,6 @@ dependencies: "@types/node" "*" -"@types/mdx@^2.0.0": - version "2.0.13" - resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd" - integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== - "@types/minimatch@*": version "5.1.2" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" @@ -3967,11 +3460,6 @@ "@types/prop-types" "*" csstype "^3.0.2" -"@types/resolve@^1.20.2": - version "1.20.6" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.6.tgz#e6e60dad29c2c8c206c026e6dd8d6d1bdda850b8" - integrity sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ== - "@types/responselike@^1.0.0": version "1.0.3" resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz" @@ -4001,11 +3489,6 @@ resolved "https://registry.npmjs.org/@types/user-agents/-/user-agents-1.0.4.tgz" integrity sha512-AjeFc4oX5WPPflgKfRWWJfkEk7Wu82fnj1rROPsiqFt6yElpdGFg8Srtm/4PU4rA9UiDUZlruGPgcwTMQlwq4w== -"@types/uuid@^9.0.1": - version "9.0.8" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.8.tgz#7545ba4fc3c003d6c756f651f3bf163d8f0f29ba" - integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== - "@types/verror@^1.10.3": version "1.10.10" resolved "https://registry.yarnpkg.com/@types/verror/-/verror-1.10.10.tgz#d5a4b56abac169bfbc8b23d291363a682e6fa087" @@ -4052,14 +3535,6 @@ "@typescript-eslint/types" "7.18.0" "@typescript-eslint/visitor-keys" "7.18.0" -"@typescript-eslint/scope-manager@8.21.0": - version "8.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.21.0.tgz#d08d94e2a34b4ccdcc975543c25bb62917437500" - integrity sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA== - dependencies: - "@typescript-eslint/types" "8.21.0" - "@typescript-eslint/visitor-keys" "8.21.0" - "@typescript-eslint/type-utils@7.18.0": version "7.18.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" @@ -4075,11 +3550,6 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== -"@typescript-eslint/types@8.21.0": - version "8.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.21.0.tgz#58f30aec8db8212fd886835dc5969cdf47cb29f5" - integrity sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A== - "@typescript-eslint/typescript-estree@7.18.0": version "7.18.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" @@ -4094,20 +3564,6 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/typescript-estree@8.21.0": - version "8.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.21.0.tgz#5ce71acdbed3b97b959f6168afba5a03c88f69a9" - integrity sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg== - dependencies: - "@typescript-eslint/types" "8.21.0" - "@typescript-eslint/visitor-keys" "8.21.0" - debug "^4.3.4" - fast-glob "^3.3.2" - is-glob "^4.0.3" - minimatch "^9.0.4" - semver "^7.6.0" - ts-api-utils "^2.0.0" - "@typescript-eslint/utils@7.18.0": version "7.18.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" @@ -4118,16 +3574,6 @@ "@typescript-eslint/types" "7.18.0" "@typescript-eslint/typescript-estree" "7.18.0" -"@typescript-eslint/utils@^8.8.1": - version "8.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.21.0.tgz#bc4874fbc30feb3298b926e3b03d94570b3999c5" - integrity sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "8.21.0" - "@typescript-eslint/types" "8.21.0" - "@typescript-eslint/typescript-estree" "8.21.0" - "@typescript-eslint/visitor-keys@7.18.0": version "7.18.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" @@ -4136,14 +3582,6 @@ "@typescript-eslint/types" "7.18.0" eslint-visitor-keys "^3.4.3" -"@typescript-eslint/visitor-keys@8.21.0": - version "8.21.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.21.0.tgz#a89744c4cdc83b5c761eb5878befe6c33d1481b2" - integrity sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w== - dependencies: - "@typescript-eslint/types" "8.21.0" - eslint-visitor-keys "^4.2.0" - "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" @@ -4231,56 +3669,6 @@ "@types/babel__core" "^7.20.5" react-refresh "^0.14.0" -"@vitest/expect@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-2.0.5.tgz#f3745a6a2c18acbea4d39f5935e913f40d26fa86" - integrity sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA== - dependencies: - "@vitest/spy" "2.0.5" - "@vitest/utils" "2.0.5" - chai "^5.1.1" - tinyrainbow "^1.2.0" - -"@vitest/pretty-format@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.0.5.tgz#91d2e6d3a7235c742e1a6cc50e7786e2f2979b1e" - integrity sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ== - dependencies: - tinyrainbow "^1.2.0" - -"@vitest/pretty-format@2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@vitest/pretty-format/-/pretty-format-2.1.8.tgz#88f47726e5d0cf4ba873d50c135b02e4395e2bca" - integrity sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ== - dependencies: - tinyrainbow "^1.2.0" - -"@vitest/spy@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-2.0.5.tgz#590fc07df84a78b8e9dd976ec2090920084a2b9f" - integrity sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA== - dependencies: - tinyspy "^3.0.0" - -"@vitest/utils@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.0.5.tgz#6f8307a4b6bc6ceb9270007f73c67c915944e926" - integrity sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ== - dependencies: - "@vitest/pretty-format" "2.0.5" - estree-walker "^3.0.3" - loupe "^3.1.1" - tinyrainbow "^1.2.0" - -"@vitest/utils@^2.1.1": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-2.1.8.tgz#f8ef85525f3362ebd37fd25d268745108d6ae388" - integrity sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA== - dependencies: - "@vitest/pretty-format" "2.1.8" - loupe "^3.1.2" - tinyrainbow "^1.2.0" - "@xmldom/xmldom@^0.8.8": version "0.8.10" resolved "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz" @@ -4340,7 +3728,7 @@ acorn@^8.11.3, acorn@^8.9.0: resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== -acorn@^8.14.0, acorn@^8.8.1: +acorn@^8.8.1: version "8.14.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== @@ -4423,11 +3811,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - ansi-styles@^6.1.0: version "6.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" @@ -4519,14 +3902,7 @@ aria-hidden@^1.1.1: dependencies: tslib "^2.0.0" -aria-query@5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" - integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== - dependencies: - dequal "^2.0.3" - -aria-query@^5.0.0, aria-query@^5.3.2: +aria-query@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.2.tgz#93f81a43480e33a338f19163a3d10a50c01dcd59" integrity sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw== @@ -4623,23 +3999,11 @@ assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== -assertion-error@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-2.0.1.tgz#f641a196b335690b1070bf00b6e7593fec190bf7" - integrity sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA== - ast-types-flow@^0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== -ast-types@^0.16.1: - version "0.16.1" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.16.1.tgz#7a9da1617c9081bc121faafe91711b4c8bb81da2" - integrity sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg== - dependencies: - tslib "^2.0.1" - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -4729,13 +4093,6 @@ bep53-range@^2.0.0: resolved "https://registry.yarnpkg.com/bep53-range/-/bep53-range-2.0.0.tgz#a1770475661b4b814c4359e4b66f7cbd88de2b10" integrity sha512-sMm2sV5PRs0YOVk0LTKtjuIprVzxgTQUsrGX/7Yph2Rm4FO2Fqqtq7hNjsOB5xezM4v4+5rljCgK++UeQJZguA== -better-opn@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/better-opn/-/better-opn-3.0.2.tgz#f96f35deaaf8f34144a4102651babcf00d1d8817" - integrity sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ== - dependencies: - open "^8.0.4" - better-sqlite3@^11.7.0: version "11.7.0" resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.7.0.tgz#3eaa0f54f9e57d0a100d980e42320f8b9a4cd676" @@ -4809,11 +4166,6 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browser-assert@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/browser-assert/-/browser-assert-1.2.1.tgz#9aaa5a2a8c74685c2ae05bfe46efd606f068c200" - integrity sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ== - browserslist@^4.22.2, browserslist@^4.23.1: version "4.24.0" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.0.tgz#a1325fe4bc80b64fda169629fc01b3d6cecd38d4" @@ -4984,14 +4336,6 @@ call-bound@^1.0.2: call-bind "^1.0.8" get-intrinsic "^1.2.5" -call-bound@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681" - integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA== - dependencies: - call-bind-apply-helpers "^1.0.1" - get-intrinsic "^1.2.6" - callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -5012,17 +4356,6 @@ caniuse-lite@^1.0.30001688: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001690.tgz#f2d15e3aaf8e18f76b2b8c1481abde063b8104c8" integrity sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w== -chai@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/chai/-/chai-5.1.2.tgz#3afbc340b994ae3610ca519a6c70ace77ad4378d" - integrity sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw== - dependencies: - assertion-error "^2.0.1" - check-error "^2.1.1" - deep-eql "^5.0.1" - loupe "^3.1.0" - pathval "^2.0.0" - chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -5032,14 +4365,6 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -5053,11 +4378,6 @@ chalk@^5.3.0: resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== -check-error@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-2.1.1.tgz#87eb876ae71ee388fa0471fe423f494be1d96ccc" - integrity sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw== - chokidar@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" @@ -5088,11 +4408,6 @@ chownr@^3.0.0: resolved "https://registry.yarnpkg.com/chownr/-/chownr-3.0.0.tgz#9855e64ecd240a9cc4267ce8a4aa5d24a1da15e4" integrity sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g== -chromatic@^11.15.0: - version "11.25.1" - resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-11.25.1.tgz#1ab40277f43451628e748030d80def40f5cd1f32" - integrity sha512-D0NdcGOSy84hqgNnSY7FM4TzB77RymRTowjm4hb1CV4wbk1djKTV4SJbbYVCzHFD+n/NOg/wtZ9Y7sjiRdy8dA== - chromium-pickle-js@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" @@ -5379,11 +4694,6 @@ css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -css.escape@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" - integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -5487,11 +4797,6 @@ dedent@^1.5.1, dedent@^1.5.3: resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== -deep-eql@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" - integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== - deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -5533,11 +4838,6 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== - define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -5557,11 +4857,6 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== -dequal@^2.0.2, dequal@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - detect-libc@^2.0.0, detect-libc@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" @@ -5652,16 +4947,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.9: - version "0.5.16" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz#5a7429e6066eb3664d911e33fb0e45de8eb08453" - integrity sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg== - -dom-accessibility-api@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz#993e925cc1d73f2c662e7d75dd5a5445259a8fd8" - integrity sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w== - dot-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" @@ -5703,15 +4988,6 @@ dunder-proto@^1.0.0: es-errors "^1.3.0" gopd "^1.2.0" -dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -6040,44 +5316,6 @@ es6-promise@^4.2.8: resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== -esbuild-register@^3.5.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/esbuild-register/-/esbuild-register-3.6.0.tgz#cf270cfa677baebbc0010ac024b823cbf723a36d" - integrity sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg== - dependencies: - debug "^4.3.4" - -"esbuild@^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0": - version "0.24.2" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.24.2.tgz#b5b55bee7de017bff5fb8a4e3e44f2ebe2c3567d" - integrity sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA== - optionalDependencies: - "@esbuild/aix-ppc64" "0.24.2" - "@esbuild/android-arm" "0.24.2" - "@esbuild/android-arm64" "0.24.2" - "@esbuild/android-x64" "0.24.2" - "@esbuild/darwin-arm64" "0.24.2" - "@esbuild/darwin-x64" "0.24.2" - "@esbuild/freebsd-arm64" "0.24.2" - "@esbuild/freebsd-x64" "0.24.2" - "@esbuild/linux-arm" "0.24.2" - "@esbuild/linux-arm64" "0.24.2" - "@esbuild/linux-ia32" "0.24.2" - "@esbuild/linux-loong64" "0.24.2" - "@esbuild/linux-mips64el" "0.24.2" - "@esbuild/linux-ppc64" "0.24.2" - "@esbuild/linux-riscv64" "0.24.2" - "@esbuild/linux-s390x" "0.24.2" - "@esbuild/linux-x64" "0.24.2" - "@esbuild/netbsd-arm64" "0.24.2" - "@esbuild/netbsd-x64" "0.24.2" - "@esbuild/openbsd-arm64" "0.24.2" - "@esbuild/openbsd-x64" "0.24.2" - "@esbuild/sunos-x64" "0.24.2" - "@esbuild/win32-arm64" "0.24.2" - "@esbuild/win32-ia32" "0.24.2" - "@esbuild/win32-x64" "0.24.2" - esbuild@^0.21.3, esbuild@^0.21.5: version "0.21.5" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" @@ -6214,15 +5452,6 @@ eslint-plugin-react@^7.37.2: string.prototype.matchall "^4.0.11" string.prototype.repeat "^1.0.0" -eslint-plugin-storybook@^0.11.2: - version "0.11.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-storybook/-/eslint-plugin-storybook-0.11.2.tgz#a46f8fa2b87d15f66251e832a10d5481fc73a028" - integrity sha512-0Z4DUklJrC+GHjCRXa7PYfPzWC15DaVnwaOYenpgXiCEijXPZkLKCms+rHhtoRcWccP7Z8DpOOaP1gc3P9oOwg== - dependencies: - "@storybook/csf" "^0.1.11" - "@typescript-eslint/utils" "^8.8.1" - ts-dedent "^2.2.0" - eslint-scope@^7.2.2: version "7.2.2" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" @@ -6236,11 +5465,6 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4 resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint-visitor-keys@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" - integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== - eslint@^8.56.0: version "8.57.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" @@ -6299,11 +5523,6 @@ espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esprima@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - esquery@^1.4.2: version "1.6.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" @@ -6328,13 +5547,6 @@ estree-walker@^2.0.2: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== -estree-walker@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d" - integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g== - dependencies: - "@types/estree" "^1.0.0" - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -6400,17 +5612,6 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-glob@^3.3.2: - version "3.3.3" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -6479,11 +5680,6 @@ filelist@^1.0.4: dependencies: minimatch "^5.0.1" -filesize@^10.0.12: - version "10.1.6" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-10.1.6.tgz#31194da825ac58689c0bce3948f33ce83aabd361" - integrity sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w== - fill-range@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" @@ -6698,14 +5894,6 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== -get-proto@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - get-stdin@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575" @@ -7174,14 +6362,6 @@ ip-address@^9.0.5: jsbn "1.1.0" sprintf-js "^1.1.3" -is-arguments@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" - integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== - dependencies: - call-bound "^1.0.2" - has-tostringtag "^1.0.2" - is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" @@ -7268,13 +6448,6 @@ is-core-module@^2.13.0: dependencies: hasown "^2.0.2" -is-core-module@^2.16.0: - version "2.16.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" - integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== - dependencies: - hasown "^2.0.2" - is-data-view@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" @@ -7297,11 +6470,6 @@ is-date-object@^1.1.0: call-bound "^1.0.2" has-tostringtag "^1.0.2" -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== - is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -7326,16 +6494,6 @@ is-generator-function@^1.0.10: dependencies: has-tostringtag "^1.0.0" -is-generator-function@^1.0.7: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" - integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== - dependencies: - call-bound "^1.0.3" - get-proto "^1.0.0" - has-tostringtag "^1.0.2" - safe-regex-test "^1.1.0" - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -7478,13 +6636,6 @@ is-typed-array@^1.1.13: dependencies: which-typed-array "^1.1.14" -is-typed-array@^1.1.3: - version "1.1.15" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" - integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== - dependencies: - which-typed-array "^1.1.16" - is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" @@ -7510,13 +6661,6 @@ is-weakset@^2.0.3: call-bind "^1.0.7" get-intrinsic "^1.2.4" -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -7595,11 +6739,6 @@ jsbn@1.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040" integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A== -jsdoc-type-pratt-parser@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz#ff6b4a3f339c34a6c188cbf50a16087858d22113" - integrity sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg== - jsdom@^24.0.0: version "24.1.3" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-24.1.3.tgz#88e4a07cb9dd21067514a619e9f17b090a394a9f" @@ -7667,7 +6806,7 @@ json-stringify-safe@^5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== -json5@^2.2.2, json5@^2.2.3: +json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== @@ -7679,7 +6818,7 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jsonfile@^6.0.1, jsonfile@^6.1.0: +jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== @@ -7935,11 +7074,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -loupe@^3.1.0, loupe@^3.1.1, loupe@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-3.1.2.tgz#c86e0696804a02218f2206124c45d8b15291a240" - integrity sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg== - lower-case@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" @@ -7976,11 +7110,6 @@ lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -lz-string@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" - integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== - magic-string@0.30.8: version "0.30.8" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.8.tgz#14e8624246d2bedba70d5462aa99ac9681844613" @@ -7988,20 +7117,6 @@ magic-string@0.30.8: dependencies: "@jridgewell/sourcemap-codec" "^1.4.15" -magic-string@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.27.0.tgz#e4a3413b4bab6d98d2becffd48b4a257effdbbf3" - integrity sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.4.13" - -magic-string@^0.30.0: - version "0.30.17" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" - integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.5.0" - magic-string@^0.30.10: version "0.30.11" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.11.tgz#301a6f93b3e8c2cb13ac1a7a673492c0dfd12954" @@ -8045,11 +7160,6 @@ make-fetch-happen@^10.0.3: socks-proxy-agent "^7.0.0" ssri "^9.0.0" -map-or-similar@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/map-or-similar/-/map-or-similar-1.5.0.tgz#6de2653174adfb5d9edc33c69d3e92a1b76faf08" - integrity sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg== - matcher@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" @@ -8074,13 +7184,6 @@ media-query-parser@^2.0.2: dependencies: "@babel/runtime" "^7.12.5" -memoizerific@^1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/memoizerific/-/memoizerific-1.11.3.tgz#7c87a4646444c32d75438570905f2dbd1b1a805a" - integrity sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog== - dependencies: - map-or-similar "^1.5.0" - meow@^12.0.1: version "12.1.1" resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" @@ -8091,7 +7194,7 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4, micromatch@^4.0.8: +micromatch@^4.0.4: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -8131,11 +7234,6 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -min-indent@^1.0.0, min-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" - integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== - minimatch@^10.0.0: version "10.0.1" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b" @@ -8519,15 +7617,6 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -open@^8.0.4: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== - dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" - optionator@^0.9.3: version "0.9.4" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" @@ -8679,11 +7768,6 @@ pathe@^1.1.1, pathe@^1.1.2: resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== -pathval@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" - integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== - pe-library@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/pe-library/-/pe-library-0.4.1.tgz#e269be0340dcb13aa6949d743da7d658c3e2fbea" @@ -8714,11 +7798,6 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -picomatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" - integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== - piscina@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/piscina/-/piscina-4.7.0.tgz#68936fc77128db00541366531330138e366dc851" @@ -8744,13 +7823,6 @@ plist@^3.0.4, plist@^3.0.5, plist@^3.1.0: base64-js "^1.5.1" xmlbuilder "^15.1.1" -polished@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/polished/-/polished-4.3.1.tgz#5a00ae32715609f83d89f6f31d0f0261c6170548" - integrity sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA== - dependencies: - "@babel/runtime" "^7.17.8" - possible-typed-array-names@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" @@ -8800,20 +7872,6 @@ prettier@^3.4.2: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== -pretty-format@^27.0.2: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - progress@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -8922,35 +7980,7 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-confetti@^6.1.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/react-confetti/-/react-confetti-6.2.2.tgz#b72888889b10b6707a91adca919dd35c653f4bb2" - integrity sha512-K+kTyOPgX+ZujMZ+Rmb7pZdHBvg+DzinG/w4Eh52WOB8/pfO38efnnrtEZNJmjTvLxc16RBYO+tPM68Fg8viBA== - dependencies: - tween-functions "^1.2.0" - -react-docgen-typescript@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz#4611055e569edc071204aadb20e1c93e1ab1659c" - integrity sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg== - -react-docgen@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-7.1.0.tgz#4b41e557dab939a5157be09ee532fd09c07d99fc" - integrity sha512-APPU8HB2uZnpl6Vt/+0AFoVYgSRtfiP6FLrZgPPTDmqSb2R4qZRbgd0A3VzIFxDt5e+Fozjx79WjLWnF69DK8g== - dependencies: - "@babel/core" "^7.18.9" - "@babel/traverse" "^7.18.9" - "@babel/types" "^7.18.9" - "@types/babel__core" "^7.18.0" - "@types/babel__traverse" "^7.18.0" - "@types/doctrine" "^0.0.9" - "@types/resolve" "^1.20.2" - doctrine "^3.0.0" - resolve "^1.22.1" - strip-indent "^4.0.0" - -"react-dom@^16.8.0 || ^17.0.0 || ^18.0.0", react-dom@^18.2.0: +react-dom@^18.2.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== @@ -8976,11 +8006,6 @@ react-is@^16.13.1, react-is@^16.7.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - react-is@^18.2.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" @@ -9047,7 +8072,7 @@ react-style-singleton@^2.2.1: invariant "^2.2.4" tslib "^2.0.0" -"react@^16.8.0 || ^17.0.0 || ^18.0.0", react@^18.2.0: +react@^18.2.0: version "18.3.1" resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== @@ -9077,17 +8102,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -recast@^0.23.5: - version "0.23.9" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.23.9.tgz#587c5d3a77c2cfcb0c18ccce6da4361528c2587b" - integrity sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q== - dependencies: - ast-types "^0.16.1" - esprima "~4.0.0" - source-map "~0.6.1" - tiny-invariant "^1.3.3" - tslib "^2.0.1" - rechoir@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" @@ -9095,14 +8109,6 @@ rechoir@^0.8.0: dependencies: resolve "^1.20.0" -redent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" - integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== - dependencies: - indent-string "^4.0.0" - strip-indent "^3.0.0" - redux-thunk@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-3.1.0.tgz#94aa6e04977c30e14e892eae84978c1af6058ff3" @@ -9213,15 +8219,6 @@ resolve@^1.20.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.22.1, resolve@^1.22.8: - version "1.22.10" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" - integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== - dependencies: - is-core-module "^2.16.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - resolve@^2.0.0-next.5: version "2.0.0-next.5" resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.5.tgz#6b0ec3107e671e52b68cd068ef327173b90dc03c" @@ -9534,7 +8531,7 @@ semver@^6.2.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.2, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3: +semver@^7.3.2, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== @@ -9695,7 +8692,7 @@ source-map-support@^0.5.19: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@~0.6.1: +source-map@^0.6.0: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -9722,13 +8719,6 @@ stat-mode@^1.0.0: resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465" integrity sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg== -storybook@^8.5.1: - version "8.5.1" - resolved "https://registry.yarnpkg.com/storybook/-/storybook-8.5.1.tgz#672513ccbf92776acb8ee42263cf08da7752bfe2" - integrity sha512-HuaAFA97j2w4i/1EHKj6X4iDiVzPrXzQpmTEE1tLD1QXzqrQKKHse+Ggc8AGMuLTAzxA6xmrX9xibgMNWCgvRA== - dependencies: - "@storybook/core" "8.5.1" - "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" @@ -9840,32 +8830,13 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: dependencies: ansi-regex "^5.0.1" -strip-ansi@^7.0.1, strip-ansi@^7.1.0: +strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-indent@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" - integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== - dependencies: - min-indent "^1.0.0" - -strip-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-4.0.0.tgz#b41379433dd06f5eae805e21d631e07ee670d853" - integrity sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA== - dependencies: - min-indent "^1.0.1" - strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -10028,11 +8999,6 @@ tiny-case@^1.0.3: resolved "https://registry.yarnpkg.com/tiny-case/-/tiny-case-1.0.3.tgz#d980d66bc72b5d5a9ca86fb7c9ffdb9c898ddd03" integrity sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q== -tiny-invariant@^1.3.1, tiny-invariant@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.3.tgz#46680b7a873a0d5d10005995eb90a70d74d60127" - integrity sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg== - tiny-typed-emitter@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5" @@ -10043,16 +9009,6 @@ tinyexec@^0.3.0: resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.1.tgz#0ab0daf93b43e2c211212396bdb836b468c97c98" integrity sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ== -tinyrainbow@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tinyrainbow/-/tinyrainbow-1.2.0.tgz#5c57d2fc0fb3d1afd78465c33ca885d04f02abb5" - integrity sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ== - -tinyspy@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-3.0.2.tgz#86dd3cf3d737b15adcf17d7887c84a75201df20a" - integrity sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q== - tmp-promise@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" @@ -10124,16 +9080,6 @@ ts-api-utils@^1.3.0: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== -ts-api-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.0.0.tgz#b9d7d5f7ec9f736f4d0f09758b8607979044a900" - integrity sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ== - -ts-dedent@^2.0.0, ts-dedent@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" - integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== - ts-node@^10.9.2: version "10.9.2" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" @@ -10153,16 +9099,7 @@ ts-node@^10.9.2: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tsconfig-paths@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" - integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== - dependencies: - json5 "^2.2.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0: +tslib@^2.0.0, tslib@^2.1.0: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== @@ -10179,11 +9116,6 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tween-functions@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff" - integrity sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA== - type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -10331,14 +9263,6 @@ unplugin@1.0.1: webpack-sources "^3.2.3" webpack-virtual-modules "^0.5.0" -unplugin@^1.3.1: - version "1.16.1" - resolved "https://registry.yarnpkg.com/unplugin/-/unplugin-1.16.1.tgz#a844d2e3c3b14a4ac2945c42be80409321b61199" - integrity sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w== - dependencies: - acorn "^8.14.0" - webpack-virtual-modules "^0.6.2" - untildify@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" @@ -10404,18 +9328,7 @@ util-deprecate@^1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -uuid@^9.0.0, uuid@^9.0.1: +uuid@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== @@ -10514,11 +9427,6 @@ webpack-virtual-modules@^0.5.0: resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz#362f14738a56dae107937ab98ea7062e8bdd3b6c" integrity sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw== -webpack-virtual-modules@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz#057faa9065c8acf48f24cb57ac0e77739ab9a7e8" - integrity sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== - whatwg-encoding@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" @@ -10620,18 +9528,6 @@ which-typed-array@^1.1.16: gopd "^1.0.1" has-tostringtag "^1.0.2" -which-typed-array@^1.1.2: - version "1.1.18" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.18.tgz#df2389ebf3fbb246a71390e90730a9edb6ce17ad" - integrity sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== - dependencies: - available-typed-arrays "^1.0.7" - call-bind "^1.0.8" - call-bound "^1.0.3" - for-each "^0.3.3" - gopd "^1.2.0" - has-tostringtag "^1.0.2" - which@2.0.2, which@^2.0.1, which@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -10688,7 +9584,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.18.0, ws@^8.2.3: +ws@^8.18.0: version "8.18.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==