Style updates

This commit is contained in:
Sean Edmunds
2025-04-10 14:48:51 -05:00
parent a1e5b0b7c8
commit 34e20a49aa
21 changed files with 392 additions and 354 deletions

416
package-lock.json generated
View File

@@ -10,35 +10,35 @@
"dependencies": { "dependencies": {
"@hello-pangea/dnd": "^18.0.1", "@hello-pangea/dnd": "^18.0.1",
"@iconify/react": "^5.2.1", "@iconify/react": "^5.2.1",
"@mantine/core": "^7.17.3", "@mantine/core": "^7.17.4",
"@mantine/hooks": "^7.17.3", "@mantine/hooks": "^7.17.4",
"@tanstack/react-query": "^5.71.5", "@tanstack/react-query": "^5.72.2",
"@tanstack/react-query-devtools": "^5.71.5", "@tanstack/react-query-devtools": "^5.72.2",
"@tanstack/react-query-persist-client": "^5.71.5", "@tanstack/react-query-persist-client": "^5.73.1",
"idb-keyval": "^6.2.1", "idb-keyval": "^6.2.1",
"jotai": "^2.12.2", "jotai": "^2.12.2",
"react": "^19.1.0", "react": "^19.1.0",
"react-dom": "^19.1.0", "react-dom": "^19.1.0",
"react-icons": "^5.5.0", "react-icons": "^5.5.0",
"react-query": "^3.39.3", "react-query": "^3.39.3",
"react-router-dom": "^7.4.1", "react-router-dom": "^7.5.0",
"react-toastify": "^11.0.5", "react-toastify": "^11.0.5",
"recharts": "^2.15.2" "recharts": "^2.15.2"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.14.0", "@types/node": "^22.14.0",
"@types/react": "^19.1.0", "@types/react": "^19.1.0",
"@types/react-dom": "^19.1.1", "@types/react-dom": "^19.1.2",
"@typescript-eslint/eslint-plugin": "^8.29.0", "@typescript-eslint/eslint-plugin": "^8.29.1",
"@typescript-eslint/parser": "^8.29.0", "@typescript-eslint/parser": "^8.29.1",
"@vitejs/plugin-react": "^4.3.4", "@vitejs/plugin-react": "^4.3.4",
"@vitest/coverage-v8": "^3.1.1", "@vitest/coverage-v8": "^3.1.1",
"@vitest/ui": "^3.1.1", "@vitest/ui": "^3.1.1",
"eslint": "^9.23.0", "eslint": "^9.24.0",
"eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.19", "eslint-plugin-react-refresh": "^0.4.19",
"typescript": "^5.8.2", "typescript": "^5.8.3",
"vite": "^6.2.5", "vite": "^6.2.6",
"vite-plugin-dts": "~4.5.3", "vite-plugin-dts": "~4.5.3",
"vite-plugin-eslint": "^1.8.1", "vite-plugin-eslint": "^1.8.1",
"vite-tsconfig-paths": "^5.1.4", "vite-tsconfig-paths": "^5.1.4",
@@ -782,10 +782,11 @@
} }
}, },
"node_modules/@eslint/config-array": { "node_modules/@eslint/config-array": {
"version": "0.19.2", "version": "0.20.0",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
"integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
"dev": true, "dev": true,
"license": "Apache-2.0",
"dependencies": { "dependencies": {
"@eslint/object-schema": "^2.1.6", "@eslint/object-schema": "^2.1.6",
"debug": "^4.3.1", "debug": "^4.3.1",
@@ -800,6 +801,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true, "dev": true,
"license": "MIT",
"dependencies": { "dependencies": {
"balanced-match": "^1.0.0", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
@@ -810,6 +812,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true, "dev": true,
"license": "ISC",
"dependencies": { "dependencies": {
"brace-expansion": "^1.1.7" "brace-expansion": "^1.1.7"
}, },
@@ -863,6 +866,23 @@
"url": "https://opencollective.com/eslint" "url": "https://opencollective.com/eslint"
} }
}, },
"node_modules/@eslint/eslintrc/node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
"version": "1.1.11", "version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -887,6 +907,13 @@
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
}, },
"node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
"license": "MIT"
},
"node_modules/@eslint/eslintrc/node_modules/minimatch": { "node_modules/@eslint/eslintrc/node_modules/minimatch": {
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -901,9 +928,9 @@
} }
}, },
"node_modules/@eslint/js": { "node_modules/@eslint/js": {
"version": "9.23.0", "version": "9.24.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.24.0.tgz",
"integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==", "integrity": "sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@@ -915,6 +942,7 @@
"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
"integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
"dev": true, "dev": true,
"license": "Apache-2.0",
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
} }
@@ -1180,28 +1208,28 @@
} }
}, },
"node_modules/@mantine/core": { "node_modules/@mantine/core": {
"version": "7.17.3", "version": "7.17.4",
"resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.17.3.tgz", "resolved": "https://registry.npmjs.org/@mantine/core/-/core-7.17.4.tgz",
"integrity": "sha512-N/AfV5eMnfEMx9WzI7AU5pNFBEzAfT/KtE2XDKS+0ht6RifUmolIxyIvoGMYz2yUEsCBMJZqmBq33Rabf5W7Ug==", "integrity": "sha512-Ea4M/98jxgIWCuxCdM0YIotVYjfLTGQsfIA6zDg0LsClgjo/ZLnnh4zbi+bLNgM+GGjP4ju7gv4MZvaTKuLO8g==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@floating-ui/react": "^0.26.28", "@floating-ui/react": "^0.26.28",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"react-number-format": "^5.4.3", "react-number-format": "^5.4.3",
"react-remove-scroll": "^2.6.2", "react-remove-scroll": "^2.6.2",
"react-textarea-autosize": "8.5.6", "react-textarea-autosize": "8.5.9",
"type-fest": "^4.27.0" "type-fest": "^4.27.0"
}, },
"peerDependencies": { "peerDependencies": {
"@mantine/hooks": "7.17.3", "@mantine/hooks": "7.17.4",
"react": "^18.x || ^19.x", "react": "^18.x || ^19.x",
"react-dom": "^18.x || ^19.x" "react-dom": "^18.x || ^19.x"
} }
}, },
"node_modules/@mantine/hooks": { "node_modules/@mantine/hooks": {
"version": "7.17.3", "version": "7.17.4",
"resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.17.3.tgz", "resolved": "https://registry.npmjs.org/@mantine/hooks/-/hooks-7.17.4.tgz",
"integrity": "sha512-6o65Rbfl8jd1C1nF9icvungqL0qZViEOmrZgkyKXxBYkC3x91fz4zftwQgNjt1tZHWDNO6Bo4GpRjJyAdwl48g==", "integrity": "sha512-PBcJxDAfGm8k1/JJmaDcxzRVQ3JSE1iXGktbgGz+qEOJmCxwbbAYe+CtGFFgi1xX2bPZ+7dtRr/+XFhnKtt/aw==",
"license": "MIT", "license": "MIT",
"peerDependencies": { "peerDependencies": {
"react": "^18.x || ^19.x" "react": "^18.x || ^19.x"
@@ -1300,6 +1328,20 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/@microsoft/api-extractor/node_modules/typescript": {
"version": "5.8.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=14.17"
}
},
"node_modules/@microsoft/api-extractor/node_modules/yallist": { "node_modules/@microsoft/api-extractor/node_modules/yallist": {
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
@@ -1340,12 +1382,6 @@
"url": "https://github.com/sponsors/epoberezkin" "url": "https://github.com/sponsors/epoberezkin"
} }
}, },
"node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
"node_modules/@nodelib/fs.scandir": { "node_modules/@nodelib/fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -1422,18 +1458,6 @@
} }
} }
}, },
"node_modules/@rollup/pluginutils/node_modules/picomatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
"dev": true,
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/@rollup/rollup-linux-x64-gnu": { "node_modules/@rollup/rollup-linux-x64-gnu": {
"version": "4.30.1", "version": "4.30.1",
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz",
@@ -1500,12 +1524,6 @@
"url": "https://github.com/sponsors/epoberezkin" "url": "https://github.com/sponsors/epoberezkin"
} }
}, },
"node_modules/@rushstack/node-core-library/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
"node_modules/@rushstack/node-core-library/node_modules/lru-cache": { "node_modules/@rushstack/node-core-library/node_modules/lru-cache": {
"version": "6.0.0", "version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -1589,9 +1607,9 @@
} }
}, },
"node_modules/@tanstack/query-core": { "node_modules/@tanstack/query-core": {
"version": "5.71.5", "version": "5.72.2",
"resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.71.5.tgz", "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.72.2.tgz",
"integrity": "sha512-XOQ5SyjCdwhxyLksGKWSL5poqyEXYPDnsrZAzJm2LgrMm4Yh6VOrfC+IFosXreDw9HNqC11YAMY3HlfHjNzuaA==", "integrity": "sha512-fxl9/0yk3mD/FwTmVEf1/H6N5B975H0luT+icKyX566w6uJG0x6o+Yl+I38wJRCaogiMkstByt+seXfDbWDAcA==",
"license": "MIT", "license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
@@ -1599,9 +1617,9 @@
} }
}, },
"node_modules/@tanstack/query-devtools": { "node_modules/@tanstack/query-devtools": {
"version": "5.71.5", "version": "5.72.2",
"resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.71.5.tgz", "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.72.2.tgz",
"integrity": "sha512-Fq1JeAp+I52Md/KnyeFxzG7G0RpdHgeOfDNhSPkZQs/JqqXuAfpUf+wFHDz+vP0GZbSnla2JmcLSQebOkIb1yA==", "integrity": "sha512-mMKnGb+iOhVBcj6jaerCFRpg8pACStdG8hmUBHPtToeZzs4ctjBUL1FajqpVn2WaMxnq8Wya+P3Q5tPFNM9jQw==",
"license": "MIT", "license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
@@ -1609,12 +1627,12 @@
} }
}, },
"node_modules/@tanstack/query-persist-client-core": { "node_modules/@tanstack/query-persist-client-core": {
"version": "5.71.5", "version": "5.73.1",
"resolved": "https://registry.npmjs.org/@tanstack/query-persist-client-core/-/query-persist-client-core-5.71.5.tgz", "resolved": "https://registry.npmjs.org/@tanstack/query-persist-client-core/-/query-persist-client-core-5.73.1.tgz",
"integrity": "sha512-X+S2jXomX9oMDOsbm/WVN0FGJbNFVnP256c1GphoHA/oMbnGLW12CFX03z4nEqkI8mceoygbT9vC2DCiQECSfA==", "integrity": "sha512-xxhRCwLmUfZUnjvjck9TgStJGlSznHhP99NBHTc9bsI4EbZ1FiAEllEB0dQdEF5NoeFdUZw9TS2XxQwTqCTTSA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@tanstack/query-core": "5.71.5" "@tanstack/query-core": "5.72.2"
}, },
"funding": { "funding": {
"type": "github", "type": "github",
@@ -1622,12 +1640,12 @@
} }
}, },
"node_modules/@tanstack/react-query": { "node_modules/@tanstack/react-query": {
"version": "5.71.5", "version": "5.72.2",
"resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.71.5.tgz", "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.72.2.tgz",
"integrity": "sha512-WpxZWy4fDASjY+iAaXB+aY+LC95PQ34W6EWVkjJ0hdzWWbczFnr9nHvHkVDpwdR18I1NO8igNGQJFrLrgyzI8Q==", "integrity": "sha512-SVNHzyBUYiis+XiCl+8yiPZmMYei2AKYY94wM/zpvB5l1jxqOo82FQTziSJ4pBi96jtYqvYrTMxWynmbQh3XKw==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@tanstack/query-core": "5.71.5" "@tanstack/query-core": "5.72.2"
}, },
"funding": { "funding": {
"type": "github", "type": "github",
@@ -1638,36 +1656,36 @@
} }
}, },
"node_modules/@tanstack/react-query-devtools": { "node_modules/@tanstack/react-query-devtools": {
"version": "5.71.5", "version": "5.72.2",
"resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.71.5.tgz", "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.72.2.tgz",
"integrity": "sha512-VErQ29hgwmLrZjMmHp83iv+UdeCbqAyj/JR1mZjDbf+ghyJT+Hmh8jfbh6WYzKh8Fnej7uwl3nHbCsqd3VjoWw==", "integrity": "sha512-n53qr9JdHCJTCUba6OvMhwiV2CcsckngOswKEE7nM5pQBa/fW9c43qw8omw1RPT2s+aC7MuwS8fHsWT8g+j6IQ==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@tanstack/query-devtools": "5.71.5" "@tanstack/query-devtools": "5.72.2"
}, },
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/tannerlinsley" "url": "https://github.com/sponsors/tannerlinsley"
}, },
"peerDependencies": { "peerDependencies": {
"@tanstack/react-query": "^5.71.5", "@tanstack/react-query": "^5.72.2",
"react": "^18 || ^19" "react": "^18 || ^19"
} }
}, },
"node_modules/@tanstack/react-query-persist-client": { "node_modules/@tanstack/react-query-persist-client": {
"version": "5.71.5", "version": "5.73.1",
"resolved": "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-5.71.5.tgz", "resolved": "https://registry.npmjs.org/@tanstack/react-query-persist-client/-/react-query-persist-client-5.73.1.tgz",
"integrity": "sha512-eAY8IR3/vnJQtuU3KGaa3pDI4CC7I98JkkUfcJLPylkrp2I1w/3BsEA/831f89CqEw0zOTOk3Wq13GKLTL05gw==", "integrity": "sha512-fzrmIYa1FQPXp7s6qlzigy96y64qG9tf5kTUbM7DsNahf4DKb5xZ+BMjRzmINOo0h7Tzir+9tVe6ALG2Rpzlvg==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@tanstack/query-persist-client-core": "5.71.5" "@tanstack/query-persist-client-core": "5.73.1"
}, },
"funding": { "funding": {
"type": "github", "type": "github",
"url": "https://github.com/sponsors/tannerlinsley" "url": "https://github.com/sponsors/tannerlinsley"
}, },
"peerDependencies": { "peerDependencies": {
"@tanstack/react-query": "^5.71.5", "@tanstack/react-query": "^5.72.2",
"react": "^18 || ^19" "react": "^18 || ^19"
} }
}, },
@@ -1821,9 +1839,9 @@
} }
}, },
"node_modules/@types/react-dom": { "node_modules/@types/react-dom": {
"version": "19.1.1", "version": "19.1.2",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.1.tgz", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.1.2.tgz",
"integrity": "sha512-jFf/woGTVTjUJsl2O7hcopJ1r0upqoq/vIOoCj0yLh3RIXxWcljlpuZ+vEBRXsymD1jhfeJrlyTy/S1UW+4y1w==", "integrity": "sha512-XGJkWF41Qq305SKWEILa1O8vzhb3aOo3ogBlSmiqNko/WmRb6QIaweuZCXjKygVDXpzXb5wyxKTSOsmkuqj+Qw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"peerDependencies": { "peerDependencies": {
@@ -1837,17 +1855,17 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/@typescript-eslint/eslint-plugin": { "node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.29.0", "version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.1.tgz",
"integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==", "integrity": "sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@eslint-community/regexpp": "^4.10.0", "@eslint-community/regexpp": "^4.10.0",
"@typescript-eslint/scope-manager": "8.29.0", "@typescript-eslint/scope-manager": "8.29.1",
"@typescript-eslint/type-utils": "8.29.0", "@typescript-eslint/type-utils": "8.29.1",
"@typescript-eslint/utils": "8.29.0", "@typescript-eslint/utils": "8.29.1",
"@typescript-eslint/visitor-keys": "8.29.0", "@typescript-eslint/visitor-keys": "8.29.1",
"graphemer": "^1.4.0", "graphemer": "^1.4.0",
"ignore": "^5.3.1", "ignore": "^5.3.1",
"natural-compare": "^1.4.0", "natural-compare": "^1.4.0",
@@ -1867,16 +1885,16 @@
} }
}, },
"node_modules/@typescript-eslint/parser": { "node_modules/@typescript-eslint/parser": {
"version": "8.29.0", "version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.1.tgz",
"integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", "integrity": "sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/scope-manager": "8.29.0", "@typescript-eslint/scope-manager": "8.29.1",
"@typescript-eslint/types": "8.29.0", "@typescript-eslint/types": "8.29.1",
"@typescript-eslint/typescript-estree": "8.29.0", "@typescript-eslint/typescript-estree": "8.29.1",
"@typescript-eslint/visitor-keys": "8.29.0", "@typescript-eslint/visitor-keys": "8.29.1",
"debug": "^4.3.4" "debug": "^4.3.4"
}, },
"engines": { "engines": {
@@ -1892,14 +1910,14 @@
} }
}, },
"node_modules/@typescript-eslint/scope-manager": { "node_modules/@typescript-eslint/scope-manager": {
"version": "8.29.0", "version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz",
"integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==", "integrity": "sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/types": "8.29.0", "@typescript-eslint/types": "8.29.1",
"@typescript-eslint/visitor-keys": "8.29.0" "@typescript-eslint/visitor-keys": "8.29.1"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1910,14 +1928,14 @@
} }
}, },
"node_modules/@typescript-eslint/type-utils": { "node_modules/@typescript-eslint/type-utils": {
"version": "8.29.0", "version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.1.tgz",
"integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==", "integrity": "sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/typescript-estree": "8.29.0", "@typescript-eslint/typescript-estree": "8.29.1",
"@typescript-eslint/utils": "8.29.0", "@typescript-eslint/utils": "8.29.1",
"debug": "^4.3.4", "debug": "^4.3.4",
"ts-api-utils": "^2.0.1" "ts-api-utils": "^2.0.1"
}, },
@@ -1934,9 +1952,9 @@
} }
}, },
"node_modules/@typescript-eslint/types": { "node_modules/@typescript-eslint/types": {
"version": "8.29.0", "version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.1.tgz",
"integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==", "integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
@@ -1948,14 +1966,14 @@
} }
}, },
"node_modules/@typescript-eslint/typescript-estree": { "node_modules/@typescript-eslint/typescript-estree": {
"version": "8.29.0", "version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz",
"integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==", "integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/types": "8.29.0", "@typescript-eslint/types": "8.29.1",
"@typescript-eslint/visitor-keys": "8.29.0", "@typescript-eslint/visitor-keys": "8.29.1",
"debug": "^4.3.4", "debug": "^4.3.4",
"fast-glob": "^3.3.2", "fast-glob": "^3.3.2",
"is-glob": "^4.0.3", "is-glob": "^4.0.3",
@@ -1975,16 +1993,16 @@
} }
}, },
"node_modules/@typescript-eslint/utils": { "node_modules/@typescript-eslint/utils": {
"version": "8.29.0", "version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.1.tgz",
"integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==", "integrity": "sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.4.0", "@eslint-community/eslint-utils": "^4.4.0",
"@typescript-eslint/scope-manager": "8.29.0", "@typescript-eslint/scope-manager": "8.29.1",
"@typescript-eslint/types": "8.29.0", "@typescript-eslint/types": "8.29.1",
"@typescript-eslint/typescript-estree": "8.29.0" "@typescript-eslint/typescript-estree": "8.29.1"
}, },
"engines": { "engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0" "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -1999,13 +2017,13 @@
} }
}, },
"node_modules/@typescript-eslint/visitor-keys": { "node_modules/@typescript-eslint/visitor-keys": {
"version": "8.29.0", "version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz",
"integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==", "integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@typescript-eslint/types": "8.29.0", "@typescript-eslint/types": "8.29.1",
"eslint-visitor-keys": "^4.2.0" "eslint-visitor-keys": "^4.2.0"
}, },
"engines": { "engines": {
@@ -2338,16 +2356,16 @@
} }
}, },
"node_modules/ajv": { "node_modules/ajv": {
"version": "6.12.6", "version": "8.17.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"fast-deep-equal": "^3.1.1", "fast-deep-equal": "^3.1.3",
"fast-json-stable-stringify": "^2.0.0", "fast-uri": "^3.0.1",
"json-schema-traverse": "^0.4.1", "json-schema-traverse": "^1.0.0",
"uri-js": "^4.2.2" "require-from-string": "^2.0.2"
}, },
"funding": { "funding": {
"type": "github", "type": "github",
@@ -2385,28 +2403,6 @@
} }
} }
}, },
"node_modules/ajv-formats/node_modules/ajv": {
"version": "8.17.1",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/ajv-formats/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
},
"node_modules/alien-signals": { "node_modules/alien-signals": {
"version": "0.4.14", "version": "0.4.14",
"resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz", "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz",
@@ -2921,19 +2917,19 @@
} }
}, },
"node_modules/eslint": { "node_modules/eslint": {
"version": "9.23.0", "version": "9.24.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.24.0.tgz",
"integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==", "integrity": "sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1", "@eslint-community/regexpp": "^4.12.1",
"@eslint/config-array": "^0.19.2", "@eslint/config-array": "^0.20.0",
"@eslint/config-helpers": "^0.2.0", "@eslint/config-helpers": "^0.2.0",
"@eslint/core": "^0.12.0", "@eslint/core": "^0.12.0",
"@eslint/eslintrc": "^3.3.1", "@eslint/eslintrc": "^3.3.1",
"@eslint/js": "9.23.0", "@eslint/js": "9.24.0",
"@eslint/plugin-kit": "^0.2.7", "@eslint/plugin-kit": "^0.2.7",
"@humanfs/node": "^0.16.6", "@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
@@ -3030,6 +3026,23 @@
"url": "https://opencollective.com/eslint" "url": "https://opencollective.com/eslint"
} }
}, },
"node_modules/eslint/node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/eslint/node_modules/ansi-styles": { "node_modules/eslint/node_modules/ansi-styles": {
"version": "4.3.0", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -3101,6 +3114,13 @@
"url": "https://opencollective.com/eslint" "url": "https://opencollective.com/eslint"
} }
}, },
"node_modules/eslint/node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
"license": "MIT"
},
"node_modules/eslint/node_modules/minimatch": { "node_modules/eslint/node_modules/minimatch": {
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -3853,9 +3873,9 @@
"dev": true "dev": true
}, },
"node_modules/json-schema-traverse": { "node_modules/json-schema-traverse": {
"version": "0.4.1", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true, "dev": true,
"license": "MIT" "license": "MIT"
}, },
@@ -4055,6 +4075,19 @@
"node": ">=8.6" "node": ">=8.6"
} }
}, },
"node_modules/micromatch/node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/microseconds": { "node_modules/microseconds": {
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz",
@@ -4341,12 +4374,13 @@
"dev": true "dev": true
}, },
"node_modules/picomatch": { "node_modules/picomatch": {
"version": "2.3.1", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
"dev": true, "dev": true,
"license": "MIT",
"engines": { "engines": {
"node": ">=8.6" "node": ">=12"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/jonschlinkert" "url": "https://github.com/sponsors/jonschlinkert"
@@ -4608,9 +4642,9 @@
} }
}, },
"node_modules/react-router": { "node_modules/react-router": {
"version": "7.4.1", "version": "7.5.0",
"resolved": "https://registry.npmjs.org/react-router/-/react-router-7.4.1.tgz", "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.5.0.tgz",
"integrity": "sha512-Vmizn9ZNzxfh3cumddqv3kLOKvc7AskUT0dC1prTabhiEi0U4A33LmkDOJ79tXaeSqCqMBXBU/ySX88W85+EUg==", "integrity": "sha512-estOHrRlDMKdlQa6Mj32gIks4J+AxNsYoE0DbTTxiMy2mPzZuWSDU+N85/r1IlNR7kGfznF3VCUlvc5IUO+B9g==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@types/cookie": "^0.6.0", "@types/cookie": "^0.6.0",
@@ -4632,12 +4666,12 @@
} }
}, },
"node_modules/react-router-dom": { "node_modules/react-router-dom": {
"version": "7.4.1", "version": "7.5.0",
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.4.1.tgz", "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.5.0.tgz",
"integrity": "sha512-L3/4tig0Lvs6m6THK0HRV4eHUdpx0dlJasgCxXKnavwhh4tKYgpuZk75HRYNoRKDyDWi9QgzGXsQ1oQSBlWpAA==", "integrity": "sha512-fFhGFCULy4vIseTtH5PNcY/VvDJK5gvOWcwJVHQp8JQcWVr85ENhJ3UpuF/zP1tQOIFYNRJHzXtyhU1Bdgw0RA==",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"react-router": "7.4.1" "react-router": "7.5.0"
}, },
"engines": { "engines": {
"node": ">=20.0.0" "node": ">=20.0.0"
@@ -4683,9 +4717,10 @@
} }
}, },
"node_modules/react-textarea-autosize": { "node_modules/react-textarea-autosize": {
"version": "8.5.6", "version": "8.5.9",
"resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.6.tgz", "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.5.9.tgz",
"integrity": "sha512-aT3ioKXMa8f6zHYGebhbdMD2L00tKeRX1zuVuDx9YQK/JLLRSaSxq3ugECEmUB9z2kvk6bFSIoRHLkkUv0RJiw==", "integrity": "sha512-U1DGlIQN5AwgjTyOEnI1oCcMuEr1pv1qOtklB2l4nyMGbHzWrI0eFsYK0zos2YWqAolJyG0IWJaqWmWj5ETh0A==",
"license": "MIT",
"dependencies": { "dependencies": {
"@babel/runtime": "^7.20.13", "@babel/runtime": "^7.20.13",
"use-composed-ref": "^1.3.0", "use-composed-ref": "^1.3.0",
@@ -5217,18 +5252,6 @@
"url": "https://github.com/sponsors/SuperchupuDev" "url": "https://github.com/sponsors/SuperchupuDev"
} }
}, },
"node_modules/tinyglobby/node_modules/picomatch": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
"dev": true,
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/tinypool": { "node_modules/tinypool": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz",
@@ -5346,10 +5369,11 @@
} }
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "5.8.2", "version": "5.8.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"dev": true, "dev": true,
"license": "Apache-2.0",
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"
@@ -5452,6 +5476,7 @@
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.4.0.tgz", "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.4.0.tgz",
"integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==", "integrity": "sha512-djviaxuOOh7wkj0paeO1Q/4wMZ8Zrnag5H6yBvzN7AKKe8beOaED9SF5/ByLqsku8NP4zQqsvM2u3ew/tJK8/w==",
"license": "MIT",
"peerDependencies": { "peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}, },
@@ -5465,6 +5490,7 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.0.tgz", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.2.0.tgz",
"integrity": "sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==", "integrity": "sha512-q6ayo8DWoPZT0VdG4u3D3uxcgONP3Mevx2i2b0434cwWBoL+aelL1DzkXI6w3PhTZzUeR2kaVlZn70iCiseP6w==",
"license": "MIT",
"peerDependencies": { "peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}, },
@@ -5478,6 +5504,7 @@
"version": "1.3.0", "version": "1.3.0",
"resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.3.0.tgz", "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.3.0.tgz",
"integrity": "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==", "integrity": "sha512-mhg3xdm9NaM8q+gLT8KryJPnRFOz1/5XPBhmDEVZK1webPzDjrPk7f/mbpeLqTgB9msytYWANxgALOCJKnLvcQ==",
"license": "MIT",
"dependencies": { "dependencies": {
"use-isomorphic-layout-effect": "^1.1.1" "use-isomorphic-layout-effect": "^1.1.1"
}, },
@@ -5542,9 +5569,9 @@
} }
}, },
"node_modules/vite": { "node_modules/vite": {
"version": "6.2.5", "version": "6.2.6",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz", "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.6.tgz",
"integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==", "integrity": "sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
@@ -5690,6 +5717,19 @@
"node": ">= 8.0.0" "node": ">= 8.0.0"
} }
}, },
"node_modules/vite-plugin-eslint/node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8.6"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/vite-plugin-eslint/node_modules/rollup": { "node_modules/vite-plugin-eslint/node_modules/rollup": {
"version": "2.79.2", "version": "2.79.2",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz",

