From d98552540a9eb3c24ba92a490f921c2b1911b1f6 Mon Sep 17 00:00:00 2001 From: Meier Lukas Date: Sat, 4 Jan 2025 19:47:23 +0100 Subject: [PATCH] fix(deps): update nextjs monorepo to v15 (major) (#1844) --- apps/nextjs/package.json | 14 +- .../app/[locale]/_client-providers/trpc.tsx | 3 +- .../app/[locale]/auth/invite/[id]/page.tsx | 12 +- .../src/app/[locale]/auth/login/page.tsx | 7 +- .../[locale]/boards/[name]/settings/page.tsx | 14 +- .../app/[locale]/boards/_layout-creator.tsx | 4 +- apps/nextjs/src/app/[locale]/layout.tsx | 12 +- .../src/app/[locale]/manage/about/page.tsx | 6 +- .../[locale]/manage/apps/edit/[id]/page.tsx | 5 +- .../manage/integrations/edit/[id]/page.tsx | 5 +- .../[locale]/manage/integrations/new/page.tsx | 11 +- .../app/[locale]/manage/integrations/page.tsx | 7 +- .../src/app/[locale]/manage/medias/page.tsx | 4 +- .../manage/search-engines/edit/[id]/page.tsx | 5 +- .../[locale]/manage/search-engines/page.tsx | 4 +- .../app/[locale]/manage/tools/api/page.tsx | 2 +- .../manage/users/[userId]/general/page.tsx | 10 +- .../[locale]/manage/users/[userId]/layout.tsx | 8 +- .../manage/users/[userId]/security/page.tsx | 7 +- .../manage/users/groups/[id]/layout.tsx | 8 +- .../manage/users/groups/[id]/members/page.tsx | 12 +- .../manage/users/groups/[id]/page.tsx | 7 +- .../users/groups/[id]/permissions/page.tsx | 7 +- .../app/[locale]/manage/users/groups/page.tsx | 4 +- .../src/app/[locale]/widgets/[kind]/page.tsx | 6 +- apps/nextjs/src/app/api/[...trpc]/route.ts | 11 +- .../src/app/api/auth/[...nextauth]/route.ts | 11 +- .../src/app/api/user-medias/[id]/route.ts | 3 +- .../src/components/user-avatar-menu.tsx | 4 +- apps/nextjs/src/middleware.ts | 2 +- apps/nextjs/src/theme/color-scheme.ts | 2 +- packages/api/package.json | 8 +- packages/api/src/client.ts | 42 +- packages/api/src/server.ts | 2 +- packages/api/src/shared.ts | 38 ++ packages/auth/configuration.ts | 7 +- packages/auth/events.ts | 2 +- packages/auth/index.ts | 4 +- packages/auth/package.json | 6 +- packages/auth/test/events.spec.ts | 4 +- packages/common/package.json | 5 +- packages/modals-collection/package.json | 5 +- packages/modals/package.json | 2 +- packages/old-import/package.json | 5 +- packages/spotlight/package.json | 5 +- packages/translation/package.json | 5 +- packages/ui/package.json | 5 +- packages/widgets/package.json | 5 +- packages/widgets/src/notebook/component.tsx | 2 + pnpm-lock.yaml | 544 +++++++++++++----- tooling/eslint/package.json | 2 +- 51 files changed, 601 insertions(+), 314 deletions(-) create mode 100644 packages/api/src/shared.ts diff --git a/apps/nextjs/package.json b/apps/nextjs/package.json index 1dbb4e343..1cda72129 100644 --- a/apps/nextjs/package.json +++ b/apps/nextjs/package.json @@ -6,7 +6,7 @@ "scripts": { "build": "pnpm with-env next build", "clean": "git clean -xdf .next .turbo node_modules", - "dev": "pnpm with-env next dev", + "dev": "pnpm with-env next dev --turbopack", "format": "prettier --check . --ignore-path ../../.gitignore", "lint": "eslint", "start": "pnpm with-env next start", @@ -23,7 +23,7 @@ "@homarr/db": "workspace:^0.1.0", "@homarr/definitions": "workspace:^0.1.0", "@homarr/form": "workspace:^0.1.0", - "@homarr/gridstack": "^1.11.2", + "@homarr/gridstack": "^1.11.3", "@homarr/integrations": "workspace:^0.1.0", "@homarr/log": "workspace:^", "@homarr/modals": "workspace:^0.1.0", @@ -65,11 +65,11 @@ "glob": "^11.0.0", "jotai": "^2.11.0", "mantine-react-table": "2.0.0-beta.7", - "next": "^14.2.22", + "next": "15.1.3", "postcss-preset-mantine": "^1.17.0", "prismjs": "^1.29.0", - "react": "^19.0.0", - "react-dom": "^19.0.0", + "react": "19.0.0", + "react-dom": "19.0.0", "react-error-boundary": "^5.0.0", "react-simple-code-editor": "^0.14.1", "sass": "^1.83.1", @@ -84,8 +84,8 @@ "@types/chroma-js": "2.4.5", "@types/node": "^22.10.5", "@types/prismjs": "^1.26.5", - "@types/react": "^19.0.2", - "@types/react-dom": "^19.0.2", + "@types/react": "19.0.2", + "@types/react-dom": "19.0.2", "@types/swagger-ui-react": "^4.18.3", "concurrently": "^9.1.2", "eslint": "^9.17.0", diff --git a/apps/nextjs/src/app/[locale]/_client-providers/trpc.tsx b/apps/nextjs/src/app/[locale]/_client-providers/trpc.tsx index 45249c800..52d5c10b7 100644 --- a/apps/nextjs/src/app/[locale]/_client-providers/trpc.tsx +++ b/apps/nextjs/src/app/[locale]/_client-providers/trpc.tsx @@ -18,7 +18,8 @@ import superjson from "superjson"; import type { SuperJSONResult } from "superjson"; import type { AppRouter } from "@homarr/api"; -import { clientApi, createHeadersCallbackForSource, getTrpcUrl } from "@homarr/api/client"; +import { clientApi, getTrpcUrl } from "@homarr/api/client"; +import { createHeadersCallbackForSource } from "@homarr/api/shared"; import { env } from "~/env.mjs"; diff --git a/apps/nextjs/src/app/[locale]/auth/invite/[id]/page.tsx b/apps/nextjs/src/app/[locale]/auth/invite/[id]/page.tsx index 5edeabcd0..7de11ff0f 100644 --- a/apps/nextjs/src/app/[locale]/auth/invite/[id]/page.tsx +++ b/apps/nextjs/src/app/[locale]/auth/invite/[id]/page.tsx @@ -11,15 +11,17 @@ import { HomarrLogoWithTitle } from "~/components/layout/logo/homarr-logo"; import { RegistrationForm } from "./_registration-form"; interface InviteUsagePageProps { - params: { + params: Promise<{ id: string; - }; - searchParams: { + }>; + searchParams: Promise<{ token: string; - }; + }>; } -export default async function InviteUsagePage({ params, searchParams }: InviteUsagePageProps) { +export default async function InviteUsagePage(props: InviteUsagePageProps) { + const searchParams = await props.searchParams; + const params = await props.params; if (!isProviderEnabled("credentials")) notFound(); const session = await auth(); diff --git a/apps/nextjs/src/app/[locale]/auth/login/page.tsx b/apps/nextjs/src/app/[locale]/auth/login/page.tsx index b20d3fce1..9b5dfbd83 100644 --- a/apps/nextjs/src/app/[locale]/auth/login/page.tsx +++ b/apps/nextjs/src/app/[locale]/auth/login/page.tsx @@ -9,12 +9,13 @@ import { HomarrLogoWithTitle } from "~/components/layout/logo/homarr-logo"; import { LoginForm } from "./_login-form"; interface LoginProps { - searchParams: { + searchParams: Promise<{ callbackUrl?: string; - }; + }>; } -export default async function Login({ searchParams }: LoginProps) { +export default async function Login(props: LoginProps) { + const searchParams = await props.searchParams; const session = await auth(); if (session) { diff --git a/apps/nextjs/src/app/[locale]/boards/[name]/settings/page.tsx b/apps/nextjs/src/app/[locale]/boards/[name]/settings/page.tsx index e5d634e33..36818573a 100644 --- a/apps/nextjs/src/app/[locale]/boards/[name]/settings/page.tsx +++ b/apps/nextjs/src/app/[locale]/boards/[name]/settings/page.tsx @@ -31,15 +31,15 @@ import { GeneralSettingsContent } from "./_general"; import { LayoutSettingsContent } from "./_layout"; interface Props { - params: { + params: Promise<{ name: string; - }; - searchParams: { + }>; + searchParams: Promise<{ tab?: keyof TranslationObject["board"]["setting"]["section"]; - }; + }>; } -const getBoardAndPermissionsAsync = async (params: Props["params"]) => { +const getBoardAndPermissionsAsync = async (params: Awaited) => { try { const board = await api.board.getBoardByName({ name: params.name }); const { hasFullAccess } = await getBoardPermissionsAsync(board); @@ -63,7 +63,9 @@ const getBoardAndPermissionsAsync = async (params: Props["params"]) => { } }; -export default async function BoardSettingsPage({ params, searchParams }: Props) { +export default async function BoardSettingsPage(props: Props) { + const searchParams = await props.searchParams; + const params = await props.params; const { board, permissions } = await getBoardAndPermissionsAsync(params); const boardSettings = await getServerSettingByKeyAsync(db, "board"); const { hasFullAccess, hasChangeAccess } = await getBoardPermissionsAsync(board); diff --git a/apps/nextjs/src/app/[locale]/boards/_layout-creator.tsx b/apps/nextjs/src/app/[locale]/boards/_layout-creator.tsx index 9172515b9..22a4e53c0 100644 --- a/apps/nextjs/src/app/[locale]/boards/_layout-creator.tsx +++ b/apps/nextjs/src/app/[locale]/boards/_layout-creator.tsx @@ -28,9 +28,9 @@ export const createBoardLayout = ({ params, children, }: PropsWithChildren<{ - params: TParams; + params: Promise; }>) => { - const initialBoard = await getInitialBoard(params).catch((error) => { + const initialBoard = await getInitialBoard(await params).catch((error) => { if (error instanceof TRPCError && error.code === "NOT_FOUND") { logger.warn(error); notFound(); diff --git a/apps/nextjs/src/app/[locale]/layout.tsx b/apps/nextjs/src/app/[locale]/layout.tsx index afa2e413e..6469ddd39 100644 --- a/apps/nextjs/src/app/[locale]/layout.tsx +++ b/apps/nextjs/src/app/[locale]/layout.tsx @@ -14,6 +14,7 @@ import { auth } from "@homarr/auth/next"; import { ModalProvider } from "@homarr/modals"; import { Notifications } from "@homarr/notifications"; import { SpotlightProvider } from "@homarr/spotlight"; +import type { SupportedLanguage } from "@homarr/translation"; import { isLocaleRTL, isLocaleSupported } from "@homarr/translation"; import { getI18nMessages } from "@homarr/translation/server"; @@ -63,14 +64,17 @@ export const viewport: Viewport = { ], }; -export default async function Layout(props: { children: React.ReactNode; params: { locale: string } }) { - if (!isLocaleSupported(props.params.locale)) { +export default async function Layout(props: { + children: React.ReactNode; + params: Promise<{ locale: SupportedLanguage }>; +}) { + if (!isLocaleSupported((await props.params).locale)) { notFound(); } const session = await auth(); const colorScheme = await getCurrentColorSchemeAsync(); - const direction = isLocaleRTL(props.params.locale) ? "rtl" : "ltr"; + const direction = isLocaleRTL((await props.params).locale) ? "rtl" : "ltr"; const i18nMessages = await getI18nMessages(); const StackedProvider = composeWrappers([ @@ -89,7 +93,7 @@ export default async function Layout(props: { children: React.ReactNode; params: return ( // Instead of ColorSchemScript we use data-mantine-color-scheme to prevent flickering { +const getHostAsync = async () => { if (process.env.HOSTNAME) { return `${process.env.HOSTNAME}:3000`; } - return headers().get("host"); + return (await headers()).get("host"); }; export default async function AboutPage() { - const baseServerUrl = `http://${getHost()}`; + const baseServerUrl = `http://${await getHostAsync()}`; const t = await getScopedI18n("management.page.about"); const attributes = await getPackageAttributesAsync(); const githubContributors = (await fetch(`${baseServerUrl}/api/about/contributors/github`).then((res) => diff --git a/apps/nextjs/src/app/[locale]/manage/apps/edit/[id]/page.tsx b/apps/nextjs/src/app/[locale]/manage/apps/edit/[id]/page.tsx index f5fbc5d6f..a931b2ece 100644 --- a/apps/nextjs/src/app/[locale]/manage/apps/edit/[id]/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/apps/edit/[id]/page.tsx @@ -9,10 +9,11 @@ import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; import { AppEditForm } from "./_app-edit-form"; interface AppEditPageProps { - params: { id: string }; + params: Promise<{ id: string }>; } -export default async function AppEditPage({ params }: AppEditPageProps) { +export default async function AppEditPage(props: AppEditPageProps) { + const params = await props.params; const session = await auth(); if (!session?.user.permissions.includes("app-modify-all")) { diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/edit/[id]/page.tsx b/apps/nextjs/src/app/[locale]/manage/integrations/edit/[id]/page.tsx index ede3d7a71..8cd8bf01b 100644 --- a/apps/nextjs/src/app/[locale]/manage/integrations/edit/[id]/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/integrations/edit/[id]/page.tsx @@ -11,10 +11,11 @@ import { IntegrationAccessSettings } from "../../_components/integration-access- import { EditIntegrationForm } from "./_integration-edit-form"; interface EditIntegrationPageProps { - params: { id: string }; + params: Promise<{ id: string }>; } -export default async function EditIntegrationPage({ params }: EditIntegrationPageProps) { +export default async function EditIntegrationPage(props: EditIntegrationPageProps) { + const params = await props.params; const editT = await getScopedI18n("integration.page.edit"); const t = await getI18n(); const integration = await api.integration.byId({ id: params.id }).catch(catchTrpcNotFound); diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/new/page.tsx b/apps/nextjs/src/app/[locale]/manage/integrations/new/page.tsx index fc77ba479..4237c1422 100644 --- a/apps/nextjs/src/app/[locale]/manage/integrations/new/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/integrations/new/page.tsx @@ -13,12 +13,15 @@ import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; import { NewIntegrationForm } from "./_integration-new-form"; interface NewIntegrationPageProps { - searchParams: Partial> & { - kind: IntegrationKind; - }; + searchParams: Promise< + Partial> & { + kind: IntegrationKind; + } + >; } -export default async function IntegrationsNewPage({ searchParams }: NewIntegrationPageProps) { +export default async function IntegrationsNewPage(props: NewIntegrationPageProps) { + const searchParams = await props.searchParams; const session = await auth(); if (!session?.user.permissions.includes("integration-create")) { notFound(); diff --git a/apps/nextjs/src/app/[locale]/manage/integrations/page.tsx b/apps/nextjs/src/app/[locale]/manage/integrations/page.tsx index 853630698..38a0a2cdf 100644 --- a/apps/nextjs/src/app/[locale]/manage/integrations/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/integrations/page.tsx @@ -46,12 +46,13 @@ import { DeleteIntegrationActionButton } from "./_integration-buttons"; import { IntegrationCreateDropdownContent } from "./new/_integration-new-dropdown"; interface IntegrationsPageProps { - searchParams: { + searchParams: Promise<{ tab?: IntegrationKind; - }; + }>; } -export default async function IntegrationsPage({ searchParams }: IntegrationsPageProps) { +export default async function IntegrationsPage(props: IntegrationsPageProps) { + const searchParams = await props.searchParams; const session = await auth(); if (!session) { diff --git a/apps/nextjs/src/app/[locale]/manage/medias/page.tsx b/apps/nextjs/src/app/[locale]/manage/medias/page.tsx index 5052194c9..17c01f519 100644 --- a/apps/nextjs/src/app/[locale]/manage/medias/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/medias/page.tsx @@ -34,7 +34,7 @@ type SearchParamsSchemaInputFromSchema> }>; interface MediaListPageProps { - searchParams: SearchParamsSchemaInputFromSchema>; + searchParams: Promise>>; } export default async function GroupsListPage(props: MediaListPageProps) { @@ -45,7 +45,7 @@ export default async function GroupsListPage(props: MediaListPageProps) { } const t = await getI18n(); - const searchParams = searchParamsSchema.parse(props.searchParams); + const searchParams = searchParamsSchema.parse(await props.searchParams); const { items: medias, totalCount } = await api.media.getPaginated(searchParams); return ( diff --git a/apps/nextjs/src/app/[locale]/manage/search-engines/edit/[id]/page.tsx b/apps/nextjs/src/app/[locale]/manage/search-engines/edit/[id]/page.tsx index 39dfd8f63..9d618ad82 100644 --- a/apps/nextjs/src/app/[locale]/manage/search-engines/edit/[id]/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/search-engines/edit/[id]/page.tsx @@ -10,10 +10,11 @@ import { DynamicBreadcrumb } from "~/components/navigation/dynamic-breadcrumb"; import { SearchEngineEditForm } from "./_search-engine-edit-form"; interface SearchEngineEditPageProps { - params: { id: string }; + params: Promise<{ id: string }>; } -export default async function SearchEngineEditPage({ params }: SearchEngineEditPageProps) { +export default async function SearchEngineEditPage(props: SearchEngineEditPageProps) { + const params = await props.params; const session = await auth(); if (!session?.user.permissions.includes("search-engine-modify-all")) { diff --git a/apps/nextjs/src/app/[locale]/manage/search-engines/page.tsx b/apps/nextjs/src/app/[locale]/manage/search-engines/page.tsx index 8fe7254ec..e7af60531 100644 --- a/apps/nextjs/src/app/[locale]/manage/search-engines/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/search-engines/page.tsx @@ -27,7 +27,7 @@ type SearchParamsSchemaInputFromSchema> }>; interface SearchEnginesPageProps { - searchParams: SearchParamsSchemaInputFromSchema>; + searchParams: Promise>>; } export default async function SearchEnginesPage(props: SearchEnginesPageProps) { @@ -37,7 +37,7 @@ export default async function SearchEnginesPage(props: SearchEnginesPageProps) { redirect("/auth/login"); } - const searchParams = searchParamsSchema.parse(props.searchParams); + const searchParams = searchParamsSchema.parse(await props.searchParams); const { items: searchEngines, totalCount } = await api.searchEngine.getPaginated(searchParams); const tEngine = await getScopedI18n("search.engine"); diff --git a/apps/nextjs/src/app/[locale]/manage/tools/api/page.tsx b/apps/nextjs/src/app/[locale]/manage/tools/api/page.tsx index d91fdd3f7..adfa1648a 100644 --- a/apps/nextjs/src/app/[locale]/manage/tools/api/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/tools/api/page.tsx @@ -30,7 +30,7 @@ export default async function ApiPage() { if (!session?.user || !session.user.permissions.includes("admin")) { notFound(); } - const document = openApiDocument(extractBaseUrlFromHeaders(headers())); + const document = openApiDocument(extractBaseUrlFromHeaders(await headers())); const apiKeys = await api.apiKeys.getAll(); const t = await getScopedI18n("management.page.tool.api.tab"); diff --git a/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/page.tsx b/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/page.tsx index e41d38536..9acc8ff34 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/[userId]/general/page.tsx @@ -19,12 +19,13 @@ import { UserProfileAvatarForm } from "./_components/_profile-avatar-form"; import { UserProfileForm } from "./_components/_profile-form"; interface Props { - params: { + params: Promise<{ userId: string; - }; + }>; } -export async function generateMetadata({ params }: Props) { +export async function generateMetadata(props: Props) { + const params = await props.params; const session = await auth(); const user = await api.user .getById({ @@ -43,7 +44,8 @@ export async function generateMetadata({ params }: Props) { }; } -export default async function EditUserPage({ params }: Props) { +export default async function EditUserPage(props: Props) { + const params = await props.params; const t = await getI18n(); const tGeneral = await getScopedI18n("management.page.user.setting.general"); const session = await auth(); diff --git a/apps/nextjs/src/app/[locale]/manage/users/[userId]/layout.tsx b/apps/nextjs/src/app/[locale]/manage/users/[userId]/layout.tsx index c7158379d..e2a43ccef 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/[userId]/layout.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/[userId]/layout.tsx @@ -15,10 +15,14 @@ import { NavigationLink } from "../groups/[id]/_navigation"; import { canAccessUserEditPage } from "./access"; interface LayoutProps { - params: { userId: string }; + params: Promise<{ userId: string }>; } -export default async function Layout({ children, params }: PropsWithChildren) { +export default async function Layout(props: PropsWithChildren) { + const params = await props.params; + + const { children } = props; + const session = await auth(); const t = await getI18n(); const tUser = await getScopedI18n("management.page.user"); diff --git a/apps/nextjs/src/app/[locale]/manage/users/[userId]/security/page.tsx b/apps/nextjs/src/app/[locale]/manage/users/[userId]/security/page.tsx index 9897268b2..f3098258b 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/[userId]/security/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/[userId]/security/page.tsx @@ -10,12 +10,13 @@ import { canAccessUserEditPage } from "../access"; import { ChangePasswordForm } from "./_components/_change-password-form"; interface Props { - params: { + params: Promise<{ userId: string; - }; + }>; } -export default async function UserSecurityPage({ params }: Props) { +export default async function UserSecurityPage(props: Props) { + const params = await props.params; const session = await auth(); const tSecurity = await getScopedI18n("management.page.user.setting.security"); const user = await api.user diff --git a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/layout.tsx b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/layout.tsx index 42d9acbc6..c10037abd 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/layout.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/layout.tsx @@ -10,10 +10,14 @@ import { ManageContainer } from "~/components/manage/manage-container"; import { NavigationLink } from "./_navigation"; interface LayoutProps { - params: { id: string }; + params: Promise<{ id: string }>; } -export default async function Layout({ children, params }: PropsWithChildren) { +export default async function Layout(props: PropsWithChildren) { + const params = await props.params; + + const { children } = props; + const t = await getI18n(); const tGroup = await getScopedI18n("management.page.group"); const group = await api.group.getById({ id: params.id }); diff --git a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/members/page.tsx b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/members/page.tsx index 11c6d1dad..9609a2089 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/members/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/members/page.tsx @@ -17,15 +17,17 @@ import { AddGroupMember } from "./_add-group-member"; import { RemoveGroupMember } from "./_remove-group-member"; interface GroupsDetailPageProps { - params: { + params: Promise<{ id: string; - }; - searchParams: { + }>; + searchParams: Promise<{ search: string | undefined; - }; + }>; } -export default async function GroupsDetailPage({ params, searchParams }: GroupsDetailPageProps) { +export default async function GroupsDetailPage(props: GroupsDetailPageProps) { + const searchParams = await props.searchParams; + const params = await props.params; const session = await auth(); if (!session?.user.permissions.includes("admin")) { diff --git a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/page.tsx b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/page.tsx index 8ec60e2f3..9a99aebc7 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/page.tsx @@ -14,12 +14,13 @@ import { ReservedGroupAlert } from "./_reserved-group-alert"; import { TransferGroupOwnership } from "./_transfer-group-ownership"; interface GroupsDetailPageProps { - params: { + params: Promise<{ id: string; - }; + }>; } -export default async function GroupsDetailPage({ params }: GroupsDetailPageProps) { +export default async function GroupsDetailPage(props: GroupsDetailPageProps) { + const params = await props.params; const session = await auth(); if (!session?.user.permissions.includes("admin")) { diff --git a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/permissions/page.tsx b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/permissions/page.tsx index f44397ab4..037c040c9 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/permissions/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/groups/[id]/permissions/page.tsx @@ -12,12 +12,13 @@ import { getI18n, getScopedI18n } from "@homarr/translation/server"; import { PermissionForm, PermissionSwitch, SaveAffix } from "./_group-permission-form"; interface GroupPermissionsPageProps { - params: { + params: Promise<{ id: string; - }; + }>; } -export default async function GroupPermissionsPage({ params }: GroupPermissionsPageProps) { +export default async function GroupPermissionsPage(props: GroupPermissionsPageProps) { + const params = await props.params; const session = await auth(); if (!session?.user.permissions.includes("admin")) { diff --git a/apps/nextjs/src/app/[locale]/manage/users/groups/page.tsx b/apps/nextjs/src/app/[locale]/manage/users/groups/page.tsx index 3fce6db2a..80c128c03 100644 --- a/apps/nextjs/src/app/[locale]/manage/users/groups/page.tsx +++ b/apps/nextjs/src/app/[locale]/manage/users/groups/page.tsx @@ -24,7 +24,7 @@ type SearchParamsSchemaInputFromSchema> }>; interface GroupsListPageProps { - searchParams: SearchParamsSchemaInputFromSchema>; + searchParams: Promise>>; } export default async function GroupsListPage(props: GroupsListPageProps) { @@ -35,7 +35,7 @@ export default async function GroupsListPage(props: GroupsListPageProps) { } const t = await getI18n(); - const searchParams = searchParamsSchema.parse(props.searchParams); + const searchParams = searchParamsSchema.parse(await props.searchParams); const { items: groups, totalCount } = await api.group.getPaginated(searchParams); return ( diff --git a/apps/nextjs/src/app/[locale]/widgets/[kind]/page.tsx b/apps/nextjs/src/app/[locale]/widgets/[kind]/page.tsx index 87be98a9b..bc3af8b27 100644 --- a/apps/nextjs/src/app/[locale]/widgets/[kind]/page.tsx +++ b/apps/nextjs/src/app/[locale]/widgets/[kind]/page.tsx @@ -9,11 +9,11 @@ import { env } from "~/env.mjs"; import { WidgetPreviewPageContent } from "./_content"; interface Props { - params: { kind: string }; + params: Promise<{ kind: string }>; } export default async function WidgetPreview(props: Props) { - if (!(props.params.kind in widgetImports || env.NODE_ENV !== "development")) { + if (!((await props.params).kind in widgetImports || env.NODE_ENV !== "development")) { notFound(); } @@ -26,7 +26,7 @@ export default async function WidgetPreview(props: Props) { }, }); - const sort = props.params.kind as WidgetKind; + const sort = (await props.params).kind as WidgetKind; return (
diff --git a/apps/nextjs/src/app/api/[...trpc]/route.ts b/apps/nextjs/src/app/api/[...trpc]/route.ts index 8d1d30f26..42a09e316 100644 --- a/apps/nextjs/src/app/api/[...trpc]/route.ts +++ b/apps/nextjs/src/app/api/[...trpc]/route.ts @@ -1,11 +1,10 @@ -import { headers } from "next/headers"; -import { userAgent } from "next/server"; import type { NextRequest } from "next/server"; +import { userAgent } from "next/server"; import { createOpenApiFetchHandler } from "trpc-to-openapi"; import { appRouter, createTRPCContext } from "@homarr/api"; -import { hashPasswordAsync } from "@homarr/auth"; import type { Session } from "@homarr/auth"; +import { hashPasswordAsync } from "@homarr/auth"; import { createSessionAsync } from "@homarr/auth/server"; import { db, eq } from "@homarr/db"; import { apiKeys } from "@homarr/db/schema"; @@ -13,7 +12,7 @@ import { logger } from "@homarr/log"; const handlerAsync = async (req: NextRequest) => { const apiKeyHeaderValue = req.headers.get("ApiKey"); - const ipAddress = req.ip ?? headers().get("x-forwarded-for"); + const ipAddress = req.headers.get("x-forwarded-for"); const { ua } = userAgent(req); const session: Session | null = await getSessionOrDefaultFromHeadersAsync(apiKeyHeaderValue, ipAddress, ua); @@ -88,9 +87,9 @@ const getSessionOrDefaultFromHeadersAsync = async ( }; export { + handlerAsync as DELETE, handlerAsync as GET, + handlerAsync as PATCH, handlerAsync as POST, handlerAsync as PUT, - handlerAsync as DELETE, - handlerAsync as PATCH, }; diff --git a/apps/nextjs/src/app/api/auth/[...nextauth]/route.ts b/apps/nextjs/src/app/api/auth/[...nextauth]/route.ts index ec6065d0c..e04a79859 100644 --- a/apps/nextjs/src/app/api/auth/[...nextauth]/route.ts +++ b/apps/nextjs/src/app/api/auth/[...nextauth]/route.ts @@ -1,16 +1,17 @@ import { NextRequest } from "next/server"; -import { createHandlers } from "@homarr/auth"; +import { createHandlersAsync } from "@homarr/auth"; import type { SupportedAuthProvider } from "@homarr/definitions"; import { logger } from "@homarr/log"; export const GET = async (req: NextRequest) => { - return await createHandlers(extractProvider(req), isSecureCookieEnabled(req)).handlers.GET(reqWithTrustedOrigin(req)); + const { handlers } = await createHandlersAsync(extractProvider(req), isSecureCookieEnabled(req)); + + return await handlers.GET(reqWithTrustedOrigin(req)); }; export const POST = async (req: NextRequest) => { - return await createHandlers(extractProvider(req), isSecureCookieEnabled(req)).handlers.POST( - reqWithTrustedOrigin(req), - ); + const { handlers } = await createHandlersAsync(extractProvider(req), isSecureCookieEnabled(req)); + return await handlers.POST(reqWithTrustedOrigin(req)); }; /** diff --git a/apps/nextjs/src/app/api/user-medias/[id]/route.ts b/apps/nextjs/src/app/api/user-medias/[id]/route.ts index 751895381..f00b3e089 100644 --- a/apps/nextjs/src/app/api/user-medias/[id]/route.ts +++ b/apps/nextjs/src/app/api/user-medias/[id]/route.ts @@ -5,7 +5,8 @@ import type { NextRequest } from "next/server"; import { db, eq } from "@homarr/db"; import { medias } from "@homarr/db/schema"; -export async function GET(_req: NextRequest, { params }: { params: { id: string } }) { +export async function GET(_req: NextRequest, props: { params: Promise<{ id: string }> }) { + const params = await props.params; const image = await db.query.medias.findFirst({ where: eq(medias.id, params.id), columns: { diff --git a/apps/nextjs/src/components/user-avatar-menu.tsx b/apps/nextjs/src/components/user-avatar-menu.tsx index df5f63549..d7a53f901 100644 --- a/apps/nextjs/src/components/user-avatar-menu.tsx +++ b/apps/nextjs/src/components/user-avatar-menu.tsx @@ -88,7 +88,7 @@ export const UserAvatarMenu = ({ children, availableUpdates }: UserAvatarMenuPro - + @@ -113,7 +113,7 @@ export const UserAvatarMenu = ({ children, availableUpdates }: UserAvatarMenuPro {t("logout")} ) : ( - router.push("/auth/login")} leftSection={}> + }> {t("login")} )} diff --git a/apps/nextjs/src/middleware.ts b/apps/nextjs/src/middleware.ts index 7d38cfa48..8db4c4108 100644 --- a/apps/nextjs/src/middleware.ts +++ b/apps/nextjs/src/middleware.ts @@ -4,7 +4,7 @@ import { createTRPCClient, httpLink } from "@trpc/client"; import SuperJSON from "superjson"; import type { AppRouter } from "@homarr/api"; -import { createHeadersCallbackForSource } from "@homarr/api/client"; +import { createHeadersCallbackForSource } from "@homarr/api/shared"; import { createI18nMiddleware } from "@homarr/translation/middleware"; export async function middleware(request: NextRequest) { diff --git a/apps/nextjs/src/theme/color-scheme.ts b/apps/nextjs/src/theme/color-scheme.ts index 4f069a1ef..284b636b4 100644 --- a/apps/nextjs/src/theme/color-scheme.ts +++ b/apps/nextjs/src/theme/color-scheme.ts @@ -7,7 +7,7 @@ import type { ColorScheme } from "@homarr/definitions"; import { colorSchemeCookieKey } from "@homarr/definitions"; export const getCurrentColorSchemeAsync = cache(async () => { - const cookieValue = cookies().get(colorSchemeCookieKey)?.value; + const cookieValue = (await cookies()).get(colorSchemeCookieKey)?.value; if (cookieValue) { return cookieValue as ColorScheme; diff --git a/packages/api/package.json b/packages/api/package.json index f2b98554f..da5ccfc5e 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -8,7 +8,8 @@ ".": "./src/index.ts", "./client": "./src/client.ts", "./server": "./src/server.ts", - "./websocket": "./src/websocket.ts" + "./websocket": "./src/websocket.ts", + "./shared": "./src/shared.ts" }, "main": "./index.ts", "types": "./index.ts", @@ -42,8 +43,9 @@ "@trpc/server": "next", "dockerode": "^4.0.3", "lodash.clonedeep": "^4.5.0", - "next": "^14.2.22", - "react": "^19.0.0", + "next": "15.1.3", + "react": "19.0.0", + "react-dom": "19.0.0", "superjson": "2.2.2", "trpc-to-openapi": "^2.1.1" }, diff --git a/packages/api/src/client.ts b/packages/api/src/client.ts index f39a3eba6..985446a6b 100644 --- a/packages/api/src/client.ts +++ b/packages/api/src/client.ts @@ -1,7 +1,10 @@ +"use client"; + import { createTRPCClient, createTRPCReact, httpLink } from "@trpc/react-query"; import SuperJSON from "superjson"; import type { AppRouter } from "."; +import { createHeadersCallbackForSource } from "./shared"; export const clientApi = createTRPCReact(); export const fetchApi = createTRPCClient({ @@ -26,42 +29,3 @@ function getBaseUrl() { export function getTrpcUrl() { return `${getBaseUrl()}/api/trpc`; } - -/** - * Creates a headers callback for a given source - * It will set the x-trpc-source header and cookies if needed - * @param source trpc source request comes from - * @returns headers callback - */ -export function createHeadersCallbackForSource(source: string) { - return async () => { - const headers = new Headers(); - headers.set("x-trpc-source", source); - - const cookies = await importCookiesAsync(); - // We need to set cookie for ssr requests (for example with useSuspenseQuery or middleware) - if (cookies) { - headers.set("cookie", cookies); - } - - return headers; - }; -} - -/** - * This is a workarround as cookies are not passed to the server - * when using useSuspenseQuery or middleware - * @returns cookie string on server or null on client - */ -async function importCookiesAsync() { - if (typeof window === "undefined") { - return await import("next/headers").then(({ cookies }) => - cookies() - .getAll() - .map(({ name, value }) => `${name}=${value}`) - .join(";"), - ); - } - - return null; -} diff --git a/packages/api/src/server.ts b/packages/api/src/server.ts index c7522c0af..08fc5e1e3 100644 --- a/packages/api/src/server.ts +++ b/packages/api/src/server.ts @@ -9,7 +9,7 @@ import { auth } from "@homarr/auth/next"; * handling a tRPC call from a React Server Component. */ const createContext = cache(async () => { - const heads = new Headers(headers()); + const heads = new Headers(await headers()); heads.set("x-trpc-source", "rsc"); return createTRPCContext({ diff --git a/packages/api/src/shared.ts b/packages/api/src/shared.ts new file mode 100644 index 000000000..b8ebcfcc6 --- /dev/null +++ b/packages/api/src/shared.ts @@ -0,0 +1,38 @@ +/** + * Creates a headers callback for a given source + * It will set the x-trpc-source header and cookies if needed + * @param source trpc source request comes from + * @returns headers callback + */ +export function createHeadersCallbackForSource(source: string) { + return async () => { + const headers = new Headers(); + headers.set("x-trpc-source", source); + + const cookies = await importCookiesAsync(); + // We need to set cookie for ssr requests (for example with useSuspenseQuery or middleware) + if (cookies) { + headers.set("cookie", cookies); + } + + return headers; + }; +} + +/** + * This is a workarround as cookies are not passed to the server + * when using useSuspenseQuery or middleware + * @returns cookie string on server or null on client + */ +async function importCookiesAsync() { + if (typeof window !== "undefined") { + return null; + } + + const { cookies } = await import("next/headers"); + + return (await cookies()) + .getAll() + .map(({ name, value }) => `${name}=${value}`) + .join(";"); +} diff --git a/packages/auth/configuration.ts b/packages/auth/configuration.ts index f13765536..49dd7126a 100644 --- a/packages/auth/configuration.ts +++ b/packages/auth/configuration.ts @@ -74,7 +74,7 @@ export const createConfiguration = ( userId: user.id, }); - cookies().set(sessionTokenCookieName, sessionToken, { + (await cookies()).set(sessionTokenCookieName, sessionToken, { path: "/", expires: expires, httpOnly: true, @@ -99,8 +99,9 @@ export const createConfiguration = ( error: "/auth/login", }, jwt: { - encode() { - const cookie = cookies().get(sessionTokenCookieName)?.value; + // eslint-disable-next-line no-restricted-syntax + async encode() { + const cookie = (await cookies()).get(sessionTokenCookieName)?.value; return cookie ?? ""; }, diff --git a/packages/auth/events.ts b/packages/auth/events.ts index 92987e0cf..6b299d0a9 100644 --- a/packages/auth/events.ts +++ b/packages/auth/events.ts @@ -54,7 +54,7 @@ export const createSignInEventHandler = (db: Database): Exclude - createConfiguration(provider, headers(), useSecureCookies); +export const createHandlersAsync = async (provider: SupportedAuthProvider | "unknown", useSecureCookies: boolean) => + createConfiguration(provider, await headers(), useSecureCookies); export { getSessionFromTokenAsync as getSessionFromToken, sessionTokenCookieName } from "./session"; diff --git a/packages/auth/package.json b/packages/auth/package.json index 3ade1c401..801554c42 100644 --- a/packages/auth/package.json +++ b/packages/auth/package.json @@ -34,10 +34,10 @@ "bcrypt": "^5.1.1", "cookies": "^0.9.1", "ldapts": "7.3.0", - "next": "^14.2.22", + "next": "15.1.3", "next-auth": "5.0.0-beta.25", - "react": "^19.0.0", - "react-dom": "^19.0.0" + "react": "19.0.0", + "react-dom": "19.0.0" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", diff --git a/packages/auth/test/events.spec.ts b/packages/auth/test/events.spec.ts index 5fb37a9a2..2bd4ad921 100644 --- a/packages/auth/test/events.spec.ts +++ b/packages/auth/test/events.spec.ts @@ -29,7 +29,7 @@ vi.mock("next/headers", async (importOriginal) => { vi.spyOn(result, "set"); - const cookies = () => result; + const cookies = () => Promise.resolve(result); return { ...mod, cookies } satisfies HeadersExport; }); @@ -238,7 +238,7 @@ describe("createSignInEventHandler should create signInEventHandler", () => { }); // Assert - expect(cookies().set).toHaveBeenCalledWith( + expect((await cookies()).set).toHaveBeenCalledWith( colorSchemeCookieKey, "dark", expect.objectContaining({ diff --git a/packages/common/package.json b/packages/common/package.json index b294e9abf..a2d0d2130 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -28,8 +28,9 @@ "dependencies": { "@homarr/log": "workspace:^0.1.0", "dayjs": "^1.11.13", - "next": "^14.2.22", - "react": "^19.0.0" + "next": "15.1.3", + "react": "19.0.0", + "react-dom": "19.0.0" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", diff --git a/packages/modals-collection/package.json b/packages/modals-collection/package.json index e7afee8fa..c7998951a 100644 --- a/packages/modals-collection/package.json +++ b/packages/modals-collection/package.json @@ -35,8 +35,9 @@ "@mantine/core": "^7.15.2", "@tabler/icons-react": "^3.26.0", "dayjs": "^1.11.13", - "next": "^14.2.22", - "react": "^19.0.0" + "next": "15.1.3", + "react": "19.0.0", + "react-dom": "19.0.0" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", diff --git a/packages/modals/package.json b/packages/modals/package.json index e940aa1f6..915afa700 100644 --- a/packages/modals/package.json +++ b/packages/modals/package.json @@ -26,7 +26,7 @@ "@homarr/ui": "workspace:^0.1.0", "@mantine/core": "^7.15.2", "@mantine/hooks": "^7.15.2", - "react": "^19.0.0" + "react": "19.0.0" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", diff --git a/packages/old-import/package.json b/packages/old-import/package.json index ec29f8684..11aee0b44 100644 --- a/packages/old-import/package.json +++ b/packages/old-import/package.json @@ -40,8 +40,9 @@ "@mantine/core": "^7.15.2", "@mantine/hooks": "^7.15.2", "adm-zip": "0.5.16", - "next": "^14.2.22", - "react": "^19.0.0", + "next": "15.1.3", + "react": "19.0.0", + "react-dom": "19.0.0", "superjson": "2.2.2", "zod": "^3.24.1", "zod-form-data": "^2.0.5" diff --git a/packages/spotlight/package.json b/packages/spotlight/package.json index 0c18f9c04..87433e780 100644 --- a/packages/spotlight/package.json +++ b/packages/spotlight/package.json @@ -37,8 +37,9 @@ "@mantine/spotlight": "^7.15.2", "@tabler/icons-react": "^3.26.0", "jotai": "^2.11.0", - "next": "^14.2.22", - "react": "^19.0.0", + "next": "15.1.3", + "react": "19.0.0", + "react-dom": "19.0.0", "use-deep-compare-effect": "^1.8.1" }, "devDependencies": { diff --git a/packages/translation/package.json b/packages/translation/package.json index fa20dedd4..230189471 100644 --- a/packages/translation/package.json +++ b/packages/translation/package.json @@ -32,9 +32,10 @@ "dayjs": "^1.11.13", "deepmerge": "4.3.1", "mantine-react-table": "2.0.0-beta.7", - "next": "^14.2.22", + "next": "15.1.3", "next-intl": "3.26.3", - "react": "^19.0.0" + "react": "19.0.0", + "react-dom": "19.0.0" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", diff --git a/packages/ui/package.json b/packages/ui/package.json index c0272e5c5..d9b323e0e 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -34,8 +34,9 @@ "@mantine/hooks": "^7.15.2", "@tabler/icons-react": "^3.26.0", "mantine-react-table": "2.0.0-beta.7", - "next": "^14.2.22", - "react": "^19.0.0" + "next": "15.1.3", + "react": "19.0.0", + "react-dom": "19.0.0" }, "devDependencies": { "@homarr/eslint-config": "workspace:^0.2.0", diff --git a/packages/widgets/package.json b/packages/widgets/package.json index a6bc44136..6da26e990 100644 --- a/packages/widgets/package.json +++ b/packages/widgets/package.json @@ -62,8 +62,9 @@ "clsx": "^2.1.1", "dayjs": "^1.11.13", "mantine-react-table": "2.0.0-beta.7", - "next": "^14.2.22", - "react": "^19.0.0", + "next": "15.1.3", + "react": "19.0.0", + "react-dom": "19.0.0", "video.js": "^8.21.0" }, "devDependencies": { diff --git a/packages/widgets/src/notebook/component.tsx b/packages/widgets/src/notebook/component.tsx index 5231e1db9..a9847eceb 100644 --- a/packages/widgets/src/notebook/component.tsx +++ b/packages/widgets/src/notebook/component.tsx @@ -1,3 +1,5 @@ +"use client"; + import dynamic from "next/dynamic"; import "@mantine/tiptap/styles.css"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d93d3ee9..c20399c34 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -104,8 +104,8 @@ importers: specifier: workspace:^0.1.0 version: link:../../packages/form '@homarr/gridstack': - specifier: ^1.11.2 - version: 1.11.2 + specifier: ^1.11.3 + version: 1.11.3 '@homarr/integrations': specifier: workspace:^0.1.0 version: link:../../packages/integrations @@ -183,13 +183,13 @@ importers: version: 5.62.15(@tanstack/react-query@5.62.15(react@19.0.0))(react@19.0.0) '@tanstack/react-query-next-experimental': specifier: 5.62.15 - version: 5.62.15(@tanstack/react-query@5.62.15(react@19.0.0))(next@14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0) + version: 5.62.15(@tanstack/react-query@5.62.15(react@19.0.0))(next@15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0) '@trpc/client': specifier: next version: 11.0.0-rc.682(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(typescript@5.7.2) '@trpc/next': specifier: next - version: 11.0.0-rc.682(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.682(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.0.0-rc.682(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.682(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2))(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(next@14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2) + version: 11.0.0-rc.682(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.682(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.0.0-rc.682(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.682(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2))(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(next@15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2) '@trpc/react-query': specifier: next version: 11.0.0-rc.682(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.682(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2) @@ -230,8 +230,8 @@ importers: specifier: 2.0.0-beta.7 version: 2.0.0-beta.7(@mantine/core@7.15.2(@mantine/hooks@7.15.2(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mantine/dates@7.15.2(@mantine/core@7.15.2(@mantine/hooks@7.15.2(react@19.0.0))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mantine/hooks@7.15.2(react@19.0.0))(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mantine/hooks@7.15.2(react@19.0.0))(@tabler/icons-react@3.26.0(react@19.0.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) next: - specifier: ^14.2.22 - version: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) postcss-preset-mantine: specifier: ^1.17.0 version: 1.17.0(postcss@8.4.47) @@ -239,10 +239,10 @@ importers: specifier: ^1.29.0 version: 1.29.0 react: - specifier: ^19.0.0 + specifier: 19.0.0 version: 19.0.0 react-dom: - specifier: ^19.0.0 + specifier: 19.0.0 version: 19.0.0(react@19.0.0) react-error-boundary: specifier: ^5.0.0 @@ -282,10 +282,10 @@ importers: specifier: ^1.26.5 version: 1.26.5 '@types/react': - specifier: ^19.0.2 + specifier: 19.0.2 version: 19.0.2 '@types/react-dom': - specifier: ^19.0.2 + specifier: 19.0.2 version: 19.0.2(@types/react@19.0.2) '@types/swagger-ui-react': specifier: ^4.18.3 @@ -555,11 +555,14 @@ importers: specifier: ^4.5.0 version: 4.5.0 next: - specifier: ^14.2.22 - version: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) react: - specifier: ^19.0.0 + specifier: 19.0.0 version: 19.0.0 + react-dom: + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) superjson: specifier: 2.2.2 version: 2.2.2 @@ -625,16 +628,16 @@ importers: specifier: 7.3.0 version: 7.3.0 next: - specifier: ^14.2.22 - version: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) next-auth: specifier: 5.0.0-beta.25 - version: 5.0.0-beta.25(next@14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0) + version: 5.0.0-beta.25(next@15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0) react: - specifier: ^19.0.0 + specifier: 19.0.0 version: 19.0.0 react-dom: - specifier: ^19.0.0 + specifier: 19.0.0 version: 19.0.0(react@19.0.0) devDependencies: '@homarr/eslint-config': @@ -705,11 +708,14 @@ importers: specifier: ^1.11.13 version: 1.11.13 next: - specifier: ^14.2.22 - version: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) react: - specifier: ^19.0.0 + specifier: 19.0.0 version: 19.0.0 + react-dom: + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1133,7 +1139,7 @@ importers: specifier: ^7.15.2 version: 7.15.2(react@19.0.0) react: - specifier: ^19.0.0 + specifier: 19.0.0 version: 19.0.0 devDependencies: '@homarr/eslint-config': @@ -1194,11 +1200,14 @@ importers: specifier: ^1.11.13 version: 1.11.13 next: - specifier: ^14.2.22 - version: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) react: - specifier: ^19.0.0 + specifier: 19.0.0 version: 19.0.0 + react-dom: + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1289,11 +1298,14 @@ importers: specifier: 0.5.16 version: 0.5.16 next: - specifier: ^14.2.22 - version: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) react: - specifier: ^19.0.0 + specifier: 19.0.0 version: 19.0.0 + react-dom: + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) superjson: specifier: 2.2.2 version: 2.2.2 @@ -1529,11 +1541,14 @@ importers: specifier: ^2.11.0 version: 2.11.0(@types/react@18.3.13)(react@19.0.0) next: - specifier: ^14.2.22 - version: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) react: - specifier: ^19.0.0 + specifier: 19.0.0 version: 19.0.0 + react-dom: + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) use-deep-compare-effect: specifier: ^1.8.1 version: 1.8.1(react@19.0.0) @@ -1572,14 +1587,17 @@ importers: specifier: 2.0.0-beta.7 version: 2.0.0-beta.7(@mantine/core@7.15.2(@mantine/hooks@7.15.2(react@19.0.0))(@types/react@18.3.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mantine/dates@7.15.2(@mantine/core@7.15.2(@mantine/hooks@7.15.2(react@19.0.0))(@types/react@18.3.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mantine/hooks@7.15.2(react@19.0.0))(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mantine/hooks@7.15.2(react@19.0.0))(@tabler/icons-react@3.26.0(react@19.0.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) next: - specifier: ^14.2.22 - version: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) next-intl: specifier: 3.26.3 - version: 3.26.3(next@14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0) + version: 3.26.3(next@15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0) react: - specifier: ^19.0.0 + specifier: 19.0.0 version: 19.0.0 + react-dom: + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1630,11 +1648,14 @@ importers: specifier: 2.0.0-beta.7 version: 2.0.0-beta.7(@mantine/core@7.15.2(@mantine/hooks@7.15.2(react@19.0.0))(@types/react@18.3.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mantine/dates@7.15.2(@mantine/core@7.15.2(@mantine/hooks@7.15.2(react@19.0.0))(@types/react@18.3.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mantine/hooks@7.15.2(react@19.0.0))(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mantine/hooks@7.15.2(react@19.0.0))(@tabler/icons-react@3.26.0(react@19.0.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) next: - specifier: ^14.2.22 - version: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) react: - specifier: ^19.0.0 + specifier: 19.0.0 version: 19.0.0 + react-dom: + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) devDependencies: '@homarr/eslint-config': specifier: workspace:^0.2.0 @@ -1803,11 +1824,14 @@ importers: specifier: 2.0.0-beta.7 version: 2.0.0-beta.7(@mantine/core@7.15.2(@mantine/hooks@7.15.2(react@19.0.0))(@types/react@18.3.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mantine/dates@7.15.2(@mantine/core@7.15.2(@mantine/hooks@7.15.2(react@19.0.0))(@types/react@18.3.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mantine/hooks@7.15.2(react@19.0.0))(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(@mantine/hooks@7.15.2(react@19.0.0))(@tabler/icons-react@3.26.0(react@19.0.0))(clsx@2.1.1)(dayjs@1.11.13)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) next: - specifier: ^14.2.22 - version: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + specifier: 15.1.3 + version: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) react: - specifier: ^19.0.0 + specifier: 19.0.0 version: 19.0.0 + react-dom: + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) video.js: specifier: ^8.21.0 version: 8.21.0 @@ -1834,8 +1858,8 @@ importers: tooling/eslint: dependencies: '@next/eslint-plugin-next': - specifier: ^14.2.22 - version: 14.2.22 + specifier: ^15.1.3 + version: 15.1.3 eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@9.17.0) @@ -2113,6 +2137,9 @@ packages: '@drizzle-team/brocli@0.11.0': resolution: {integrity: sha512-hD3pekGiPg0WPCCGAZmusBBJsDqGUR66Y452YgQsZOnkdQ7ViEPKuyP4huUGEZQefp8g34RRodXYmJ2TbCH+tg==} + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} deprecated: 'Merged into tsx: https://tsx.is' @@ -2901,8 +2928,8 @@ packages: '@hapi/bourne@3.0.0': resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==} - '@homarr/gridstack@1.11.2': - resolution: {integrity: sha512-WhoXMJtwE7N64Yajn1eoFZ+9JNZpE+6+Eea0uo8sAvVRbEKkJ0kirOK0QL1DW4j16wkvnyHZoxPfdx1DO+hRpQ==} + '@homarr/gridstack@1.11.3': + resolution: {integrity: sha512-7qVEH8DfLBQRJNHBMUTsrt1C1QwPRYcv9hq2vrQ/0M4bZXlxRxMEyUamDNJ1aBMtjDoiOkvirTUJUrZVZV6XBg==} '@hono/node-server@1.13.0': resolution: {integrity: sha512-kz323qIQkNQElEGroo/E9MKPDuIR5pkuk/XEWd50K+cSEKdmdiYx0PKWUdaNY2ecJYngtF+njDMsMKplL6zfEg==} @@ -2939,6 +2966,111 @@ packages: '@vue/compiler-sfc': optional: true + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + 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==} + 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==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + 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==} + 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==} + 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==} + 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==} + 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==} + 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==} + 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==} + 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==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@ioredis/commands@1.2.0': resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} @@ -3080,62 +3212,56 @@ packages: resolution: {integrity: sha512-u6/kglVwZRu5+GMmtkNlGLqJVkgTl0TtM+hLa9rBg7pldx+5NG5bk45NvL37uZmAr2Xfa1C6qHb7GrFwfP372g==} hasBin: true - '@next/env@14.2.22': - resolution: {integrity: sha512-EQ6y1QeNQglNmNIXvwP/Bb+lf7n9WtgcWvtoFsHquVLCJUuxRs+6SfZ5EK0/EqkkLex4RrDySvKgKNN7PXip7Q==} + '@next/env@15.1.3': + resolution: {integrity: sha512-Q1tXwQCGWyA3ehMph3VO+E6xFPHDKdHFYosadt0F78EObYxPio0S09H9UGYznDe6Wc8eLKLG89GqcFJJDiK5xw==} - '@next/eslint-plugin-next@14.2.22': - resolution: {integrity: sha512-8xCmBMd+hUapMpviPp5g3oDhoWRtbE/QeN/Nvth+SZrdt7xt9TBsH8cePkRwRjXFpwHndpRDNVQROxR/1HiVbg==} + '@next/eslint-plugin-next@15.1.3': + resolution: {integrity: sha512-oeP1vnc5Cq9UoOb8SYHAEPbCXMzOgG70l+Zfd+Ie00R25FOm+CCVNrcIubJvB1tvBgakXE37MmqSycksXVPRqg==} - '@next/swc-darwin-arm64@14.2.22': - resolution: {integrity: sha512-HUaLiehovgnqY4TMBZJ3pDaOsTE1spIXeR10pWgdQVPYqDGQmHJBj3h3V6yC0uuo/RoY2GC0YBFRkOX3dI9WVQ==} + '@next/swc-darwin-arm64@15.1.3': + resolution: {integrity: sha512-aZtmIh8jU89DZahXQt1La0f2EMPt/i7W+rG1sLtYJERsP7GRnNFghsciFpQcKHcGh4dUiyTB5C1X3Dde/Gw8gg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@14.2.22': - resolution: {integrity: sha512-ApVDANousaAGrosWvxoGdLT0uvLBUC+srqOcpXuyfglA40cP2LBFaGmBjhgpxYk5z4xmunzqQvcIgXawTzo2uQ==} + '@next/swc-darwin-x64@15.1.3': + resolution: {integrity: sha512-aw8901rjkVBK5mbq5oV32IqkJg+CQa6aULNlN8zyCWSsePzEG3kpDkAFkkTOh3eJ0p95KbkLyWBzslQKamXsLA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@14.2.22': - resolution: {integrity: sha512-3O2J99Bk9aM+d4CGn9eEayJXHuH9QLx0BctvWyuUGtJ3/mH6lkfAPRI4FidmHMBQBB4UcvLMfNf8vF0NZT7iKw==} + '@next/swc-linux-arm64-gnu@15.1.3': + resolution: {integrity: sha512-YbdaYjyHa4fPK4GR4k2XgXV0p8vbU1SZh7vv6El4bl9N+ZSiMfbmqCuCuNU1Z4ebJMumafaz6UCC2zaJCsdzjw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@14.2.22': - resolution: {integrity: sha512-H/hqfRz75yy60y5Eg7DxYfbmHMjv60Dsa6IWHzpJSz4MRkZNy5eDnEW9wyts9bkxwbOVZNPHeb3NkqanP+nGPg==} + '@next/swc-linux-arm64-musl@15.1.3': + resolution: {integrity: sha512-qgH/aRj2xcr4BouwKG3XdqNu33SDadqbkqB6KaZZkozar857upxKakbRllpqZgWl/NDeSCBYPmUAZPBHZpbA0w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@14.2.22': - resolution: {integrity: sha512-LckLwlCLcGR1hlI5eiJymR8zSHPsuruuwaZ3H2uudr25+Dpzo6cRFjp/3OR5UYJt8LSwlXv9mmY4oI2QynwpqQ==} + '@next/swc-linux-x64-gnu@15.1.3': + resolution: {integrity: sha512-uzafnTFwZCPN499fNVnS2xFME8WLC9y7PLRs/yqz5lz1X/ySoxfaK2Hbz74zYUdEg+iDZPd8KlsWaw9HKkLEVw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@14.2.22': - resolution: {integrity: sha512-qGUutzmh0PoFU0fCSu0XYpOfT7ydBZgDfcETIeft46abPqP+dmePhwRGLhFKwZWxNWQCPprH26TjaTxM0Nv8mw==} + '@next/swc-linux-x64-musl@15.1.3': + resolution: {integrity: sha512-el6GUFi4SiDYnMTTlJJFMU+GHvw0UIFnffP1qhurrN1qJV3BqaSRUjkDUgVV44T6zpw1Lc6u+yn0puDKHs+Sbw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@14.2.22': - resolution: {integrity: sha512-K6MwucMWmIvMb9GlvT0haYsfIPxfQD8yXqxwFy4uLFMeXIb2TcVYQimxkaFZv86I7sn1NOZnpOaVk5eaxThGIw==} + '@next/swc-win32-arm64-msvc@15.1.3': + resolution: {integrity: sha512-6RxKjvnvVMM89giYGI1qye9ODsBQpHSHVo8vqA8xGhmRPZHDQUE4jcDbhBwK0GnFMqBnu+XMg3nYukNkmLOLWw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-ia32-msvc@14.2.22': - resolution: {integrity: sha512-5IhDDTPEbzPR31ZzqHe90LnNe7BlJUZvC4sA1thPJV6oN5WmtWjZ0bOYfNsyZx00FJt7gggNs6SrsX0UEIcIpA==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - - '@next/swc-win32-x64-msvc@14.2.22': - resolution: {integrity: sha512-nvRaB1PyG4scn9/qNzlkwEwLzuoPH3Gjp7Q/pLuwUgOTt1oPMlnCI3A3rgkt+eZnU71emOiEv/mR201HoURPGg==} + '@next/swc-win32-x64-msvc@15.1.3': + resolution: {integrity: sha512-VId/f5blObG7IodwC5Grf+aYP0O8Saz1/aeU3YcWqNdIUAmFQY3VEPKPaIzfv32F/clvanOb2K2BR5DtDs6XyQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -3661,8 +3787,8 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.5': - resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} '@t3-oss/env-core@0.11.1': resolution: {integrity: sha512-MaxOwEoG1ntCFoKJsS7nqwgcxLW1SJw238AJwfJeaz3P/8GtkxXZsPPolsz1AdYvUTbe3XvqZ/VCdfjt+3zmKw==} @@ -4926,6 +5052,10 @@ packages: color@3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + colorspace@1.1.4: resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} @@ -5771,6 +5901,10 @@ packages: fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -6032,11 +6166,6 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - glob@10.4.5: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true @@ -6621,10 +6750,6 @@ packages: resolution: {integrity: sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==} engines: {node: '>= 0.4'} - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -7137,21 +7262,24 @@ packages: next: ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 react: ^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0 - next@14.2.22: - resolution: {integrity: sha512-Ps2caobQ9hlEhscLPiPm3J3SYhfwfpMqzsoCMZGWxt9jBRK9hoBZj2A37i8joKhsyth2EuVKDVJCTF5/H4iEDw==} - engines: {node: '>=18.17.0'} + next@15.1.3: + resolution: {integrity: sha512-5igmb8N8AEhWDYzogcJvtcRDU6n4cMGtBklxKD4biYv4LXN8+awc/bbQ2IM2NQHdVPgJ6XumYXfo3hBtErg1DA==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 '@playwright/test': ^1.41.2 - react: ^18.2.0 - react-dom: ^18.2.0 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 sass: ^1.3.0 peerDependenciesMeta: '@opentelemetry/api': optional: true '@playwright/test': optional: true + babel-plugin-react-compiler: + optional: true sass: optional: true @@ -8324,6 +8452,10 @@ packages: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -8594,13 +8726,13 @@ packages: strnum@1.0.5: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} - styled-jsx@5.1.1: - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} peerDependencies: '@babel/core': '*' babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' peerDependenciesMeta: '@babel/core': optional: true @@ -8904,6 +9036,9 @@ packages: tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsscmp@1.0.6: resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} engines: {node: '>=0.6.x'} @@ -9864,6 +9999,11 @@ snapshots: '@drizzle-team/brocli@0.11.0': {} + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.8.1 + optional: true + '@esbuild-kit/core-utils@3.3.2': dependencies: esbuild: 0.18.20 @@ -10298,7 +10438,7 @@ snapshots: dependencies: '@formatjs/fast-memoize': 2.2.1 '@formatjs/intl-localematcher': 0.5.5 - tslib: 2.7.0 + tslib: 2.8.1 '@formatjs/fast-memoize@2.2.1': dependencies: @@ -10308,12 +10448,12 @@ snapshots: dependencies: '@formatjs/ecma402-abstract': 2.2.0 '@formatjs/icu-skeleton-parser': 1.8.4 - tslib: 2.7.0 + tslib: 2.8.1 '@formatjs/icu-skeleton-parser@1.8.4': dependencies: '@formatjs/ecma402-abstract': 2.2.0 - tslib: 2.7.0 + tslib: 2.8.1 '@formatjs/intl-localematcher@0.5.5': dependencies: @@ -10333,7 +10473,7 @@ snapshots: '@hapi/bourne@3.0.0': {} - '@homarr/gridstack@1.11.2': {} + '@homarr/gridstack@1.11.3': {} '@hono/node-server@1.13.0(hono@4.6.1)': dependencies: @@ -10363,6 +10503,81 @@ snapshots: transitivePeerDependencies: - supports-color + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.3.1 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + '@ioredis/commands@1.2.0': {} '@isaacs/cliui@8.0.2': @@ -10593,37 +10808,34 @@ snapshots: - utf-8-validate - webpack-sources - '@next/env@14.2.22': {} + '@next/env@15.1.3': {} - '@next/eslint-plugin-next@14.2.22': + '@next/eslint-plugin-next@15.1.3': dependencies: - glob: 10.3.10 + fast-glob: 3.3.1 - '@next/swc-darwin-arm64@14.2.22': + '@next/swc-darwin-arm64@15.1.3': optional: true - '@next/swc-darwin-x64@14.2.22': + '@next/swc-darwin-x64@15.1.3': optional: true - '@next/swc-linux-arm64-gnu@14.2.22': + '@next/swc-linux-arm64-gnu@15.1.3': optional: true - '@next/swc-linux-arm64-musl@14.2.22': + '@next/swc-linux-arm64-musl@15.1.3': optional: true - '@next/swc-linux-x64-gnu@14.2.22': + '@next/swc-linux-x64-gnu@15.1.3': optional: true - '@next/swc-linux-x64-musl@14.2.22': + '@next/swc-linux-x64-musl@15.1.3': optional: true - '@next/swc-win32-arm64-msvc@14.2.22': + '@next/swc-win32-arm64-msvc@15.1.3': optional: true - '@next/swc-win32-ia32-msvc@14.2.22': - optional: true - - '@next/swc-win32-x64-msvc@14.2.22': + '@next/swc-win32-x64-msvc@15.1.3': optional: true '@noble/hashes@1.5.0': {} @@ -11406,10 +11618,9 @@ snapshots: '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.5': + '@swc/helpers@0.5.15': dependencies: - '@swc/counter': 0.1.3 - tslib: 2.7.0 + tslib: 2.8.1 '@t3-oss/env-core@0.11.1(typescript@5.7.2)(zod@3.24.1)': dependencies: @@ -11445,10 +11656,10 @@ snapshots: '@tanstack/react-query': 5.62.15(react@19.0.0) react: 19.0.0 - '@tanstack/react-query-next-experimental@5.62.15(@tanstack/react-query@5.62.15(react@19.0.0))(next@14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0)': + '@tanstack/react-query-next-experimental@5.62.15(@tanstack/react-query@5.62.15(react@19.0.0))(next@15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0)': dependencies: '@tanstack/react-query': 5.62.15(react@19.0.0) - next: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + next: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) react: 19.0.0 '@tanstack/react-query@5.62.15(react@19.0.0)': @@ -11692,11 +11903,11 @@ snapshots: '@trpc/server': 11.0.0-rc.682(typescript@5.7.2) typescript: 5.7.2 - '@trpc/next@11.0.0-rc.682(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.682(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.0.0-rc.682(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.682(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2))(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(next@14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2)': + '@trpc/next@11.0.0-rc.682(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.682(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.0.0-rc.682(@tanstack/react-query@5.62.15(react@19.0.0))(@trpc/client@11.0.0-rc.682(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2))(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(next@15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(typescript@5.7.2)': dependencies: '@trpc/client': 11.0.0-rc.682(@trpc/server@11.0.0-rc.682(typescript@5.7.2))(typescript@5.7.2) '@trpc/server': 11.0.0-rc.682(typescript@5.7.2) - next: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + next: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) typescript: 5.7.2 @@ -12505,15 +12716,15 @@ snapshots: ast-types@0.13.4: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 ast-types@0.14.2: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 ast-types@0.16.1: dependencies: - tslib: 2.7.0 + tslib: 2.8.1 async-lock@1.4.1: {} @@ -12881,6 +13092,12 @@ snapshots: color-convert: 1.9.3 color-string: 1.9.1 + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + optional: true + colorspace@1.1.4: dependencies: color: 3.2.1 @@ -13942,6 +14159,14 @@ snapshots: fast-fifo@1.3.2: {} + fast-glob@3.3.1: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -14211,14 +14436,6 @@ snapshots: glob-to-regexp@0.4.1: {} - glob@10.3.10: - dependencies: - foreground-child: 3.3.0 - jackspeak: 2.3.6 - minimatch: 9.0.5 - minipass: 7.1.2 - path-scurry: 1.11.1 - glob@10.4.5: dependencies: foreground-child: 3.3.0 @@ -14847,12 +15064,6 @@ snapshots: reflect.getprototypeof: 1.0.9 set-function-name: 2.0.2 - jackspeak@2.3.6: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -15335,43 +15546,43 @@ snapshots: netmask@2.0.2: {} - next-auth@5.0.0-beta.25(next@14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0): + next-auth@5.0.0-beta.25(next@15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0): dependencies: '@auth/core': 0.37.2 - next: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + next: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) react: 19.0.0 - next-intl@3.26.3(next@14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0): + next-intl@3.26.3(next@15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1))(react@19.0.0): dependencies: '@formatjs/intl-localematcher': 0.5.5 negotiator: 1.0.0 - next: 14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) + next: 15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1) react: 19.0.0 use-intl: 3.26.3(react@19.0.0) - next@14.2.22(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1): + next@15.1.3(@babel/core@7.26.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.83.1): dependencies: - '@next/env': 14.2.22 - '@swc/helpers': 0.5.5 + '@next/env': 15.1.3 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.15 busboy: 1.6.0 caniuse-lite: 1.0.30001679 - graceful-fs: 4.2.11 postcss: 8.4.31 react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - styled-jsx: 5.1.1(@babel/core@7.26.0)(react@19.0.0) + styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.0.0) optionalDependencies: - '@next/swc-darwin-arm64': 14.2.22 - '@next/swc-darwin-x64': 14.2.22 - '@next/swc-linux-arm64-gnu': 14.2.22 - '@next/swc-linux-arm64-musl': 14.2.22 - '@next/swc-linux-x64-gnu': 14.2.22 - '@next/swc-linux-x64-musl': 14.2.22 - '@next/swc-win32-arm64-msvc': 14.2.22 - '@next/swc-win32-ia32-msvc': 14.2.22 - '@next/swc-win32-x64-msvc': 14.2.22 + '@next/swc-darwin-arm64': 15.1.3 + '@next/swc-darwin-x64': 15.1.3 + '@next/swc-linux-arm64-gnu': 15.1.3 + '@next/swc-linux-arm64-musl': 15.1.3 + '@next/swc-linux-x64-gnu': 15.1.3 + '@next/swc-linux-x64-musl': 15.1.3 + '@next/swc-win32-arm64-msvc': 15.1.3 + '@next/swc-win32-x64-msvc': 15.1.3 '@playwright/test': 1.49.1 sass: 1.83.1 + sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -16354,7 +16565,7 @@ snapshots: esprima: 4.0.1 source-map: 0.6.1 tiny-invariant: 1.3.3 - tslib: 2.7.0 + tslib: 2.8.1 redis-errors@1.2.0: {} @@ -16694,6 +16905,33 @@ snapshots: inherits: 2.0.4 safe-buffer: 5.2.1 + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.6.3 + 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 + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -17029,7 +17267,7 @@ snapshots: strnum@1.0.5: {} - styled-jsx@5.1.1(@babel/core@7.26.0)(react@19.0.0): + styled-jsx@5.1.6(@babel/core@7.26.0)(react@19.0.0): dependencies: client-only: 0.0.1 react: 19.0.0 @@ -17413,6 +17651,8 @@ snapshots: tslib@2.7.0: {} + tslib@2.8.1: {} + tsscmp@1.0.6: {} tsx@4.19.2: diff --git a/tooling/eslint/package.json b/tooling/eslint/package.json index cc04a35c2..5f82c57b0 100644 --- a/tooling/eslint/package.json +++ b/tooling/eslint/package.json @@ -17,7 +17,7 @@ }, "prettier": "@homarr/prettier-config", "dependencies": { - "@next/eslint-plugin-next": "^14.2.22", + "@next/eslint-plugin-next": "^15.1.3", "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.3.3", "eslint-plugin-import": "^2.31.0",