diff --git a/package-lock.json b/package-lock.json
index 3bb9e6d..4f3e19d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,9 +13,9 @@
"@mantine/form": "^8.2.2",
"@mantine/hooks": "^8.2.2",
"@mantine/notifications": "^8.2.2",
- "@tanstack/react-query": "^5.84.0",
- "@tanstack/react-query-devtools": "^5.84.0",
- "@tanstack/react-query-persist-client": "^5.84.0",
+ "@tanstack/react-query": "^5.84.1",
+ "@tanstack/react-query-devtools": "^5.84.1",
+ "@tanstack/react-query-persist-client": "^5.84.1",
"idb-keyval": "^6.2.2",
"jotai": "^2.12.5",
"react": "^19.1.1",
@@ -1662,9 +1662,9 @@
}
},
"node_modules/@tanstack/react-query": {
- "version": "5.84.0",
- "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.84.0.tgz",
- "integrity": "sha512-iPycFGLq5lltDE16Jf13Nx7SOvtfoopfOH/+Ahbdd+z4QqOfYu/SOkY86AVYVcKjneuqPxTm8e85lSGhwe0cog==",
+ "version": "5.84.1",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.84.1.tgz",
+ "integrity": "sha512-zo7EUygcWJMQfFNWDSG7CBhy8irje/XY0RDVKKV4IQJAysb+ZJkkJPcnQi+KboyGUgT+SQebRFoTqLuTtfoDLw==",
"license": "MIT",
"dependencies": {
"@tanstack/query-core": "5.83.1"
@@ -1678,9 +1678,9 @@
}
},
"node_modules/@tanstack/react-query-devtools": {
- "version": "5.84.0",
- "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.84.0.tgz",
- "integrity": "sha512-7SwgDOm1Waz9wKOwR8WPaN4yo6zq1UBQxGLWy/SJWZOoo2bUVRVlGPvFicuOUwQWv5VDzzNYq4GvTQnX4T3xtw==",
+ "version": "5.84.1",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.84.1.tgz",
+ "integrity": "sha512-nle+OQ9B3Z3EG2R3ixvaNcJ6OeqGwmAc5iMDW6Vj+emLZkWRrN3BDsrzZQu414n34lpxplnC7z1jmKuU/scHCQ==",
"license": "MIT",
"dependencies": {
"@tanstack/query-devtools": "5.84.0"
@@ -1690,14 +1690,14 @@
"url": "https://github.com/sponsors/tannerlinsley"
},
"peerDependencies": {
- "@tanstack/react-query": "^5.84.0",
+ "@tanstack/react-query": "^5.84.1",
"react": "^18 || ^19"
}
},
"node_modules/@tanstack/react-query-persist-client": {
- "version": "5.84.0",
- "resolved": "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-5.84.0.tgz",
- "integrity": "sha512-vpe2KnCkbcZmbk4SXObKxJL9BKP6IlZxBOi5Ua7oZFa8LKoECBHR+oK0YoEhtQKVaBaRbSc7G0YsuUZWct7vRQ==",
+ "version": "5.84.1",
+ "resolved": "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-5.84.1.tgz",
+ "integrity": "sha512-Qpn2kg7eI+dI4AHeXmI0FYn1JVwluSESA3iJ+KJv9zZiluPhiFmzFT++j9QYwu/LHUwp4PmjqSPHkuBLiYkTRQ==",
"license": "MIT",
"dependencies": {
"@tanstack/query-persist-client-core": "5.83.1"
@@ -1707,7 +1707,7 @@
"url": "https://github.com/sponsors/tannerlinsley"
},
"peerDependencies": {
- "@tanstack/react-query": "^5.84.0",
+ "@tanstack/react-query": "^5.84.1",
"react": "^18 || ^19"
}
},
diff --git a/package.json b/package.json
index e4d6b96..89253c2 100644
--- a/package.json
+++ b/package.json
@@ -15,9 +15,9 @@
"@mantine/form": "^8.2.2",
"@mantine/hooks": "^8.2.2",
"@mantine/notifications": "^8.2.2",
- "@tanstack/react-query": "^5.84.0",
- "@tanstack/react-query-devtools": "^5.84.0",
- "@tanstack/react-query-persist-client": "^5.84.0",
+ "@tanstack/react-query": "^5.84.1",
+ "@tanstack/react-query-devtools": "^5.84.1",
+ "@tanstack/react-query-persist-client": "^5.84.1",
"idb-keyval": "^6.2.2",
"jotai": "^2.12.5",
"react": "^19.1.1",
diff --git a/src/hooks/useAPI.tsx b/src/hooks/useAPI.tsx
index 8761aab..8c92d07 100644
--- a/src/hooks/useAPI.tsx
+++ b/src/hooks/useAPI.tsx
@@ -130,7 +130,9 @@ export function useMutationAPI() {
endpoint === 'api/bookmarkCategoryOrder' &&
queryClient.refetchQueries({ queryKey: ['GET', 'api/bookmarkCategories'] });
endpoint === 'api/applicationOrder' &&
- queryClient.refetchQueries({ queryKey: ['GET', 'api/applicationOrder'] });
+ queryClient.refetchQueries({ queryKey: ['GET', 'api/applications'] });
+ endpoint === 'api/applications' &&
+ queryClient.refetchQueries({ queryKey: ['GET', 'api/enabledApplications'] });
endpoint === 'api/bookmarks' &&
queryClient.refetchQueries({ queryKey: ['GET', 'api/themes'] });
endpoint === 'api/providers' &&
@@ -145,7 +147,9 @@ export function useMutationAPI() {
endpoint === 'api/bookmarkCategoryOrder' &&
queryClient.refetchQueries({ queryKey: ['GET', 'api/bookmarkCategories'] });
endpoint === 'api/applicationOrder' &&
- queryClient.refetchQueries({ queryKey: ['GET', 'api/applicationOrder'] });
+ queryClient.refetchQueries({ queryKey: ['GET', 'api/applications'] });
+ endpoint === 'api/applications' &&
+ queryClient.refetchQueries({ queryKey: ['GET', 'api/enabledApplications'] });
endpoint === 'api/bookmarks' &&
queryClient.refetchQueries({ queryKey: ['GET', 'api/themes'] });
endpoint === 'api/providers' &&
diff --git a/src/pages/settings/components/Theming/ThemePlaylists/components/ThemePlaylistModal.tsx b/src/pages/settings/components/Theming/ThemePlaylists/components/ThemePlaylistModal.tsx
index 81db37b..20fd808 100644
--- a/src/pages/settings/components/Theming/ThemePlaylists/components/ThemePlaylistModal.tsx
+++ b/src/pages/settings/components/Theming/ThemePlaylists/components/ThemePlaylistModal.tsx
@@ -1,6 +1,7 @@
import { Button, Group, Modal, Text, TextInput } from '@mantine/core';
import { useCommonHooks } from 'hooks';
import { useEffect, useState } from 'react';
+import { FaTag } from 'react-icons/fa';
import { modalClasses, textInputClasses } from 'styles';
import type { Theme, ThemePlaylist } from 'types';
import { ThemePreviewMiddleware } from '../../Themes';
@@ -55,6 +56,14 @@ export function ThemePlaylistModal({
+ {selectedPlaylist?.name !== 'Time of Day' && (
+
+
+
+ {themeList.length}
+
+
+ )}
Name:
void;
openThemeModal: () => void;
+ enabled?: boolean;
}) {
const { hovered, ref: hoverRef } = useHover();
const { ref, width } = useElementSize();
@@ -107,7 +109,7 @@ export function ThemeCard({
handleOpen={handleOpen}
themePlaylists={themePlaylists}
openModal={openModal}
- hovered={hovered}
+ hovered={hovered && enabled}
hoverPreview={hoverPreview}
setHoverPreview={setHoverPreview}
transition={transition}
@@ -145,7 +147,7 @@ export function ThemeCard({
setCurrentThemePlaylist('All');
}}
>
- {hovered && currentTheme !== 'random' && (
+ {hovered && enabled && currentTheme !== 'random' && (
void;
allThemes: Theme[];
closeThemeModal: () => void;
+ themePlaylists: ThemePlaylist[];
}) {
const themesEndpoint = 'api/themes';
const { isMobile } = useCommonHooks();
@@ -36,11 +39,22 @@ export function ThemeModal({
const [pickerOpen, { open: openPicker, close: closePicker }] = useDisclosure(false);
const [duplicate, setDuplicate] = useState(false);
+ const [hidden, setHidden] = useState(false);
+
+ const playlists =
+ themePlaylists.length > 0
+ ? themePlaylists.filter((playlist: ThemePlaylist) => {
+ if (playlist.themeList.includes(`${selectedTheme.id}`)) {
+ return playlist;
+ }
+ })
+ : [];
const handleClose = () => {
closeThemeModal();
closePicker();
setIsNew(false);
+ setHidden(false);
setSelectedTheme({
id: undefined,
name: 'default',
@@ -87,7 +101,7 @@ export function ThemeModal({
keepMounted={true}
>
-
+
{!isNew && (
@@ -116,6 +130,87 @@ export function ThemeModal({
+
+ {playlists.length > 0 && !isMobile && (
+
+
+
+ Playlists:
+
+ setHidden((hidden) => !hidden)}
+ style={{
+ borderRadius: '50%',
+ backgroundColor: 'var(--mantine-color-accent-0)',
+ color: 'var(--mantine-color-background-0)',
+ }}
+ >
+ {hidden ? : }
+
+
+
+ {playlists.map((playlist: ThemePlaylist) => (
+
+ {playlist.name}
+
+ ))}
+
+
+ )}
{isNew ? (
{
setPressed(true);
});
- const randomTheme = {
- ...allThemes[Math.floor(Math.random() * allThemes.length)],
- randomEnabled: 1,
- };
+ const { hovered: newHover, ref: newRef } = useHover();
+ const { hovered: copyHover, ref: copyRef } = useHover();
+ const randomTheme = useMemo(() => {
+ return {
+ ...allThemes[Math.floor(Math.random() * allThemes.length)],
+ randomEnabled: 1,
+ };
+ }, []);
return (
{!duplicate ? (
@@ -40,12 +44,17 @@ export function NewThemeStarter({
{}}
+ enabled={false}
/>
{}}
+ enabled={false}
/>
- {(colorId === 'backgroundColor' || colorId === 'searchColor') && (
+ {colorId === 'searchColor' && (
{
@@ -294,7 +299,7 @@ export function ThemeEditor({
w={'90%'}
/>
)}
- {colorId !== 'backgroundColor' && colorId !== 'searchColor' && (
+ {colorId !== 'searchColor' && (
{
@@ -320,7 +325,7 @@ export function ThemeEditor({