diff --git a/src/components/Icons.tsx b/src/components/Icons.tsx index d82ce0b00..7ba078d33 100644 --- a/src/components/Icons.tsx +++ b/src/components/Icons.tsx @@ -392,6 +392,21 @@ export function PaintbrushIcon(props: IconProps) { ); } +export function PencilIcon(props: IconProps) { + return ( + + + + ); +} + const WebsiteIconDark = "/assets/e1e96d89e192de1997f73730db26e94f.svg"; const WebsiteIconLight = "/assets/730f58bcfd5a57a5e22460c445a0c6cf.svg"; const GithubIconLight = "/assets/3ff98ad75ac94fa883af5ed62d17c459.svg"; diff --git a/src/components/VencordSettings/ThemesTab.tsx b/src/components/VencordSettings/ThemesTab.tsx index 2eb91cb82..016371bed 100644 --- a/src/components/VencordSettings/ThemesTab.tsx +++ b/src/components/VencordSettings/ThemesTab.tsx @@ -19,21 +19,21 @@ import { useSettings } from "@api/Settings"; import { classNameFactory } from "@api/Styles"; import { Flex } from "@components/Flex"; -import { DeleteIcon } from "@components/Icons"; +import { DeleteIcon, FolderIcon, PaintbrushIcon, PencilIcon, PlusIcon, RestartIcon } from "@components/Icons"; import { Link } from "@components/Link"; -import PluginModal from "@components/PluginSettings/PluginModal"; +import { openPluginModal } from "@components/PluginSettings/PluginModal"; import type { UserThemeHeader } from "@main/themes"; import { openInviteModal } from "@utils/discord"; import { Margins } from "@utils/margins"; import { classes } from "@utils/misc"; -import { openModal } from "@utils/modal"; import { showItemInFolder } from "@utils/native"; import { useAwaiter } from "@utils/react"; import { findByPropsLazy, findLazy } from "@webpack"; -import { Button, Card, Forms, React, showToast, TabBar, TextArea, useEffect, useRef, useState } from "@webpack/common"; +import { Card, Forms, React, showToast, TabBar, TextArea, useEffect, useRef, useState } from "@webpack/common"; import type { ComponentType, Ref, SyntheticEvent } from "react"; import { AddonCard } from "./AddonCard"; +import { QuickAction, QuickActionCard } from "./quickActions"; import { SettingsTab, wrapTab } from "./shared"; type FileInput = ComponentType<{ @@ -213,60 +213,52 @@ function ThemesTab() { - + <> {IS_WEB ? ( - + + Upload Theme + + + } + Icon={PlusIcon} + /> ) : ( - + Icon={FolderIcon} + /> )} - - + + VencordNative.quickCss.openEditor()} + Icon={PaintbrushIcon} + /> {Vencord.Settings.plugins.ClientTheme.enabled && ( - + openPluginModal(Vencord.Plugins.plugins.ClientTheme)} + Icon={PencilIcon} + /> )} - +
{userThemes?.map(theme => ( diff --git a/src/components/VencordSettings/VencordTab.tsx b/src/components/VencordSettings/VencordTab.tsx index d13b43fb2..97f82e777 100644 --- a/src/components/VencordSettings/VencordTab.tsx +++ b/src/components/VencordSettings/VencordTab.tsx @@ -21,15 +21,16 @@ import { useSettings } from "@api/Settings"; import { classNameFactory } from "@api/Styles"; import DonateButton from "@components/DonateButton"; import { openPluginModal } from "@components/PluginSettings/PluginModal"; +import { gitRemote } from "@shared/vencordUserAgent"; import { Margins } from "@utils/margins"; import { identity } from "@utils/misc"; import { relaunch, showItemInFolder } from "@utils/native"; import { useAwaiter } from "@utils/react"; -import { Button, Card, Forms, React, Select, Switch, TooltipContainer } from "@webpack/common"; -import { ComponentType } from "react"; +import { Button, Card, Forms, React, Select, Switch } from "@webpack/common"; import { Flex, FolderIcon, GithubIcon, LogIcon, PaintbrushIcon, RestartIcon } from ".."; import { openNotificationSettingsModal } from "./NotificationSettings"; +import { QuickAction, QuickActionCard } from "./quickActions"; import { SettingsTab, wrapTab } from "./shared"; const cl = classNameFactory("vc-settings-"); @@ -41,17 +42,6 @@ type KeysOfType = { [K in keyof Object]: Object[K] extends Type ? K : never; }[keyof Object]; -const iconWithTooltip = (Icon: ComponentType<{ className?: string; }>, tooltip: string) => () => ( - - - -); - -const NotificationLogIcon = iconWithTooltip(LogIcon, "Open Notification Log"); -const QuickCssIcon = iconWithTooltip(PaintbrushIcon, "Edit QuickCSS"); -const RelaunchIcon = iconWithTooltip(RestartIcon, "Relaunch Discord"); -const OpenSettingsDirIcon = iconWithTooltip(FolderIcon, "Open Settings Directory"); -const OpenGithubIcon = iconWithTooltip(GithubIcon, "View Vencord's GitHub Repository"); function VencordSettings() { const [settingsDir, , settingsDirPending] = useAwaiter(VencordNative.settings.getSettingsDir, { @@ -111,44 +101,37 @@ function VencordSettings() { - - - + + + VencordNative.quickCss.openEditor()} + /> {!IS_WEB && ( - + )} {!IS_WEB && ( - + showItemInFolder(settingsDir)} + /> )} - - + VencordNative.native.openExternal("https://github.com/" + gitRemote)} + /> + diff --git a/src/components/VencordSettings/quickActions.css b/src/components/VencordSettings/quickActions.css new file mode 100644 index 000000000..897bc8c81 --- /dev/null +++ b/src/components/VencordSettings/quickActions.css @@ -0,0 +1,34 @@ +.vc-settings-quickActions-card { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(200px, max-content)); + gap: 0.5em; + justify-content: center; + padding: 0.5em 0; + margin-bottom: 1em; +} + +.vc-settings-quickActions-pill { + all: unset; + + background: var(--background-secondary); + color: var(--header-secondary); + display: flex; + align-items: center; + gap: 0.5em; + padding: 8px 12px; + border-radius: 9999px; +} + +.vc-settings-quickActions-pill:hover { + background: var(--background-secondary-alt); +} + +.vc-settings-quickActions-pill:focus-visible { + outline: 2px solid var(--focus-primary); + outline-offset: 2px; +} + +.vc-settings-quickActions-img { + width: 24px; + height: 24px; +} diff --git a/src/components/VencordSettings/quickActions.tsx b/src/components/VencordSettings/quickActions.tsx new file mode 100644 index 000000000..6cc57180a --- /dev/null +++ b/src/components/VencordSettings/quickActions.tsx @@ -0,0 +1,39 @@ +/* + * Vencord, a Discord client mod + * Copyright (c) 2024 Vendicated and contributors + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +import "./quickActions.css"; + +import { classNameFactory } from "@api/Styles"; +import { Card } from "@webpack/common"; +import type { ComponentType, PropsWithChildren, ReactNode } from "react"; + +const cl = classNameFactory("vc-settings-quickActions-"); + +export interface QuickActionProps { + Icon: ComponentType<{ className?: string; }>; + text: ReactNode; + action?: () => void; + disabled?: boolean; +} + +export function QuickAction(props: QuickActionProps) { + const { Icon, action, text, disabled } = props; + + return ( + + ); +} + +export function QuickActionCard(props: PropsWithChildren) { + return ( + + {props.children} + + ); +} diff --git a/src/components/VencordSettings/settingsStyles.css b/src/components/VencordSettings/settingsStyles.css index 6e8826c52..13558be21 100644 --- a/src/components/VencordSettings/settingsStyles.css +++ b/src/components/VencordSettings/settingsStyles.css @@ -10,26 +10,6 @@ margin-bottom: -2px; } -.vc-settings-quick-actions-card { - color: var(--text-normal); - padding: 1em; - display: flex; - justify-content: space-evenly; - gap: 1em; - flex-wrap: wrap; - align-items: center; - margin-bottom: 1em; -} - -.vc-settings-quick-actions-card button { - min-width: unset; -} - -.vc-settings-quick-actions-img { - width: 30px; - height: 30px; -} - .vc-settings-donate { display: flex; flex-direction: row;