diff --git a/package-lock.json b/package-lock.json index dcbe785..2d0cfaf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,32 +15,32 @@ "@mantine/hooks": "^7.5.3", "@mantine/notifications": "^7.5.3", "@tabler/icons-react": "^2.47.0", - "@tanstack/react-query": "^5.21.7", - "@tanstack/react-query-devtools": "^5.21.7", - "@types/node": "20.11.19", - "@types/react": "18.2.56", - "@types/react-dom": "18.2.19", + "@tanstack/react-query": "^5.28.9", + "@tanstack/react-query-devtools": "^5.28.10", + "@types/node": "20.12.2", + "@types/react": "18.2.73", + "@types/react-dom": "18.2.23", "@vidstack/react": "^1.10.7", - "axios": "^1.6.7", + "axios": "^1.6.8", "clsx": "^2.1.0", "cookies-next": "^2.1.1", "dayjs": "^1.11.10", - "embla-carousel-react": "^7.1.0", + "embla-carousel-react": "^8.0.0", "events": "^3.3.0", "lodash": "^4.17.21", - "mantine-datatable": "^7.5.1", + "mantine-datatable": "^7.6.1", "media-icons": "^0.10.0", - "next": "^14.1.0", + "next": "^14.1.4", "plyr-react": "^5.3.0", "react": "18.2.0", "react-dom": "18.2.0", - "react-hook-form": "^7.50.1", - "typescript": "5.3.3", + "react-hook-form": "^7.51.2", + "typescript": "5.4.3", "vidstack": "^1.10.7", - "zustand": "^4.5.1" + "zustand": "^4.5.2" }, "devDependencies": { - "postcss": "^8.4.35", + "postcss": "^8.4.38", "postcss-preset-mantine": "^1.13.0", "postcss-simple-vars": "^7.0.1" } @@ -209,14 +209,14 @@ } }, "node_modules/@next/env": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.0.tgz", - "integrity": "sha512-Py8zIo+02ht82brwwhTg36iogzFqGLPXlRGKQw5s+qP/kMNc4MAyDeEwBKDijk6zTIbegEgu8Qy7C1LboslQAw==" + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.1.4.tgz", + "integrity": "sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==" }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.0.tgz", - "integrity": "sha512-nUDn7TOGcIeyQni6lZHfzNoo9S0euXnu0jhsbMOmMJUBfgsnESdjN97kM7cBqQxZa8L/bM9om/S5/1dzCrW6wQ==", + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.1.4.tgz", + "integrity": "sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==", "cpu": [ "arm64" ], @@ -229,9 +229,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.0.tgz", - "integrity": "sha512-1jgudN5haWxiAl3O1ljUS2GfupPmcftu2RYJqZiMJmmbBT5M1XDffjUtRUzP4W3cBHsrvkfOFdQ71hAreNQP6g==", + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.1.4.tgz", + "integrity": "sha512-b0Xo1ELj3u7IkZWAKcJPJEhBop117U78l70nfoQGo4xUSvv0PJSTaV4U9xQBLvZlnjsYkc8RwQN1HoH/oQmLlQ==", "cpu": [ "x64" ], @@ -244,9 +244,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.0.tgz", - "integrity": "sha512-RHo7Tcj+jllXUbK7xk2NyIDod3YcCPDZxj1WLIYxd709BQ7WuRYl3OWUNG+WUfqeQBds6kvZYlc42NJJTNi4tQ==", + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.1.4.tgz", + "integrity": "sha512-457G0hcLrdYA/u1O2XkRMsDKId5VKe3uKPvrKVOyuARa6nXrdhJOOYU9hkKKyQTMru1B8qEP78IAhf/1XnVqKA==", "cpu": [ "arm64" ], @@ -259,9 +259,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.0.tgz", - "integrity": "sha512-v6kP8sHYxjO8RwHmWMJSq7VZP2nYCkRVQ0qolh2l6xroe9QjbgV8siTbduED4u0hlk0+tjS6/Tuy4n5XCp+l6g==", + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.1.4.tgz", + "integrity": "sha512-l/kMG+z6MB+fKA9KdtyprkTQ1ihlJcBh66cf0HvqGP+rXBbOXX0dpJatjZbHeunvEHoBBS69GYQG5ry78JMy3g==", "cpu": [ "arm64" ], @@ -274,9 +274,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.0.tgz", - "integrity": "sha512-zJ2pnoFYB1F4vmEVlb/eSe+VH679zT1VdXlZKX+pE66grOgjmKJHKacf82g/sWE4MQ4Rk2FMBCRnX+l6/TVYzQ==", + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.1.4.tgz", + "integrity": "sha512-BapIFZ3ZRnvQ1uWbmqEGJuPT9cgLwvKtxhK/L2t4QYO7l+/DxXuIGjvp1x8rvfa/x1FFSsipERZK70pewbtJtw==", "cpu": [ "x64" ], @@ -289,9 +289,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.0.tgz", - "integrity": "sha512-rbaIYFt2X9YZBSbH/CwGAjbBG2/MrACCVu2X0+kSykHzHnYH5FjHxwXLkcoJ10cX0aWCEynpu+rP76x0914atg==", + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.1.4.tgz", + "integrity": "sha512-mqVxTwk4XuBl49qn2A5UmzFImoL1iLm0KQQwtdRJRKl21ylQwwGCxJtIYo2rbfkZHoSKlh/YgztY0qH3wG1xIg==", "cpu": [ "x64" ], @@ -304,9 +304,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.0.tgz", - "integrity": "sha512-o1N5TsYc8f/HpGt39OUQpQ9AKIGApd3QLueu7hXk//2xq5Z9OxmV6sQfNp8C7qYmiOlHYODOGqNNa0e9jvchGQ==", + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.1.4.tgz", + "integrity": "sha512-xzxF4ErcumXjO2Pvg/wVGrtr9QQJLk3IyQX1ddAC/fi6/5jZCZ9xpuL9Tzc4KPWMFq8GGWFVDMshZOdHGdkvag==", "cpu": [ "arm64" ], @@ -319,9 +319,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.0.tgz", - "integrity": "sha512-XXIuB1DBRCFwNO6EEzCTMHT5pauwaSj4SWs7CYnME57eaReAKBXCnkUE80p/pAZcewm7hs+vGvNqDPacEXHVkw==", + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.1.4.tgz", + "integrity": "sha512-WZiz8OdbkpRw6/IU/lredZWKKZopUMhcI2F+XiMAcPja0uZYdMTZQRoQ0WZcvinn9xZAidimE7tN9W5v9Yyfyw==", "cpu": [ "ia32" ], @@ -334,9 +334,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.0.tgz", - "integrity": "sha512-9WEbVRRAqJ3YFVqEZIxUqkiO8l1nool1LmNxygr5HWF8AcSYsEpneUDhmjUVJEzO2A04+oPtZdombzzPPkTtgg==", + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.1.4.tgz", + "integrity": "sha512-4Rto21sPfw555sZ/XNLqfxDUNeLhNYGO2dlPqsnuCg8N8a2a9u1ltqBOPQ4vj1Gf7eJC0W2hHG2eYUHuiXgY2w==", "cpu": [ "x64" ], @@ -417,29 +417,29 @@ } }, "node_modules/@tanstack/query-core": { - "version": "5.21.7", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.21.7.tgz", - "integrity": "sha512-z0NSWFsM75esVmkxeuDWeyo9Wv4CZ/WsLMZgu1Zz164S6Oc/57NMia88dTu/d51wdVowMTAcDMQgRmiWmyPMxQ==", + "version": "5.28.9", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.28.9.tgz", + "integrity": "sha512-hNlfCiqZevr3GRVPXS3MhaGW5hjcxvCsIQ4q6ff7EPlvFwYZaS+0d9EIIgofnegDaU2BbCDlyURoYfRl5rmzow==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/query-devtools": { - "version": "5.21.5", - "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.21.5.tgz", - "integrity": "sha512-A7rVpVP1GRcQBnB/GzXZfVhxmoP17J1f+RoYRu+DOV8Jp4QPIJRE/nFueEiiRPSVL7aNcNw4rTm0RmJZRI2fUA==", + "version": "5.28.10", + "resolved": "https://registry.npmjs.org/@tanstack/query-devtools/-/query-devtools-5.28.10.tgz", + "integrity": "sha512-5UN629fKa5/1K/2Pd26gaU7epxRrYiT1gy+V+pW5K6hnf1DeUKK3pANSb2eHKlecjIKIhTwyF7k9XdyE2gREvQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "5.21.7", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.21.7.tgz", - "integrity": "sha512-Op9nVL/L0Lg+aSPFSGbrymu6d3tzUoZ+FZ+rRIZpu5HkGasflqzhsXkL26Sa+MEwLyox7Q1erSFwNIRO3TYjXQ==", + "version": "5.28.9", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.28.9.tgz", + "integrity": "sha512-vwifBkGXsydsLxFOBMe3+f8kvtDoqDRDwUNjPHVDDt+FoBetCbOWAUHgZn4k+CVeZgLmy7bx6aKeDbe3e8koOQ==", "dependencies": { - "@tanstack/query-core": "5.21.7" + "@tanstack/query-core": "5.28.9" }, "funding": { "type": "github", @@ -450,18 +450,18 @@ } }, "node_modules/@tanstack/react-query-devtools": { - "version": "5.21.7", - "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.21.7.tgz", - "integrity": "sha512-SfGw5KErNfeC8beEfV3vg9QjxVUaJkDEkZGfjVEHdHR/H9owmf1SI8FLDH3GtWXMO0YczaKjDiFyvMSZUk2I1Q==", + "version": "5.28.10", + "resolved": "https://registry.npmjs.org/@tanstack/react-query-devtools/-/react-query-devtools-5.28.10.tgz", + "integrity": "sha512-D+SiHZTWhK2sNgBYj+xIvUOqonsKy74OLU/YHmRB5OZVLLTiekvZd12C3rKlU+WM69jid0hjEjuFqkULOMwc3A==", "dependencies": { - "@tanstack/query-devtools": "5.21.5" + "@tanstack/query-devtools": "5.28.10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@tanstack/react-query": "^5.21.7", + "@tanstack/react-query": "^5.28.9", "react": "^18.0.0" } }, @@ -471,9 +471,9 @@ "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" }, "node_modules/@types/node": { - "version": "20.11.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.19.tgz", - "integrity": "sha512-7xMnVEcZFu0DikYjWOlRq7NTPETrm7teqUT2WkQjrTIkEgUyyGdWsj/Zg8bEJt5TNklzbPD1X3fqfsHw3SpapQ==", + "version": "20.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.2.tgz", + "integrity": "sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==", "dependencies": { "undici-types": "~5.26.4" } @@ -484,28 +484,22 @@ "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "node_modules/@types/react": { - "version": "18.2.56", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.56.tgz", - "integrity": "sha512-NpwHDMkS/EFZF2dONFQHgkPRwhvgq/OAvIaGQzxGSBmaeR++kTg6njr15Vatz0/2VcCEwJQFi6Jf4Q0qBu0rLA==", + "version": "18.2.73", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.73.tgz", + "integrity": "sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA==", "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.2.19", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", - "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", + "version": "18.2.23", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.23.tgz", + "integrity": "sha512-ZQ71wgGOTmDYpnav2knkjr3qXdAFu0vsk8Ci5w3pGAIdj7/kKAyn+VsQDhXsmzzzepAiI9leWMmubXz690AI/A==", "dependencies": { "@types/react": "*" } }, - "node_modules/@types/scheduler": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", - "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==" - }, "node_modules/@vidstack/react": { "version": "1.10.7", "resolved": "https://registry.npmjs.org/@vidstack/react/-/react-1.10.7.tgz", @@ -561,11 +555,11 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", + "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -758,21 +752,30 @@ } }, "node_modules/embla-carousel": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-7.1.0.tgz", - "integrity": "sha512-Bh8Pa8NWzgugLkf8sAGexQlBCNDFaej5BXiKgQdRJ1mUC9NWBrw9Z23YVPVGkguWoz5LMjZXXFVGCobl3UPt/Q==" + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.0.0.tgz", + "integrity": "sha512-ecixcyqS6oKD2nh5Nj5MObcgoSILWNI/GtBxkidn5ytFaCCmwVHo2SecksaQZHcARMMpIR2dWOlSIdA1LkZFUA==" }, "node_modules/embla-carousel-react": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-7.1.0.tgz", - "integrity": "sha512-tbYRPRZSDNd2QLNqYDcArAakGIxtUbhS7tkP0dGXktXHGgcX+3ji3VrOUTOftBiujZrMV8kRxtrRUe/1soloIQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.0.0.tgz", + "integrity": "sha512-qT0dii8ZwoCtEIBE6ogjqU2+5IwnGfdt2teKjCzW88JRErflhlCpz8KjWnW8xoRZOP8g0clRtsMEFoAgS/elfA==", "dependencies": { - "embla-carousel": "7.1.0" + "embla-carousel": "8.0.0", + "embla-carousel-reactive-utils": "8.0.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.1 || ^18.0.0" } }, + "node_modules/embla-carousel-reactive-utils": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.0.0.tgz", + "integrity": "sha512-JCw0CqCXI7tbHDRogBb9PoeMLyjEC1vpN0lDOzUjmlfVgtfF+ffLaOK8bVtXVUEbNs/3guGe3NSzA5J5aYzLzw==", + "peerDependencies": { + "embla-carousel": "8.0.0" + } + }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", @@ -823,9 +826,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -972,9 +975,9 @@ } }, "node_modules/mantine-datatable": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/mantine-datatable/-/mantine-datatable-7.5.1.tgz", - "integrity": "sha512-4mcikmjN8dzkUdloFB6laymQb8fOqtmixkQ+GEVUHYQB1QBZ1EWfaZHnpw5ATdkaZ6ZeFfySrhwtTmo4cFAK0A==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/mantine-datatable/-/mantine-datatable-7.6.1.tgz", + "integrity": "sha512-iPxUEaO9n7RETSEZj9DY8TAL4m7d7hk8U3xULXWydt6ZnpNhv8hWkCsz0FSTZQZNoF/umH329xAtrTBEM8URkg==", "funding": { "type": "github", "url": "https://github.com/sponsors/icflorescu" @@ -1061,11 +1064,11 @@ } }, "node_modules/next": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/next/-/next-14.1.0.tgz", - "integrity": "sha512-wlzrsbfeSU48YQBjZhDzOwhWhGsy+uQycR8bHAOt1LY1bn3zZEcDyHQOEoN3aWzQ8LHCAJ1nqrWCc9XF2+O45Q==", + "version": "14.1.4", + "resolved": "https://registry.npmjs.org/next/-/next-14.1.4.tgz", + "integrity": "sha512-1WTaXeSrUwlz/XcnhGTY7+8eiaFvdet5z9u3V2jb+Ek1vFo0VhHKSAIJvDWfQpttWjnyw14kBeq28TPq7bTeEQ==", "dependencies": { - "@next/env": "14.1.0", + "@next/env": "14.1.4", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -1080,15 +1083,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.1.0", - "@next/swc-darwin-x64": "14.1.0", - "@next/swc-linux-arm64-gnu": "14.1.0", - "@next/swc-linux-arm64-musl": "14.1.0", - "@next/swc-linux-x64-gnu": "14.1.0", - "@next/swc-linux-x64-musl": "14.1.0", - "@next/swc-win32-arm64-msvc": "14.1.0", - "@next/swc-win32-ia32-msvc": "14.1.0", - "@next/swc-win32-x64-msvc": "14.1.0" + "@next/swc-darwin-arm64": "14.1.4", + "@next/swc-darwin-x64": "14.1.4", + "@next/swc-linux-arm64-gnu": "14.1.4", + "@next/swc-linux-arm64-musl": "14.1.4", + "@next/swc-linux-x64-gnu": "14.1.4", + "@next/swc-linux-x64-musl": "14.1.4", + "@next/swc-win32-arm64-msvc": "14.1.4", + "@next/swc-win32-ia32-msvc": "14.1.4", + "@next/swc-win32-x64-msvc": "14.1.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -1201,9 +1204,9 @@ } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -1222,7 +1225,7 @@ "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -1410,9 +1413,9 @@ } }, "node_modules/react-hook-form": { - "version": "7.50.1", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.50.1.tgz", - "integrity": "sha512-3PCY82oE0WgeOgUtIr3nYNNtNvqtJ7BZjsbxh6TnYNbXButaD5WpjOmTjdxZfheuHKR68qfeFnEDVYoSSFPMTQ==", + "version": "7.51.2", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.51.2.tgz", + "integrity": "sha512-y++lwaWjtzDt/XNnyGDQy6goHskFualmDlf+jzEZvjvz6KWDf7EboL7pUvRCzPTJd0EOPpdekYaQLEvvG6m6HA==", "engines": { "node": ">=12.22.0" }, @@ -1597,9 +1600,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "engines": { "node": ">=0.10.0" } @@ -1683,9 +1686,9 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1833,9 +1836,9 @@ "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==" }, "node_modules/zustand": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.1.tgz", - "integrity": "sha512-XlauQmH64xXSC1qGYNv00ODaQ3B+tNPoy22jv2diYiP4eoDKr9LA+Bh5Bc3gplTrFdb6JVI+N4kc1DZ/tbtfPg==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.2.tgz", + "integrity": "sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==", "dependencies": { "use-sync-external-store": "1.2.0" }, diff --git a/package.json b/package.json index ddcc0f6..a259a82 100644 --- a/package.json +++ b/package.json @@ -16,32 +16,32 @@ "@mantine/hooks": "^7.5.3", "@mantine/notifications": "^7.5.3", "@tabler/icons-react": "^2.47.0", - "@tanstack/react-query": "^5.21.7", - "@tanstack/react-query-devtools": "^5.21.7", - "@types/node": "20.11.19", - "@types/react": "18.2.56", - "@types/react-dom": "18.2.19", + "@tanstack/react-query": "^5.28.9", + "@tanstack/react-query-devtools": "^5.28.10", + "@types/node": "20.12.2", + "@types/react": "18.2.73", + "@types/react-dom": "18.2.23", "@vidstack/react": "^1.10.7", - "axios": "^1.6.7", + "axios": "^1.6.8", "clsx": "^2.1.0", "cookies-next": "^2.1.1", "dayjs": "^1.11.10", - "embla-carousel-react": "^7.1.0", + "embla-carousel-react": "^8.0.0", "events": "^3.3.0", "lodash": "^4.17.21", - "mantine-datatable": "^7.5.1", + "mantine-datatable": "^7.6.1", "media-icons": "^0.10.0", - "next": "^14.1.0", + "next": "^14.1.4", "plyr-react": "^5.3.0", "react": "18.2.0", "react-dom": "18.2.0", - "react-hook-form": "^7.50.1", - "typescript": "5.3.3", + "react-hook-form": "^7.51.2", + "typescript": "5.4.3", "vidstack": "^1.10.7", - "zustand": "^4.5.1" + "zustand": "^4.5.2" }, "devDependencies": { - "postcss": "^8.4.35", + "postcss": "^8.4.38", "postcss-preset-mantine": "^1.13.0", "postcss-simple-vars": "^7.0.1" } diff --git a/src/components/Admin/Watched/Drawer.tsx b/src/components/Admin/Watched/Drawer.tsx index f9e1766..5c59238 100644 --- a/src/components/Admin/Watched/Drawer.tsx +++ b/src/components/Admin/Watched/Drawer.tsx @@ -4,6 +4,7 @@ import { Group, Loader, MultiSelect, + NumberInput, Select, Switch, Text, @@ -31,6 +32,7 @@ const AdminWatchedDrawer = ({ handleClose, watched, mode }) => { const [lastLive, setLastLive] = useState(watched?.last_live); const [channelId, setChannelId] = useState([]); const [downloadSubOnly, setDownloadSubOnly] = useState(false); + const [maxVideoAge, setMaxVideoAge] = useState(0) const [channelData, setChannelData] = useState([]); const [loading, setLoading] = useState(false); @@ -63,6 +65,7 @@ const AdminWatchedDrawer = ({ handleClose, watched, mode }) => { setChannelId([...channelId, watched?.edges.channel.id]); setRenderChat(watched?.render_chat); setDownloadSubOnly(watched?.download_sub_only); + setMaxVideoAge(watched?.video_age); if (watched?.edges?.categories) { const tmpArr = []; @@ -96,6 +99,7 @@ const AdminWatchedDrawer = ({ handleClose, watched, mode }) => { render_chat: renderChat, download_sub_only: downloadSubOnly, categories: selectedTwitchCategories, + max_age: maxVideoAge, }, withCredentials: true, }, @@ -135,6 +139,7 @@ const AdminWatchedDrawer = ({ handleClose, watched, mode }) => { render_chat: renderChat, download_sub_only: downloadSubOnly, categories: selectedTwitchCategories, + max_age: maxVideoAge, }, withCredentials: true, }, @@ -157,6 +162,7 @@ const AdminWatchedDrawer = ({ handleClose, watched, mode }) => { render_chat: renderChat, download_sub_only: downloadSubOnly, categories: selectedTwitchCategories, + max_age: maxVideoAge, }, withCredentials: true, }, @@ -358,6 +364,15 @@ const AdminWatchedDrawer = ({ handleClose, watched, mode }) => {
Advanced
+
+ +
{twitchCategoriesLoading || formattedTwitchCategories.length == 0 ? ( @@ -368,7 +383,7 @@ const AdminWatchedDrawer = ({ handleClose, watched, mode }) => { value={selectedTwitchCategories} onChange={setSelectedTwitchCategories} data={formattedTwitchCategories} - dropdownPosition="top" + comboboxProps={{ position: 'top', middlewares: { flip: false, shift: false } }} label="Archive specific video categories" placeholder="Search for a category" description="Archive only videos from these categories. Leave blank to archive all categories. Does not apply to live streams." diff --git a/src/components/Channel/Card.tsx b/src/components/Channel/Card.tsx index 3153ff6..d8e8fc6 100644 --- a/src/components/Channel/Card.tsx +++ b/src/components/Channel/Card.tsx @@ -48,7 +48,6 @@ export const ChannelCard = ({ channel, ...props }: ChannelCardProps) => { return ( - {`${channel.name}`} @@ -59,8 +58,6 @@ export const ChannelCard = ({ channel, ...props }: ChannelCardProps) => { - - ); }; diff --git a/src/components/Landing/ContinueWatching.tsx b/src/components/Landing/ContinueWatching.tsx index 3fb9d2a..d99ab1c 100644 --- a/src/components/Landing/ContinueWatching.tsx +++ b/src/components/Landing/ContinueWatching.tsx @@ -49,7 +49,7 @@ const LandingContinueWatching = () => { ) : ( {data?.data?.map((item: any) => ( - + ))} )} diff --git a/src/components/Queue/Header.module.css b/src/components/Queue/Header.module.css index de253c1..e20e228 100644 --- a/src/components/Queue/Header.module.css +++ b/src/components/Queue/Header.module.css @@ -2,7 +2,7 @@ height: auto; padding-bottom: 10px; padding-top: 10px; - background-color: var(--mantine-color-dark-6); + background-color: light-dark(var(--mantine-color-gray-0), var(--mantine-color-dark-6)); } .queueHeaderContents { display: flex; diff --git a/src/components/Vod/Card.tsx b/src/components/Vod/Card.tsx index bcfee58..f4a0f18 100644 --- a/src/components/Vod/Card.tsx +++ b/src/components/Vod/Card.tsx @@ -106,18 +106,16 @@ const VideoCard = ({ )} - - - + {Math.round(progress) > 0 && !watched && ( state); @@ -249,6 +258,15 @@ export function HeaderMegaMenu() {
)} + setColorScheme(computedColorScheme === 'light' ? 'dark' : 'light')} + variant="default" + size="lg" + aria-label="Toggle color scheme" + > + + + diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 45a565e..8f2a5d3 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -33,15 +33,6 @@ export default function MyApp({ Component, pageProps }: AppProps) { getAuthentication().then(() => setIsLoaded(true)); }, []); - // const [colorScheme, setColorScheme] = useLocalStorage({ - // key: "ganymede-color-scheme", - // defaultValue: "dark", - // getInitialValueInEffect: true, - // }); - - // const toggleColorScheme = (value?: ColorScheme) => - // setColorScheme(value || (colorScheme === "dark" ? "light" : "dark")); - const CONTAINER_SIZES: Record = { xxs: rem(300), xs: rem(400), diff --git a/src/pages/admin/info.module.css b/src/pages/admin/info.module.css index 0cd3b55..d162708 100644 --- a/src/pages/admin/info.module.css +++ b/src/pages/admin/info.module.css @@ -8,15 +8,7 @@ order: 2 } .settingsSections { - background-color: var(--mantine-color-dark-6); - border-radius: var(--mantine-radius-md); - padding-left: var(--mantine-spacing-md); - padding-right: var(--mantine-spacing-md); - padding-bottom: var(--mantine-spacing-md); margin-top: var(--mantine-spacing-md); - margin-bottom: var(--mantine-spacing-md); - border: 1px solid var(--mantine-color-dark-5); - box-shadow: var(--mantine-shadow-sm); } .settingItem { display: flex; diff --git a/src/pages/admin/info.tsx b/src/pages/admin/info.tsx index 0b84a84..7d0f920 100644 --- a/src/pages/admin/info.tsx +++ b/src/pages/admin/info.tsx @@ -7,6 +7,7 @@ import { Switch, TextInput, Code, + Card, } from "@mantine/core"; import { useDocumentTitle } from "@mantine/hooks"; import { showNotification } from "@mantine/notifications"; @@ -41,59 +42,61 @@ const AdminInfoPage = () => {
-
-
- Frontend -
-
-
- Version: - {process.env.CONFIG_BUILD_ID} -
-
+
- API + Frontend
Version: - {data.version} -
-
- Build Date: - {data.build_time} -
-
- Git Commit Hash: - {data.git_hash} -
-
- Uptime: - {data.uptime} + {process.env.CONFIG_BUILD_ID}
- - Package Versions - -
- FFmpeg: - {data.program_versions.ffmpeg} +
+
+ API +
+
+
+ Version: + {data.version}
- TwitchDownloader: - {data.program_versions.twitch_downloader} + Build Date: + {data.build_time}
- Chat Downloader: - {data.program_versions.chat_downloader} + Git Commit Hash: + {data.git_hash}
- Streamlink: - {data.program_versions.streamlink} + Uptime: + {data.uptime} +
+
+ + Package Versions + +
+ FFmpeg: + {data.program_versions.ffmpeg} +
+
+ TwitchDownloader: + {data.program_versions.twitch_downloader} +
+
+ Chat Downloader: + {data.program_versions.chat_downloader} +
+
+ Streamlink: + {data.program_versions.streamlink} +
-
+
diff --git a/src/pages/admin/settings.module.css b/src/pages/admin/settings.module.css index 4091e49..b23d609 100644 --- a/src/pages/admin/settings.module.css +++ b/src/pages/admin/settings.module.css @@ -8,15 +8,7 @@ order: 2 } .settingsSections { - background-color: var(--mantine-color-dark-6); - border-radius: var(--mantine-radius-md); - padding-left: var(--mantine-spacing-md); - padding-right: var(--mantine-spacing-md); - padding-bottom: var(--mantine-spacing-xs); margin-top: var(--mantine-spacing-md); - margin-bottom: var(--mantine-spacing-md); - border: 1px solid var(--mantine-color-dark-5); - box-shadow: var(--mantine-shadow-sm); } .link { color: var(--mantine-color-blue-6); diff --git a/src/pages/admin/settings.tsx b/src/pages/admin/settings.tsx index 675d077..8d9b6d0 100644 --- a/src/pages/admin/settings.tsx +++ b/src/pages/admin/settings.tsx @@ -9,6 +9,7 @@ import { Group, ActionIcon, MultiSelect, + Card, } from "@mantine/core"; import { useDocumentTitle } from "@mantine/hooks"; import { showNotification } from "@mantine/notifications"; @@ -156,237 +157,239 @@ const AdminSettingsPage = () => { return ( -
- -
-
- Settings - - Visit the{" "} - - wiki - {" "} - for documentation regarding each setting. - + +
+ +
+
+ Settings + + Visit the{" "} + + wiki + {" "} + for documentation regarding each setting. + +
-
-
- Core - - setRegistrationEnabled(event.currentTarget.checked) - } - label="Registration Enabled" - /> +
+ Core + + setRegistrationEnabled(event.currentTarget.checked) + } + label="Registration Enabled" + /> + +
+
+ + Archive + + Convert the archived mp4 to a HLS playlist. + setSaveAsHls(event.currentTarget.checked)} + label="Convert to HLS" + /> + +
+
+ + Video + + + setTwitchToken(event.currentTarget.value)} + placeholder="abcdefg1234567890" + label="Twitch Token" + description="Supply your Twitch token for downloading ad-free livestreams and subscriber only videos." + /> + + setPostVideoFFmpegArgs(event.currentTarget.value) + } + placeholder="-c:v copy -c:a copy" + label="Video Convert FFmpeg Args" + description="Post video download ffmpeg args." + /> +
+
+ + Livestream + + + setStreamlinkLiveArgs(event.currentTarget.value) + } + placeholder="--force-progress,--force,--twitch-low-latency,--twitch-disable-hosting" + label="Streamlink Parameters" + description="For live streams. Must be comma separated." + /> + + + Proxies + + + Archive livestreams through a proxy to prevent ads. Your Twitch + token will not be sent to the proxy. + + + setProxyEnabled(event.currentTarget.checked) + } + /> + {proxyList.map((proxy, index) => ( +
+ { + const newProxyList = [...proxyList]; + newProxyList[index].url = event.currentTarget.value; + setProxyList(newProxyList); + }} + label="Proxy URL" + /> + { + const newProxyList = [...proxyList]; + newProxyList[index].header = event.currentTarget.value; + setProxyList(newProxyList); + }} + label="Header" + /> + { + const newProxyList = [...proxyList]; + newProxyList.splice(index, 1); + setProxyList(newProxyList); + }} + > + + +
+ ))} + + {/* proxy whitelist */} + +
+
+ + Chat + + + + setChatRenderArgs(event.currentTarget.value) + } + placeholder="-h 1440 -w 340 --framerate 30 --font Inter --font-size 13 --badge-filter 96" + label="Chat Render Args" + description="TwitchDownloader chat render args." + /> +
-
-
- - Archive - - Convert the archived mp4 to a HLS playlist. - setSaveAsHls(event.currentTarget.checked)} - label="Convert to HLS" - /> - -
-
- - Video - - - setTwitchToken(event.currentTarget.value)} - placeholder="abcdefg1234567890" - label="Twitch Token" - description="Supply your Twitch token for downloading ad-free livestreams and subscriber only videos." - /> - - setPostVideoFFmpegArgs(event.currentTarget.value) - } - placeholder="-c:v copy -c:a copy" - label="Video Convert FFmpeg Args" - description="Post video download ffmpeg args." - /> -
-
- - Livestream - - - setStreamlinkLiveArgs(event.currentTarget.value) - } - placeholder="--force-progress,--force,--twitch-low-latency,--twitch-disable-hosting" - label="Streamlink Parameters" - description="For live streams. Must be comma separated." - /> - - - Proxies - - - Archive livestreams through a proxy to prevent ads. Your Twitch - token will not be sent to the proxy. - - - setProxyEnabled(event.currentTarget.checked) - } - /> - {proxyList.map((proxy, index) => ( -
- { - const newProxyList = [...proxyList]; - newProxyList[index].url = event.currentTarget.value; - setProxyList(newProxyList); - }} - label="Proxy URL" - /> - { - const newProxyList = [...proxyList]; - newProxyList[index].header = event.currentTarget.value; - setProxyList(newProxyList); - }} - label="Header" - /> - { - const newProxyList = [...proxyList]; - newProxyList.splice(index, 1); - setProxyList(newProxyList); - }} - > - - -
- ))} - - {/* proxy whitelist */} - -
-
- - Chat - - - - setChatRenderArgs(event.currentTarget.value) - } - placeholder="-h 1440 -w 340 --framerate 30 --font Inter --font-size 13 --badge-filter 96" - label="Chat Render Args" - description="TwitchDownloader chat render args." - />
- -
-
-
- setDrawerOpened(false)} - title="Notification Settings" - padding="xl" - size="xl" - position="right" - > - - - setStorageTemplateDrawerOpened(false)} - title="Storage Template Settings" - padding="xl" - size="xl" - position="right" - > - - + +
+ setDrawerOpened(false)} + title="Notification Settings" + padding="xl" + size="xl" + position="right" + > + + + setStorageTemplateDrawerOpened(false)} + title="Storage Template Settings" + padding="xl" + size="xl" + position="right" + > + + +
); }; diff --git a/src/pages/admin/tasks.module.css b/src/pages/admin/tasks.module.css index dd79a6b..8d65c40 100644 --- a/src/pages/admin/tasks.module.css +++ b/src/pages/admin/tasks.module.css @@ -8,15 +8,7 @@ order: 2 } .settingsSections { - background-color: var(--mantine-color-dark-6); - border-radius: var(--mantine-radius-md); - padding-left: var(--mantine-spacing-md); - padding-right: var(--mantine-spacing-md); - padding-bottom: var(--mantine-spacing-xs); margin-top: var(--mantine-spacing-md); - margin-bottom: var(--mantine-spacing-md); - border: 1px solid var(--mantine-color-dark-5); - box-shadow: var(--mantine-shadow-sm); } .taskItem { display: flex; diff --git a/src/pages/admin/tasks.tsx b/src/pages/admin/tasks.tsx index fe668c8..36a12b0 100644 --- a/src/pages/admin/tasks.tsx +++ b/src/pages/admin/tasks.tsx @@ -10,6 +10,7 @@ import { Grid, ActionIcon, Tooltip, + Card, } from "@mantine/core"; import { useDocumentTitle } from "@mantine/hooks"; import { showNotification } from "@mantine/notifications"; @@ -83,276 +84,280 @@ const AdminTasksPage = () => {
-
+ +
+
+ Tasks +
+
- Tasks +
+ Watched Channels +
+ + +
+ + Check watched channels for live streams + + Occurs at interval set in config. + + +
+
+ + + startTask.mutate("check_live")} + loading={loading} + color="green" + variant="filled" + size="lg" + > + + + + +
+ + +
+ + + Check watched channels for new videos to archive + + + Occurs at interval set in config. + + +
+
+ + + startTask.mutate("check_vod")} + loading={loading} + color="green" + variant="filled" + size="lg" + > + + + + +
-
-
-
- Watched Channels + {/* Queue */} +
+
+ Queue +
+ + +
+ + Start stuck queue items + + Occurs every hour. + + +
+
+ + + startTask.mutate("queue_hold_check")} + loading={loading} + color="green" + variant="filled" + size="lg" + > + + + + +
- - -
- - Check watched channels for live streams - - Occurs at interval set in config. - - -
-
- - - startTask.mutate("check_live")} - loading={loading} - color="green" - variant="filled" - size="lg" - > - - - - -
- - -
- - - Check watched channels for new videos to archive - - - Occurs at interval set in config. - - -
-
- - - startTask.mutate("check_vod")} - loading={loading} - color="green" - variant="filled" - size="lg" - > - - - - -
-
- {/* Queue */} -
-
- Queue + {/* Ganymede */} +
+
+ Ganymede +
+ + +
+ + Authenticate with Twitch + + Occurs every 7 days. + + +
+
+ + + startTask.mutate("twitch_auth")} + loading={loading} + color="green" + variant="filled" + size="lg" + > + + + + +
+ + +
+ + Get JWKS + + Occurs every day. + + +
+
+ + + startTask.mutate("get_jwks")} + loading={loading} + color="green" + variant="filled" + size="lg" + > + + + + +
- - -
- - Start stuck queue items - - Occurs every hour. - - -
-
- - - startTask.mutate("queue_hold_check")} - loading={loading} - color="green" - variant="filled" - size="lg" - > - - - - -
-
- {/* Ganymede */} -
-
- Ganymede + {/* Storage */} +
+
+ Storage +
+ + +
+ + Storage Template Migration + + Apply your current storage template to existing files. + Read the{" "} + + docs + {" "} + before starting. + + +
+
+ + + startTask.mutate("storage_migration")} + loading={loading} + color="green" + variant="filled" + size="lg" + > + + + + +
- - -
- - Authenticate with Twitch - - Occurs every 7 days. - - -
-
- - - startTask.mutate("twitch_auth")} - loading={loading} - color="green" - variant="filled" - size="lg" - > - - - - -
- - -
- - Get JWKS - - Occurs every day. - - -
-
- - - startTask.mutate("get_jwks")} - loading={loading} - color="green" - variant="filled" - size="lg" - > - - - - -
-
- {/* Storage */} -
-
- Storage + {/* Videos */} +
+
+ Videos +
+ + +
+ + Prune Videos + + Prune videos from channels that have retention settings + set. + + + Occurs every day at 01:00. + + +
+
+ + + startTask.mutate("prune_videos")} + loading={loading} + color="green" + variant="filled" + size="lg" + > + + + + +
+
+ + + + +
+
+ Workflows +
- Storage Template Migration - - Apply your current storage template to existing files. - Read the{" "} - - docs - {" "} - before starting. + Save Chapters for Twitch Videos + + Save chapters for already archived Twitch videos.
- - startTask.mutate("storage_migration")} - loading={loading} - color="green" - variant="filled" - size="lg" - > - + + startWorkflow.mutate("SaveTwitchVideoChapters")}> + -
-
- {/* Videos */} -
-
- Videos -
-
- Prune Videos - - Prune videos from channels that have retention settings - set. - - - Occurs every day at 01:00. + Update Live Stream Archives with VOD IDs + + Attempt to update past live stream archives with their corresponding vod ID (automatically does this after live archive finishes).
- - startTask.mutate("prune_videos")} - loading={loading} - color="green" - variant="filled" - size="lg" - > - + + startWorkflow.mutate("UpdateTwitchLiveStreamArchivesWithVodIds")}> +
-
- - -
-
- Workflows -
-
- - -
- - Save Chapters for Twitch Videos - - Save chapters for already archived Twitch videos. - - -
-
- - - startWorkflow.mutate("SaveTwitchVideoChapters")}> - - - - - -
- - Update Live Stream Archives with VOD IDs - - Attempt to update past live stream archives with their corresponding vod ID (automatically does this after live archive finishes). - - -
-
- - - startWorkflow.mutate("UpdateTwitchLiveStreamArchivesWithVodIds")}> - - - - -
+
- + ); }; diff --git a/src/pages/archive/index.tsx b/src/pages/archive/index.tsx index 1006231..00c8616 100644 --- a/src/pages/archive/index.tsx +++ b/src/pages/archive/index.tsx @@ -240,7 +240,7 @@ const ArchivePage = () => { value={archiveQuality} onChange={setArchiveQuality} data={qualityOptions} - dropdownPosition="bottom" + comboboxProps={{ position: 'bottom', middlewares: { flip: false, shift: false } }} /> { ))} - {/* - {data.map((channel: any) => ( - - - - ))} - */}
diff --git a/src/pages/profile.module.css b/src/pages/profile.module.css deleted file mode 100644 index e960375..0000000 --- a/src/pages/profile.module.css +++ /dev/null @@ -1,6 +0,0 @@ -.card { - background-color: var(--mantine-color-dark-7); -} -.avatar { - border: 2px solid var(--mantine-color-dark-7); -} \ No newline at end of file diff --git a/src/pages/profile.tsx b/src/pages/profile.tsx index 495240a..6b983e0 100644 --- a/src/pages/profile.tsx +++ b/src/pages/profile.tsx @@ -19,7 +19,6 @@ import { import { useDocumentTitle, useInputState } from "@mantine/hooks"; import { showNotification } from "@mantine/notifications"; import { useApi } from "../hooks/useApi"; -import classes from "./profile.module.css" const ProfilePage = () => { const user = useUserStore((state) => state); @@ -131,19 +130,19 @@ const ProfilePage = () => {
- - + + {user.username} - + {user.role} {user.oauth && ( - + Managed via SSO )} - + {new Date(user.createdAt).toLocaleDateString()} diff --git a/src/pages/workflows/Workflows.module.css b/src/pages/workflows/Workflows.module.css index 4d52241..dc96b0c 100644 --- a/src/pages/workflows/Workflows.module.css +++ b/src/pages/workflows/Workflows.module.css @@ -1,7 +1,6 @@ .infoBox { border-radius: var(--mantine-radius-md); padding: var(--mantine-spacing-sm) var(--mantine-spacing-md); - background-color: #19191d; } .header { display: flex; diff --git a/src/pages/workflows/[workflowId]/[runId].tsx b/src/pages/workflows/[workflowId]/[runId].tsx index 678567b..ddf2d3f 100644 --- a/src/pages/workflows/[workflowId]/[runId].tsx +++ b/src/pages/workflows/[workflowId]/[runId].tsx @@ -3,7 +3,7 @@ import { useParams } from 'next/navigation'; import React, { useEffect, useState } from 'react' import { useApi } from '../../../hooks/useApi'; import GanymedeLoader from '../../../components/Utils/GanymedeLoader'; -import { Text, Container, Paper, SimpleGrid, Title, ActionIcon, Tooltip } from '@mantine/core'; +import { Text, Container, Paper, SimpleGrid, Title, ActionIcon, Tooltip, Card } from '@mantine/core'; import classes from "../Workflows.module.css" import dayjs from 'dayjs'; import duration from "dayjs/plugin/duration"; @@ -117,81 +117,82 @@ const WorkflowInspectPage = (props: Props) => { return (
+ -
+
-
-
- Summary -
-
+
+
+ Summary +
+
+
-
-
- Actions
- - restartWorkflow()} loading={restartIconLoading}> - - - -
-
- - {workflowVideoId && ( - -
- Video ID - {workflowVideoId.video_id} -
+ Actions
- External Video ID - {workflowVideoId.external_video_id} + + restartWorkflow()} loading={restartIconLoading}> + + +
-
+
- )} + {workflowVideoId && ( + +
+ Video ID + {workflowVideoId.video_id} +
+
+ External Video ID + {workflowVideoId.external_video_id} +
+
+ )} - -
- Queue - {workflowInfo.task_queue} - Workflow Type - {workflowInfo.type.name} - {workflowInfo.execution.workflow_id} -
-
- Start & Close Time - Start Time: {dayjs(workflowInfo.start_time).format("YYYY/MM/DD HH:mm:ss")} - Close Time: {dayjs(workflowInfo.close_time).format("YYYY/MM/DD HH:mm:ss")} - Duration: {dayjs - .duration(duration, "milliseconds") - .format("HH:mm:ss")} -
-
+ +
+ Queue + {workflowInfo.task_queue} + Workflow Type + {workflowInfo.type.name} + {workflowInfo.execution.workflow_id} +
+
+ Start & Close Time + Start Time: {dayjs(workflowInfo.start_time).format("YYYY/MM/DD HH:mm:ss")} + Close Time: {dayjs(workflowInfo.close_time).format("YYYY/MM/DD HH:mm:ss")} + Duration: {dayjs + .duration(duration, "milliseconds") + .format("HH:mm:ss")} +
+
-
-
+
- Events +
+ Events - {workflowHistory.map((event: any) => ( - - ))} + {workflowHistory.map((event: any) => ( + + ))} -
+
+