View File

@@ -12,35 +12,35 @@
"dependencies": { "dependencies": {
"@hello-pangea/dnd": "^18.0.1", "@hello-pangea/dnd": "^18.0.1",
"@iconify/react": "^5.2.1", "@iconify/react": "^5.2.1",
"@mantine/core": "^7.17.3", "@mantine/core": "^7.17.4",
"@mantine/hooks": "^7.17.3", "@mantine/hooks": "^7.17.4",
"@tanstack/react-query": "^5.71.5", "@tanstack/react-query": "^5.72.2",
"@tanstack/react-query-devtools": "^5.71.5", "@tanstack/react-query-devtools": "^5.72.2",
"@tanstack/react-query-persist-client": "^5.71.5", "@tanstack/react-query-persist-client": "^5.73.1",
"idb-keyval": "^6.2.1", "idb-keyval": "^6.2.1",
"jotai": "^2.12.2", "jotai": "^2.12.2",
"react": "^19.1.0", "react": "^19.1.0",
"react-dom": "^19.1.0", "react-dom": "^19.1.0",
"react-icons": "^5.5.0", "react-icons": "^5.5.0",
"react-query": "^3.39.3", "react-query": "^3.39.3",
"react-router-dom": "^7.4.1", "react-router-dom": "^7.5.0",
"react-toastify": "^11.0.5", "react-toastify": "^11.0.5",
"recharts": "^2.15.2" "recharts": "^2.15.2"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^22.14.0", "@types/node": "^22.14.0",
"@types/react": "^19.1.0", "@types/react": "^19.1.0",
"@types/react-dom": "^19.1.1", "@types/react-dom": "^19.1.2",
"@typescript-eslint/eslint-plugin": "^8.29.0", "@typescript-eslint/eslint-plugin": "^8.29.1",
"@typescript-eslint/parser": "^8.29.0", "@typescript-eslint/parser": "^8.29.1",
"@vitejs/plugin-react": "^4.3.4", "@vitejs/plugin-react": "^4.3.4",
"@vitest/coverage-v8": "^3.1.1", "@vitest/coverage-v8": "^3.1.1",
"@vitest/ui": "^3.1.1", "@vitest/ui": "^3.1.1",
"eslint": "^9.23.0", "eslint": "^9.24.0",
"eslint-plugin-react-hooks": "^5.2.0", "eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.19", "eslint-plugin-react-refresh": "^0.4.19",
"typescript": "^5.8.2", "typescript": "^5.8.3",
"vite": "^6.2.5", "vite": "^6.2.6",
"vite-plugin-dts": "~4.5.3", "vite-plugin-dts": "~4.5.3",
"vite-plugin-eslint": "^1.8.1", "vite-plugin-eslint": "^1.8.1",
"vite-tsconfig-paths": "^5.1.4", "vite-tsconfig-paths": "^5.1.4",

View File

@@ -19,7 +19,7 @@ import { useEffect, useState } from 'react';
import * as fa6 from 'react-icons/fa6'; import * as fa6 from 'react-icons/fa6';
import * as si from 'react-icons/si'; import * as si from 'react-icons/si';
import * as vsc from 'react-icons/vsc'; import * as vsc from 'react-icons/vsc';
import { selectClasses, textInputClasses } from 'styles'; import { popoverClasses, selectClasses, textInputClasses } from 'styles';
import type { Application } from 'types'; import type { Application } from 'types';
import AddItemModal from '../Shared/AddItemModal'; import AddItemModal from '../Shared/AddItemModal';
import SettingsHeader from '../Shared/SettingsHeader'; import SettingsHeader from '../Shared/SettingsHeader';
@@ -117,11 +117,12 @@ const ApplicationSettings = () => {
title={'Add a new application'} title={'Add a new application'}
body={ body={
<Stack gap={0} align='center'> <Stack gap={0} align='center'>
<Group justify='center'> <Group w={'100%'} justify='center'>
<TextInput <TextInput
label={'Name'} label={'Name'}
className={textInputClasses.settingsItem} className={textInputClasses.settingsItem}
pt={16} pt={16}
w={'45%'}
classNames={textInputClasses} classNames={textInputClasses}
defaultValue={newApplication.name} defaultValue={newApplication.name}
onChange={(event) => { onChange={(event) => {
@@ -135,6 +136,7 @@ const ApplicationSettings = () => {
label={'Base URL'} label={'Base URL'}
className={textInputClasses.settingsItem} className={textInputClasses.settingsItem}
pt={16} pt={16}
w={'45%'}
classNames={textInputClasses} classNames={textInputClasses}
defaultValue={newApplication.baseUrl} defaultValue={newApplication.baseUrl}
onChange={(event) => { onChange={(event) => {
@@ -145,12 +147,12 @@ const ApplicationSettings = () => {
}} }}
/> />
</Group> </Group>
<Group w={isMobile ? undefined : '64%'} justify='center'> <Group w={isMobile ? '94%' : '92%'} justify='center'>
<TextInput <TextInput
label={'URL'} label={'URL'}
className={textInputClasses.settingsItem} className={textInputClasses.settingsItem}
pt={16} pt={16}
w={isMobile ? undefined : '99%'} w={'100%'}
classNames={textInputClasses} classNames={textInputClasses}
defaultValue={newApplication.url} defaultValue={newApplication.url}
onChange={(event) => { onChange={(event) => {
@@ -161,7 +163,7 @@ const ApplicationSettings = () => {
}} }}
/> />
</Group> </Group>
<Group justify='center'> <Group w={'100%'} justify='center'>
<Select <Select
label={'Icon'} label={'Icon'}
className={selectClasses.settingsItem} className={selectClasses.settingsItem}
@@ -172,7 +174,10 @@ const ApplicationSettings = () => {
option: selectClasses.menuSelectOption, option: selectClasses.menuSelectOption,
dropdown: selectClasses.dropdown, dropdown: selectClasses.dropdown,
}} }}
w={'45%'}
mt={12} mt={12}
limit={100}
placeholder='Search for an icon...'
data={Object.keys(allIcons).map((icon) => { data={Object.keys(allIcons).map((icon) => {
return { value: icon, label: icon }; return { value: icon, label: icon };
})} })}
@@ -205,6 +210,7 @@ const ApplicationSettings = () => {
label={'Filter'} label={'Filter'}
className={textInputClasses.settingsItem} className={textInputClasses.settingsItem}
pt={16} pt={16}
w={'45%'}
classNames={textInputClasses} classNames={textInputClasses}
defaultValue={newApplication.filterName} defaultValue={newApplication.filterName}
onChange={(event) => { onChange={(event) => {
@@ -268,6 +274,7 @@ const ApplicationSettings = () => {
}} }}
searchValue={searchValue} searchValue={searchValue}
setSearchValue={setSearchValue} setSearchValue={setSearchValue}
searchPlaceholder={'Search Applications...'}
/> />
{dragging ? ( {dragging ? (
<DragDropContext onDragEnd={onDragEnd}> <DragDropContext onDragEnd={onDragEnd}>
@@ -366,6 +373,7 @@ const ApplicationSettings = () => {
withOverlay withOverlay
withinPortal={false} withinPortal={false}
closeOnClickOutside={!isOpen} closeOnClickOutside={!isOpen}
classNames={popoverClasses}
> >
<Popover.Target> <Popover.Target>
<Box <Box

View File

@@ -14,7 +14,7 @@ import { useDebouncedValue, useDisclosure } from '@mantine/hooks';
import { useCommonHooks, useMutationAPI } from 'hooks'; import { useCommonHooks, useMutationAPI } from 'hooks';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { FiTrash } from 'react-icons/fi'; import { FiTrash } from 'react-icons/fi';
import { cardClasses, selectClasses, textInputClasses } from 'styles'; import { cardClasses, selectClasses, switchClasses, textInputClasses } from 'styles';
import type { Application } from 'types'; import type { Application } from 'types';
import DeleteItemModal from '../Shared/DeleteItemModal'; import DeleteItemModal from '../Shared/DeleteItemModal';
@@ -111,7 +111,9 @@ function DebouncedApplication({
label={'Enabled'} label={'Enabled'}
> >
<Switch <Switch
label={<Text c={theme.primaryColor}>Enabled</Text>} className={switchClasses.default}
classNames={switchClasses}
label={'Enabled'}
labelPosition='left' labelPosition='left'
pos={'absolute'} pos={'absolute'}
left={16} left={16}
@@ -123,7 +125,6 @@ function DebouncedApplication({
enabled: event.target.checked ? 1 : 0, enabled: event.target.checked ? 1 : 0,
}); });
}} }}
color={theme.primaryColor}
/> />
</Tooltip> </Tooltip>
<Group w={'100%'} justify='center'> <Group w={'100%'} justify='center'>
@@ -183,10 +184,12 @@ function DebouncedApplication({
dropdown: selectClasses.dropdown, dropdown: selectClasses.dropdown,
}} }}
mt={12} mt={12}
limit={100}
defaultSearchValue={app?.icon}
data={Object.keys(allIcons).map((icon) => { data={Object.keys(allIcons).map((icon) => {
return { value: icon, label: icon }; return { value: icon, label: icon };
})} })}
defaultValue={app.icon} defaultValue={app?.icon}
comboboxProps={{ comboboxProps={{
zIndex: 3000, zIndex: 3000,
withinPortal: false, withinPortal: false,

View File

@@ -179,6 +179,7 @@ const BookmarkSettings = () => {
}} }}
searchValue={searchValue} searchValue={searchValue}
setSearchValue={setSearchValue} setSearchValue={setSearchValue}
searchPlaceholder={'Search Bookmark Groups...'}
/> />
{dragging ? ( {dragging ? (
<DragDropContext onDragEnd={onDragEnd}> <DragDropContext onDragEnd={onDragEnd}>

View File

@@ -15,7 +15,7 @@ import { useDebouncedValue, useDisclosure } from '@mantine/hooks';
import { useCommonHooks, useMutationAPI } from 'hooks'; import { useCommonHooks, useMutationAPI } from 'hooks';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { FiPlus, FiTrash } from 'react-icons/fi'; import { FiPlus, FiTrash } from 'react-icons/fi';
import { buttonClasses, cardClasses, textInputClasses } from 'styles'; import { buttonClasses, cardClasses, popoverClasses, textInputClasses } from 'styles';
import type { Bookmark, BookmarkGroup } from 'types'; import type { Bookmark, BookmarkGroup } from 'types';
import DeleteItemModal from '../Shared/DeleteItemModal'; import DeleteItemModal from '../Shared/DeleteItemModal';
import BookmarkSettingsItem from './BookmarkSettingsItem'; import BookmarkSettingsItem from './BookmarkSettingsItem';
@@ -231,7 +231,12 @@ function DebouncedGroupSettingsItem({
{...provided.draggableProps} {...provided.draggableProps}
{...provided.dragHandleProps} {...provided.dragHandleProps}
> >
<Popover withArrow withOverlay closeOnClickOutside={!isOpen}> <Popover
withArrow
withOverlay
closeOnClickOutside={!isOpen}
classNames={popoverClasses}
>
<Popover.Target> <Popover.Target>
<Box> <Box>
<BookmarkSettingsItem bookmark={bookmark} /> <BookmarkSettingsItem bookmark={bookmark} />
@@ -276,7 +281,7 @@ function DebouncedGroupSettingsItem({
opened={popoverOpened} opened={popoverOpened}
onChange={setPopoverOpened} onChange={setPopoverOpened}
closeOnEscape closeOnEscape
// closeOnClickOutside={} classNames={popoverClasses}
> >
<Popover.Target> <Popover.Target>
<Button <Button

View File

@@ -53,12 +53,19 @@ const MessageSettings = () => {
title={'Messages'} title={'Messages'}
tooltip={{ tooltip={{
title: 'These custom messages will be displayed in the header on the homepage.', title: 'These custom messages will be displayed in the header on the homepage.',
highlightList: ['$firstName', '$lastName', '$^firstName', '$^lastName'], highlightList: [
'$firstName',
'$lastName',
'$^firstName',
'$^lastName',
'messages',
],
description: description:
'Built-in variables include $firstName and $lastName. To force the text to upper case, use a carat (^), ie, $^firstName. Messages may contain any unicode text.', 'Built-in variables include $firstName and $lastName. To force the text to upper case, use a carat (^), ie, $^firstName. Messages may contain any unicode text.',
}} }}
searchValue={searchValue} searchValue={searchValue}
setSearchValue={setSearchValue} setSearchValue={setSearchValue}
searchPlaceholder={'Search Message content...'}
/> />
<AddItemModal <AddItemModal
modalOpened={modalOpened} modalOpened={modalOpened}

View File

@@ -48,20 +48,19 @@ const PersonalizationSettings = () => {
tooltip={{ tooltip={{
title: 'The personalization section allows you to update basic information.', title: 'The personalization section allows you to update basic information.',
highlightList: [ highlightList: [
'Applications', 'first name',
'apps', 'last name',
'application',
'name', 'name',
'base url', 'first',
'url', 'last',
'icon', 'physical address',
'filter',
], ],
description: description:
'The first and last name fields will be used for greetings, and the physical address field will be used for weather.', 'The first and last name fields will be used for greetings, and the physical address field will be used for weather.',
}} }}
searchValue={undefined} searchValue={undefined}
setSearchValue={() => {}} setSearchValue={() => {}}
searchPlaceholder={undefined}
/> />
<Stack mt={'6rem'} mb={'1rem'} w={'100%'} align='center'> <Stack mt={'6rem'} mb={'1rem'} w={'100%'} align='center'>
<Grid w={'75%'} pos={'relative'}> <Grid w={'75%'} pos={'relative'}>

View File

@@ -12,7 +12,7 @@ import {
import { useDebouncedValue, useDisclosure } from '@mantine/hooks'; import { useDebouncedValue, useDisclosure } from '@mantine/hooks';
import { useCommonHooks, useMutationAPI, useQueryAPI } from 'hooks'; import { useCommonHooks, useMutationAPI, useQueryAPI } from 'hooks';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { textInputClasses } from 'styles'; import { popoverClasses, textInputClasses } from 'styles';
import type { Provider } from 'types'; import type { Provider } from 'types';
import AddItemModal from '../Shared/AddItemModal'; import AddItemModal from '../Shared/AddItemModal';
import SettingsHeader from '../Shared/SettingsHeader'; import SettingsHeader from '../Shared/SettingsHeader';
@@ -141,12 +141,13 @@ const SearchProviderSettings = () => {
title={'Search Providers'} title={'Search Providers'}
tooltip={{ tooltip={{
title: 'Search providers and shortcuts can be configured here.', title: 'Search providers and shortcuts can be configured here.',
highlightList: ['Providers', 'search'], highlightList: ['Providers', 'search', 'provider', 'prefix'],
description: description:
'Providers can be used in the search bar. By starting a search with the prefix, it will be redirected to the url of the provider to complete the search.', 'Providers can be used in the search bar. By starting a search with the prefix, it will be redirected to the url of the provider to complete the search.',
}} }}
searchValue={searchValue} searchValue={searchValue}
setSearchValue={setSearchValue} setSearchValue={setSearchValue}
searchPlaceholder={'Search Search Providers...'}
/> />
<Stack <Stack
mt={isMobile ? '9rem' : '6rem'} mt={isMobile ? '9rem' : '6rem'}
@@ -162,6 +163,7 @@ const SearchProviderSettings = () => {
withOverlay withOverlay
withinPortal={false} withinPortal={false}
closeOnClickOutside={!isOpen} closeOnClickOutside={!isOpen}
classNames={popoverClasses}
> >
<Popover.Target> <Popover.Target>
<Box <Box

View File

@@ -23,8 +23,16 @@ function AddItemModal({ modalOpened, handleClose, body, title }: any) {
<Modal.Title>{title}</Modal.Title> <Modal.Title>{title}</Modal.Title>
<Modal.CloseButton /> <Modal.CloseButton />
</Modal.Header> </Modal.Header>
<Modal.Body pb={'2rem'}> <Modal.Body
<Card className={cardClasses.settingsItem} classNames={cardClasses}> h={isMobile ? '90%' : undefined}
pb={'2rem'}
style={{ justifyContent: 'center', alignContent: 'center' }}
>
<Card
style={{ alignContent: 'center', justifyContent: 'center' }}
className={cardClasses.settingsItem}
classNames={cardClasses}
>
{body} {body}
</Card> </Card>
</Modal.Body> </Modal.Body>

View File

@@ -11,7 +11,14 @@ import {
} from '@mantine/core'; } from '@mantine/core';
import { useCommonHooks } from 'hooks'; import { useCommonHooks } from 'hooks';
import { FiHelpCircle, FiPlus } from 'react-icons/fi'; import { FiHelpCircle, FiPlus } from 'react-icons/fi';
import { actionIconClasses, buttonClasses, textClasses, textInputClasses } from 'styles'; import {
actionIconClasses,
buttonClasses,
popoverClasses,
switchClasses,
textClasses,
textInputClasses,
} from 'styles';
function SettingsHeader({ function SettingsHeader({
setDragging, setDragging,
@@ -20,8 +27,9 @@ function SettingsHeader({
tooltip, tooltip,
searchValue, searchValue,
setSearchValue, setSearchValue,
searchPlaceholder,
}: any) { }: any) {
const { isMobile, theme } = useCommonHooks(); const { isMobile, theme, modalStyle } = useCommonHooks();
return ( return (
<Group <Group
py={'1.5rem'} py={'1.5rem'}
@@ -42,7 +50,15 @@ function SettingsHeader({
> >
{title} {title}
</Text> </Text>
<Popover withArrow withOverlay withinPortal={true}> <Popover
withArrow
withOverlay
withinPortal={true}
styles={{
dropdown: modalStyle,
}}
classNames={popoverClasses}
>
<Popover.Target> <Popover.Target>
<ActionIcon <ActionIcon
className={actionIconClasses.settingsTooltip} className={actionIconClasses.settingsTooltip}
@@ -95,7 +111,7 @@ function SettingsHeader({
className={textInputClasses.settingsItem} className={textInputClasses.settingsItem}
classNames={textInputClasses} classNames={textInputClasses}
autoFocus={!isMobile} autoFocus={!isMobile}
placeholder='Search...' placeholder={searchPlaceholder || 'Search...'}
value={searchValue} value={searchValue}
onInput={(event: any) => { onInput={(event: any) => {
setSearchValue(event.target.value); setSearchValue(event.target.value);
@@ -107,7 +123,9 @@ function SettingsHeader({
)} )}
{setDragging && ( {setDragging && (
<Switch <Switch
label={<Text c={theme.primaryColor}>Reorder</Text>} className={switchClasses.default}
classNames={switchClasses}
label={'Reorder'}
labelPosition='left' labelPosition='left'
pos={'absolute'} pos={'absolute'}
right={isMobile ? '2rem' : '1rem'} right={isMobile ? '2rem' : '1rem'}
@@ -115,15 +133,6 @@ function SettingsHeader({
onChange={(e) => { onChange={(e) => {
setDragging(e.target.checked); setDragging(e.target.checked);
}} }}
color={theme.primaryColor}
styles={{
label: {
color: theme.primaryColor,
top: isMobile ? -22 : 0,
left: isMobile ? -8 : 0,
position: isMobile ? 'absolute' : undefined,
},
}}
/> />
)} )}
</Group> </Group>

View File

@@ -172,8 +172,9 @@ function ThemeModal({
<ColorPicker <ColorPicker
value={colorValue} value={colorValue}
onChange={setColorValue} onChange={setColorValue}
format='hexa' format={colorId === 'background' ? 'hex' : 'hexa'}
w={'90%'} w={'90%'}
mb={colorId === 'background' ? '24px' : undefined}
/> />
<Group justify='center'> <Group justify='center'>
<TextInput <TextInput

View File

@@ -63,12 +63,13 @@ function ThemePlaylists() {
title={'Theme Playlists'} title={'Theme Playlists'}
tooltip={{ tooltip={{
title: 'Theme playlists can be created here and applied to the homepage.', title: 'Theme playlists can be created here and applied to the homepage.',
highlightList: ['Clients', 'homepage'], highlightList: ['theme', 'themes', 'homepage', 'playlist'],
description: description:
'Playlists are lists of themes. They can be enabled either here or in the settings button on the homepage. When a playlist is enabled, it will shuffle the included themes on the homepage. If a theme is part of a playlist, it will appear while the playlist is active, regardless of random/shuffle.', 'Playlists are lists of themes. They can be enabled either here or in the settings button on the homepage. When a playlist is enabled, it will shuffle the included themes on the homepage. If a theme is part of a playlist, it will appear while the playlist is active, regardless of random/shuffle.',
}} }}
searchValue={searchValue} searchValue={searchValue}
setSearchValue={setSearchValue} setSearchValue={setSearchValue}
searchPlaceholder={'Search Theme Playlists...'}
/> />
<Group mt={'6rem'} justify='center' align='center' pos={'relative'}> <Group mt={'6rem'} justify='center' align='center' pos={'relative'}>
<Text p={0} className={textClasses.settingsSubTitle} classNames={textClasses}> <Text p={0} className={textClasses.settingsSubTitle} classNames={textClasses}>

View File

@@ -4,6 +4,7 @@ import { useCommonHooks, useMutationAPI, useQueryAPI } from 'hooks';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { FaDice } from 'react-icons/fa'; import { FaDice } from 'react-icons/fa';
import { FiChevronRight } from 'react-icons/fi'; import { FiChevronRight } from 'react-icons/fi';
import { switchClasses } from 'styles';
import type { Theme } from 'types'; import type { Theme } from 'types';
import SettingsHeader from '../Shared/SettingsHeader'; import SettingsHeader from '../Shared/SettingsHeader';
import ThemeCard from './ThemeCard'; import ThemeCard from './ThemeCard';
@@ -81,12 +82,13 @@ function ThemesSettings() {
title={'Themes'} title={'Themes'}
tooltip={{ tooltip={{
title: 'Themes can be created here and applied to the homepage.', title: 'Themes can be created here and applied to the homepage.',
highlightList: ['Clients', 'homepage'], highlightList: ['theme', 'themes', 'homepage', 'playlist'],
description: description:
'Themes are combinations of 5 colors and a background image, and can be added to a playlist. If a theme has been disabled, it will only be disabled with random/shuffle is enabled. If a theme is part of a playlist, it will appear while the playlist is active, regardless of random/shuffle.', 'Themes are combinations of 5 colors and a background image, and can be added to a playlist. If a theme has been disabled, it will only be disabled with random/shuffle is enabled. If a theme is part of a playlist, it will appear while the playlist is active, regardless of random/shuffle.',
}} }}
searchValue={searchValue} searchValue={searchValue}
setSearchValue={setSearchValue} setSearchValue={setSearchValue}
searchPlaceholder={'Search Themes...'}
/> />
<Switch <Switch
label={ label={
@@ -105,7 +107,8 @@ function ThemesSettings() {
setCurrentTheme(e.target.checked ? 'random' : theme.name); setCurrentTheme(e.target.checked ? 'random' : theme.name);
setCurrentThemePlaylist('All'); setCurrentThemePlaylist('All');
}} }}
color={theme.primaryColor} className={switchClasses.default}
classNames={switchClasses}
style={{ style={{
zIndex: 250, zIndex: 250,
}} }}

View File

@@ -11,7 +11,7 @@ import {
import { useDebouncedValue, useDisclosure } from '@mantine/hooks'; import { useDebouncedValue, useDisclosure } from '@mantine/hooks';
import { useCommonHooks, useMutationAPI, useQueryAPI } from 'hooks'; import { useCommonHooks, useMutationAPI, useQueryAPI } from 'hooks';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
import { textInputClasses } from 'styles'; import { popoverClasses, textInputClasses } from 'styles';
import type { WolClient } from 'types'; import type { WolClient } from 'types';
import AddItemModal from '../Shared/AddItemModal'; import AddItemModal from '../Shared/AddItemModal';
import SettingsHeader from '../Shared/SettingsHeader'; import SettingsHeader from '../Shared/SettingsHeader';
@@ -130,6 +130,7 @@ const WolClientSettings = () => {
}} }}
searchValue={searchValue} searchValue={searchValue}
setSearchValue={setSearchValue} setSearchValue={setSearchValue}
searchPlaceholder={'Search Clients...'}
/> />
<Stack <Stack
mt={isMobile ? '9rem' : '6rem'} mt={isMobile ? '9rem' : '6rem'}
@@ -145,6 +146,7 @@ const WolClientSettings = () => {
withOverlay withOverlay
withinPortal={false} withinPortal={false}
closeOnClickOutside={!isOpen} closeOnClickOutside={!isOpen}
classNames={popoverClasses}
> >
<Popover.Target> <Popover.Target>
<Group <Group

View File

@@ -4,7 +4,7 @@
font-size: 14px !important; font-size: 14px !important;
} }
.input { .input {
border-color: light-dark(var(--mantine-color-appGray-2), white) !important; border-color: var(--color-border) !important;
background-color: var(--color-background) !important; background-color: var(--color-background) !important;
color: var(--color-text-pri) !important; color: var(--color-text-pri) !important;
&:focus { &:focus {
@@ -13,27 +13,30 @@
display: flex !important; display: flex !important;
overflow: clip !important; overflow: clip !important;
height: 36px !important; height: 36px !important;
&::placeholder {
color: var(--color-text-acc) !important;
}
} }
.options { .options {
.option { color: var(--color-text-pri) !important;
}
.option {
color: var(--color-text-pri) !important; color: var(--color-text-pri) !important;
font-size: 14px !important; font-size: 14px !important;
/* applies styles to selected item */
&[data-checked] { &[data-checked] {
background-color: var(--color-text-acc) !important; background-color: var(--color-text-acc) !important;
color: var(--color-text-pri) !important; color: var(--color-background) !important;
&:hover { &:hover {
background-color: var(--color-text-acc) !important; background-color: var(--color-text-acc) !important;
color: var(--color-background) !important; color: var(--color-background) !important;
} }
} }
/* applies styles to hovered item (with mouse or keyboard) */
&:hover { &:hover {
background-color: var(--color-text-acc) !important; background-color: var(--color-text-pri) !important;
color: var(--color-text-pri) !important; color: var(--color-background) !important;
}
} }
} }

View File

@@ -1,5 +1,3 @@
.dropdown { .dropdown {
background-color: var(--color-background); border: solid 2px var(--color-border) !important;
border: solid 2px var(--color-border);
border-color: var(--color-border);
} }

View File

@@ -5,7 +5,7 @@
} }
.menuSelectInput { .menuSelectInput {
border-color: var(--color-border) !important; border-color: var(--color-border) !important;
background-color: var(--color-search-background) !important; background-color: var(--color-background) !important;
color: var(--color-text-pri) !important; color: var(--color-text-pri) !important;
&:focus { &:focus {
border-color: var(--color-text-pri) !important; border-color: var(--color-text-pri) !important;
@@ -25,17 +25,14 @@
.menuSelectOption { .menuSelectOption {
color: var(--color-text-pri) !important; color: var(--color-text-pri) !important;
font-size: 14px !important; font-size: 14px !important;
/* applies styles to selected item */
&[data-checked] { &[data-checked] {
background-color: var(--color-text-acc) !important; background-color: var(--color-text-acc) !important;
color: var(--color-text-pri) !important; color: var(--color-background) !important;
&:hover { &:hover {
background-color: var(--color-text-acc) !important; background-color: var(--color-text-acc) !important;
color: var(--color-background) !important; color: var(--color-background) !important;
} }
} }
/* applies styles to hovered item (with mouse or keyboard) */
&:hover { &:hover {
background-color: var(--color-text-pri) !important; background-color: var(--color-text-pri) !important;
color: var(--color-background) !important; color: var(--color-background) !important;

View File

@@ -0,0 +1,36 @@
.default {
@media (max-width: 600px) {
&.root {
.label {
position: absolute;
top: -22px;
left: -8px;
}
}
}
&.root {
.label {
font-size: 16px;
color: var(--color-text-pri);
}
.track {
transition: all .2s ease !important;
border: none;
background-color: var(--color-search-background);
border-color: var(--color-text-acc);
}
.thumb {
transition: all .2s ease !important;
border: none;
background-color: var(--color-text-acc);
}
.input:checked + * > .thumb {
transition: all .2s ease !important;
background-color: var(--color-background);
}
.input:checked + .track {
transition: all .2s ease !important;
background-color: var(--color-text-acc);
}
}
}

View File

@@ -40,94 +40,7 @@
} }
::placeholder { ::placeholder {
color: var(--color-text-acc) !important; color: var(--color-text-acc) !important;
} opacity: 50%;
}
}
}
.search {
&.root {
.wrapper {
display: flex;
justify-content: center;
.input {
border: 0;
border-bottom: thin solid var(--color-border);
background-color: transparent;
color: var(--color-text-pri);
font-style: italic;
font-size: 0.8em;
height: 3.5em;
transition: all 0.4s ease;
width: 50%;
padding-left: 1em;
padding-right: 1em;
text-align: center;
&[data-active="true"] {
background-color: color-mix(
in srgb,
var(--color-search-background),
transparent 50%
);
border-color: var(--color-border);
outline: none;
color: var(--color-text-pri);
font-style: normal;
font-weight: 500;
font-size: 1.2em;
letter-spacing: .2em;
width: 100%;
border-top-left-radius: .25em;
border-top-right-radius: .25em;
border-bottom-left-radius: .25em;
border-bottom-right-radius: .25em;
}
}
.section {
transition: opacity 0.1s 0s ease;
color: var(--color-border);
width: auto;
padding-left: .5rem;
opacity: 0;
}
}
.wrapper:focus-within {
.input {
background-color: var(--color-search-background);
border-color: var(--color-border);
outline: none;
color: var(--color-text-pri);
font-style: normal;
font-weight: 500;
font-size: 1.2em;
letter-spacing: .2em;
width: 100%;
border-top-left-radius: .25em;
border-top-right-radius: .25em;
border-bottom-left-radius: .25em;
border-bottom-right-radius: .25em;
&[data-active="true"] {
background-color: var(--color-search-background);
border-color: var(--color-border);
outline: none;
color: var(--color-text-pri);
font-style: normal;
font-weight: 500;
font-size: 1.2em;
letter-spacing: .2em;
width: 100%;
border-top-left-radius: .25em;
border-top-right-radius: .25em;
border-bottom-left-radius: .25em;
border-bottom-right-radius: .25em;
}
}
.section {
transition: opacity 0.4s 0.4s ease;
color: var(--color-border);
width: auto;
padding-left: .5rem;
opacity: 1;
} }
} }
} }

View File

@@ -8,6 +8,7 @@ import multiSelectClasses from './MultiSelect.module.css';
import popoverClasses from './Popover.module.css'; import popoverClasses from './Popover.module.css';
import selectClasses from './Select.module.css'; import selectClasses from './Select.module.css';
import stackClasses from './Stack.module.css'; import stackClasses from './Stack.module.css';
import switchClasses from './Switch.module.css';
import tabClasses from './Tabs.module.css'; import tabClasses from './Tabs.module.css';
import textClasses from './Text.module.css'; import textClasses from './Text.module.css';
import textInputClasses from './TextInput.module.css'; import textInputClasses from './TextInput.module.css';
@@ -23,6 +24,7 @@ export {
popoverClasses, popoverClasses,
selectClasses, selectClasses,
stackClasses, stackClasses,
switchClasses,
tabClasses, tabClasses,
textClasses, textClasses,
textInputClasses, textInputClasses,