|
|
@ -21,7 +21,7 @@ import "./addonCard.css";
|
|
|
|
import { classNameFactory } from "@api/Styles";
|
|
|
|
import { classNameFactory } from "@api/Styles";
|
|
|
|
import { Badge } from "@components/Badge";
|
|
|
|
import { Badge } from "@components/Badge";
|
|
|
|
import { Switch } from "@components/Switch";
|
|
|
|
import { Switch } from "@components/Switch";
|
|
|
|
import { Text } from "@webpack/common";
|
|
|
|
import { Text, useRef } from "@webpack/common";
|
|
|
|
import type { MouseEventHandler, ReactNode } from "react";
|
|
|
|
import type { MouseEventHandler, ReactNode } from "react";
|
|
|
|
|
|
|
|
|
|
|
|
const cl = classNameFactory("vc-addon-");
|
|
|
|
const cl = classNameFactory("vc-addon-");
|
|
|
@ -42,6 +42,8 @@ interface Props {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export function AddonCard({ disabled, isNew, name, infoButton, footer, author, enabled, setEnabled, description, onMouseEnter, onMouseLeave }: Props) {
|
|
|
|
export function AddonCard({ disabled, isNew, name, infoButton, footer, author, enabled, setEnabled, description, onMouseEnter, onMouseLeave }: Props) {
|
|
|
|
|
|
|
|
const titleRef = useRef<HTMLDivElement>(null);
|
|
|
|
|
|
|
|
const titleContainerRef = useRef<HTMLDivElement>(null);
|
|
|
|
return (
|
|
|
|
return (
|
|
|
|
<div
|
|
|
|
<div
|
|
|
|
className={cl("card", { "card-disabled": disabled })}
|
|
|
|
className={cl("card", { "card-disabled": disabled })}
|
|
|
@ -51,7 +53,21 @@ export function AddonCard({ disabled, isNew, name, infoButton, footer, author, e
|
|
|
|
<div className={cl("header")}>
|
|
|
|
<div className={cl("header")}>
|
|
|
|
<div className={cl("name-author")}>
|
|
|
|
<div className={cl("name-author")}>
|
|
|
|
<Text variant="text-md/bold" className={cl("name")}>
|
|
|
|
<Text variant="text-md/bold" className={cl("name")}>
|
|
|
|
{name}{isNew && <Badge text="NEW" color="#ED4245" />}
|
|
|
|
<div ref={titleContainerRef} className={cl("title-container")}>
|
|
|
|
|
|
|
|
<div
|
|
|
|
|
|
|
|
ref={titleRef}
|
|
|
|
|
|
|
|
className={cl("title")}
|
|
|
|
|
|
|
|
onMouseOver={() => {
|
|
|
|
|
|
|
|
const title = titleRef.current!;
|
|
|
|
|
|
|
|
const titleContainer = titleContainerRef.current!;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
title.style.setProperty("--offset", `${titleContainer.clientWidth - title.scrollWidth}px`);
|
|
|
|
|
|
|
|
title.style.setProperty("--duration", `${Math.max(0.5, (title.scrollWidth - titleContainer.clientWidth) / 7)}s`);
|
|
|
|
|
|
|
|
}}
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
{name}
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</div>{isNew && <Badge text="NEW" color="#ED4245" />}
|
|
|
|
</Text>
|
|
|
|
</Text>
|
|
|
|
{!!author && (
|
|
|
|
{!!author && (
|
|
|
|
<Text variant="text-md/normal" className={cl("author")}>
|
|
|
|
<Text variant="text-md/normal" className={cl("author")}>
|
|
|
|