From 97a59d6a15db9f996afe9f8e83f4f7c1ba602837 Mon Sep 17 00:00:00 2001 From: Sean Edmunds Date: Fri, 2 May 2025 14:50:14 -0500 Subject: [PATCH] State management --- biome.json | 1 - index.html | 2 + package-lock.json | 220 +++++++++--------- package.json | 24 +- src/App.tsx | 1 - src/components/WeatherModal/WeatherGraphs.tsx | 3 +- src/hooks/useCommonHooks.ts | 1 - src/index.css | 1 - .../components/Applications/Applications.tsx | 90 ++++--- .../components/Bookmarks/Bookmarks.tsx | 33 ++- .../Bookmarks/DebouncedGroupSettingsItem.tsx | 2 +- .../settings/components/Messages/Messages.tsx | 33 ++- .../Personalization/Personalization.tsx | 7 +- .../components/Search/SearchProviders.tsx | 79 ++++--- .../components/Shared/NoItemsFound.tsx | 22 ++ .../components/Shared/SettingsHeader.tsx | 19 +- .../components/Theming/ThemePlaylists.tsx | 170 ++++++++------ .../settings/components/Theming/Themes.tsx | 39 +++- .../settings/components/WoL/WolClients.tsx | 63 +++-- src/styles/ActionIcon.module.css | 33 +++ src/styles/Button.module.css | 2 +- 21 files changed, 525 insertions(+), 320 deletions(-) delete mode 100644 src/index.css create mode 100644 src/pages/settings/components/Shared/NoItemsFound.tsx diff --git a/biome.json b/biome.json index eeb4374..24e4dfa 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,4 @@ { - "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", "organizeImports": { "enabled": true }, diff --git a/index.html b/index.html index d3a2061..ce0f261 100644 --- a/index.html +++ b/index.html @@ -3,6 +3,8 @@ + + Pull the Trigger diff --git a/package-lock.json b/package-lock.json index a916c0e..ea330fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,27 +9,27 @@ "version": "0.1.0", "dependencies": { "@hello-pangea/dnd": "^18.0.1", - "@mantine/core": "^7.17.5", - "@mantine/hooks": "^7.17.5", - "@mantine/notifications": "^7.17.5", - "@tanstack/react-query": "^5.74.4", - "@tanstack/react-query-devtools": "^5.74.6", - "@tanstack/react-query-persist-client": "^5.74.6", + "@mantine/core": "^7.17.7", + "@mantine/hooks": "^7.17.7", + "@mantine/notifications": "^7.17.7", + "@tanstack/react-query": "^5.75.1", + "@tanstack/react-query-devtools": "^5.75.1", + "@tanstack/react-query-persist-client": "^5.75.1", "idb-keyval": "^6.2.1", "jotai": "^2.12.3", "react": "^19.1.0", "react-dom": "^19.1.0", "react-icons": "^5.5.0", "react-query": "^3.39.3", - "react-router-dom": "^7.5.2", + "react-router-dom": "^7.5.3", "recharts": "^2.15.3" }, "devDependencies": { - "@types/node": "^22.15.2", + "@types/node": "^22.15.3", "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", - "@typescript-eslint/eslint-plugin": "^8.31.0", - "@typescript-eslint/parser": "^8.31.0", + "@types/react-dom": "^19.1.3", + "@typescript-eslint/eslint-plugin": "^8.31.1", + "@typescript-eslint/parser": "^8.31.1", "@vitejs/plugin-react": "^4.4.1", "@vitest/coverage-v8": "^3.1.2", "@vitest/ui": "^3.1.2", @@ -37,7 +37,7 @@ "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.20", "typescript": "^5.8.3", - "vite": "^6.3.3", + "vite": "^6.3.4", "vite-plugin-dts": "~4.5.3", "vite-plugin-eslint": "^1.8.1", "vite-tsconfig-paths": "^5.1.4", @@ -1198,9 +1198,9 @@ } }, "node_modules/@mantine/core": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.17.5.tgz", - "integrity": "sha512-66g/lr281cDPfucjtPw8gFo/yNS9G5iSKqysvPGuDpUBG2bEw8FsJMIsU0bMXtravToIpa3vJRrFUuPndPGnpQ==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.17.7.tgz", + "integrity": "sha512-JMyV4/jPATXxmE31g8TJxsrH7XvdrA5pwT4gg25zBl1KE5vLBpBLLjsHG728+bDKuf+bDV+8lw+1kqgW7FcplQ==", "license": "MIT", "dependencies": { "@floating-ui/react": "^0.26.28", @@ -1211,40 +1211,40 @@ "type-fest": "^4.27.0" }, "peerDependencies": { - "@mantine/hooks": "7.17.5", + "@mantine/hooks": "7.17.7", "react": "^18.x || ^19.x", "react-dom": "^18.x || ^19.x" } }, "node_modules/@mantine/hooks": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.17.5.tgz", - "integrity": "sha512-Q/3AHI1fjl+W7xQ3jEoMmSoTxLqxMI2gPfxIjd73OPmRpPenYWR1zk/diirXXm2t7JOrAbmpA3/O1gzmgqzc/Q==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.17.7.tgz", + "integrity": "sha512-5MIvN/YAcewc97nG3jVrlnFqAExnJRBNWmV6UgGHWbiZiPSCh5o2RJE/5ZVGSfkexDpav9gkm2jkWkIbemVqVA==", "license": "MIT", "peerDependencies": { "react": "^18.x || ^19.x" } }, "node_modules/@mantine/notifications": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.17.5.tgz", - "integrity": "sha512-dLbrSm7ct97fb0Yv8ImVj9mVNkjnD/xkDCP1PANt/shM9xDh0TguqQTvborb+8Wxh1g+RtWVML/an5rVsHbKmg==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@mantine/notifications/-/notifications-7.17.7.tgz", + "integrity": "sha512-T6m4uUPEkPcTdo7J29lDey5YDJkVh/t6kWaCGQ0xDX1tzGGGPtaf1Exj1N0EtrIetbXPuEE8+yvq5P7wUJ3t9w==", "license": "MIT", "dependencies": { - "@mantine/store": "7.17.5", + "@mantine/store": "7.17.7", "react-transition-group": "4.4.5" }, "peerDependencies": { - "@mantine/core": "7.17.5", - "@mantine/hooks": "7.17.5", + "@mantine/core": "7.17.7", + "@mantine/hooks": "7.17.7", "react": "^18.x || ^19.x", "react-dom": "^18.x || ^19.x" } }, "node_modules/@mantine/store": { - "version": "7.17.5", - "resolved": "https://registry.npmjs.org/@mantine/store/-/store-7.17.5.tgz", - "integrity": "sha512-HQzy4rBlUFyw+39TgiAV+TGuQivMWYeQlnMctKJlaxwVY5ZTdF2IpJ/JZcjkGrmrZvBwUQ8IOMFvt2eZc20P1Q==", + "version": "7.17.7", + "resolved": "https://registry.npmjs.org/@mantine/store/-/store-7.17.7.tgz", + "integrity": "sha512-a2XmX6/ixuT+q1H7uNZq3opKZWlxS67XWU2fxCc/E/XHbzik25i2oj9inFpIZMT7UmhUkxj4/pbJQGMs3T5liw==", "license": "MIT", "peerDependencies": { "react": "^18.x || ^19.x" @@ -1876,9 +1876,9 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.74.4", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.74.4.tgz", - "integrity": "sha512-YuG0A0+3i9b2Gfo9fkmNnkUWh5+5cFhWBN0pJAHkHilTx6A0nv8kepkk4T4GRt4e5ahbtFj2eTtkiPcVU1xO4A==", + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.75.0.tgz", + "integrity": "sha512-rk8KQuCdhoRkzjRVF3QxLgAfFUyS0k7+GCQjlGEpEGco+qazJ0eMH6aO1DjDjibH7/ik383nnztua3BG+lOnwg==", "license": "MIT", "funding": { "type": "github", @@ -1886,9 +1886,9 @@ } }, "node_modules/@tanstack/query-devtools": { - "version": "5.74.6", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.74.6.tgz", - "integrity": "sha512-djaFT11mVCOW3e0Ezfyiq7T6OoHy2LRI1fUFQvj+G6+/4A1FkuRMNUhQkdP1GXlx8id0f1/zd5fgDpIy5SU/Iw==", + "version": "5.74.7", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.74.7.tgz", + "integrity": "sha512-nSNlfuGdnHf4yB0S+BoNYOE1o3oAH093weAYZolIHfS2stulyA/gWfSk/9H4ZFk5mAAHb5vNqAeJOmbdcGPEQw==", "license": "MIT", "funding": { "type": "github", @@ -1896,12 +1896,12 @@ } }, "node_modules/@tanstack/query-persist-client-core": { - "version": "5.74.6", - "resolved": "https://registry.npmjs.org/@tanstack/query-persist-client-core/-/query-persist-client-core-5.74.6.tgz", - "integrity": "sha512-9OJ4tz4evC53tS4NfxaohctFjE9/sqvK4U5HlUBsBcQRI/fn+75lIpD9RcLIbUPcx78hPC35NSUKD7OX6YNw4Q==", + "version": "5.75.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-persist-client-core/-/query-persist-client-core-5.75.0.tgz", + "integrity": "sha512-/EeURZCen5hw1u4B7s/UbbwrtvNBX/VNWhR8rNtXvXmY9020YtvRd95SCblUVd8kcia4knPM+T+UThskowKmVA==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.74.4" + "@tanstack/query-core": "5.75.0" }, "funding": { "type": "github", @@ -1909,12 +1909,12 @@ } }, "node_modules/@tanstack/react-query": { - "version": "5.74.4", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.74.4.tgz", - "integrity": "sha512-mAbxw60d4ffQ4qmRYfkO1xzRBPUEf/72Dgo3qqea0J66nIKuDTLEqQt0ku++SDFlMGMnB6uKDnEG1xD/TDse4Q==", + "version": "5.75.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.75.1.tgz", + "integrity": "sha512-tN+gG+eXCHYm+VpmdXUP1rfE9LUrRzgYozTkBZtJV1/WFM3vwWNKQC8G6b2RKcs+2cPg+hdToZHZfjL3bF4yIQ==", "license": "MIT", "dependencies": { - "@tanstack/query-core": "5.74.4" + "@tanstack/query-core": "5.75.0" }, "funding": { "type": "github", @@ -1925,36 +1925,36 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.74.6", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.74.6.tgz", - "integrity": "sha512-vlsDwz4/FsblK0h7VAlXUdJ+9OV+i1n8OLb8CLLAZqu0M9GCnbajytZwsRmns33PXBZ6wQBJ859kg6aajx+e9Q==", + "version": "5.75.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.75.1.tgz", + "integrity": "sha512-6S71fJRBlb0adlG5z/OHRqZqtHoPYVCklf/KCnOoZ3vdx9O/K9BLvqeeDeMUkZ6Rak/IupbEbvBsFoUiMHwZiQ==", "license": "MIT", "dependencies": { - "@tanstack/query-devtools": "5.74.6" + "@tanstack/query-devtools": "5.74.7" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.74.4", + "@tanstack/react-query": "^5.75.1", "react": "^18 || ^19" } }, "node_modules/@tanstack/react-query-persist-client": { - "version": "5.74.6", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-5.74.6.tgz", - "integrity": "sha512-gGJ+4IKIRWC9JeChBOvGgZj1lQcP3bAT8Kofv1Csx4CbqkyhbALlUkpiUXYyVpeS60acXS6NRAajlfzRtfsE+Q==", + "version": "5.75.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-5.75.1.tgz", + "integrity": "sha512-o7Dqw2Moon+4BtjT0+sizrRP8jFv2CNOOFicRWsmEsjA4qRi6H+9JXYtakayLh4xNhD5V4IDJ1817ZfhBsXqeQ==", "license": "MIT", "dependencies": { - "@tanstack/query-persist-client-core": "5.74.6" + "@tanstack/query-persist-client-core": "5.75.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.74.4", + "@tanstack/react-query": "^5.75.1", "react": "^18 || ^19" } }, @@ -2083,9 +2083,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "22.15.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.2.tgz", - "integrity": "sha512-uKXqKN9beGoMdBfcaTY1ecwz6ctxuJAcUlwE55938g0ZJ8lRxwAZqRz2AJ4pzpt5dHdTPMB863UZ0ESiFUcP7A==", + "version": "22.15.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.3.tgz", + "integrity": "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==", "dev": true, "license": "MIT", "dependencies": { @@ -2103,9 +2103,9 @@ } }, "node_modules/@types/react-dom": { - "version": "19.1.2", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.2.tgz", - "integrity": "sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==", + "version": "19.1.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.3.tgz", + "integrity": "sha512-rJXC08OG0h3W6wDMFxQrZF00Kq6qQvw0djHRdzl3U5DnIERz0MRce3WVc7IS6JYBwtaP/DwYtRRjVlvivNveKg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -2119,17 +2119,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.31.0.tgz", - "integrity": "sha512-evaQJZ/J/S4wisevDvC1KFZkPzRetH8kYZbkgcTRyql3mcKsf+ZFDV1BVWUGTCAW5pQHoqn5gK5b8kn7ou9aFQ==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.31.1.tgz", + "integrity": "sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.31.0", - "@typescript-eslint/type-utils": "8.31.0", - "@typescript-eslint/utils": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0", + "@typescript-eslint/scope-manager": "8.31.1", + "@typescript-eslint/type-utils": "8.31.1", + "@typescript-eslint/utils": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2149,16 +2149,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.0.tgz", - "integrity": "sha512-67kYYShjBR0jNI5vsf/c3WG4u+zDnCTHTPqVMQguffaWWFs7artgwKmfwdifl+r6XyM5LYLas/dInj2T0SgJyw==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.31.1.tgz", + "integrity": "sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.31.0", - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/typescript-estree": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0", + "@typescript-eslint/scope-manager": "8.31.1", + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/typescript-estree": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1", "debug": "^4.3.4" }, "engines": { @@ -2174,14 +2174,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.0.tgz", - "integrity": "sha512-knO8UyF78Nt8O/B64i7TlGXod69ko7z6vJD9uhSlm0qkAbGeRUSudcm0+K/4CrRjrpiHfBCjMWlc08Vav1xwcw==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.31.1.tgz", + "integrity": "sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0" + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2192,14 +2192,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.31.0.tgz", - "integrity": "sha512-DJ1N1GdjI7IS7uRlzJuEDCgDQix3ZVYVtgeWEyhyn4iaoitpMBX6Ndd488mXSx0xah/cONAkEaYyylDyAeHMHg==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.31.1.tgz", + "integrity": "sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.31.0", - "@typescript-eslint/utils": "8.31.0", + "@typescript-eslint/typescript-estree": "8.31.1", + "@typescript-eslint/utils": "8.31.1", "debug": "^4.3.4", "ts-api-utils": "^2.0.1" }, @@ -2216,9 +2216,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.0.tgz", - "integrity": "sha512-Ch8oSjVyYyJxPQk8pMiP2FFGYatqXQfQIaMp+TpuuLlDachRWpUAeEu1u9B/v/8LToehUIWyiKcA/w5hUFRKuQ==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.31.1.tgz", + "integrity": "sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==", "dev": true, "license": "MIT", "engines": { @@ -2230,14 +2230,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.0.tgz", - "integrity": "sha512-xLmgn4Yl46xi6aDSZ9KkyfhhtnYI15/CvHbpOy/eR5NWhK/BK8wc709KKwhAR0m4ZKRP7h07bm4BWUYOCuRpQQ==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.31.1.tgz", + "integrity": "sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/visitor-keys": "8.31.0", + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/visitor-keys": "8.31.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -2257,16 +2257,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.31.0.tgz", - "integrity": "sha512-qi6uPLt9cjTFxAb1zGNgTob4x9ur7xC6mHQJ8GwEzGMGE9tYniublmJaowOJ9V2jUzxrltTPfdG2nKlWsq0+Ww==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.31.1.tgz", + "integrity": "sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.31.0", - "@typescript-eslint/types": "8.31.0", - "@typescript-eslint/typescript-estree": "8.31.0" + "@typescript-eslint/scope-manager": "8.31.1", + "@typescript-eslint/types": "8.31.1", + "@typescript-eslint/typescript-estree": "8.31.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2281,13 +2281,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.31.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.0.tgz", - "integrity": "sha512-QcGHmlRHWOl93o64ZUMNewCdwKGU6WItOU52H0djgNmn1EOrhVudrDzXz4OycCRSCPwFCDrE2iIt5vmuUdHxuQ==", + "version": "8.31.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.31.1.tgz", + "integrity": "sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.31.0", + "@typescript-eslint/types": "8.31.1", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -4933,9 +4933,9 @@ } }, "node_modules/react-router": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.5.2.tgz", - "integrity": "sha512-9Rw8r199klMnlGZ8VAsV/I8WrIF6IyJ90JQUdboupx1cdkgYqwnrYjH+I/nY/7cA1X5zia4mDJqH36npP7sxGQ==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.5.3.tgz", + "integrity": "sha512-3iUDM4/fZCQ89SXlDa+Ph3MevBrozBAI655OAfWQlTm9nBR0IKlrmNwFow5lPHttbwvITZfkeeeZFP6zt3F7pw==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -4956,12 +4956,12 @@ } }, "node_modules/react-router-dom": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.5.2.tgz", - "integrity": "sha512-yk1XW8Fj7gK7flpYBXF3yzd2NbX6P7Kxjvs2b5nu1M04rb5pg/Zc4fGdBNTeT4eDYL2bvzWNyKaIMJX/RKHTTg==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.5.3.tgz", + "integrity": "sha512-cK0jSaTyW4jV9SRKAItMIQfWZ/D6WEZafgHuuCb9g+SjhLolY78qc+De4w/Cz9ybjvLzShAmaIMEXt8iF1Cm+A==", "license": "MIT", "dependencies": { - "react-router": "7.5.2" + "react-router": "7.5.3" }, "engines": { "node": ">=20.0.0" @@ -5851,9 +5851,9 @@ } }, "node_modules/vite": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.3.tgz", - "integrity": "sha512-5nXH+QsELbFKhsEfWLkHrvgRpTdGJzqOZ+utSdmPTvwHmvU6ITTm3xx+mRusihkcI8GeC7lCDyn3kDtiki9scw==", + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.4.tgz", + "integrity": "sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 52c658a..0d79ec7 100644 --- a/package.json +++ b/package.json @@ -11,27 +11,27 @@ }, "dependencies": { "@hello-pangea/dnd": "^18.0.1", - "@mantine/core": "^7.17.5", - "@mantine/hooks": "^7.17.5", - "@mantine/notifications": "^7.17.5", - "@tanstack/react-query": "^5.74.4", - "@tanstack/react-query-devtools": "^5.74.6", - "@tanstack/react-query-persist-client": "^5.74.6", + "@mantine/core": "^7.17.7", + "@mantine/hooks": "^7.17.7", + "@mantine/notifications": "^7.17.7", + "@tanstack/react-query": "^5.75.1", + "@tanstack/react-query-devtools": "^5.75.1", + "@tanstack/react-query-persist-client": "^5.75.1", "idb-keyval": "^6.2.1", "jotai": "^2.12.3", "react": "^19.1.0", "react-dom": "^19.1.0", "react-icons": "^5.5.0", "react-query": "^3.39.3", - "react-router-dom": "^7.5.2", + "react-router-dom": "^7.5.3", "recharts": "^2.15.3" }, "devDependencies": { - "@types/node": "^22.15.2", + "@types/node": "^22.15.3", "@types/react": "^19.1.2", - "@types/react-dom": "^19.1.2", - "@typescript-eslint/eslint-plugin": "^8.31.0", - "@typescript-eslint/parser": "^8.31.0", + "@types/react-dom": "^19.1.3", + "@typescript-eslint/eslint-plugin": "^8.31.1", + "@typescript-eslint/parser": "^8.31.1", "@vitejs/plugin-react": "^4.4.1", "@vitest/coverage-v8": "^3.1.2", "@vitest/ui": "^3.1.2", @@ -39,7 +39,7 @@ "eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-refresh": "^0.4.20", "typescript": "^5.8.3", - "vite": "^6.3.3", + "vite": "^6.3.4", "vite-plugin-dts": "~4.5.3", "vite-plugin-eslint": "^1.8.1", "vite-tsconfig-paths": "^5.1.4", diff --git a/src/App.tsx b/src/App.tsx index 8a6db75..e285485 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -19,7 +19,6 @@ import { Loading, MainLayout } from './components'; import '@mantine/core/styles.css'; import '@mantine/notifications/styles.css'; import { ReactQueryDevtools } from '@tanstack/react-query-devtools'; -import './index.css'; import { Homepage, Settings } from 'pages'; import type { Theme, ThemePlaylist } from 'types'; diff --git a/src/components/WeatherModal/WeatherGraphs.tsx b/src/components/WeatherModal/WeatherGraphs.tsx index 3093daa..64aeb55 100644 --- a/src/components/WeatherModal/WeatherGraphs.tsx +++ b/src/components/WeatherModal/WeatherGraphs.tsx @@ -29,7 +29,8 @@ export default function WeatherGraphs({ {payload.map((item: any) => ( {`${item.name} - ${item.value}${item.unit}`} ))} diff --git a/src/hooks/useCommonHooks.ts b/src/hooks/useCommonHooks.ts index 6a6ddfe..efd4e70 100644 --- a/src/hooks/useCommonHooks.ts +++ b/src/hooks/useCommonHooks.ts @@ -41,7 +41,6 @@ export function useCommonHooks() { key: 'theme', defaultValue: 'blackboard', }); - const [currentThemePlaylist, setCurrentThemePlaylist] = useLocalStorage({ key: 'themePlaylist', defaultValue: 'All', diff --git a/src/index.css b/src/index.css deleted file mode 100644 index 2e9cb95..0000000 --- a/src/index.css +++ /dev/null @@ -1 +0,0 @@ -@import url("https://fonts.googleapis.com/css2?family=Jost:ital,wght@0,100;0,200;0,400;1,100;1,200&display=swap"); diff --git a/src/pages/settings/components/Applications/Applications.tsx b/src/pages/settings/components/Applications/Applications.tsx index c4b6565..03e8548 100644 --- a/src/pages/settings/components/Applications/Applications.tsx +++ b/src/pages/settings/components/Applications/Applications.tsx @@ -24,6 +24,7 @@ import * as vsc from 'react-icons/vsc'; import { popoverClasses, selectClasses, textInputClasses } from 'styles'; import type { Application } from 'types'; import AddItemModal from '../Shared/AddItemModal'; +import NoItemsFound from '../Shared/NoItemsFound'; import SettingsHeader from '../Shared/SettingsHeader'; import AppSettingsItem from './AppSettingsItem'; import DebouncedApplication from './DebouncedApplication'; @@ -54,6 +55,7 @@ const ApplicationSettings = () => { const [debouncedSearch] = useDebouncedValue(searchValue, 500); const [dragging, setDragging] = useState(false); const [isOpen, setIsOpen] = useState(false); + const [isLoading, setIsLoading] = useState(false); function onDragEnd(result: any) { if (!result.destination) { @@ -81,17 +83,22 @@ const ApplicationSettings = () => { closeModal(); setNewApplication(defaultApplication); }; - useEffect(() => { if (applicationData && !isAppsFetching) { setApplications( applicationData - .filter((a: Application) => - a.name.toLowerCase().includes(debouncedSearch.toLowerCase()), + .filter( + (a: Application) => + a.name.toLowerCase().includes(debouncedSearch.toLowerCase()) || + a.url.toLowerCase().includes(debouncedSearch.toLowerCase()) || + a.baseUrl.toLowerCase().includes(debouncedSearch.toLowerCase()), ) .sort((a: Application, b: Application) => (a.index > b.index ? 1 : -1)), ); } + if (debouncedSearch === searchValue) { + setIsLoading(false); + } }, [applicationData, isAppsFetching, debouncedSearch]); useEffect(() => { @@ -103,7 +110,6 @@ const ApplicationSettings = () => { }); } }, [applicationList]); - return ( { title={'Applications'} tooltip={{ title: - 'Applications are the applicationData that will be displayed on the homepage.', + 'Applications are the app buttons that will be displayed on the homepage.', highlightList: [ 'Applications', 'applicationData', 'application', + 'app', + 'apps', 'name', 'base url', 'url', @@ -270,6 +278,8 @@ const ApplicationSettings = () => { searchValue={searchValue} setSearchValue={setSearchValue} searchPlaceholder={'Search Applications...'} + isLoading={isLoading} + setIsLoading={setIsLoading} /> {dragging ? ( @@ -361,39 +371,49 @@ const ApplicationSettings = () => { align='center' > - {applications?.map((application: Application) => ( - - - - { - e.stopPropagation(); - }} - > - 0 ? ( + applications?.map((application: Application) => ( + + + + { + e.stopPropagation(); + }} + > + + + + + - - - - - - + + + + )) + ) : ( + + - ))} + )} )} diff --git a/src/pages/settings/components/Bookmarks/Bookmarks.tsx b/src/pages/settings/components/Bookmarks/Bookmarks.tsx index f93da5c..2abf891 100644 --- a/src/pages/settings/components/Bookmarks/Bookmarks.tsx +++ b/src/pages/settings/components/Bookmarks/Bookmarks.tsx @@ -6,6 +6,7 @@ import { useEffect, useState } from 'react'; import { textInputClasses } from 'styles'; import type { Bookmark, BookmarkGroup } from 'types'; import AddItemModal from '../Shared/AddItemModal'; +import NoItemsFound from '../Shared/NoItemsFound'; import SettingsHeader from '../Shared/SettingsHeader'; import DebouncedGroupSettingsItem from './DebouncedGroupSettingsItem'; const BookmarkSettings = () => { @@ -33,6 +34,7 @@ const BookmarkSettings = () => { const [searchValue, setSearchValue] = useState(''); const [debouncedGroupSearch] = useDebouncedValue(searchValue, 500); const [modalOpened, { open: openModal, close: closeModal }] = useDisclosure(false); + const [isLoading, setIsLoading] = useState(false); const handleClose = () => { setNewGroup(defaultGroup); @@ -94,6 +96,9 @@ const BookmarkSettings = () => { ); setGroups(groupList); } + if (debouncedGroupSearch === searchValue) { + setIsLoading(false); + } }, [groupData, groupsIsFetched, debouncedGroupSearch]); useEffect(() => { @@ -194,6 +199,8 @@ const BookmarkSettings = () => { searchValue={searchValue} setSearchValue={setSearchValue} searchPlaceholder={'Search Bookmark Groups...'} + isLoading={isLoading} + setIsLoading={setIsLoading} /> {dragging ? ( @@ -285,16 +292,22 @@ const BookmarkSettings = () => { align='center' > - {groups?.map((group: BookmarkGroup) => ( - a.category === group.categoryName) - .sort((a: Bookmark, b: Bookmark) => (a.index > b.index ? 1 : -1))} - searchTerm={searchValue} - /> - ))} + {groups.length > 0 ? ( + groups?.map((group: BookmarkGroup) => ( + a.category === group.categoryName) + .sort((a: Bookmark, b: Bookmark) => (a.index > b.index ? 1 : -1))} + searchTerm={searchValue} + /> + )) + ) : ( + + + + )} )} diff --git a/src/pages/settings/components/Bookmarks/DebouncedGroupSettingsItem.tsx b/src/pages/settings/components/Bookmarks/DebouncedGroupSettingsItem.tsx index 632d5dd..47ba72e 100644 --- a/src/pages/settings/components/Bookmarks/DebouncedGroupSettingsItem.tsx +++ b/src/pages/settings/components/Bookmarks/DebouncedGroupSettingsItem.tsx @@ -286,7 +286,7 @@ function DebouncedGroupSettingsItem({ >