diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 5e5810f49..182bddebf 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -31,6 +31,7 @@ body: label: Version description: What version of Homarr are you running? options: + - 1.15.0 - 1.14.0 - 1.13.1 - 1.13.0 diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index a70e5cc62..3832475f1 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -56,25 +56,25 @@ "@mantine/tiptap": "^7.17.4", "@million/lint": "1.0.14", "@tabler/icons-react": "^3.31.0", - "@tanstack/react-query": "^5.72.1", - "@tanstack/react-query-devtools": "^5.72.1", - "@tanstack/react-query-next-experimental": "^5.72.1", - "@trpc/client": "^11.0.4", - "@trpc/next": "^11.0.4", - "@trpc/react-query": "^11.0.4", - "@trpc/server": "^11.0.4", + "@tanstack/react-query": "^5.72.2", + "@tanstack/react-query-devtools": "^5.72.2", + "@tanstack/react-query-next-experimental": "^5.72.2", + "@trpc/client": "^11.1.0", + "@trpc/next": "^11.1.0", + "@trpc/react-query": "^11.1.0", + "@trpc/server": "^11.1.0", "@xterm/addon-canvas": "^0.7.0", "@xterm/addon-fit": "0.10.0", "@xterm/xterm": "^5.5.0", "chroma-js": "^3.1.2", "clsx": "^2.1.1", "dayjs": "^1.11.13", - "dotenv": "^16.4.7", + "dotenv": "^16.5.0", "flag-icons": "^7.3.2", "glob": "^11.0.1", "jotai": "^2.12.2", "mantine-react-table": "2.0.0-beta.9", - "next": "15.2.5", + "next": "15.3.0", "postcss-preset-mantine": "^1.17.0", "prismjs": "^1.30.0", "react": "19.1.0", @@ -83,7 +83,7 @@ "react-simple-code-editor": "^0.14.1", "sass": "^1.86.3", "superjson": "2.2.2", - "swagger-ui-react": "^5.20.7", + "swagger-ui-react": "^5.20.8", "use-deep-compare-effect": "^1.8.1", "zod": "^3.24.2" }, @@ -94,7 +94,7 @@ "@types/chroma-js": "3.1.1", "@types/node": "^22.14.0", "@types/prismjs": "^1.26.5", - "@types/react": "19.1.0", + "@types/react": "19.1.1", "@types/react-dom": "19.1.2", "@types/swagger-ui-react": "^5.18.0", "concurrently": "^9.1.2", diff --git a/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx b/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx index 45436b476..5be662f0f 100644 --- a/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx +++ b/apps/nextjs/src/app/[locale]/boards/(content)/_header-actions.tsx @@ -25,9 +25,11 @@ import { useEditMode } from "@homarr/boards/edit-mode"; import { revalidatePathActionAsync } from "@homarr/common/client"; import { env } from "@homarr/common/env"; import { useConfirmModal, useModalAction } from "@homarr/modals"; +import { AppSelectModal } from "@homarr/modals-collection"; import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; import { useI18n, useScopedI18n } from "@homarr/translation/client"; +import { useItemActions } from "~/components/board/items/item-actions"; import { ItemSelectModal } from "~/components/board/items/item-select-modal"; import { useBoardPermissions } from "~/components/board/permissions/client"; import { useCategoryActions } from "~/components/board/sections/category/category-actions"; @@ -62,8 +64,10 @@ export const BoardContentHeaderActions = () => { const AddMenu = () => { const { openModal: openCategoryEditModal } = useModalAction(CategoryEditModal); const { openModal: openItemSelectModal } = useModalAction(ItemSelectModal); + const { openModal: openAppSelectModal } = useModalAction(AppSelectModal); const { addCategoryToEnd } = useCategoryActions(); const { addDynamicSection } = useDynamicSectionActions(); + const { createItem } = useItemActions(); const t = useI18n(); const handleAddCategory = useCallback( @@ -90,6 +94,17 @@ const AddMenu = () => { openItemSelectModal(); }, [openItemSelectModal]); + const handleSelectApp = useCallback(() => { + openAppSelectModal({ + onSelect: (appId) => { + createItem({ + kind: "app", + options: { appId }, + }); + }, + }); + }, [openAppSelectModal, createItem]); + return ( @@ -101,10 +116,14 @@ const AddMenu = () => { - } onClick={handleSelectItem}> + } onClick={handleSelectItem}> {t("item.action.create")} + } onClick={handleSelectApp}> + {t("app.action.add")} + + } onClick={handleAddCategory}> diff --git a/apps/nextjs/src/app/[locale]/boards/[name]/settings/_background.tsx b/apps/nextjs/src/app/[locale]/boards/[name]/settings/_background.tsx index 1471ff26d..2607e60f4 100644 --- a/apps/nextjs/src/app/[locale]/boards/[name]/settings/_background.tsx +++ b/apps/nextjs/src/app/[locale]/boards/[name]/settings/_background.tsx @@ -1,13 +1,15 @@ "use client"; -import { Autocomplete, Button, Center, Grid, Group, Popover, Stack, Text } from "@mantine/core"; +import { startTransition } from "react"; +import { ActionIcon, Autocomplete, Button, Center, Grid, Group, Popover, Stack, Text } from "@mantine/core"; import { useDebouncedValue } from "@mantine/hooks"; -import { IconPhotoOff } from "@tabler/icons-react"; +import { IconPhotoOff, IconUpload } from "@tabler/icons-react"; import { clientApi } from "@homarr/api/client"; import { useSession } from "@homarr/auth/client"; import { backgroundImageAttachments, backgroundImageRepeats, backgroundImageSizes } from "@homarr/definitions"; import { useZodForm } from "@homarr/form"; +import { UploadMedia } from "@homarr/forms-collection"; import type { TranslationObject } from "@homarr/translation"; import { useI18n } from "@homarr/translation/client"; import type { SelectItemWithDescriptionBadge } from "@homarr/ui"; @@ -62,58 +64,76 @@ export const BackgroundSettingsContent = ({ board }: Props) => { - = 2 && ( - - -
- -
-
- - - -
- ) - } - // We filter it on the server - filter={({ options }) => options} - label={t("board.field.backgroundImageUrl.label")} - placeholder={`${t("board.field.backgroundImageUrl.placeholder")}...`} - renderOption={({ option }) => { - const current = imageMap.get(option.value); - if (!current) return null; + + = 2 && ( + + +
+ +
+
+ + + +
+ ) + } + // We filter it on the server + filter={({ options }) => options} + label={t("board.field.backgroundImageUrl.label")} + placeholder={`${t("board.field.backgroundImageUrl.placeholder")}...`} + renderOption={({ option }) => { + const current = imageMap.get(option.value); + if (!current) return null; - return ( - - - - {current.name} - - {option.value} - - - - ); - }} - data={[ - { - group: t("board.field.backgroundImageUrl.group.your"), - items: images - .filter((media) => media.creatorId === session?.user.id) - .map((media) => `/api/user-medias/${media.id}`), - }, - { - group: t("board.field.backgroundImageUrl.group.other"), - items: images - .filter((media) => media.creatorId !== session?.user.id) - .map((media) => `/api/user-medias/${media.id}`), - }, - ]} - {...form.getInputProps("backgroundImageUrl")} - /> + return ( + + + + {current.name} + + {option.value} + + + + ); + }} + data={[ + { + group: t("board.field.backgroundImageUrl.group.your"), + items: images + .filter((media) => media.creatorId === session?.user.id) + .map((media) => `/api/user-medias/${media.id}`), + }, + { + group: t("board.field.backgroundImageUrl.group.other"), + items: images + .filter((media) => media.creatorId !== session?.user.id) + .map((media) => `/api/user-medias/${media.id}`), + }, + ]} + {...form.getInputProps("backgroundImageUrl")} + /> + {session?.user.permissions.includes("media-upload") && ( + + startTransition(() => { + form.setFieldValue("backgroundImageUrl", url); + }) + } + > + {({ onClick, loading }) => ( + + + + )} + + )} +
; } export const createItemCallback = - ({ kind }: CreateItemInput) => + ({ kind, options = {} }: CreateItemInput) => (previous: Board): Board => { const firstSection = previous.sections .filter((section): section is EmptySection => section.kind === "empty") @@ -24,7 +25,7 @@ export const createItemCallback = const widget = { id: createId(), kind, - options: {}, + options, layouts: createItemLayouts(previous, firstSection), integrationIds: [], advancedOptions: { diff --git a/apps/tasks/package.json b/apps/tasks/package.json index 0c6efc00c..f335a0dc8 100644 --- a/apps/tasks/package.json +++ b/apps/tasks/package.json @@ -36,9 +36,9 @@ "@homarr/validation": "workspace:^0.1.0", "@homarr/widgets": "workspace:^0.1.0", "dayjs": "^1.11.13", - "dotenv": "^16.4.7", + "dotenv": "^16.5.0", "superjson": "2.2.2", - "undici": "7.7.0" + "undici": "7.8.0" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", diff --git a/apps/websocket/package.json b/apps/websocket/package.json index e643bca4a..970eea814 100644 --- a/apps/websocket/package.json +++ b/apps/websocket/package.json @@ -25,7 +25,7 @@ "@homarr/log": "workspace:^", "@homarr/redis": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "dotenv": "^16.4.7", + "dotenv": "^16.5.0", "tsx": "4.19.3", "ws": "^8.18.1" }, diff --git a/package.json b/package.json index 87f7a6ae5..251464842 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "jsdom": "^26.0.0", "prettier": "^3.5.3", "semantic-release": "^24.2.3", - "testcontainers": "^10.24.1", + "testcontainers": "^10.24.2", "turbo": "^2.5.0", "typescript": "^5.8.3", "vite-tsconfig-paths": "^5.1.4", @@ -70,7 +70,7 @@ "tree-sitter-json" ], "overrides": { - "proxmox-api>undici": "7.7.0" + "proxmox-api>undici": "7.8.0" }, "patchedDependencies": { "pretty-print-error": "patches/pretty-print-error.patch" diff --git a/packages/api/package.json b/packages/api/package.json index 7d574fb8d..4227cc935 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -41,11 +41,11 @@ "@homarr/server-settings": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", "@kubernetes/client-node": "^1.1.2", - "@trpc/client": "^11.0.4", - "@trpc/react-query": "^11.0.4", - "@trpc/server": "^11.0.4", + "@trpc/client": "^11.1.0", + "@trpc/react-query": "^11.1.0", + "@trpc/server": "^11.1.0", "lodash.clonedeep": "^4.5.0", - "next": "15.2.5", + "next": "15.3.0", "pretty-print-error": "^1.1.2", "react": "19.1.0", "react-dom": "19.1.0", diff --git a/packages/auth/package.json b/packages/auth/package.json index 209ad018c..23cf3b035 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -35,7 +35,7 @@ "bcrypt": "^5.1.1", "cookies": "^0.9.1", "ldapts": "7.4.0", - "next": "15.2.5", + "next": "15.3.0", "next-auth": "5.0.0-beta.25", "pretty-print-error": "^1.1.2", "react": "19.1.0", diff --git a/packages/certificates/package.json b/packages/certificates/package.json index 024c38f5f..4bdf1713a 100644 --- a/packages/certificates/package.json +++ b/packages/certificates/package.json @@ -23,7 +23,7 @@ "prettier": "@homarr/prettier-config", "dependencies": { "@homarr/common": "workspace:^0.1.0", - "undici": "7.7.0" + "undici": "7.8.0" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", diff --git a/packages/cli/package.json b/packages/cli/package.json index 0384efe0b..f5c6b56ea 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -28,7 +28,7 @@ "@homarr/common": "workspace:^0.1.0", "@homarr/db": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", - "dotenv": "^16.4.7" + "dotenv": "^16.5.0" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", diff --git a/packages/common/package.json b/packages/common/package.json index 8920e5e73..1b1ea67c0 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -30,10 +30,10 @@ "@homarr/env": "workspace:^0.1.0", "@homarr/log": "workspace:^0.1.0", "dayjs": "^1.11.13", - "next": "15.2.5", + "next": "15.3.0", "react": "19.1.0", "react-dom": "19.1.0", - "undici": "7.7.0", + "undici": "7.8.0", "zod": "^3.24.2" }, "devDependencies": { diff --git a/packages/db/package.json b/packages/db/package.json index bfd9090b0..16a1c2c4a 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -46,9 +46,9 @@ "@homarr/server-settings": "workspace:^0.1.0", "@mantine/core": "^7.17.4", "@paralleldrive/cuid2": "^2.2.2", - "@testcontainers/mysql": "^10.24.1", + "@testcontainers/mysql": "^10.24.2", "better-sqlite3": "^11.9.1", - "dotenv": "^16.4.7", + "dotenv": "^16.5.0", "drizzle-kit": "^0.30.6", "drizzle-orm": "^0.41.0", "drizzle-zod": "^0.7.1", diff --git a/packages/definitions/src/integration.ts b/packages/definitions/src/integration.ts index 8e23e5127..9c0b78b21 100644 --- a/packages/definitions/src/integration.ts +++ b/packages/definitions/src/integration.ts @@ -49,6 +49,12 @@ export const integrationDefs = { iconUrl: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons@master/svg/qbittorrent.svg", category: ["downloadClient", "torrent"], }, + aria2: { + name: "Aria2", + secretKinds: [[], ["apiKey"]], + iconUrl: "https://cdn.jsdelivr.net/gh/PapirusDevelopmentTeam/papirus_icons@latest/src/system_downloads_3.svg", + category: ["downloadClient", "torrent", "miscellaneous"], + }, sonarr: { name: "Sonarr", secretKinds: [["apiKey"]], @@ -211,6 +217,7 @@ export type IntegrationCategory = | "downloadClient" | "usenet" | "torrent" + | "miscellaneous" | "smartHomeServer" | "indexerManager" | "healthMonitoring" diff --git a/packages/integrations/package.json b/packages/integrations/package.json index 2cfffbb6d..bb1bdfe74 100644 --- a/packages/integrations/package.json +++ b/packages/integrations/package.json @@ -36,10 +36,11 @@ "@homarr/translation": "workspace:^0.1.0", "@homarr/validation": "workspace:^0.1.0", "@jellyfin/sdk": "^0.11.0", + "maria2": "^0.4.0", "node-ical": "^0.20.1", "proxmox-api": "1.1.1", "tsdav": "^2.1.3", - "undici": "7.7.0", + "undici": "7.8.0", "xml2js": "^0.6.2", "zod": "^3.24.2" }, diff --git a/packages/integrations/src/base/creator.ts b/packages/integrations/src/base/creator.ts index 90467c71c..f9aec19a0 100644 --- a/packages/integrations/src/base/creator.ts +++ b/packages/integrations/src/base/creator.ts @@ -5,6 +5,7 @@ import type { IntegrationKind, IntegrationSecretKind } from "@homarr/definitions import { AdGuardHomeIntegration } from "../adguard-home/adguard-home-integration"; import { DashDotIntegration } from "../dashdot/dashdot-integration"; +import { Aria2Integration } from "../download-client/aria2/aria2-integration"; import { DelugeIntegration } from "../download-client/deluge/deluge-integration"; import { NzbGetIntegration } from "../download-client/nzbget/nzbget-integration"; import { QBitTorrentIntegration } from "../download-client/qbittorrent/qbittorrent-integration"; @@ -78,6 +79,7 @@ export const integrationCreators = { qBittorrent: QBitTorrentIntegration, deluge: DelugeIntegration, transmission: TransmissionIntegration, + aria2: Aria2Integration, jellyseerr: JellyseerrIntegration, overseerr: OverseerrIntegration, prowlarr: ProwlarrIntegration, diff --git a/packages/integrations/src/download-client/aria2/aria2-integration.ts b/packages/integrations/src/download-client/aria2/aria2-integration.ts new file mode 100644 index 000000000..b0da1b399 --- /dev/null +++ b/packages/integrations/src/download-client/aria2/aria2-integration.ts @@ -0,0 +1,180 @@ +import path from "path"; + +import { fetchWithTrustedCertificatesAsync } from "@homarr/certificates/server"; + +import type { DownloadClientJobsAndStatus } from "../../interfaces/downloads/download-client-data"; +import { DownloadClientIntegration } from "../../interfaces/downloads/download-client-integration"; +import type { DownloadClientItem } from "../../interfaces/downloads/download-client-items"; +import type { Aria2Download, Aria2GetClient } from "./aria2-types"; + +export class Aria2Integration extends DownloadClientIntegration { + public async getClientJobsAndStatusAsync(): Promise { + const client = this.getClient(); + const keys: (keyof Aria2Download)[] = [ + "bittorrent", + "uploadLength", + "uploadSpeed", + "downloadSpeed", + "totalLength", + "completedLength", + "files", + "status", + "gid", + ]; + const [activeDownloads, waitingDownloads, stoppedDownloads, globalStats] = await Promise.all([ + client.tellActive(), + client.tellWaiting(0, 1000, keys), + client.tellStopped(0, 1000, keys), + client.getGlobalStat(), + ]); + + const downloads = [...activeDownloads, ...waitingDownloads, ...stoppedDownloads]; + const allPaused = downloads.every((download) => download.status === "paused"); + + return { + status: { + types: ["torrent", "miscellaneous"], + paused: allPaused, + rates: { + up: Number(globalStats.uploadSpeed), + down: Number(globalStats.downloadSpeed), + }, + }, + items: downloads.map((download, index) => { + const totalSize = Number(download.totalLength); + const completedSize = Number(download.completedLength); + const progress = totalSize > 0 ? completedSize / totalSize : 0; + + const itemName = download.bittorrent?.info?.name ?? path.basename(download.files[0]?.path ?? "Unknown"); + + return { + index, + id: download.gid, + name: itemName, + type: download.bittorrent ? "torrent" : "miscellaneous", + size: totalSize, + sent: Number(download.uploadLength), + downSpeed: Number(download.downloadSpeed), + upSpeed: Number(download.uploadSpeed), + time: this.calculateEta(completedSize, totalSize, Number(download.downloadSpeed)), + state: this.getState(download.status, Boolean(download.bittorrent)), + category: [], + progress, + }; + }), + } as DownloadClientJobsAndStatus; + } + public async pauseQueueAsync(): Promise { + const client = this.getClient(); + await client.pauseAll(); + } + public async pauseItemAsync(item: DownloadClientItem): Promise { + const client = this.getClient(); + await client.pause(item.id); + } + public async resumeQueueAsync(): Promise { + const client = this.getClient(); + await client.unpauseAll(); + } + public async resumeItemAsync(item: DownloadClientItem): Promise { + const client = this.getClient(); + await client.unpause(item.id); + } + public async deleteItemAsync(item: DownloadClientItem, fromDisk: boolean): Promise { + const client = this.getClient(); + // Note: Remove download file is not support by aria2, replace with forceremove + + if (item.state in ["downloading", "leeching", "paused"]) { + await (fromDisk ? client.remove(item.id) : client.forceRemove(item.id)); + } else { + await client.removeDownloadResult(item.id); + } + } + + public async testConnectionAsync(): Promise { + const client = this.getClient(); + await client.getVersion(); + } + + private getClient() { + const url = this.url("/jsonrpc"); + + return new Proxy( + {}, + { + get: (target, method: keyof Aria2GetClient) => { + return async (...args: Parameters) => { + let params = [...args]; + if (this.hasSecretValue("apiKey")) { + params = [`token:${this.getSecretValue("apiKey")}`, ...params]; + } + const body = JSON.stringify({ + jsonrpc: "2.0", + id: btoa(["Homarr", Date.now().toString(), Math.random()].join(".")), // unique id per request + method: `aria2.${method}`, + params, + }); + return await fetchWithTrustedCertificatesAsync(url, { method: "POST", body }) + .then(async (response) => { + const responseBody = (await response.json()) as { result: ReturnType }; + + if (!response.ok) { + throw new Error(response.statusText); + } + return responseBody.result; + }) + .catch((error) => { + if (error instanceof Error) { + throw new Error(error.message); + } else { + throw new Error("Error communicating with Aria2"); + } + }); + }; + }, + }, + ) as Aria2GetClient; + } + + private getState(aria2Status: Aria2Download["status"], isTorrent: boolean): DownloadClientItem["state"] { + return isTorrent ? this.getTorrentState(aria2Status) : this.getNonTorrentState(aria2Status); + } + private getNonTorrentState(aria2Status: Aria2Download["status"]): DownloadClientItem["state"] { + switch (aria2Status) { + case "active": + return "downloading"; + case "waiting": + return "queued"; + case "paused": + return "paused"; + case "complete": + return "completed"; + case "error": + return "failed"; + case "removed": + default: + return "unknown"; + } + } + private getTorrentState(aria2Status: Aria2Download["status"]): DownloadClientItem["state"] { + switch (aria2Status) { + case "active": + return "leeching"; + case "waiting": + return "queued"; + case "paused": + return "paused"; + case "complete": + return "completed"; + case "error": + return "failed"; + case "removed": + default: + return "unknown"; + } + } + private calculateEta(completed: number, total: number, speed: number): number { + if (speed === 0 || completed >= total) return 0; + return Math.floor((total - completed) / speed) * 1000; // Convert to milliseconds + } +} diff --git a/packages/integrations/src/download-client/aria2/aria2-types.ts b/packages/integrations/src/download-client/aria2/aria2-types.ts new file mode 100644 index 000000000..ec8354a75 --- /dev/null +++ b/packages/integrations/src/download-client/aria2/aria2-types.ts @@ -0,0 +1,80 @@ +export interface Aria2GetClient { + getVersion: Aria2VoidFunc; + getGlobalStat: Aria2VoidFunc; + + tellActive: Aria2VoidFunc; + tellWaiting: Aria2VoidFunc; + tellStopped: Aria2VoidFunc; + tellStatus: Aria2GidFunc; + + pause: Aria2GidFunc; + pauseAll: Aria2VoidFunc<"OK">; + unpause: Aria2GidFunc; + unpauseAll: Aria2VoidFunc<"OK">; + remove: Aria2GidFunc; + forceRemove: Aria2GidFunc; + removeDownloadResult: Aria2GidFunc<"OK">; +} +type AriaGID = string; + +type Aria2GidFunc = (gid: string, ...args: T) => Promise; +type Aria2VoidFunc = (...args: T) => Promise; + +type Aria2TellStatusListParams = [offset: number, num: number, keys?: [keyof Aria2Download] | (keyof Aria2Download)[]]; + +export interface Aria2GetVersion { + enabledFeatures: string[]; + version: string; +} +export interface Aria2GetGlobalStat { + downloadSpeed: string; + uploadSpeed: string; + numActive: string; + numWaiting: string; + numStopped: string; + numStoppedTotal: string; +} +export interface Aria2Download { + gid: AriaGID; + status: "active" | "waiting" | "paused" | "error" | "complete" | "removed"; + totalLength: string; + completedLength: string; + uploadLength: string; + bitfield: string; + downloadSpeed: string; + uploadSpeed: string; + infoHash?: string; + numSeeders?: string; + seeder?: "true" | "false"; + pieceLength: string; + numPieces: string; + connections: string; + errorCode?: string; + errorMessage?: string; + followedBy?: AriaGID[]; + following?: AriaGID; + belongsTo?: AriaGID; + dir: string; + files: { + index: number; + path: string; + length: string; + completedLength: string; + selected: "true" | "false"; + uris: { + status: "waiting" | "used"; + uri: string; + }[]; + }[]; + bittorrent?: { + announceList: string[]; + comment?: string | { "utf-8": string }; + creationDate?: number; + mode?: "single" | "multi"; + info?: { + name: string | { "utf-8": string }; + }; + verifiedLength?: number; + verifyIntegrityPending?: boolean; + }; +} diff --git a/packages/integrations/src/download-client/deluge/deluge-integration.ts b/packages/integrations/src/download-client/deluge/deluge-integration.ts index 80c04b180..a0011e5bb 100644 --- a/packages/integrations/src/download-client/deluge/deluge-integration.ts +++ b/packages/integrations/src/download-client/deluge/deluge-integration.ts @@ -32,7 +32,7 @@ export class DelugeIntegration extends DownloadClientIntegration { down: Math.floor(download_rate), up: Math.floor(upload_rate), }, - type, + types: [type], }; const items = torrents.map((torrent): DownloadClientItem => { const state = DelugeIntegration.getTorrentState(torrent.state); diff --git a/packages/integrations/src/download-client/nzbget/nzbget-integration.ts b/packages/integrations/src/download-client/nzbget/nzbget-integration.ts index f09135348..711f438d4 100644 --- a/packages/integrations/src/download-client/nzbget/nzbget-integration.ts +++ b/packages/integrations/src/download-client/nzbget/nzbget-integration.ts @@ -21,7 +21,7 @@ export class NzbGetIntegration extends DownloadClientIntegration { const status: DownloadClientStatus = { paused: nzbGetStatus.DownloadPaused, rates: { down: nzbGetStatus.DownloadRate }, - type, + types: [type], }; const items = queue .map((file): DownloadClientItem => { diff --git a/packages/integrations/src/download-client/qbittorrent/qbittorrent-integration.ts b/packages/integrations/src/download-client/qbittorrent/qbittorrent-integration.ts index e15acab5e..fb3234acb 100644 --- a/packages/integrations/src/download-client/qbittorrent/qbittorrent-integration.ts +++ b/packages/integrations/src/download-client/qbittorrent/qbittorrent-integration.ts @@ -24,7 +24,7 @@ export class QBitTorrentIntegration extends DownloadClientIntegration { ); const paused = torrents.find(({ state }) => QBitTorrentIntegration.getTorrentState(state) !== "paused") === undefined; - const status: DownloadClientStatus = { paused, rates, type }; + const status: DownloadClientStatus = { paused, rates, types: [type] }; const items = torrents.map((torrent): DownloadClientItem => { const state = QBitTorrentIntegration.getTorrentState(torrent.state); return { diff --git a/packages/integrations/src/download-client/sabnzbd/sabnzbd-integration.ts b/packages/integrations/src/download-client/sabnzbd/sabnzbd-integration.ts index 6da299198..19c84fce3 100644 --- a/packages/integrations/src/download-client/sabnzbd/sabnzbd-integration.ts +++ b/packages/integrations/src/download-client/sabnzbd/sabnzbd-integration.ts @@ -24,7 +24,7 @@ export class SabnzbdIntegration extends DownloadClientIntegration { const status: DownloadClientStatus = { paused: queue.paused, rates: { down: Math.floor(Number(queue.kbpersec) * 1024) }, //Actually rounded kiBps () - type, + types: [type], }; const items = queue.slots .map((slot): DownloadClientItem => { diff --git a/packages/integrations/src/download-client/transmission/transmission-integration.ts b/packages/integrations/src/download-client/transmission/transmission-integration.ts index eefc01cde..4750238ef 100644 --- a/packages/integrations/src/download-client/transmission/transmission-integration.ts +++ b/packages/integrations/src/download-client/transmission/transmission-integration.ts @@ -24,7 +24,7 @@ export class TransmissionIntegration extends DownloadClientIntegration { ); const paused = torrents.find(({ status }) => TransmissionIntegration.getTorrentState(status) !== "paused") === undefined; - const status: DownloadClientStatus = { paused, rates, type }; + const status: DownloadClientStatus = { paused, rates, types: [type] }; const items = torrents.map((torrent): DownloadClientItem => { const state = TransmissionIntegration.getTorrentState(torrent.status); return { diff --git a/packages/integrations/src/index.ts b/packages/integrations/src/index.ts index 23f24b712..d0999bee1 100644 --- a/packages/integrations/src/index.ts +++ b/packages/integrations/src/index.ts @@ -5,6 +5,7 @@ export { NzbGetIntegration } from "./download-client/nzbget/nzbget-integration"; export { QBitTorrentIntegration } from "./download-client/qbittorrent/qbittorrent-integration"; export { SabnzbdIntegration } from "./download-client/sabnzbd/sabnzbd-integration"; export { TransmissionIntegration } from "./download-client/transmission/transmission-integration"; +export { Aria2Integration } from "./download-client/aria2/aria2-integration"; export { HomeAssistantIntegration } from "./homeassistant/homeassistant-integration"; export { DownloadClientIntegration } from "./interfaces/downloads/download-client-integration"; export { JellyfinIntegration } from "./jellyfin/jellyfin-integration"; diff --git a/packages/integrations/src/interfaces/downloads/download-client-items.ts b/packages/integrations/src/interfaces/downloads/download-client-items.ts index 3d5195b4b..69ebfe88b 100644 --- a/packages/integrations/src/interfaces/downloads/download-client-items.ts +++ b/packages/integrations/src/interfaces/downloads/download-client-items.ts @@ -20,8 +20,8 @@ export const downloadClientItemSchema = z.object({ index: z.number(), /** Filename */ name: z.string(), - /** Torrent/Usenet identifier */ - type: z.enum(["torrent", "usenet"]), + /** Download Client identifier */ + type: z.enum(["torrent", "usenet", "miscellaneous"]), /** Item size in Bytes */ size: z.number(), /** Total uploaded in Bytes, only required for Torrent items */ diff --git a/packages/integrations/src/interfaces/downloads/download-client-status.ts b/packages/integrations/src/interfaces/downloads/download-client-status.ts index 37fb290b6..d866c93b1 100644 --- a/packages/integrations/src/interfaces/downloads/download-client-status.ts +++ b/packages/integrations/src/interfaces/downloads/download-client-status.ts @@ -8,7 +8,7 @@ export interface DownloadClientStatus { down: number; up?: number; }; - type: "usenet" | "torrent"; + types: ("usenet" | "torrent" | "miscellaneous")[]; } export interface ExtendedClientStatus { integration: Pick & { updatedAt: Date }; diff --git a/packages/integrations/test/aria2.spec.ts b/packages/integrations/test/aria2.spec.ts new file mode 100644 index 000000000..1cde98723 --- /dev/null +++ b/packages/integrations/test/aria2.spec.ts @@ -0,0 +1,153 @@ +import type { StartedTestContainer } from "testcontainers"; +import { GenericContainer, getContainerRuntimeClient, ImageName, Wait } from "testcontainers"; +import { beforeAll, describe, expect, test } from "vitest"; + +import { Aria2Integration } from "../src"; + +const API_KEY = "ARIA2_API_KEY"; +const IMAGE_NAME = "hurlenko/aria2-ariang:latest"; + +describe("Aria2 integration", () => { + beforeAll(async () => { + const containerRuntimeClient = await getContainerRuntimeClient(); + await containerRuntimeClient.image.pull(ImageName.fromString(IMAGE_NAME)); + }, 100_000); + + test("Test connection should work", async () => { + // Arrange + const startedContainer = await createAria2Container().start(); + const aria2Integration = createAria2Intergration(startedContainer, API_KEY); + + // Act + const actAsync = async () => await aria2Integration.testConnectionAsync(); + + // Assert + await expect(actAsync()).resolves.not.toThrow(); + + // Cleanup + await startedContainer.stop(); + }, 30_000); + + test("pauseQueueAsync should work", async () => { + // Arrange + const startedContainer = await createAria2Container().start(); + const aria2Integration = createAria2Intergration(startedContainer, API_KEY); + + // Acts + const actAsync = async () => await aria2Integration.pauseQueueAsync(); + const getAsync = async () => await aria2Integration.getClientJobsAndStatusAsync(); + + // Assert + await expect(actAsync()).resolves.not.toThrow(); + await expect(getAsync()).resolves.toMatchObject({ status: { paused: true } }); + + // Cleanup + await startedContainer.stop(); + }, 30_000); // Timeout of 30 seconds + + test("Items should be empty", async () => { + // Arrange + const startedContainer = await createAria2Container().start(); + const aria2Integration = createAria2Intergration(startedContainer, API_KEY); + + // Act + const getAsync = async () => await aria2Integration.getClientJobsAndStatusAsync(); + + // Assert + await expect(getAsync()).resolves.not.toThrow(); + await expect(getAsync()).resolves.toMatchObject({ + items: [], + }); + + // Cleanup + await startedContainer.stop(); + }, 30_000); // Timeout of 30 seconds + + test("1 Items should exist after adding one", async () => { + // Arrange + const startedContainer = await createAria2Container().start(); + const aria2Integration = createAria2Intergration(startedContainer, API_KEY); + await aria2AddItemAsync(startedContainer, API_KEY, aria2Integration); + + // Act + const getAsync = async () => await aria2Integration.getClientJobsAndStatusAsync(); + + // Assert + await expect(getAsync()).resolves.not.toThrow(); + expect((await getAsync()).items).toHaveLength(1); + + // Cleanup + await startedContainer.stop(); + }, 30_000); // Timeout of 30 seconds + + test("Delete item should result in empty items", async () => { + // Arrange + const startedContainer = await createAria2Container().start(); + const aria2Integration = createAria2Intergration(startedContainer, API_KEY); + const item = await aria2AddItemAsync(startedContainer, API_KEY, aria2Integration); + + // Act + const actAsync = async () => await aria2Integration.deleteItemAsync(item, true); + + // Assert + await expect(actAsync()).resolves.not.toThrow(); + // NzbGet is slow and we wait for a second before querying the items. Test was flaky without this. + await new Promise((resolve) => setTimeout(resolve, 1000)); + const result = await aria2Integration.getClientJobsAndStatusAsync(); + expect(result.items).toHaveLength(0); + + // Cleanup + await startedContainer.stop(); + }, 30_000); // Timeout of 30 seconds +}); + +const createAria2Container = () => { + return new GenericContainer(IMAGE_NAME) + .withExposedPorts(8080) + .withEnvironment({ + PUID: "1000", + PGID: "1000", + ARIA2RPCPORT: "443", + RPC_SECRET: API_KEY, + }) + .withWaitStrategy(Wait.forLogMessage("listening on TCP port")); +}; + +const createAria2Intergration = (container: StartedTestContainer, apikey: string) => { + return new Aria2Integration({ + id: "1", + decryptedSecrets: [ + { + kind: "apiKey", + value: apikey, + }, + ], + name: "Aria2", + url: `http://${container.getHost()}:${container.getMappedPort(8080)}`, + }); +}; + +const aria2AddItemAsync = async (container: StartedTestContainer, apiKey: string, integration: Aria2Integration) => { + await fetch(`http://${container.getHost()}:${container.getMappedPort(8080)}/jsonrpc`, { + method: "POST", + body: JSON.stringify({ + jsonrpc: "2.0", + id: btoa(["Homarr", Date.now().toString(), Math.random()].join(".")), // unique id per request + method: "aria2.addUri", + params: [`token:${apiKey}`, ["https://google.com"]], + }), + }); + + await delay(3000); + + const { + items: [item], + } = await integration.getClientJobsAndStatusAsync(); + + if (!item) { + throw new Error("No item found"); + } + + return item; +}; +const delay = (microseconds: number) => new Promise((resolve) => setTimeout(resolve, microseconds)); diff --git a/packages/log/package.json b/packages/log/package.json index 79cf2cac1..d2fdf69c6 100644 --- a/packages/log/package.json +++ b/packages/log/package.json @@ -24,7 +24,7 @@ "prettier": "@homarr/prettier-config", "dependencies": { "@homarr/env": "workspace:^0.1.0", - "ioredis": "5.6.0", + "ioredis": "5.6.1", "superjson": "2.2.2", "winston": "3.17.0", "zod": "^3.24.2" diff --git a/packages/modals-collection/package.json b/packages/modals-collection/package.json index 4aa4dd932..84d0b949f 100644 --- a/packages/modals-collection/package.json +++ b/packages/modals-collection/package.json @@ -36,7 +36,7 @@ "@mantine/core": "^7.17.4", "@tabler/icons-react": "^3.31.0", "dayjs": "^1.11.13", - "next": "15.2.5", + "next": "15.3.0", "react": "19.1.0", "react-dom": "19.1.0", "zod": "^3.24.2" diff --git a/packages/modals-collection/src/apps/app-select-modal.tsx b/packages/modals-collection/src/apps/app-select-modal.tsx new file mode 100644 index 000000000..f6d7f2f50 --- /dev/null +++ b/packages/modals-collection/src/apps/app-select-modal.tsx @@ -0,0 +1,121 @@ +import { useMemo, useState } from "react"; +import Image from "next/image"; +import { Button, Card, Center, Grid, Input, Stack, Text } from "@mantine/core"; +import { IconPlus, IconSearch } from "@tabler/icons-react"; + +import { clientApi } from "@homarr/api/client"; +import { createModal, useModalAction } from "@homarr/modals"; +import { useI18n } from "@homarr/translation/client"; + +import { QuickAddAppModal } from "./quick-add-app/quick-add-app-modal"; + +interface AppSelectModalProps { + onSelect?: (appId: string) => void; +} + +export const AppSelectModal = createModal(({ actions, innerProps }) => { + const [search, setSearch] = useState(""); + const t = useI18n(); + const { data: apps = [], isPending } = clientApi.app.selectable.useQuery(); + const { openModal: openQuickAddAppModal } = useModalAction(QuickAddAppModal); + + const filteredApps = useMemo( + () => + apps + .filter((app) => app.name.toLowerCase().includes(search.toLowerCase())) + .sort((a, b) => a.name.localeCompare(b.name)), + [apps, search], + ); + + const handleSelect = (appId: string) => { + if (innerProps.onSelect) { + innerProps.onSelect(appId); + } + actions.closeModal(); + }; + + const handleAddNewApp = () => { + openQuickAddAppModal({ + onClose(createdAppId) { + if (innerProps.onSelect) { + innerProps.onSelect(createdAppId); + } + actions.closeModal(); + }, + }); + }; + + return ( + + setSearch(event.currentTarget.value)} + leftSection={} + placeholder={`${t("app.action.select.search")}...`} + data-autofocus + onKeyDown={(event) => { + if (event.key === "Enter" && filteredApps.length === 1 && filteredApps[0]) { + handleSelect(filteredApps[0].id); + } + }} + /> + + + + + + +
+ +
+ + {t("app.action.create.title")} + + + {t("app.action.create.description")} + +
+ +
+
+
+ + {filteredApps.map((app) => ( + + + + +
+ {app.name} +
+ + {app.name} + + + {app.description ?? ""} + +
+ +
+
+
+ ))} + + {filteredApps.length === 0 && !isPending && ( + +
+ {t("app.action.select.noResults")} +
+
+ )} +
+
+ ); +}).withOptions({ + defaultTitle: (t) => t("app.action.select.title"), + size: "xl", +}); diff --git a/packages/modals-collection/src/apps/index.ts b/packages/modals-collection/src/apps/index.ts index abac24663..ec272e2d4 100644 --- a/packages/modals-collection/src/apps/index.ts +++ b/packages/modals-collection/src/apps/index.ts @@ -1 +1,2 @@ +export { AppSelectModal } from "./app-select-modal"; export { QuickAddAppModal } from "./quick-add-app/quick-add-app-modal"; diff --git a/packages/modals-collection/src/apps/quick-add-app/quick-add-app-modal.tsx b/packages/modals-collection/src/apps/quick-add-app/quick-add-app-modal.tsx index 9f2e5e290..547840ccd 100644 --- a/packages/modals-collection/src/apps/quick-add-app/quick-add-app-modal.tsx +++ b/packages/modals-collection/src/apps/quick-add-app/quick-add-app-modal.tsx @@ -1,6 +1,7 @@ import type { z } from "zod"; import { clientApi } from "@homarr/api/client"; +import type { MaybePromise } from "@homarr/common/types"; import { AppForm } from "@homarr/forms-collection"; import { createModal } from "@homarr/modals"; import { showErrorNotification, showSuccessNotification } from "@homarr/notifications"; @@ -8,7 +9,7 @@ import { useI18n, useScopedI18n } from "@homarr/translation/client"; import type { appManageSchema } from "@homarr/validation/app"; interface QuickAddAppModalProps { - onClose: (createdAppId: string) => Promise; + onClose: (createdAppId: string) => MaybePromise; } export const QuickAddAppModal = createModal(({ actions, innerProps }) => { diff --git a/packages/old-import/package.json b/packages/old-import/package.json index 1ebb11bac..2ac8ca7e1 100644 --- a/packages/old-import/package.json +++ b/packages/old-import/package.json @@ -40,7 +40,7 @@ "@mantine/core": "^7.17.4", "@mantine/hooks": "^7.17.4", "adm-zip": "0.5.16", - "next": "15.2.5", + "next": "15.3.0", "react": "19.1.0", "react-dom": "19.1.0", "superjson": "2.2.2", diff --git a/packages/old-import/src/widgets/options.ts b/packages/old-import/src/widgets/options.ts index 643ecb99d..f35306ad5 100644 --- a/packages/old-import/src/widgets/options.ts +++ b/packages/old-import/src/widgets/options.ts @@ -76,6 +76,7 @@ const optionMapping: OptionMapping = { defaultSort: () => "type", descendingDefaultSort: () => false, showCompletedUsenet: () => true, + showCompletedHttp: () => true, }, weather: { forecastDayCount: (oldOptions) => oldOptions.forecastDays, diff --git a/packages/redis/package.json b/packages/redis/package.json index 98e1f2eee..75becb2f0 100644 --- a/packages/redis/package.json +++ b/packages/redis/package.json @@ -26,7 +26,7 @@ "@homarr/db": "workspace:^", "@homarr/definitions": "workspace:^", "@homarr/log": "workspace:^", - "ioredis": "5.6.0", + "ioredis": "5.6.1", "superjson": "2.2.2" }, "devDependencies": { diff --git a/packages/request-handler/package.json b/packages/request-handler/package.json index 14c27dd9a..8767fadfc 100644 --- a/packages/request-handler/package.json +++ b/packages/request-handler/package.json @@ -30,7 +30,7 @@ "@homarr/log": "workspace:^0.1.0", "@homarr/redis": "workspace:^0.1.0", "dayjs": "^1.11.13", - "octokit": "^4.1.2", + "octokit": "^4.1.3", "pretty-print-error": "^1.1.2", "superjson": "2.2.2" }, diff --git a/packages/settings/package.json b/packages/settings/package.json index 812b230d7..619ed3626 100644 --- a/packages/settings/package.json +++ b/packages/settings/package.json @@ -26,7 +26,7 @@ "@homarr/db": "workspace:^0.1.0", "@homarr/server-settings": "workspace:^0.1.0", "@mantine/dates": "^7.17.4", - "next": "15.2.5", + "next": "15.3.0", "react": "19.1.0", "react-dom": "19.1.0" }, diff --git a/packages/spotlight/package.json b/packages/spotlight/package.json index e886f763d..3a089a3e4 100644 --- a/packages/spotlight/package.json +++ b/packages/spotlight/package.json @@ -38,7 +38,7 @@ "@mantine/spotlight": "^7.17.4", "@tabler/icons-react": "^3.31.0", "jotai": "^2.12.2", - "next": "15.2.5", + "next": "15.3.0", "react": "19.1.0", "react-dom": "19.1.0", "use-deep-compare-effect": "^1.8.1" diff --git a/packages/translation/package.json b/packages/translation/package.json index 0f19e1104..c7ee5820f 100644 --- a/packages/translation/package.json +++ b/packages/translation/package.json @@ -32,7 +32,7 @@ "dayjs": "^1.11.13", "deepmerge": "4.3.1", "mantine-react-table": "2.0.0-beta.9", - "next": "15.2.5", + "next": "15.3.0", "next-intl": "4.0.2", "react": "19.1.0", "react-dom": "19.1.0" diff --git a/packages/translation/src/lang/ca.json b/packages/translation/src/lang/ca.json index c61f6f889..325d19c6d 100644 --- a/packages/translation/src/lang/ca.json +++ b/packages/translation/src/lang/ca.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/cn.json b/packages/translation/src/lang/cn.json index aa6da7f9e..a4e81e50a 100644 --- a/packages/translation/src/lang/cn.json +++ b/packages/translation/src/lang/cn.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "显示标记为已完成的 Torrent 条目" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "隐藏在此阈值下已完成的 Torrent (kiB/s)" }, diff --git a/packages/translation/src/lang/cs.json b/packages/translation/src/lang/cs.json index d801402de..47aefb169 100644 --- a/packages/translation/src/lang/cs.json +++ b/packages/translation/src/lang/cs.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/da.json b/packages/translation/src/lang/da.json index b914f530b..bf5d99a33 100644 --- a/packages/translation/src/lang/da.json +++ b/packages/translation/src/lang/da.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "Vis torrent poster markeret som fuldførte" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "Skjul afsluttet torrent under denne tærskel (i kiB/s)" }, diff --git a/packages/translation/src/lang/de-CH.json b/packages/translation/src/lang/de-CH.json index 3b39d670b..2a461a016 100644 --- a/packages/translation/src/lang/de-CH.json +++ b/packages/translation/src/lang/de-CH.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "Torrent Einträge anzeigen die abgeschlossen wurden" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "Abgeschlossene Torrents unter diesem Schwellenwert ausblenden (in kiB/s)" }, diff --git a/packages/translation/src/lang/de.json b/packages/translation/src/lang/de.json index 54434ff66..6506fd9ee 100644 --- a/packages/translation/src/lang/de.json +++ b/packages/translation/src/lang/de.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "Torrent Einträge anzeigen die abgeschlossen wurden" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "Abgeschlossene Torrents unter diesem Schwellenwert ausblenden (in kiB/s)" }, diff --git a/packages/translation/src/lang/el.json b/packages/translation/src/lang/el.json index 4f33f6133..111e561f5 100644 --- a/packages/translation/src/lang/el.json +++ b/packages/translation/src/lang/el.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/en-gb.json b/packages/translation/src/lang/en-gb.json index 1cc1eb3d7..781539034 100644 --- a/packages/translation/src/lang/en-gb.json +++ b/packages/translation/src/lang/en-gb.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/en.json b/packages/translation/src/lang/en.json index 5ea1ce039..8f34e8b7c 100644 --- a/packages/translation/src/lang/en.json +++ b/packages/translation/src/lang/en.json @@ -611,8 +611,18 @@ "action": { "select": { "label": "Select app", - "notFound": "No app found" - } + "notFound": "No app found", + "search": "Search for an app", + "noResults": "No results", + "action": "Select {app}", + "title": "Select an app to add to this board" + }, + "create": { + "title": "Create new app", + "description": "Create a new app ", + "action": "Open app creation" + }, + "add": "Add an app" } }, "integration": { @@ -1786,6 +1796,9 @@ "showCompletedTorrent": { "label": "Show torrent entries marked as completed" }, + "showCompletedHttp": { + "label": "Show Miscellaneous entries marked as completed" + }, "activeTorrentThreshold": { "label": "Hide completed torrent under this threshold (in kiB/s)" }, diff --git a/packages/translation/src/lang/es.json b/packages/translation/src/lang/es.json index c5ac9b185..07d9da2ba 100644 --- a/packages/translation/src/lang/es.json +++ b/packages/translation/src/lang/es.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/et.json b/packages/translation/src/lang/et.json index 459d55f84..e75ae043d 100644 --- a/packages/translation/src/lang/et.json +++ b/packages/translation/src/lang/et.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/fr.json b/packages/translation/src/lang/fr.json index 460e9d551..e44d357b5 100644 --- a/packages/translation/src/lang/fr.json +++ b/packages/translation/src/lang/fr.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "Afficher les entrées Torrent marquées comme terminées" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "Masquer les Torrents terminés sous ce seuil (en kiB/s)" }, diff --git a/packages/translation/src/lang/he.json b/packages/translation/src/lang/he.json index ea1aef292..f939087c2 100644 --- a/packages/translation/src/lang/he.json +++ b/packages/translation/src/lang/he.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "הצג ערכי טורנט שסומנו כהשלמה" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "הסתר טורנט שהושלם מתחת לסף הזה (בקיB/s)" }, diff --git a/packages/translation/src/lang/hr.json b/packages/translation/src/lang/hr.json index 0415ab265..ed0e52282 100644 --- a/packages/translation/src/lang/hr.json +++ b/packages/translation/src/lang/hr.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/hu.json b/packages/translation/src/lang/hu.json index d543356f8..000b3bbdb 100644 --- a/packages/translation/src/lang/hu.json +++ b/packages/translation/src/lang/hu.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/it.json b/packages/translation/src/lang/it.json index 533785557..9261c1cf7 100644 --- a/packages/translation/src/lang/it.json +++ b/packages/translation/src/lang/it.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/ja.json b/packages/translation/src/lang/ja.json index 123cebe3c..80fc9ee4c 100644 --- a/packages/translation/src/lang/ja.json +++ b/packages/translation/src/lang/ja.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/ko.json b/packages/translation/src/lang/ko.json index 39c584361..007564f6d 100644 --- a/packages/translation/src/lang/ko.json +++ b/packages/translation/src/lang/ko.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/lt.json b/packages/translation/src/lang/lt.json index 6b54052da..05d88d98b 100644 --- a/packages/translation/src/lang/lt.json +++ b/packages/translation/src/lang/lt.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/lv.json b/packages/translation/src/lang/lv.json index ff03fc44a..65c4bae0c 100644 --- a/packages/translation/src/lang/lv.json +++ b/packages/translation/src/lang/lv.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/nl.json b/packages/translation/src/lang/nl.json index 41aabdfbe..c33803d54 100644 --- a/packages/translation/src/lang/nl.json +++ b/packages/translation/src/lang/nl.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "Torrentvermeldingen weergeven die zijn gemarkeerd als voltooid" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "Voltooide torrent verbergen onder deze drempel (in kiB/s)" }, diff --git a/packages/translation/src/lang/no.json b/packages/translation/src/lang/no.json index b6649f358..da86c9bb4 100644 --- a/packages/translation/src/lang/no.json +++ b/packages/translation/src/lang/no.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "Vis torrentoppføringer markert som fullført" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "Skjul fullført torrent under denne terskelen (i kiB/s)" }, diff --git a/packages/translation/src/lang/pl.json b/packages/translation/src/lang/pl.json index e938b9123..0a533b382 100644 --- a/packages/translation/src/lang/pl.json +++ b/packages/translation/src/lang/pl.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "Pokaż wpisy torrent oznaczone jako ukończone" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "Ukryj ukończony torrent poniżej tego progu (w kiB/s)" }, diff --git a/packages/translation/src/lang/pt.json b/packages/translation/src/lang/pt.json index e6c68fe84..f15162d63 100644 --- a/packages/translation/src/lang/pt.json +++ b/packages/translation/src/lang/pt.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/ro.json b/packages/translation/src/lang/ro.json index bb157449c..8edd620bf 100644 --- a/packages/translation/src/lang/ro.json +++ b/packages/translation/src/lang/ro.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/ru.json b/packages/translation/src/lang/ru.json index 045a64e01..b3c839bad 100644 --- a/packages/translation/src/lang/ru.json +++ b/packages/translation/src/lang/ru.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "Показывать завершённые торренты" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "Скрывать завершённые торренты ниже этого порога (в КиБ/с)" }, diff --git a/packages/translation/src/lang/sk.json b/packages/translation/src/lang/sk.json index 54ee5478a..48645f835 100644 --- a/packages/translation/src/lang/sk.json +++ b/packages/translation/src/lang/sk.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "Zobraziť položky torrentu označené ako dokončené" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "Skryť dokončený torrent pod touto hranicou (v kiB/s)" }, diff --git a/packages/translation/src/lang/sl.json b/packages/translation/src/lang/sl.json index 393a253c1..faacbcbfd 100644 --- a/packages/translation/src/lang/sl.json +++ b/packages/translation/src/lang/sl.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/sv.json b/packages/translation/src/lang/sv.json index 7edf9a9c5..e012cd7e7 100644 --- a/packages/translation/src/lang/sv.json +++ b/packages/translation/src/lang/sv.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/tr.json b/packages/translation/src/lang/tr.json index 2a7a84512..fdcf0473f 100644 --- a/packages/translation/src/lang/tr.json +++ b/packages/translation/src/lang/tr.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "Tamamlanmış olarak işaretlenen torrent girdilerini göster" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "Tamamlanan torrent'i bu eşik değerinin altına gizle (kiB/s cinsinden)" }, diff --git a/packages/translation/src/lang/uk.json b/packages/translation/src/lang/uk.json index 4ef16a9c2..1ae13b715 100644 --- a/packages/translation/src/lang/uk.json +++ b/packages/translation/src/lang/uk.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "Приховувати завершені торенти нижче за цей поріг (у КіБ/с)" }, diff --git a/packages/translation/src/lang/vi.json b/packages/translation/src/lang/vi.json index 0824d14d7..e47c118e0 100644 --- a/packages/translation/src/lang/vi.json +++ b/packages/translation/src/lang/vi.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "" }, diff --git a/packages/translation/src/lang/zh.json b/packages/translation/src/lang/zh.json index 120e9d68d..798d4afbf 100644 --- a/packages/translation/src/lang/zh.json +++ b/packages/translation/src/lang/zh.json @@ -1786,6 +1786,9 @@ "showCompletedTorrent": { "label": "顯示標記為已完成的 Torrent 項目" }, + "showCompletedHttp": { + "label": "" + }, "activeTorrentThreshold": { "label": "隱藏在此閥值下完成的 Torrent (kiB/s)" }, diff --git a/packages/ui/package.json b/packages/ui/package.json index 8b0ce7d84..5ab982fe3 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -34,7 +34,7 @@ "@mantine/hooks": "^7.17.4", "@tabler/icons-react": "^3.31.0", "mantine-react-table": "2.0.0-beta.9", - "next": "15.2.5", + "next": "15.3.0", "react": "19.1.0", "react-dom": "19.1.0" }, diff --git a/packages/widgets/package.json b/packages/widgets/package.json index 6e1be6c8b..5518b17db 100644 --- a/packages/widgets/package.json +++ b/packages/widgets/package.json @@ -66,7 +66,7 @@ "clsx": "^2.1.1", "dayjs": "^1.11.13", "mantine-react-table": "2.0.0-beta.9", - "next": "15.2.5", + "next": "15.3.0", "react": "19.1.0", "react-dom": "19.1.0", "recharts": "^2.15.2", diff --git a/packages/widgets/src/downloads/component.tsx b/packages/widgets/src/downloads/component.tsx index 588cdf608..d8139641e 100644 --- a/packages/widgets/src/downloads/component.tsx +++ b/packages/widgets/src/downloads/component.tsx @@ -171,7 +171,8 @@ export default function DownloadClientsWidget({ options.showCompletedTorrent && (upSpeed ?? 0) >= Number(options.activeTorrentThreshold) * 1024) || progress !== 1)) || - (type === "usenet" && ((progress === 1 && options.showCompletedUsenet) || progress !== 1)), + (type === "usenet" && ((progress === 1 && options.showCompletedUsenet) || progress !== 1)) || + (type === "miscellaneous" && ((progress === 1 && options.showCompletedHttp) || progress !== 1)), ) //Filter following user quick setting .filter( @@ -189,7 +190,7 @@ export default function DownloadClientsWidget({ ...item, category: item.category !== undefined && item.category.length > 0 ? item.category : undefined, received, - ratio: item.sent !== undefined ? item.sent / received : undefined, + ratio: item.sent !== undefined ? item.sent / (received || 1) : undefined, //Only add if permission to use mutations actions: integrationsWithInteractions.includes(pair.integration.id) ? { @@ -215,6 +216,7 @@ export default function DownloadClientsWidget({ options.filterIsWhitelist, options.showCompletedTorrent, options.showCompletedUsenet, + options.showCompletedHttp, quickFilters, ], ); @@ -232,7 +234,7 @@ export default function DownloadClientsWidget({ .filter( ({ category }) => !options.applyFilterToRatio || - data.status.type !== "torrent" || + !data.status.types.includes("torrent") || options.filterIsWhitelist === options.categoryFilter.some((filter) => (Array.isArray(category) ? category : [category]).includes(filter), @@ -258,7 +260,7 @@ export default function DownloadClientsWidget({ }) .sort( ({ status: statusA }, { status: statusB }) => - (statusA?.type.length ?? Infinity) - (statusB?.type.length ?? Infinity), + (statusA?.types.length ?? Infinity) - (statusB?.types.length ?? Infinity), ), [ currentItems, @@ -272,8 +274,10 @@ export default function DownloadClientsWidget({ //Check existing types between torrents and usenet const integrationTypes: ExtendedDownloadClientItem["type"][] = []; + if (data.some(({ type }) => type === "torrent")) integrationTypes.push("torrent"); if (data.some(({ type }) => type === "usenet")) integrationTypes.push("usenet"); + if (data.some(({ type }) => type === "miscellaneous")) integrationTypes.push("miscellaneous"); //Set the visibility of columns depending on widget settings and available data/integrations. const columnVisibility: MRT_VisibilityState = { @@ -677,15 +681,22 @@ const ItemInfoModal = ({ items, currentIndex, opened, onClose }: ItemInfoModalPr - + {item.type !== "miscellaneous" && ( + + )} + - + + {item.type !== "miscellaneous" && ( + + )} + - + {item.type !== "miscellaneous" && } diff --git a/packages/widgets/src/downloads/index.ts b/packages/widgets/src/downloads/index.ts index e4b8831b6..5323c20df 100644 --- a/packages/widgets/src/downloads/index.ts +++ b/packages/widgets/src/downloads/index.ts @@ -63,6 +63,9 @@ export const { definition, componentLoader } = createWidgetDefinition("downloads showCompletedTorrent: factory.switch({ defaultValue: true, }), + showCompletedHttp: factory.switch({ + defaultValue: true, + }), activeTorrentThreshold: factory.number({ //in KiB/s validate: z.number().min(0), @@ -95,6 +98,10 @@ export const { definition, componentLoader } = createWidgetDefinition("downloads shouldHide: (_, integrationKinds) => !getIntegrationKindsByCategory("torrent").some((kinds) => integrationKinds.includes(kinds)), }, + showCompletedHttp: { + shouldHide: (_, integrationKinds) => + !getIntegrationKindsByCategory("miscellaneous").some((kinds) => integrationKinds.includes(kinds)), + }, activeTorrentThreshold: { shouldHide: (_, integrationKinds) => !getIntegrationKindsByCategory("torrent").some((kinds) => integrationKinds.includes(kinds)), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a4b9e4543..94354fb92 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: - proxmox-api>undici: 7.7.0 + proxmox-api>undici: 7.8.0 patchedDependencies: pretty-print-error: @@ -65,8 +65,8 @@ importers: specifier: ^24.2.3 version: 24.2.3(typescript@5.8.3) testcontainers: - specifier: ^10.24.1 - version: 10.24.1 + specifier: ^10.24.2 + version: 10.24.2 turbo: specifier: ^2.5.0 version: 2.5.0 @@ -186,19 +186,19 @@ importers: version: 7.17.4(chroma-js@3.1.2) '@mantine/core': specifier: ^7.17.4 - version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/dropzone': specifier: ^7.17.4 - version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': specifier: ^7.17.4 version: 7.17.4(react@19.1.0) '@mantine/modals': specifier: ^7.17.4 - version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/tiptap': specifier: ^7.17.4 - version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tiptap/extension-link@2.11.7(@tiptap/core@2.11.7(@tiptap/pm@2.11.7))(@tiptap/pm@2.11.7))(@tiptap/react@2.11.7(@tiptap/core@2.11.7(@tiptap/pm@2.11.7))(@tiptap/pm@2.11.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tiptap/extension-link@2.11.7(@tiptap/core@2.11.7(@tiptap/pm@2.11.7))(@tiptap/pm@2.11.7))(@tiptap/react@2.11.7(@tiptap/core@2.11.7(@tiptap/pm@2.11.7))(@tiptap/pm@2.11.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@million/lint': specifier: 1.0.14 version: 1.0.14(rollup@4.21.3)(webpack-sources@3.2.3) @@ -206,26 +206,26 @@ importers: specifier: ^3.31.0 version: 3.31.0(react@19.1.0) '@tanstack/react-query': - specifier: ^5.72.1 - version: 5.72.1(react@19.1.0) + specifier: ^5.72.2 + version: 5.72.2(react@19.1.0) '@tanstack/react-query-devtools': - specifier: ^5.72.1 - version: 5.72.1(@tanstack/react-query@5.72.1(react@19.1.0))(react@19.1.0) + specifier: ^5.72.2 + version: 5.72.2(@tanstack/react-query@5.72.2(react@19.1.0))(react@19.1.0) '@tanstack/react-query-next-experimental': - specifier: ^5.72.1 - version: 5.72.1(@tanstack/react-query@5.72.1(react@19.1.0))(next@15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react@19.1.0) + specifier: ^5.72.2 + version: 5.72.2(@tanstack/react-query@5.72.2(react@19.1.0))(next@15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react@19.1.0) '@trpc/client': - specifier: ^11.0.4 - version: 11.0.4(@trpc/server@11.0.4(typescript@5.8.3))(typescript@5.8.3) + specifier: ^11.1.0 + version: 11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3) '@trpc/next': - specifier: ^11.0.4 - version: 11.0.4(@tanstack/react-query@5.72.1(react@19.1.0))(@trpc/client@11.0.4(@trpc/server@11.0.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/react-query@11.0.4(@tanstack/react-query@5.72.1(react@19.1.0))(@trpc/client@11.0.4(@trpc/server@11.0.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.0.4(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3))(@trpc/server@11.0.4(typescript@5.8.3))(next@15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + specifier: ^11.1.0 + version: 11.1.0(@tanstack/react-query@5.72.2(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/react-query@11.1.0(@tanstack/react-query@5.72.2(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(next@15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) '@trpc/react-query': - specifier: ^11.0.4 - version: 11.0.4(@tanstack/react-query@5.72.1(react@19.1.0))(@trpc/client@11.0.4(@trpc/server@11.0.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.0.4(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + specifier: ^11.1.0 + version: 11.1.0(@tanstack/react-query@5.72.2(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) '@trpc/server': - specifier: ^11.0.4 - version: 11.0.4(typescript@5.8.3) + specifier: ^11.1.0 + version: 11.1.0(typescript@5.8.3) '@xterm/addon-canvas': specifier: ^0.7.0 version: 0.7.0(@xterm/xterm@5.5.0) @@ -245,8 +245,8 @@ importers: specifier: ^1.11.13 version: 1.11.13 dotenv: - specifier: ^16.4.7 - version: 16.4.7 + specifier: ^16.5.0 + version: 16.5.0 flag-icons: specifier: ^7.3.2 version: 7.3.2 @@ -255,13 +255,13 @@ importers: version: 11.0.1 jotai: specifier: ^2.12.2 - version: 2.12.2(@types/react@19.1.0)(react@19.1.0) + version: 2.12.2(@types/react@19.1.1)(react@19.1.0) mantine-react-table: specifier: 2.0.0-beta.9 - version: 2.0.0-beta.9(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tabler/icons-react@3.31.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.0.0-beta.9(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tabler/icons-react@3.31.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next: - specifier: 15.2.5 - version: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + specifier: 15.3.0 + version: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) postcss-preset-mantine: specifier: ^1.17.0 version: 1.17.0(postcss@8.4.47) @@ -287,8 +287,8 @@ importers: specifier: 2.2.2 version: 2.2.2 swagger-ui-react: - specifier: ^5.20.7 - version: 5.20.7(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + specifier: ^5.20.8 + version: 5.20.8(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) use-deep-compare-effect: specifier: ^1.8.1 version: 1.8.1(react@19.1.0) @@ -315,11 +315,11 @@ importers: specifier: ^1.26.5 version: 1.26.5 '@types/react': - specifier: 19.1.0 - version: 19.1.0 + specifier: 19.1.1 + version: 19.1.1 '@types/react-dom': specifier: 19.1.2 - version: 19.1.2(@types/react@19.1.0) + version: 19.1.2(@types/react@19.1.1) '@types/swagger-ui-react': specifier: ^5.18.0 version: 5.18.0 @@ -390,14 +390,14 @@ importers: specifier: ^1.11.13 version: 1.11.13 dotenv: - specifier: ^16.4.7 - version: 16.4.7 + specifier: ^16.5.0 + version: 16.5.0 superjson: specifier: 2.2.2 version: 2.2.2 undici: - specifier: 7.7.0 - version: 7.7.0 + specifier: 7.8.0 + version: 7.8.0 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -454,8 +454,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../packages/validation dotenv: - specifier: ^16.4.7 - version: 16.4.7 + specifier: ^16.5.0 + version: 16.5.0 tsx: specifier: 4.19.3 version: 4.19.3 @@ -582,20 +582,20 @@ importers: specifier: ^1.1.2 version: 1.1.2 '@trpc/client': - specifier: ^11.0.4 - version: 11.0.4(@trpc/server@11.0.4(typescript@5.8.3))(typescript@5.8.3) + specifier: ^11.1.0 + version: 11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3) '@trpc/react-query': - specifier: ^11.0.4 - version: 11.0.4(@tanstack/react-query@5.72.1(react@19.1.0))(@trpc/client@11.0.4(@trpc/server@11.0.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.0.4(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + specifier: ^11.1.0 + version: 11.1.0(@tanstack/react-query@5.72.2(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) '@trpc/server': - specifier: ^11.0.4 - version: 11.0.4(typescript@5.8.3) + specifier: ^11.1.0 + version: 11.1.0(typescript@5.8.3) lodash.clonedeep: specifier: ^4.5.0 version: 4.5.0 next: - specifier: 15.2.5 - version: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + specifier: 15.3.0 + version: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) pretty-print-error: specifier: ^1.1.2 version: 1.1.2(patch_hash=d1432e02330bdaf8359eb0e54528a74ed6b7e5cce6bb65c13310c82e34fd1e4d) @@ -610,7 +610,7 @@ importers: version: 2.2.2 trpc-to-openapi: specifier: ^2.1.5 - version: 2.1.5(@trpc/server@11.0.4(typescript@5.8.3))(zod-openapi@2.19.0(zod@3.24.2))(zod@3.24.2) + version: 2.1.5(@trpc/server@11.1.0(typescript@5.8.3))(zod-openapi@2.19.0(zod@3.24.2))(zod@3.24.2) zod: specifier: ^3.24.2 version: 3.24.2 @@ -673,11 +673,11 @@ importers: specifier: 7.4.0 version: 7.4.0 next: - specifier: 15.2.5 - version: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + specifier: 15.3.0 + version: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) next-auth: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react@19.1.0) + version: 5.0.0-beta.25(next@15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react@19.1.0) pretty-print-error: specifier: ^1.1.2 version: 1.1.2(patch_hash=d1432e02330bdaf8359eb0e54528a74ed6b7e5cce6bb65c13310c82e34fd1e4d) @@ -750,8 +750,8 @@ importers: specifier: workspace:^0.1.0 version: link:../common undici: - specifier: 7.7.0 - version: 7.7.0 + specifier: 7.8.0 + version: 7.8.0 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -787,8 +787,8 @@ importers: specifier: workspace:^0.1.0 version: link:../validation dotenv: - specifier: ^16.4.7 - version: 16.4.7 + specifier: ^16.5.0 + version: 16.5.0 devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -818,8 +818,8 @@ importers: specifier: ^1.11.13 version: 1.11.13 next: - specifier: 15.2.5 - version: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + specifier: 15.3.0 + version: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) react: specifier: 19.1.0 version: 19.1.0 @@ -827,8 +827,8 @@ importers: specifier: 19.1.0 version: 19.1.0(react@19.1.0) undici: - specifier: 7.7.0 - version: 7.7.0 + specifier: 7.8.0 + version: 7.8.0 zod: specifier: ^3.24.2 version: 3.24.2 @@ -1025,19 +1025,19 @@ importers: version: link:../server-settings '@mantine/core': specifier: ^7.17.4 - version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@paralleldrive/cuid2': specifier: ^2.2.2 version: 2.2.2 '@testcontainers/mysql': - specifier: ^10.24.1 - version: 10.24.1 + specifier: ^10.24.2 + version: 10.24.2 better-sqlite3: specifier: ^11.9.1 version: 11.9.1 dotenv: - specifier: ^16.4.7 - version: 16.4.7 + specifier: ^16.5.0 + version: 16.5.0 drizzle-kit: specifier: ^0.30.6 version: 0.30.6 @@ -1216,7 +1216,7 @@ importers: version: link:../validation '@mantine/core': specifier: ^7.17.4 - version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react: specifier: 19.1.0 version: 19.1.0 @@ -1306,6 +1306,9 @@ importers: '@jellyfin/sdk': specifier: ^0.11.0 version: 0.11.0(axios@1.8.4) + maria2: + specifier: ^0.4.0 + version: 0.4.0 node-ical: specifier: ^0.20.1 version: 0.20.1 @@ -1316,8 +1319,8 @@ importers: specifier: ^2.1.3 version: 2.1.3 undici: - specifier: 7.7.0 - version: 7.7.0 + specifier: 7.8.0 + version: 7.8.0 xml2js: specifier: ^0.6.2 version: 0.6.2 @@ -1350,8 +1353,8 @@ importers: specifier: workspace:^0.1.0 version: link:../env ioredis: - specifier: 5.6.0 - version: 5.6.0 + specifier: 5.6.1 + version: 5.6.1 superjson: specifier: 2.2.2 version: 2.2.2 @@ -1388,7 +1391,7 @@ importers: version: link:../ui '@mantine/core': specifier: ^7.17.4 - version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': specifier: ^7.17.4 version: 7.17.4(react@19.1.0) @@ -1449,7 +1452,7 @@ importers: version: link:../validation '@mantine/core': specifier: ^7.17.4 - version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tabler/icons-react': specifier: ^3.31.0 version: 3.31.0(react@19.1.0) @@ -1457,8 +1460,8 @@ importers: specifier: ^1.11.13 version: 1.11.13 next: - specifier: 15.2.5 - version: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + specifier: 15.3.0 + version: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) react: specifier: 19.1.0 version: 19.1.0 @@ -1492,7 +1495,7 @@ importers: version: link:../ui '@mantine/notifications': specifier: ^7.17.4 - version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tabler/icons-react': specifier: ^3.31.0 version: 3.31.0(react@19.1.0) @@ -1550,7 +1553,7 @@ importers: version: link:../validation '@mantine/core': specifier: ^7.17.4 - version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': specifier: ^7.17.4 version: 7.17.4(react@19.1.0) @@ -1558,8 +1561,8 @@ importers: specifier: 0.5.16 version: 0.5.16 next: - specifier: 15.2.5 - version: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + specifier: 15.3.0 + version: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) react: specifier: 19.1.0 version: 19.1.0 @@ -1666,8 +1669,8 @@ importers: specifier: workspace:^ version: link:../log ioredis: - specifier: 5.6.0 - version: 5.6.0 + specifier: 5.6.1 + version: 5.6.1 superjson: specifier: 2.2.2 version: 2.2.2 @@ -1715,8 +1718,8 @@ importers: specifier: ^1.11.13 version: 1.11.13 octokit: - specifier: ^4.1.2 - version: 4.1.2 + specifier: ^4.1.3 + version: 4.1.3 pretty-print-error: specifier: ^1.1.2 version: 1.1.2(patch_hash=d1432e02330bdaf8359eb0e54528a74ed6b7e5cce6bb65c13310c82e34fd1e4d) @@ -1778,10 +1781,10 @@ importers: version: link:../server-settings '@mantine/dates': specifier: ^7.17.4 - version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next: - specifier: 15.2.5 - version: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + specifier: 15.3.0 + version: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) react: specifier: 19.1.0 version: 19.1.0 @@ -1839,22 +1842,22 @@ importers: version: link:../ui '@mantine/core': specifier: ^7.17.4 - version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': specifier: ^7.17.4 version: 7.17.4(react@19.1.0) '@mantine/spotlight': specifier: ^7.17.4 - version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tabler/icons-react': specifier: ^3.31.0 version: 3.31.0(react@19.1.0) jotai: specifier: ^2.12.2 - version: 2.12.2(@types/react@19.1.0)(react@19.1.0) + version: 2.12.2(@types/react@19.1.1)(react@19.1.0) next: - specifier: 15.2.5 - version: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + specifier: 15.3.0 + version: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) react: specifier: 19.1.0 version: 19.1.0 @@ -1897,13 +1900,13 @@ importers: version: 4.3.1 mantine-react-table: specifier: 2.0.0-beta.9 - version: 2.0.0-beta.9(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tabler/icons-react@3.31.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.0.0-beta.9(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tabler/icons-react@3.31.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next: - specifier: 15.2.5 - version: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + specifier: 15.3.0 + version: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) next-intl: specifier: 4.0.2 - version: 4.0.2(next@15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react@19.1.0)(typescript@5.8.3) + version: 4.0.2(next@15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react@19.1.0)(typescript@5.8.3) react: specifier: 19.1.0 version: 19.1.0 @@ -1946,10 +1949,10 @@ importers: version: link:../validation '@mantine/core': specifier: ^7.17.4 - version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/dates': specifier: ^7.17.4 - version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': specifier: ^7.17.4 version: 7.17.4(react@19.1.0) @@ -1958,10 +1961,10 @@ importers: version: 3.31.0(react@19.1.0) mantine-react-table: specifier: 2.0.0-beta.9 - version: 2.0.0-beta.9(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tabler/icons-react@3.31.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.0.0-beta.9(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tabler/icons-react@3.31.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next: - specifier: 15.2.5 - version: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + specifier: 15.3.0 + version: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) react: specifier: 19.1.0 version: 19.1.0 @@ -2083,10 +2086,10 @@ importers: version: link:../validation '@mantine/charts': specifier: ^7.17.4 - version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(recharts@2.15.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) + version: 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(recharts@2.15.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)) '@mantine/core': specifier: ^7.17.4 - version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': specifier: ^7.17.4 version: 7.17.4(react@19.1.0) @@ -2146,10 +2149,10 @@ importers: version: 1.11.13 mantine-react-table: specifier: 2.0.0-beta.9 - version: 2.0.0-beta.9(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tabler/icons-react@3.31.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 2.0.0-beta.9(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tabler/icons-react@3.31.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) next: - specifier: 15.2.5 - version: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + specifier: 15.3.0 + version: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) react: specifier: 19.1.0 version: 19.1.0 @@ -2188,11 +2191,11 @@ importers: tooling/eslint: dependencies: '@next/eslint-plugin-next': - specifier: 15.2.5 - version: 15.2.5 + specifier: 15.3.0 + version: 15.3.0 eslint-config-prettier: - specifier: ^10.1.1 - version: 10.1.1(eslint@9.24.0) + specifier: ^10.1.2 + version: 10.1.2(eslint@9.24.0) eslint-config-turbo: specifier: ^2.5.0 version: 2.5.0(eslint@9.24.0)(turbo@2.5.0) @@ -2511,8 +2514,8 @@ packages: '@drizzle-team/brocli@0.11.0': resolution: {integrity: sha512-hD3pekGiPg0WPCCGAZmusBBJsDqGUR66Y452YgQsZOnkdQ7ViEPKuyP4huUGEZQefp8g34RRodXYmJ2TbCH+tg==} - '@emnapi/runtime@1.3.1': - resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@emnapi/runtime@1.4.0': + resolution: {integrity: sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==} '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} @@ -3350,107 +3353,112 @@ packages: '@vue/compiler-sfc': optional: true - '@img/sharp-darwin-arm64@0.33.5': - resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + '@img/sharp-darwin-arm64@0.34.1': + resolution: {integrity: sha512-pn44xgBtgpEbZsu+lWf2KNb6OAf70X68k+yk69Ic2Xz11zHR/w24/U49XT7AeRwJ0Px+mhALhU5LPci1Aymk7A==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.33.5': - resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + '@img/sharp-darwin-x64@0.34.1': + resolution: {integrity: sha512-VfuYgG2r8BpYiOUN+BfYeFo69nP/MIwAtSJ7/Zpxc5QF3KS22z8Pvg3FkrSFJBPNQ7mmcUcYQFBmEQp7eu1F8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.0.4': - resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + '@img/sharp-libvips-darwin-arm64@1.1.0': + resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.0.4': - resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + '@img/sharp-libvips-darwin-x64@1.1.0': + resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.0.4': - resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + '@img/sharp-libvips-linux-arm64@1.1.0': + resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.0.5': - resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + '@img/sharp-libvips-linux-arm@1.1.0': + resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-s390x@1.0.4': - resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + '@img/sharp-libvips-linux-ppc64@1.1.0': + resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} + cpu: [ppc64] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.1.0': + resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.0.4': - resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + '@img/sharp-libvips-linux-x64@1.1.0': + resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': - resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.0.4': - resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.33.5': - resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + '@img/sharp-linux-arm64@0.34.1': + resolution: {integrity: sha512-kX2c+vbvaXC6vly1RDf/IWNXxrlxLNpBVWkdpRq5Ka7OOKj6nr66etKy2IENf6FtOgklkg9ZdGpEu9kwdlcwOQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.33.5': - resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + '@img/sharp-linux-arm@0.34.1': + resolution: {integrity: sha512-anKiszvACti2sGy9CirTlNyk7BjjZPiML1jt2ZkTdcvpLU1YH6CXwRAZCA2UmRXnhiIftXQ7+Oh62Ji25W72jA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.33.5': - resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + '@img/sharp-linux-s390x@0.34.1': + resolution: {integrity: sha512-7s0KX2tI9mZI2buRipKIw2X1ufdTeaRgwmRabt5bi9chYfhur+/C1OXg3TKg/eag1W+6CCWLVmSauV1owmRPxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.33.5': - resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + '@img/sharp-linux-x64@0.34.1': + resolution: {integrity: sha512-wExv7SH9nmoBW3Wr2gvQopX1k8q2g5V5Iag8Zk6AVENsjwd+3adjwxtp3Dcu2QhOXr8W9NusBU6XcQUohBZ5MA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.33.5': - resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + '@img/sharp-linuxmusl-arm64@0.34.1': + resolution: {integrity: sha512-DfvyxzHxw4WGdPiTF0SOHnm11Xv4aQexvqhRDAoD00MzHekAj9a/jADXeXYCDFH/DzYruwHbXU7uz+H+nWmSOQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.33.5': - resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + '@img/sharp-linuxmusl-x64@0.34.1': + resolution: {integrity: sha512-pax/kTR407vNb9qaSIiWVnQplPcGU8LRIJpDT5o8PdAx5aAA7AS3X9PS8Isw1/WfqgQorPotjrZL3Pqh6C5EBg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.33.5': - resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + '@img/sharp-wasm32@0.34.1': + resolution: {integrity: sha512-YDybQnYrLQfEpzGOQe7OKcyLUCML4YOXl428gOOzBgN6Gw0rv8dpsJ7PqTHxBnXnwXr8S1mYFSLSa727tpz0xg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-ia32@0.33.5': - resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + '@img/sharp-win32-ia32@0.34.1': + resolution: {integrity: sha512-WKf/NAZITnonBf3U1LfdjoMgNO5JYRSlhovhRhMxXVdvWYveM4kM3L8m35onYIdh75cOMCo1BexgVQcCDzyoWw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.33.5': - resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + '@img/sharp-win32-x64@0.34.1': + resolution: {integrity: sha512-hw1iIAHpNE8q3uMIRCgGOeDoz9KtFNarFLQclLxr/LK1VBkj8nby18RjFvr6aP7USRYAjTZW6yisnBWMX571Tw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -3628,56 +3636,56 @@ packages: resolution: {integrity: sha512-u6/kglVwZRu5+GMmtkNlGLqJVkgTl0TtM+hLa9rBg7pldx+5NG5bk45NvL37uZmAr2Xfa1C6qHb7GrFwfP372g==} hasBin: true - '@next/env@15.2.5': - resolution: {integrity: sha512-uWkCf9C8wKTyQjqrNk+BA7eL3LOQdhL+xlmJUf2O85RM4lbzwBwot3Sqv2QGe/RGnc3zysIf1oJdtq9S00pkmQ==} + '@next/env@15.3.0': + resolution: {integrity: sha512-6mDmHX24nWlHOlbwUiAOmMyY7KELimmi+ed8qWcJYjqXeC+G6JzPZ3QosOAfjNwgMIzwhXBiRiCgdh8axTTdTA==} - '@next/eslint-plugin-next@15.2.5': - resolution: {integrity: sha512-Q1ncASVFKSy+AbabimYxr/2HH/h+qlKlwu1fYV48xUefGzVimS3i3nKwYsM2w+rLdpMFdJyoVowrYyjKu47rBw==} + '@next/eslint-plugin-next@15.3.0': + resolution: {integrity: sha512-511UUcpWw5GWTyKfzW58U2F/bYJyjLE9e3SlnGK/zSXq7RqLlqFO8B9bitJjumLpj317fycC96KZ2RZsjGNfBw==} - '@next/swc-darwin-arm64@15.2.5': - resolution: {integrity: sha512-4OimvVlFTbgzPdA0kh8A1ih6FN9pQkL4nPXGqemEYgk+e7eQhsst/p35siNNqA49eQA6bvKZ1ASsDtu9gtXuog==} + '@next/swc-darwin-arm64@15.3.0': + resolution: {integrity: sha512-PDQcByT0ZfF2q7QR9d+PNj3wlNN4K6Q8JoHMwFyk252gWo4gKt7BF8Y2+KBgDjTFBETXZ/TkBEUY7NIIY7A/Kw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.2.5': - resolution: {integrity: sha512-ohzRaE9YbGt1ctE0um+UGYIDkkOxHV44kEcHzLqQigoRLaiMtZzGrA11AJh2Lu0lv51XeiY1ZkUvkThjkVNBMA==} + '@next/swc-darwin-x64@15.3.0': + resolution: {integrity: sha512-m+eO21yg80En8HJ5c49AOQpFDq+nP51nu88ZOMCorvw3g//8g1JSUsEiPSiFpJo1KCTQ+jm9H0hwXK49H/RmXg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.5': - resolution: {integrity: sha512-FMSdxSUt5bVXqqOoZCc/Seg4LQep9w/fXTazr/EkpXW2Eu4IFI9FD7zBDlID8TJIybmvKk7mhd9s+2XWxz4flA==} + '@next/swc-linux-arm64-gnu@15.3.0': + resolution: {integrity: sha512-H0Kk04ZNzb6Aq/G6e0un4B3HekPnyy6D+eUBYPJv9Abx8KDYgNMWzKt4Qhj57HXV3sTTjsfc1Trc1SxuhQB+Tg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.5': - resolution: {integrity: sha512-4ZNKmuEiW5hRKkGp2HWwZ+JrvK4DQLgf8YDaqtZyn7NYdl0cHfatvlnLFSWUayx9yFAUagIgRGRk8pFxS8Qniw==} + '@next/swc-linux-arm64-musl@15.3.0': + resolution: {integrity: sha512-k8GVkdMrh/+J9uIv/GpnHakzgDQhrprJ/FbGQvwWmstaeFG06nnAoZCJV+wO/bb603iKV1BXt4gHG+s2buJqZA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.5': - resolution: {integrity: sha512-bE6lHQ9GXIf3gCDE53u2pTl99RPZW5V1GLHSRMJ5l/oB/MT+cohu9uwnCK7QUph2xIOu2a6+27kL0REa/kqwZw==} + '@next/swc-linux-x64-gnu@15.3.0': + resolution: {integrity: sha512-ZMQ9yzDEts/vkpFLRAqfYO1wSpIJGlQNK9gZ09PgyjBJUmg8F/bb8fw2EXKgEaHbCc4gmqMpDfh+T07qUphp9A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.5': - resolution: {integrity: sha512-y7EeQuSkQbTAkCEQnJXm1asRUuGSWAchGJ3c+Qtxh8LVjXleZast8Mn/rL7tZOm7o35QeIpIcid6ufG7EVTTcA==} + '@next/swc-linux-x64-musl@15.3.0': + resolution: {integrity: sha512-RFwq5VKYTw9TMr4T3e5HRP6T4RiAzfDJ6XsxH8j/ZeYq2aLsBqCkFzwMI0FmnSsLaUbOb46Uov0VvN3UciHX5A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.2.5': - resolution: {integrity: sha512-gQMz0yA8/dskZM2Xyiq2FRShxSrsJNha40Ob/M2n2+JGRrZ0JwTVjLdvtN6vCxuq4ByhOd4a9qEf60hApNR2gQ==} + '@next/swc-win32-arm64-msvc@15.3.0': + resolution: {integrity: sha512-a7kUbqa/k09xPjfCl0RSVAvEjAkYBYxUzSVAzk2ptXiNEL+4bDBo9wNC43G/osLA/EOGzG4CuNRFnQyIHfkRgQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.5': - resolution: {integrity: sha512-tBDNVUcI7U03+3oMvJ11zrtVin5p0NctiuKmTGyaTIEAVj9Q77xukLXGXRnWxKRIIdFG4OTA2rUVGZDYOwgmAA==} + '@next/swc-win32-x64-msvc@15.3.0': + resolution: {integrity: sha512-vHUQS4YVGJPmpjn7r5lEZuMhK5UQBNBRSB+iGDvJjaNk649pTIcRluDWNb9siunyLLiu/LDPHfvxBtNamyuLTw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3698,26 +3706,38 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@octokit/app@15.1.4': - resolution: {integrity: sha512-PM1MqlPAnItjQIKWRmSoJu02+m7Eif4Am3w5C+Ctkw0//QETWMbW2ejBZhcw3aS7wRcFSbS+lH3NoYm614aZVQ==} + '@octokit/app@15.1.6': + resolution: {integrity: sha512-WELCamoCJo9SN0lf3SWZccf68CF0sBNPQuLYmZ/n87p5qvBJDe9aBtr5dHkh7T9nxWZ608pizwsUbypSzZAiUw==} engines: {node: '>= 18'} - '@octokit/auth-app@7.1.5': - resolution: {integrity: sha512-boklS4E6LpbA3nRx+SU2fRKRGZJdOGoSZne/i3Y0B5rfHOcGwFgcXrwDLdtbv4igfDSnAkZaoNBv1GYjPDKRNw==} + '@octokit/auth-app@7.2.1': + resolution: {integrity: sha512-4jaopCVOtWN0V8qCx/1s2pkRqC6tcvIQM3kFB99eIpsP53GfsoIKO08D94b83n/V3iGihHmxWR2lXzE0NicUGg==} engines: {node: '>= 18'} '@octokit/auth-oauth-app@8.1.3': resolution: {integrity: sha512-4e6OjVe5rZ8yBe8w7byBjpKtSXFuro7gqeGAAZc7QYltOF8wB93rJl2FE0a4U1Mt88xxPv/mS+25/0DuLk0Ewg==} engines: {node: '>= 18'} + '@octokit/auth-oauth-app@8.1.4': + resolution: {integrity: sha512-71iBa5SflSXcclk/OL3lJzdt4iFs56OJdpBGEBl1wULp7C58uiswZLV6TdRaiAzHP1LT8ezpbHlKuxADb+4NkQ==} + engines: {node: '>= 18'} + '@octokit/auth-oauth-device@7.1.3': resolution: {integrity: sha512-BECO/N4B/Uikj0w3GCvjf/odMujtYTP3q82BJSjxC2J3rxTEiZIJ+z2xnRlDb0IE9dQSaTgRqUPVOieSbFcVzg==} engines: {node: '>= 18'} + '@octokit/auth-oauth-device@7.1.5': + resolution: {integrity: sha512-lR00+k7+N6xeECj0JuXeULQ2TSBB/zjTAmNF2+vyGPDEFx1dgk1hTDmL13MjbSmzusuAmuJD8Pu39rjp9jH6yw==} + engines: {node: '>= 18'} + '@octokit/auth-oauth-user@5.1.3': resolution: {integrity: sha512-zNPByPn9K7TC+OOHKGxU+MxrE9SZAN11UHYEFLsK2NRn3akJN2LHRl85q+Eypr3tuB2GrKx3rfj2phJdkYCvzw==} engines: {node: '>= 18'} + '@octokit/auth-oauth-user@5.1.4': + resolution: {integrity: sha512-4tJRofMHm6ZCd3O2PVgboBbQ/lNtacREeaihet0+wCATZmvPK+jjg2K6NjBfY69An3yzQdmkcMeiaOOoxOPr7Q==} + engines: {node: '>= 18'} + '@octokit/auth-token@5.1.1': resolution: {integrity: sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==} engines: {node: '>= 18'} @@ -3726,12 +3746,16 @@ packages: resolution: {integrity: sha512-07DlUGcz/AAVdzu3EYfi/dOyMSHp9YsOxPl/MPmtlVXWiD//GlV8HgZsPhud94DEyx+RfrW0wSl46Lx+AWbOlg==} engines: {node: '>= 18'} + '@octokit/auth-unauthenticated@6.1.3': + resolution: {integrity: sha512-d5gWJla3WdSl1yjbfMpET+hUSFCE15qM0KVSB0H1shyuJihf/RL1KqWoZMIaonHvlNojkL9XtLFp8QeLe+1iwA==} + engines: {node: '>= 18'} + '@octokit/core@6.1.2': resolution: {integrity: sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==} engines: {node: '>= 18'} - '@octokit/core@6.1.4': - resolution: {integrity: sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==} + '@octokit/core@6.1.5': + resolution: {integrity: sha512-vvmsN0r7rguA+FySiCsbaTTobSftpIDIpPW81trAmsv9TGxg3YCujAxRYp/Uy8xmDgYCzzgulG62H7KYUFmeIg==} engines: {node: '>= 18'} '@octokit/endpoint@10.1.1': @@ -3742,12 +3766,16 @@ packages: resolution: {integrity: sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==} engines: {node: '>= 18'} + '@octokit/endpoint@10.1.4': + resolution: {integrity: sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA==} + engines: {node: '>= 18'} + '@octokit/graphql@8.1.1': resolution: {integrity: sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==} engines: {node: '>= 18'} - '@octokit/graphql@8.1.2': - resolution: {integrity: sha512-bdlj/CJVjpaz06NBpfHhp4kGJaRZfz7AzC+6EwUImRtrwIw8dIgJ63Xg0OzV9pRn3rIzrt5c2sa++BL0JJ8GLw==} + '@octokit/graphql@8.2.2': + resolution: {integrity: sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA==} engines: {node: '>= 18'} '@octokit/oauth-app@7.1.6': @@ -3762,9 +3790,16 @@ packages: resolution: {integrity: sha512-Jc/ycnePClOvO1WL7tlC+TRxOFtyJBGuTDsL4dzXNiVZvzZdrPuNw7zHI3qJSUX2n6RLXE5L0SkFmYyNaVUFoQ==} engines: {node: '>= 18'} + '@octokit/oauth-methods@5.1.5': + resolution: {integrity: sha512-Ev7K8bkYrYLhoOSZGVAGsLEscZQyq7XQONCBBAl2JdMg7IT3PQn/y8P0KjloPoYpI5UylqYrLeUcScaYWXwDvw==} + engines: {node: '>= 18'} + '@octokit/openapi-types@23.0.1': resolution: {integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==} + '@octokit/openapi-types@25.0.0': + resolution: {integrity: sha512-FZvktFu7HfOIJf2BScLKIEYjDsw6RKc7rBJCdvCTfKsVnx2GEB/Nbzjr29DUdb7vQhlzS/j8qDzdditP0OC6aw==} + '@octokit/openapi-webhooks-types@9.1.0': resolution: {integrity: sha512-bO1D2jLdU8qEvqmbWjNxJzDYSFT4wesiYKIKP6f4LaM0XUGtn/0LBv/20hu9YqcnpdX38X5o/xANTMtIAqdwYw==} @@ -3780,14 +3815,14 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-paginate-rest@11.4.2': - resolution: {integrity: sha512-BXJ7XPCTDXFF+wxcg/zscfgw2O/iDPtNSkwwR1W1W5c4Mb3zav/M2XvxQ23nVmKj7jpweB4g8viMeCQdm7LMVA==} + '@octokit/plugin-paginate-rest@12.0.0': + resolution: {integrity: sha512-MPd6WK1VtZ52lFrgZ0R2FlaoiWllzgqFHaSZxvp72NmoDeZ0m8GeJdg4oB6ctqMTYyrnDYp592Xma21mrgiyDA==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-rest-endpoint-methods@13.3.1': - resolution: {integrity: sha512-o8uOBdsyR+WR8MK9Cco8dCgvG13H1RlM1nWnK/W7TEACQBFux/vPREgKucxUfuDQ5yi1T3hGf4C5ZmZXAERgwQ==} + '@octokit/plugin-rest-endpoint-methods@14.0.0': + resolution: {integrity: sha512-iQt6ovem4b7zZYZQtdv+PwgbL5VPq37th1m2x2TdkgimIDJpsi2A6Q/OI/23i/hR6z5mL0EgisNR4dcbmckSZQ==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' @@ -3798,50 +3833,50 @@ packages: peerDependencies: '@octokit/core': '>=6' - '@octokit/plugin-retry@7.1.4': - resolution: {integrity: sha512-7AIP4p9TttKN7ctygG4BtR7rrB0anZqoU9ThXFk8nETqIfvgPUANTSYHqWYknK7W3isw59LpZeLI8pcEwiJdRg==} + '@octokit/plugin-retry@7.2.1': + resolution: {integrity: sha512-wUc3gv0D6vNHpGxSaR3FlqJpTXGWgqmk607N9L3LvPL4QjaxDgX/1nY2mGpT37Khn+nlIXdljczkRnNdTTV3/A==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '>=6' + '@octokit/plugin-throttling@10.0.0': + resolution: {integrity: sha512-Kuq5/qs0DVYTHZuBAzCZStCzo2nKvVRo/TDNhCcpC2TKiOGz/DisXMCvjt3/b5kr6SCI1Y8eeeJTHBxxpFvZEg==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': ^6.1.3 + '@octokit/plugin-throttling@9.3.2': resolution: {integrity: sha512-FqpvcTpIWFpMMwIeSoypoJXysSAQ3R+ALJhXXSG1HTP3YZOIeLmcNcimKaXxTcws+Sh6yoRl13SJ5r8sXc1Fhw==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': ^6.0.0 - '@octokit/plugin-throttling@9.4.0': - resolution: {integrity: sha512-IOlXxXhZA4Z3m0EEYtrrACkuHiArHLZ3CvqWwOez/pURNqRuwfoFlTPbN5Muf28pzFuztxPyiUiNwz8KctdZaQ==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': ^6.1.3 - - '@octokit/request-error@6.1.6': - resolution: {integrity: sha512-pqnVKYo/at0NuOjinrgcQYpEbv4snvP3bKMRqHaD9kIsk9u1LCpb2smHZi8/qJfgeNqLo5hNW4Z7FezNdEo0xg==} - engines: {node: '>= 18'} - '@octokit/request-error@6.1.7': resolution: {integrity: sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==} engines: {node: '>= 18'} + '@octokit/request-error@6.1.8': + resolution: {integrity: sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ==} + engines: {node: '>= 18'} + '@octokit/request@9.1.3': resolution: {integrity: sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==} engines: {node: '>= 18'} - '@octokit/request@9.1.4': - resolution: {integrity: sha512-tMbOwGm6wDII6vygP3wUVqFTw3Aoo0FnVQyhihh8vVq12uO3P+vQZeo2CKMpWtPSogpACD0yyZAlVlQnjW71DA==} - engines: {node: '>= 18'} - '@octokit/request@9.2.2': resolution: {integrity: sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==} engines: {node: '>= 18'} - '@octokit/types@13.7.0': - resolution: {integrity: sha512-BXfRP+3P3IN6fd4uF3SniaHKOO4UXWBfkdR3vA8mIvaoO/wLjGN5qivUtW0QRitBHHMcfC41SLhNVYIZZE+wkA==} + '@octokit/request@9.2.3': + resolution: {integrity: sha512-Ma+pZU8PXLOEYzsWf0cn/gY+ME57Wq8f49WTXA8FMHp2Ps9djKw//xYJ1je8Hm0pR2lU9FUGeJRWOtxq6olt4w==} + engines: {node: '>= 18'} '@octokit/types@13.8.0': resolution: {integrity: sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==} + '@octokit/types@14.0.0': + resolution: {integrity: sha512-VVmZP0lEhbo2O1pdq63gZFiGCKkm8PPp8AUOijlwPO6hojEVjspA0MWKP7E4hbvGxzFKNqKr6p0IYtOH/Wf/zA==} + '@octokit/webhooks-methods@5.1.1': resolution: {integrity: sha512-NGlEHZDseJTCj8TMMFehzwa9g7On4KJMPVHDSrHxCQumL6uSQR8wIkP/qesv52fXqV1BPf4pTxwtS31ldAt9Xg==} engines: {node: '>= 18'} @@ -4313,27 +4348,27 @@ packages: resolution: {integrity: sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==} engines: {node: '>=12'} - '@tanstack/query-core@5.72.1': - resolution: {integrity: sha512-nOu0EEkZuJ0BZnYgeaEfo44+psq1jBO7/zp3KudixD4dvgOVerrhAhDEKsWx2N7MxB59mjO4r0ddP/VqWGPK+Q==} + '@tanstack/query-core@5.72.2': + resolution: {integrity: sha512-fxl9/0yk3mD/FwTmVEf1/H6N5B975H0luT+icKyX566w6uJG0x6o+Yl+I38wJRCaogiMkstByt+seXfDbWDAcA==} - '@tanstack/query-devtools@5.72.1': - resolution: {integrity: sha512-D0vEoQaiVq9ayCqvvxA9XkDq7TIesyPpvgP69arRtt5FQF6n/Hrta4SlkfXC4m9BCvFLlhLDcKGYa2eMQ4ZIIA==} + '@tanstack/query-devtools@5.72.2': + resolution: {integrity: sha512-mMKnGb+iOhVBcj6jaerCFRpg8pACStdG8hmUBHPtToeZzs4ctjBUL1FajqpVn2WaMxnq8Wya+P3Q5tPFNM9jQw==} - '@tanstack/react-query-devtools@5.72.1': - resolution: {integrity: sha512-ckNRgABst3MLjpM2nD/CzQToCiaT3jb3Xhtf+GP/0/9ij9SPT/SC+lc3wUDSkT0OupnHobBBF5E1/Xp6B+XZLg==} + '@tanstack/react-query-devtools@5.72.2': + resolution: {integrity: sha512-n53qr9JdHCJTCUba6OvMhwiV2CcsckngOswKEE7nM5pQBa/fW9c43qw8omw1RPT2s+aC7MuwS8fHsWT8g+j6IQ==} peerDependencies: - '@tanstack/react-query': ^5.72.1 + '@tanstack/react-query': ^5.72.2 react: ^18 || ^19 - '@tanstack/react-query-next-experimental@5.72.1': - resolution: {integrity: sha512-tmhQm4Tqhcg8S4DtlXROEN6BLawWzGBAJrbUM/80sXgEX6Ak8D3PvkUFaewzFrIjNtLcu3zTfll34xdr68gilg==} + '@tanstack/react-query-next-experimental@5.72.2': + resolution: {integrity: sha512-s53o3ZKpja2v5Bdga+rxUY+/NzXrNbxRj/JyL7FNgruOmqurF8sJgeQxG7eMV9AHp1iN3Fk12Zezjfv5w3NjMg==} peerDependencies: - '@tanstack/react-query': ^5.72.1 + '@tanstack/react-query': ^5.72.2 next: ^13 || ^14 || ^15 react: ^18 || ^19 - '@tanstack/react-query@5.72.1': - resolution: {integrity: sha512-4UEMyRx54xj144D2nDvDIMiXSG5BrqyCJrmyNoGbymNS+VWODcBDFrmRk9p2fe12UGZ4JtKPTNuW2Jg0aisUgQ==} + '@tanstack/react-query@5.72.2': + resolution: {integrity: sha512-SVNHzyBUYiis+XiCl+8yiPZmMYei2AKYY94wM/zpvB5l1jxqOo82FQTziSJ4pBi96jtYqvYrTMxWynmbQh3XKw==} peerDependencies: react: ^18 || ^19 @@ -4357,8 +4392,8 @@ packages: '@tanstack/virtual-core@3.11.2': resolution: {integrity: sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw==} - '@testcontainers/mysql@10.24.1': - resolution: {integrity: sha512-XGA8ayEXxWs1HgKA3w61CI3BIflpgOuAkF6I++ilCJey1clWQzAawlM3MjqJUnjznSGJk7g6bAP1FwNXNUlTmA==} + '@testcontainers/mysql@10.24.2': + resolution: {integrity: sha512-wRICcCjzFlAiAsOvM/ValragSrc0RcRyXX2nifOAda/BmCSD44dYaVabbxOvJLFbHKX7HWuRplebGvpplko/wg==} '@tiptap/core@2.11.7': resolution: {integrity: sha512-zN+NFFxLsxNEL8Qioc+DL6b8+Tt2bmRbXH22Gk6F6nD30x83eaUSFlSv3wqvgyCq3I1i1NO394So+Agmayx6rQ==} @@ -4566,19 +4601,19 @@ packages: tree-sitter: optional: true - '@trpc/client@11.0.4': - resolution: {integrity: sha512-2xIXqRNc8wH3zgcGp1yZ8P2ZL15BoFWq2RS8S3ldjvxsdJfnoYmcvCNzySw8nIrWbKiXl9prdw+bGIUOdG/omw==} + '@trpc/client@11.1.0': + resolution: {integrity: sha512-Q3pL4p7AddxI/ZJTEFo1utKSdasDFjZPECIPsKDkthEt52k530JkYVltTdLkYFKrNWXKKBo8MN7NwchelczoRw==} peerDependencies: - '@trpc/server': 11.0.4 + '@trpc/server': 11.1.0 typescript: '>=5.7.2' - '@trpc/next@11.0.4': - resolution: {integrity: sha512-s85jVlUwEDNOoC+MkXLjonVPEemlvGMfcnUGpuOuWFPn0FBeH94JYqITJSzyjzHG+Hk7RfC3pEqc5UXPZ1VIGw==} + '@trpc/next@11.1.0': + resolution: {integrity: sha512-P8/qpfvRs7IIDdFBrcyMfxXumgf5p7K+dig6NpxpNYs4bqVJfBnAbATYEplmLhw/Dcksqo5ZoI0+0A19wLm8Ug==} peerDependencies: '@tanstack/react-query': ^5.59.15 - '@trpc/client': 11.0.4 - '@trpc/react-query': 11.0.4 - '@trpc/server': 11.0.4 + '@trpc/client': 11.1.0 + '@trpc/react-query': 11.1.0 + '@trpc/server': 11.1.0 next: '*' react: '>=16.8.0' react-dom: '>=16.8.0' @@ -4589,18 +4624,18 @@ packages: '@trpc/react-query': optional: true - '@trpc/react-query@11.0.4': - resolution: {integrity: sha512-rpzwKzE4r1bhuVvNZXI0eLaXZz7SkEAJ0VsJUo172gN3r8HqUoQjXcVKw+ZUre1RgxWbUf9jpILdfDOUTNZEvw==} + '@trpc/react-query@11.1.0': + resolution: {integrity: sha512-qdqKdFM8hVy/YSBCg1/3VO+IgB6Nbul3Fk1SA3lefGf0bkYZdWVVyKab8HBAfOWlMsuRufhVLPdKYmnjzBrK9g==} peerDependencies: '@tanstack/react-query': ^5.67.1 - '@trpc/client': 11.0.4 - '@trpc/server': 11.0.4 + '@trpc/client': 11.1.0 + '@trpc/server': 11.1.0 react: '>=18.2.0' react-dom: '>=18.2.0' typescript: '>=5.7.2' - '@trpc/server@11.0.4': - resolution: {integrity: sha512-beDEGEw+slNiYxLUpZ8HKU1mnZBoP/VLMtrKh2ABKl7VC0PQV9XcDMVjB0GcSW15nTSiOnGDGyFDeudp4dH2qw==} + '@trpc/server@11.1.0': + resolution: {integrity: sha512-uAJ7ikejeujVkf53XFJ/0W8nr7bDjul+Szk5Rsepq97Hb/WS1RkRXdyX4KqAyCE9b1vDFCJVJwSxiIZdRtbTZQ==} peerDependencies: typescript: '>=5.7.2' @@ -4797,8 +4832,8 @@ packages: peerDependencies: '@types/react': ^19.0.0 - '@types/react@19.1.0': - resolution: {integrity: sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==} + '@types/react@19.1.1': + resolution: {integrity: sha512-ePapxDL7qrgqSF67s0h9m412d9DbXyC1n59O2st+9rjuuamWsZuD2w55rqY12CbzsZ7uVXb5Nw0gEp9Z8MMutQ==} '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -6093,8 +6128,8 @@ packages: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} - dotenv@16.4.7: - resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + dotenv@16.5.0: + resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} engines: {node: '>=12'} drange@1.1.1: @@ -6381,8 +6416,8 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-config-prettier@10.1.1: - resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} + eslint-config-prettier@10.1.2: + resolution: {integrity: sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -7145,8 +7180,8 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - ioredis@5.6.0: - resolution: {integrity: sha512-tBZlIIWbndeWBWCXWZiqtOF/yxf6yZX3tAlTJ7nfo5jhd6dctNxF7QnYlZLZ1a0o0pDoen7CgZqO+zjNaFbJAg==} + ioredis@5.6.1: + resolution: {integrity: sha512-UxC0Yv1Y4WRJiGQxQkP0hfdL0/5/6YvdfOOClRgJ0qppSarkhneSa6UvkMkms0AkdGimSH3Ikqm+6mkMmX7vGA==} engines: {node: '>=12.22.0'} ip-address@9.0.5: @@ -7747,6 +7782,10 @@ packages: react: '>=18.0' react-dom: '>=18.0' + maria2@0.4.0: + resolution: {integrity: sha512-jQ9yezKDaSeiy7SZRA8zMAYkFyfx3yoeB/lhcOSQsoGf4YyVaPDopP+dEU6HWNJwK2Oo/rmgqTb5Na1gJcLtrg==} + engines: {node: '>= 22.5.0'} + markdown-it@14.1.0: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} hasBin: true @@ -7998,8 +8037,8 @@ packages: typescript: optional: true - next@15.2.5: - resolution: {integrity: sha512-LlqS8ljc7RWR3riUwxB5+14v7ULAa5EuLUyarD/sFgXPd6Hmmscg8DXcu9hDdh5atybrIDVBrFhjDpRIQo/4pQ==} + next@15.3.0: + resolution: {integrity: sha512-k0MgP6BsK8cZ73wRjMazl2y2UcXj49ZXLDEgx6BikWuby/CN+nh81qFFI16edgd7xYpe/jj2OZEIwCoqnzz0bQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -8264,8 +8303,8 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} - octokit@4.1.2: - resolution: {integrity: sha512-0kcTxJOK3yQrJsRb8wKa28hlTze4QOz4sLuUnfXXnhboDhFKgv8LxS86tFwbsafDW9JZ08ByuVAE8kQbYJIZkA==} + octokit@4.1.3: + resolution: {integrity: sha512-PP+EL8h4xPCE9NBo6jXq6I2/EiTXsn1cg9F0IZehHBv/qhuQpyGMFElEB17miWKciuT6vRHiFFiG9+FoXOmg6A==} engines: {node: '>= 18'} ofetch@1.4.1: @@ -9213,6 +9252,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + sentence-case@2.1.1: resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} @@ -9244,8 +9288,8 @@ packages: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true - sharp@0.33.5: - resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + sharp@0.34.1: + resolution: {integrity: sha512-1j0w61+eVxu7DawFJtnfYcvSv6qPFvfTaqzTQ2BLknVhHTwGS8sc63ZBF4rzkWMBVKybo4S5OBtDdZahh2A1xg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: @@ -9575,8 +9619,8 @@ packages: swagger-client@3.34.4: resolution: {integrity: sha512-Qvtu8DtARAx5GwefA0eV1WRLa4Q9bhczrtNAsiBMOx3HkxAOczy1APQhrcblJdLys0xEGQ4xYizYFXfIL9BhpA==} - swagger-ui-react@5.20.7: - resolution: {integrity: sha512-TmWWER0OKkwx/IC1G82AaU265oOpETZFt2KjYxvsGwRWB4cN0NYd85jVogd6tATS8YxbiUHfVpUUJp662CCljg==} + swagger-ui-react@5.20.8: + resolution: {integrity: sha512-bMEm4i0brXuSoXa5oHHZfees3eXVkZk1VwKZbfDOre3p63hoMFexA/IERycVamqsWxZzMqo954ApDlqeT8FN8A==} peerDependencies: react: '>=16.8.0 <19' react-dom: '>=16.8.0 <19' @@ -9655,8 +9699,8 @@ packages: resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} engines: {node: '>=18'} - testcontainers@10.24.1: - resolution: {integrity: sha512-72eJwXrGNg2fyN8LfGrniOI5hpkur7t74w8MEZPrpUZ/YojfBQY8z6ZU/P586TzfJTWEakAH49DO6f8niHsrBQ==} + testcontainers@10.24.2: + resolution: {integrity: sha512-Don3EXEQuSw14+nFG9pj48fL9ck/jXDfR9Rb0K3acOyn/gg97+gsnfZaLzpdejl9GcPJVKxACNRe3SYVC2uWqg==} text-decoder@1.2.0: resolution: {integrity: sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==} @@ -10018,8 +10062,8 @@ packages: resolution: {integrity: sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==} engines: {node: '>=14.0'} - undici@7.7.0: - resolution: {integrity: sha512-tZ6+5NBq4KH35rr46XJ2JPFKxfcBlYNaqLF/wyWIO9RMHqqU/gx/CLB1Y2qMcgB8lWw/bKHa7qzspqCN7mUHvA==} + undici@7.8.0: + resolution: {integrity: sha512-vFv1GA99b7eKO1HG/4RPu2Is3FBTWBrmzqzO0mz+rLxN3yXkE4mqRcb8g8fHxzX4blEysrNZLqg5RbJLqX5buA==} engines: {node: '>=20.18.1'} unenv@1.10.0: @@ -10875,7 +10919,7 @@ snapshots: '@drizzle-team/brocli@0.11.0': {} - '@emnapi/runtime@1.3.1': + '@emnapi/runtime@1.4.0': dependencies: tslib: 2.8.1 optional: true @@ -11387,79 +11431,82 @@ snapshots: transitivePeerDependencies: - supports-color - '@img/sharp-darwin-arm64@0.33.5': + '@img/sharp-darwin-arm64@0.34.1': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-arm64': 1.1.0 optional: true - '@img/sharp-darwin-x64@0.33.5': + '@img/sharp-darwin-x64@0.34.1': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.1.0 optional: true - '@img/sharp-libvips-darwin-arm64@1.0.4': + '@img/sharp-libvips-darwin-arm64@1.1.0': optional: true - '@img/sharp-libvips-darwin-x64@1.0.4': + '@img/sharp-libvips-darwin-x64@1.1.0': optional: true - '@img/sharp-libvips-linux-arm64@1.0.4': + '@img/sharp-libvips-linux-arm64@1.1.0': optional: true - '@img/sharp-libvips-linux-arm@1.0.5': + '@img/sharp-libvips-linux-arm@1.1.0': optional: true - '@img/sharp-libvips-linux-s390x@1.0.4': + '@img/sharp-libvips-linux-ppc64@1.1.0': optional: true - '@img/sharp-libvips-linux-x64@1.0.4': + '@img/sharp-libvips-linux-s390x@1.1.0': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + '@img/sharp-libvips-linux-x64@1.1.0': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.0.4': + '@img/sharp-libvips-linuxmusl-arm64@1.1.0': optional: true - '@img/sharp-linux-arm64@0.33.5': + '@img/sharp-libvips-linuxmusl-x64@1.1.0': + optional: true + + '@img/sharp-linux-arm64@0.34.1': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-arm64': 1.1.0 optional: true - '@img/sharp-linux-arm@0.33.5': + '@img/sharp-linux-arm@0.34.1': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm': 1.1.0 optional: true - '@img/sharp-linux-s390x@0.33.5': + '@img/sharp-linux-s390x@0.34.1': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.1.0 optional: true - '@img/sharp-linux-x64@0.33.5': + '@img/sharp-linux-x64@0.34.1': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.1.0 optional: true - '@img/sharp-linuxmusl-arm64@0.33.5': + '@img/sharp-linuxmusl-arm64@0.34.1': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 optional: true - '@img/sharp-linuxmusl-x64@0.33.5': + '@img/sharp-linuxmusl-x64@0.34.1': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.1.0 optional: true - '@img/sharp-wasm32@0.33.5': + '@img/sharp-wasm32@0.34.1': dependencies: - '@emnapi/runtime': 1.3.1 + '@emnapi/runtime': 1.4.0 optional: true - '@img/sharp-win32-ia32@0.33.5': + '@img/sharp-win32-ia32@0.34.1': optional: true - '@img/sharp-win32-x64@0.33.5': + '@img/sharp-win32-x64@0.34.1': optional: true '@ioredis/commands@1.2.0': {} @@ -11564,9 +11611,9 @@ snapshots: js-base64: 3.7.7 optional: true - '@mantine/charts@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(recharts@2.15.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))': + '@mantine/charts@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(recharts@2.15.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0))': dependencies: - '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': 7.17.4(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -11576,7 +11623,7 @@ snapshots: dependencies: chroma-js: 3.1.2 - '@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: '@floating-ui/react': 0.26.28(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': 7.17.4(react@19.1.0) @@ -11584,24 +11631,24 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) react-number-format: 5.4.3(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-remove-scroll: 2.6.2(@types/react@19.1.0)(react@19.1.0) - react-textarea-autosize: 8.5.9(@types/react@19.1.0)(react@19.1.0) + react-remove-scroll: 2.6.2(@types/react@19.1.1)(react@19.1.0) + react-textarea-autosize: 8.5.9(@types/react@19.1.1)(react@19.1.0) type-fest: 4.39.1 transitivePeerDependencies: - '@types/react' - '@mantine/dates@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mantine/dates@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': 7.17.4(react@19.1.0) clsx: 2.1.1 dayjs: 1.11.13 react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@mantine/dropzone@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mantine/dropzone@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': 7.17.4(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) @@ -11617,25 +11664,25 @@ snapshots: dependencies: react: 19.1.0 - '@mantine/modals@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mantine/modals@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': 7.17.4(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - '@mantine/notifications@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mantine/notifications@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': 7.17.4(react@19.1.0) '@mantine/store': 7.17.4(react@19.1.0) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@mantine/spotlight@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mantine/spotlight@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': 7.17.4(react@19.1.0) '@mantine/store': 7.17.4(react@19.1.0) react: 19.1.0 @@ -11645,9 +11692,9 @@ snapshots: dependencies: react: 19.1.0 - '@mantine/tiptap@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tiptap/extension-link@2.11.7(@tiptap/core@2.11.7(@tiptap/pm@2.11.7))(@tiptap/pm@2.11.7))(@tiptap/react@2.11.7(@tiptap/core@2.11.7(@tiptap/pm@2.11.7))(@tiptap/pm@2.11.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@mantine/tiptap@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tiptap/extension-link@2.11.7(@tiptap/core@2.11.7(@tiptap/pm@2.11.7))(@tiptap/pm@2.11.7))(@tiptap/react@2.11.7(@tiptap/core@2.11.7(@tiptap/pm@2.11.7))(@tiptap/pm@2.11.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': dependencies: - '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': 7.17.4(react@19.1.0) '@tiptap/extension-link': 2.11.7(@tiptap/core@2.11.7(@tiptap/pm@2.11.7))(@tiptap/pm@2.11.7) '@tiptap/react': 2.11.7(@tiptap/core@2.11.7(@tiptap/pm@2.11.7))(@tiptap/pm@2.11.7)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) @@ -11722,34 +11769,34 @@ snapshots: - utf-8-validate - webpack-sources - '@next/env@15.2.5': {} + '@next/env@15.3.0': {} - '@next/eslint-plugin-next@15.2.5': + '@next/eslint-plugin-next@15.3.0': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.2.5': + '@next/swc-darwin-arm64@15.3.0': optional: true - '@next/swc-darwin-x64@15.2.5': + '@next/swc-darwin-x64@15.3.0': optional: true - '@next/swc-linux-arm64-gnu@15.2.5': + '@next/swc-linux-arm64-gnu@15.3.0': optional: true - '@next/swc-linux-arm64-musl@15.2.5': + '@next/swc-linux-arm64-musl@15.3.0': optional: true - '@next/swc-linux-x64-gnu@15.2.5': + '@next/swc-linux-x64-gnu@15.3.0': optional: true - '@next/swc-linux-x64-musl@15.2.5': + '@next/swc-linux-x64-musl@15.3.0': optional: true - '@next/swc-win32-arm64-msvc@15.2.5': + '@next/swc-win32-arm64-msvc@15.3.0': optional: true - '@next/swc-win32-x64-msvc@15.2.5': + '@next/swc-win32-x64-msvc@15.3.0': optional: true '@noble/hashes@1.5.0': {} @@ -11766,23 +11813,23 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@octokit/app@15.1.4': + '@octokit/app@15.1.6': dependencies: - '@octokit/auth-app': 7.1.5 - '@octokit/auth-unauthenticated': 6.1.2 - '@octokit/core': 6.1.4 + '@octokit/auth-app': 7.2.1 + '@octokit/auth-unauthenticated': 6.1.3 + '@octokit/core': 6.1.5 '@octokit/oauth-app': 7.1.6 - '@octokit/plugin-paginate-rest': 11.4.2(@octokit/core@6.1.4) - '@octokit/types': 13.7.0 + '@octokit/plugin-paginate-rest': 12.0.0(@octokit/core@6.1.5) + '@octokit/types': 14.0.0 '@octokit/webhooks': 13.6.1 - '@octokit/auth-app@7.1.5': + '@octokit/auth-app@7.2.1': dependencies: - '@octokit/auth-oauth-app': 8.1.3 - '@octokit/auth-oauth-user': 5.1.3 - '@octokit/request': 9.2.2 - '@octokit/request-error': 6.1.7 - '@octokit/types': 13.8.0 + '@octokit/auth-oauth-app': 8.1.4 + '@octokit/auth-oauth-user': 5.1.4 + '@octokit/request': 9.2.3 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.0.0 toad-cache: 3.7.0 universal-github-app-jwt: 2.2.0 universal-user-agent: 7.0.2 @@ -11792,14 +11839,29 @@ snapshots: '@octokit/auth-oauth-device': 7.1.3 '@octokit/auth-oauth-user': 5.1.3 '@octokit/request': 9.2.2 - '@octokit/types': 13.7.0 + '@octokit/types': 13.8.0 + universal-user-agent: 7.0.2 + + '@octokit/auth-oauth-app@8.1.4': + dependencies: + '@octokit/auth-oauth-device': 7.1.5 + '@octokit/auth-oauth-user': 5.1.4 + '@octokit/request': 9.2.3 + '@octokit/types': 14.0.0 universal-user-agent: 7.0.2 '@octokit/auth-oauth-device@7.1.3': dependencies: '@octokit/oauth-methods': 5.1.4 '@octokit/request': 9.2.2 - '@octokit/types': 13.7.0 + '@octokit/types': 13.8.0 + universal-user-agent: 7.0.2 + + '@octokit/auth-oauth-device@7.1.5': + dependencies: + '@octokit/oauth-methods': 5.1.5 + '@octokit/request': 9.2.3 + '@octokit/types': 14.0.0 universal-user-agent: 7.0.2 '@octokit/auth-oauth-user@5.1.3': @@ -11807,56 +11869,74 @@ snapshots: '@octokit/auth-oauth-device': 7.1.3 '@octokit/oauth-methods': 5.1.4 '@octokit/request': 9.2.2 - '@octokit/types': 13.7.0 + '@octokit/types': 13.8.0 + universal-user-agent: 7.0.2 + + '@octokit/auth-oauth-user@5.1.4': + dependencies: + '@octokit/auth-oauth-device': 7.1.5 + '@octokit/oauth-methods': 5.1.5 + '@octokit/request': 9.2.3 + '@octokit/types': 14.0.0 universal-user-agent: 7.0.2 '@octokit/auth-token@5.1.1': {} '@octokit/auth-unauthenticated@6.1.2': dependencies: - '@octokit/request-error': 6.1.7 - '@octokit/types': 13.7.0 + '@octokit/request-error': 6.1.8 + '@octokit/types': 13.8.0 + + '@octokit/auth-unauthenticated@6.1.3': + dependencies: + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.0.0 '@octokit/core@6.1.2': dependencies: '@octokit/auth-token': 5.1.1 '@octokit/graphql': 8.1.1 '@octokit/request': 9.1.3 - '@octokit/request-error': 6.1.6 - '@octokit/types': 13.7.0 + '@octokit/request-error': 6.1.7 + '@octokit/types': 13.8.0 before-after-hook: 3.0.2 universal-user-agent: 7.0.2 - '@octokit/core@6.1.4': + '@octokit/core@6.1.5': dependencies: '@octokit/auth-token': 5.1.1 - '@octokit/graphql': 8.1.2 - '@octokit/request': 9.2.2 - '@octokit/request-error': 6.1.7 - '@octokit/types': 13.7.0 + '@octokit/graphql': 8.2.2 + '@octokit/request': 9.2.3 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.0.0 before-after-hook: 3.0.2 universal-user-agent: 7.0.2 '@octokit/endpoint@10.1.1': dependencies: - '@octokit/types': 13.7.0 + '@octokit/types': 13.8.0 universal-user-agent: 7.0.2 '@octokit/endpoint@10.1.3': dependencies: - '@octokit/types': 13.7.0 + '@octokit/types': 13.8.0 + universal-user-agent: 7.0.2 + + '@octokit/endpoint@10.1.4': + dependencies: + '@octokit/types': 14.0.0 universal-user-agent: 7.0.2 '@octokit/graphql@8.1.1': dependencies: - '@octokit/request': 9.1.4 - '@octokit/types': 13.7.0 + '@octokit/request': 9.2.2 + '@octokit/types': 13.8.0 universal-user-agent: 7.0.2 - '@octokit/graphql@8.1.2': + '@octokit/graphql@8.2.2': dependencies: - '@octokit/request': 9.2.2 - '@octokit/types': 13.7.0 + '@octokit/request': 9.2.3 + '@octokit/types': 14.0.0 universal-user-agent: 7.0.2 '@octokit/oauth-app@7.1.6': @@ -11864,7 +11944,7 @@ snapshots: '@octokit/auth-oauth-app': 8.1.3 '@octokit/auth-oauth-user': 5.1.3 '@octokit/auth-unauthenticated': 6.1.2 - '@octokit/core': 6.1.4 + '@octokit/core': 6.1.5 '@octokit/oauth-authorization-url': 7.1.1 '@octokit/oauth-methods': 5.1.4 '@types/aws-lambda': 8.10.146 @@ -11876,103 +11956,112 @@ snapshots: dependencies: '@octokit/oauth-authorization-url': 7.1.1 '@octokit/request': 9.2.2 - '@octokit/request-error': 6.1.7 - '@octokit/types': 13.7.0 + '@octokit/request-error': 6.1.8 + '@octokit/types': 13.8.0 + + '@octokit/oauth-methods@5.1.5': + dependencies: + '@octokit/oauth-authorization-url': 7.1.1 + '@octokit/request': 9.2.3 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.0.0 '@octokit/openapi-types@23.0.1': {} + '@octokit/openapi-types@25.0.0': {} + '@octokit/openapi-webhooks-types@9.1.0': {} - '@octokit/plugin-paginate-graphql@5.2.4(@octokit/core@6.1.4)': + '@octokit/plugin-paginate-graphql@5.2.4(@octokit/core@6.1.5)': dependencies: - '@octokit/core': 6.1.4 + '@octokit/core': 6.1.5 '@octokit/plugin-paginate-rest@11.3.6(@octokit/core@6.1.2)': dependencies: '@octokit/core': 6.1.2 - '@octokit/types': 13.7.0 - - '@octokit/plugin-paginate-rest@11.4.2(@octokit/core@6.1.4)': - dependencies: - '@octokit/core': 6.1.4 - '@octokit/types': 13.7.0 - - '@octokit/plugin-rest-endpoint-methods@13.3.1(@octokit/core@6.1.4)': - dependencies: - '@octokit/core': 6.1.4 '@octokit/types': 13.8.0 + '@octokit/plugin-paginate-rest@12.0.0(@octokit/core@6.1.5)': + dependencies: + '@octokit/core': 6.1.5 + '@octokit/types': 14.0.0 + + '@octokit/plugin-rest-endpoint-methods@14.0.0(@octokit/core@6.1.5)': + dependencies: + '@octokit/core': 6.1.5 + '@octokit/types': 14.0.0 + '@octokit/plugin-retry@7.1.2(@octokit/core@6.1.2)': dependencies: '@octokit/core': 6.1.2 - '@octokit/request-error': 6.1.6 - '@octokit/types': 13.7.0 + '@octokit/request-error': 6.1.7 + '@octokit/types': 13.8.0 bottleneck: 2.19.5 - '@octokit/plugin-retry@7.1.4(@octokit/core@6.1.4)': + '@octokit/plugin-retry@7.2.1(@octokit/core@6.1.5)': dependencies: - '@octokit/core': 6.1.4 - '@octokit/request-error': 6.1.7 - '@octokit/types': 13.7.0 + '@octokit/core': 6.1.5 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.0.0 + bottleneck: 2.19.5 + + '@octokit/plugin-throttling@10.0.0(@octokit/core@6.1.5)': + dependencies: + '@octokit/core': 6.1.5 + '@octokit/types': 14.0.0 bottleneck: 2.19.5 '@octokit/plugin-throttling@9.3.2(@octokit/core@6.1.2)': dependencies: '@octokit/core': 6.1.2 - '@octokit/types': 13.7.0 + '@octokit/types': 13.8.0 bottleneck: 2.19.5 - '@octokit/plugin-throttling@9.4.0(@octokit/core@6.1.4)': - dependencies: - '@octokit/core': 6.1.4 - '@octokit/types': 13.7.0 - bottleneck: 2.19.5 - - '@octokit/request-error@6.1.6': - dependencies: - '@octokit/types': 13.7.0 - '@octokit/request-error@6.1.7': dependencies: - '@octokit/types': 13.7.0 + '@octokit/types': 13.8.0 + + '@octokit/request-error@6.1.8': + dependencies: + '@octokit/types': 14.0.0 '@octokit/request@9.1.3': dependencies: '@octokit/endpoint': 10.1.1 - '@octokit/request-error': 6.1.6 - '@octokit/types': 13.7.0 - universal-user-agent: 7.0.2 - - '@octokit/request@9.1.4': - dependencies: - '@octokit/endpoint': 10.1.1 - '@octokit/request-error': 6.1.6 - '@octokit/types': 13.7.0 - fast-content-type-parse: 2.0.1 + '@octokit/request-error': 6.1.7 + '@octokit/types': 13.8.0 universal-user-agent: 7.0.2 '@octokit/request@9.2.2': dependencies: '@octokit/endpoint': 10.1.3 - '@octokit/request-error': 6.1.7 - '@octokit/types': 13.7.0 + '@octokit/request-error': 6.1.8 + '@octokit/types': 13.8.0 fast-content-type-parse: 2.0.1 universal-user-agent: 7.0.2 - '@octokit/types@13.7.0': + '@octokit/request@9.2.3': dependencies: - '@octokit/openapi-types': 23.0.1 + '@octokit/endpoint': 10.1.4 + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.0.0 + fast-content-type-parse: 2.0.1 + universal-user-agent: 7.0.2 '@octokit/types@13.8.0': dependencies: '@octokit/openapi-types': 23.0.1 + '@octokit/types@14.0.0': + dependencies: + '@octokit/openapi-types': 25.0.0 + '@octokit/webhooks-methods@5.1.1': {} '@octokit/webhooks@13.6.1': dependencies: '@octokit/openapi-webhooks-types': 9.1.0 - '@octokit/request-error': 6.1.7 + '@octokit/request-error': 6.1.8 '@octokit/webhooks-methods': 5.1.1 '@panva/hkdf@1.2.1': {} @@ -12655,25 +12744,25 @@ snapshots: dependencies: remove-accents: 0.5.0 - '@tanstack/query-core@5.72.1': {} + '@tanstack/query-core@5.72.2': {} - '@tanstack/query-devtools@5.72.1': {} + '@tanstack/query-devtools@5.72.2': {} - '@tanstack/react-query-devtools@5.72.1(@tanstack/react-query@5.72.1(react@19.1.0))(react@19.1.0)': + '@tanstack/react-query-devtools@5.72.2(@tanstack/react-query@5.72.2(react@19.1.0))(react@19.1.0)': dependencies: - '@tanstack/query-devtools': 5.72.1 - '@tanstack/react-query': 5.72.1(react@19.1.0) + '@tanstack/query-devtools': 5.72.2 + '@tanstack/react-query': 5.72.2(react@19.1.0) react: 19.1.0 - '@tanstack/react-query-next-experimental@5.72.1(@tanstack/react-query@5.72.1(react@19.1.0))(next@15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react@19.1.0)': + '@tanstack/react-query-next-experimental@5.72.2(@tanstack/react-query@5.72.2(react@19.1.0))(next@15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react@19.1.0)': dependencies: - '@tanstack/react-query': 5.72.1(react@19.1.0) - next: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + '@tanstack/react-query': 5.72.2(react@19.1.0) + next: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) react: 19.1.0 - '@tanstack/react-query@5.72.1(react@19.1.0)': + '@tanstack/react-query@5.72.2(react@19.1.0)': dependencies: - '@tanstack/query-core': 5.72.1 + '@tanstack/query-core': 5.72.2 react: 19.1.0 '@tanstack/react-table@8.20.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': @@ -12692,9 +12781,9 @@ snapshots: '@tanstack/virtual-core@3.11.2': {} - '@testcontainers/mysql@10.24.1': + '@testcontainers/mysql@10.24.2': dependencies: - testcontainers: 10.24.1 + testcontainers: 10.24.2 transitivePeerDependencies: - bare-buffer - supports-color @@ -12916,33 +13005,33 @@ snapshots: tree-sitter: 0.22.1 optional: true - '@trpc/client@11.0.4(@trpc/server@11.0.4(typescript@5.8.3))(typescript@5.8.3)': + '@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3)': dependencies: - '@trpc/server': 11.0.4(typescript@5.8.3) + '@trpc/server': 11.1.0(typescript@5.8.3) typescript: 5.8.3 - '@trpc/next@11.0.4(@tanstack/react-query@5.72.1(react@19.1.0))(@trpc/client@11.0.4(@trpc/server@11.0.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/react-query@11.0.4(@tanstack/react-query@5.72.1(react@19.1.0))(@trpc/client@11.0.4(@trpc/server@11.0.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.0.4(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3))(@trpc/server@11.0.4(typescript@5.8.3))(next@15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@trpc/next@11.1.0(@tanstack/react-query@5.72.2(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/react-query@11.1.0(@tanstack/react-query@5.72.2(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(next@15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': dependencies: - '@trpc/client': 11.0.4(@trpc/server@11.0.4(typescript@5.8.3))(typescript@5.8.3) - '@trpc/server': 11.0.4(typescript@5.8.3) - next: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + '@trpc/client': 11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3) + '@trpc/server': 11.1.0(typescript@5.8.3) + next: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) typescript: 5.8.3 optionalDependencies: - '@tanstack/react-query': 5.72.1(react@19.1.0) - '@trpc/react-query': 11.0.4(@tanstack/react-query@5.72.1(react@19.1.0))(@trpc/client@11.0.4(@trpc/server@11.0.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.0.4(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@tanstack/react-query': 5.72.2(react@19.1.0) + '@trpc/react-query': 11.1.0(@tanstack/react-query@5.72.2(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - '@trpc/react-query@11.0.4(@tanstack/react-query@5.72.1(react@19.1.0))(@trpc/client@11.0.4(@trpc/server@11.0.4(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.0.4(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@trpc/react-query@11.1.0(@tanstack/react-query@5.72.2(react@19.1.0))(@trpc/client@11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3))(@trpc/server@11.1.0(typescript@5.8.3))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': dependencies: - '@tanstack/react-query': 5.72.1(react@19.1.0) - '@trpc/client': 11.0.4(@trpc/server@11.0.4(typescript@5.8.3))(typescript@5.8.3) - '@trpc/server': 11.0.4(typescript@5.8.3) + '@tanstack/react-query': 5.72.2(react@19.1.0) + '@trpc/client': 11.1.0(@trpc/server@11.1.0(typescript@5.8.3))(typescript@5.8.3) + '@trpc/server': 11.1.0(typescript@5.8.3) react: 19.1.0 react-dom: 19.1.0(react@19.1.0) typescript: 5.8.3 - '@trpc/server@11.0.4(typescript@5.8.3)': + '@trpc/server@11.1.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 @@ -13176,11 +13265,11 @@ snapshots: '@types/range-parser@1.2.7': {} - '@types/react-dom@19.1.2(@types/react@19.1.0)': + '@types/react-dom@19.1.2(@types/react@19.1.1)': dependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.1 - '@types/react@19.1.0': + '@types/react@19.1.1': dependencies: csstype: 3.1.3 @@ -13216,7 +13305,7 @@ snapshots: '@types/swagger-ui-react@5.18.0': dependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.1 '@types/tar@6.1.13': dependencies: @@ -14622,7 +14711,7 @@ snapshots: dotenv-cli@8.0.0: dependencies: cross-spawn: 7.0.6 - dotenv: 16.4.7 + dotenv: 16.5.0 dotenv-expand: 10.0.0 minimist: 1.2.8 @@ -14630,7 +14719,7 @@ snapshots: dotenv@16.0.3: {} - dotenv@16.4.7: {} + dotenv@16.5.0: {} drange@1.1.1: {} @@ -15059,7 +15148,7 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@10.1.1(eslint@9.24.0): + eslint-config-prettier@10.1.2(eslint@9.24.0): dependencies: eslint: 9.24.0 @@ -15968,7 +16057,7 @@ snapshots: dependencies: loose-envify: 1.4.0 - ioredis@5.6.0: + ioredis@5.6.1: dependencies: '@ioredis/commands': 1.2.0 cluster-key-slot: 1.1.2 @@ -16291,9 +16380,9 @@ snapshots: jose@6.0.8: {} - jotai@2.12.2(@types/react@19.1.0)(react@19.1.0): + jotai@2.12.2(@types/react@19.1.1)(react@19.1.0): optionalDependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.1 react: 19.1.0 js-base64@3.7.7: @@ -16553,10 +16642,10 @@ snapshots: make-error@1.3.6: {} - mantine-react-table@2.0.0-beta.9(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tabler/icons-react@3.31.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + mantine-react-table@2.0.0-beta.9(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/dates@7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(@tabler/icons-react@3.31.0(react@19.1.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: - '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@mantine/dates': 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mantine/core': 7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@mantine/dates': 7.17.4(@mantine/core@7.17.4(@mantine/hooks@7.17.4(react@19.1.0))(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(@mantine/hooks@7.17.4(react@19.1.0))(dayjs@1.11.13)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@mantine/hooks': 7.17.4(react@19.1.0) '@tabler/icons-react': 3.31.0(react@19.1.0) '@tanstack/match-sorter-utils': 8.19.4 @@ -16567,6 +16656,8 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) + maria2@0.4.0: {} + markdown-it@14.1.0: dependencies: argparse: 2.0.1 @@ -16755,25 +16846,25 @@ snapshots: netmask@2.0.2: {} - next-auth@5.0.0-beta.25(next@15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react@19.1.0): + next-auth@5.0.0-beta.25(next@15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react@19.1.0): dependencies: '@auth/core': 0.37.2 - next: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + next: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) react: 19.1.0 - next-intl@4.0.2(next@15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react@19.1.0)(typescript@5.8.3): + next-intl@4.0.2(next@15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3))(react@19.1.0)(typescript@5.8.3): dependencies: '@formatjs/intl-localematcher': 0.5.5 negotiator: 1.0.0 - next: 15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) + next: 15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3) react: 19.1.0 use-intl: 4.0.2(react@19.1.0) optionalDependencies: typescript: 5.8.3 - next@15.2.5(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3): + next@15.3.0(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(sass@1.86.3): dependencies: - '@next/env': 15.2.5 + '@next/env': 15.3.0 '@swc/counter': 0.1.3 '@swc/helpers': 0.5.15 busboy: 1.6.0 @@ -16783,17 +16874,17 @@ snapshots: react-dom: 19.1.0(react@19.1.0) styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.1.0) optionalDependencies: - '@next/swc-darwin-arm64': 15.2.5 - '@next/swc-darwin-x64': 15.2.5 - '@next/swc-linux-arm64-gnu': 15.2.5 - '@next/swc-linux-arm64-musl': 15.2.5 - '@next/swc-linux-x64-gnu': 15.2.5 - '@next/swc-linux-x64-musl': 15.2.5 - '@next/swc-win32-arm64-msvc': 15.2.5 - '@next/swc-win32-x64-msvc': 15.2.5 + '@next/swc-darwin-arm64': 15.3.0 + '@next/swc-darwin-x64': 15.3.0 + '@next/swc-linux-arm64-gnu': 15.3.0 + '@next/swc-linux-arm64-musl': 15.3.0 + '@next/swc-linux-x64-gnu': 15.3.0 + '@next/swc-linux-x64-musl': 15.3.0 + '@next/swc-win32-arm64-msvc': 15.3.0 + '@next/swc-win32-x64-msvc': 15.3.0 '@playwright/test': 1.49.1 sass: 1.86.3 - sharp: 0.33.5 + sharp: 0.34.1 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -16988,18 +17079,18 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 - octokit@4.1.2: + octokit@4.1.3: dependencies: - '@octokit/app': 15.1.4 - '@octokit/core': 6.1.4 + '@octokit/app': 15.1.6 + '@octokit/core': 6.1.5 '@octokit/oauth-app': 7.1.6 - '@octokit/plugin-paginate-graphql': 5.2.4(@octokit/core@6.1.4) - '@octokit/plugin-paginate-rest': 11.4.2(@octokit/core@6.1.4) - '@octokit/plugin-rest-endpoint-methods': 13.3.1(@octokit/core@6.1.4) - '@octokit/plugin-retry': 7.1.4(@octokit/core@6.1.4) - '@octokit/plugin-throttling': 9.4.0(@octokit/core@6.1.4) - '@octokit/request-error': 6.1.7 - '@octokit/types': 13.7.0 + '@octokit/plugin-paginate-graphql': 5.2.4(@octokit/core@6.1.5) + '@octokit/plugin-paginate-rest': 12.0.0(@octokit/core@6.1.5) + '@octokit/plugin-rest-endpoint-methods': 14.0.0(@octokit/core@6.1.5) + '@octokit/plugin-retry': 7.2.1(@octokit/core@6.1.5) + '@octokit/plugin-throttling': 10.0.0(@octokit/core@6.1.5) + '@octokit/request-error': 6.1.8 + '@octokit/types': 14.0.0 ofetch@1.4.1: dependencies: @@ -17519,7 +17610,7 @@ snapshots: proxmox-api@1.1.1: dependencies: - undici: 7.7.0 + undici: 7.8.0 proxy-agent@6.5.0: dependencies: @@ -17641,35 +17732,35 @@ snapshots: react: 19.1.0 react-dom: 19.1.0(react@19.1.0) - react-redux@9.2.0(@types/react@19.1.0)(react@19.1.0)(redux@5.0.1): + react-redux@9.2.0(@types/react@19.1.1)(react@19.1.0)(redux@5.0.1): dependencies: '@types/use-sync-external-store': 0.0.6 react: 19.1.0 use-sync-external-store: 1.4.0(react@19.1.0) optionalDependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.1 redux: 5.0.1 react-refresh@0.14.2: {} - react-remove-scroll-bar@2.3.8(@types/react@19.1.0)(react@19.1.0): + react-remove-scroll-bar@2.3.8(@types/react@19.1.1)(react@19.1.0): dependencies: react: 19.1.0 - react-style-singleton: 2.2.3(@types/react@19.1.0)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.1.1)(react@19.1.0) tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.1 - react-remove-scroll@2.6.2(@types/react@19.1.0)(react@19.1.0): + react-remove-scroll@2.6.2(@types/react@19.1.1)(react@19.1.0): dependencies: react: 19.1.0 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.0)(react@19.1.0) - react-style-singleton: 2.2.3(@types/react@19.1.0)(react@19.1.0) + react-remove-scroll-bar: 2.3.8(@types/react@19.1.1)(react@19.1.0) + react-style-singleton: 2.2.3(@types/react@19.1.1)(react@19.1.0) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.0)(react@19.1.0) - use-sidecar: 1.1.2(@types/react@19.1.0)(react@19.1.0) + use-callback-ref: 1.3.3(@types/react@19.1.1)(react@19.1.0) + use-sidecar: 1.1.2(@types/react@19.1.1)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.1 react-scan@0.0.31: dependencies: @@ -17692,13 +17783,13 @@ snapshots: react-dom: 19.1.0(react@19.1.0) react-transition-group: 4.4.5(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react-style-singleton@2.2.3(@types/react@19.1.0)(react@19.1.0): + react-style-singleton@2.2.3(@types/react@19.1.1)(react@19.1.0): dependencies: get-nonce: 1.0.1 react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.1 react-syntax-highlighter@15.6.1(react@19.1.0): dependencies: @@ -17710,12 +17801,12 @@ snapshots: react: 19.1.0 refractor: 3.6.0 - react-textarea-autosize@8.5.9(@types/react@19.1.0)(react@19.1.0): + react-textarea-autosize@8.5.9(@types/react@19.1.1)(react@19.1.0): dependencies: '@babel/runtime': 7.25.6 react: 19.1.0 use-composed-ref: 1.3.0(react@19.1.0) - use-latest: 1.2.1(@types/react@19.1.0)(react@19.1.0) + use-latest: 1.2.1(@types/react@19.1.1)(react@19.1.0) transitivePeerDependencies: - '@types/react' @@ -18104,6 +18195,9 @@ snapshots: semver@7.6.3: {} + semver@7.7.1: + optional: true + sentence-case@2.1.1: dependencies: no-case: 2.3.2 @@ -18144,31 +18238,32 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 - sharp@0.33.5: + sharp@0.34.1: dependencies: color: 4.2.3 detect-libc: 2.0.3 - semver: 7.6.3 + semver: 7.7.1 optionalDependencies: - '@img/sharp-darwin-arm64': 0.33.5 - '@img/sharp-darwin-x64': 0.33.5 - '@img/sharp-libvips-darwin-arm64': 1.0.4 - '@img/sharp-libvips-darwin-x64': 1.0.4 - '@img/sharp-libvips-linux-arm': 1.0.5 - '@img/sharp-libvips-linux-arm64': 1.0.4 - '@img/sharp-libvips-linux-s390x': 1.0.4 - '@img/sharp-libvips-linux-x64': 1.0.4 - '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 - '@img/sharp-libvips-linuxmusl-x64': 1.0.4 - '@img/sharp-linux-arm': 0.33.5 - '@img/sharp-linux-arm64': 0.33.5 - '@img/sharp-linux-s390x': 0.33.5 - '@img/sharp-linux-x64': 0.33.5 - '@img/sharp-linuxmusl-arm64': 0.33.5 - '@img/sharp-linuxmusl-x64': 0.33.5 - '@img/sharp-wasm32': 0.33.5 - '@img/sharp-win32-ia32': 0.33.5 - '@img/sharp-win32-x64': 0.33.5 + '@img/sharp-darwin-arm64': 0.34.1 + '@img/sharp-darwin-x64': 0.34.1 + '@img/sharp-libvips-darwin-arm64': 1.1.0 + '@img/sharp-libvips-darwin-x64': 1.1.0 + '@img/sharp-libvips-linux-arm': 1.1.0 + '@img/sharp-libvips-linux-arm64': 1.1.0 + '@img/sharp-libvips-linux-ppc64': 1.1.0 + '@img/sharp-libvips-linux-s390x': 1.1.0 + '@img/sharp-libvips-linux-x64': 1.1.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + '@img/sharp-linux-arm': 0.34.1 + '@img/sharp-linux-arm64': 0.34.1 + '@img/sharp-linux-s390x': 0.34.1 + '@img/sharp-linux-x64': 0.34.1 + '@img/sharp-linuxmusl-arm64': 0.34.1 + '@img/sharp-linuxmusl-x64': 0.34.1 + '@img/sharp-wasm32': 0.34.1 + '@img/sharp-win32-ia32': 0.34.1 + '@img/sharp-win32-x64': 0.34.1 optional: true shebang-command@2.0.0: @@ -18571,7 +18666,7 @@ snapshots: transitivePeerDependencies: - debug - swagger-ui-react@5.20.7(@types/react@19.1.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + swagger-ui-react@5.20.8(@types/react@19.1.1)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: '@babel/runtime-corejs3': 7.27.0 '@scarf/scarf': 1.4.0 @@ -18595,7 +18690,7 @@ snapshots: react-immutable-proptypes: 2.2.0(immutable@3.8.2) react-immutable-pure-component: 2.2.2(immutable@3.8.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) react-inspector: 6.0.2(react@19.1.0) - react-redux: 9.2.0(@types/react@19.1.0)(react@19.1.0)(redux@5.0.1) + react-redux: 9.2.0(@types/react@19.1.1)(react@19.1.0)(redux@5.0.1) react-syntax-highlighter: 15.6.1(react@19.1.0) redux: 5.0.1 redux-immutable: 4.0.0(immutable@3.8.2) @@ -18715,7 +18810,7 @@ snapshots: glob: 10.4.5 minimatch: 9.0.5 - testcontainers@10.24.1: + testcontainers@10.24.2: dependencies: '@balena/dockerignore': 1.0.2 '@types/dockerode': 3.3.37 @@ -18856,9 +18951,9 @@ snapshots: triple-beam@1.4.1: {} - trpc-to-openapi@2.1.5(@trpc/server@11.0.4(typescript@5.8.3))(zod-openapi@2.19.0(zod@3.24.2))(zod@3.24.2): + trpc-to-openapi@2.1.5(@trpc/server@11.1.0(typescript@5.8.3))(zod-openapi@2.19.0(zod@3.24.2))(zod@3.24.2): dependencies: - '@trpc/server': 11.0.4(typescript@5.8.3) + '@trpc/server': 11.1.0(typescript@5.8.3) co-body: 6.2.0 h3: 1.13.0 openapi3-ts: 4.4.0 @@ -19101,7 +19196,7 @@ snapshots: dependencies: '@fastify/busboy': 2.1.1 - undici@7.7.0: {} + undici@7.8.0: {} unenv@1.10.0: dependencies: @@ -19199,12 +19294,12 @@ snapshots: url-toolkit@2.2.5: {} - use-callback-ref@1.3.3(@types/react@19.1.0)(react@19.1.0): + use-callback-ref@1.3.3(@types/react@19.1.1)(react@19.1.0): dependencies: react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.1 use-composed-ref@1.3.0(react@19.1.0): dependencies: @@ -19223,26 +19318,26 @@ snapshots: intl-messageformat: 10.7.1 react: 19.1.0 - use-isomorphic-layout-effect@1.1.2(@types/react@19.1.0)(react@19.1.0): + use-isomorphic-layout-effect@1.1.2(@types/react@19.1.1)(react@19.1.0): dependencies: react: 19.1.0 optionalDependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.1 - use-latest@1.2.1(@types/react@19.1.0)(react@19.1.0): + use-latest@1.2.1(@types/react@19.1.1)(react@19.1.0): dependencies: react: 19.1.0 - use-isomorphic-layout-effect: 1.1.2(@types/react@19.1.0)(react@19.1.0) + use-isomorphic-layout-effect: 1.1.2(@types/react@19.1.1)(react@19.1.0) optionalDependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.1 - use-sidecar@1.1.2(@types/react@19.1.0)(react@19.1.0): + use-sidecar@1.1.2(@types/react@19.1.1)(react@19.1.0): dependencies: detect-node-es: 1.1.0 react: 19.1.0 tslib: 2.8.1 optionalDependencies: - '@types/react': 19.1.0 + '@types/react': 19.1.1 use-sync-external-store@1.4.0(react@19.1.0): dependencies: diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json index 3547c0bd7..9d753bf60 100644 --- a/tooling/eslint/package.json +++ b/tooling/eslint/package.json @@ -17,8 +17,8 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@next/eslint-plugin-next": "15.2.5", - "eslint-config-prettier": "^10.1.1", + "@next/eslint-plugin-next": "15.3.0", + "eslint-config-prettier": "^10.1.2", "eslint-config-turbo": "^2.5.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.2",