diff --git a/apps/partner-sas/components/Menu/UserMenu/index.tsx b/apps/partner-sas/components/Menu/UserMenu/index.tsx index d3978e33e..22e1a694e 100644 --- a/apps/partner-sas/components/Menu/UserMenu/index.tsx +++ b/apps/partner-sas/components/Menu/UserMenu/index.tsx @@ -1,5 +1,3 @@ -"use client" - import { useSession } from "next-auth/react" import { useEffect, useState } from "react" import { @@ -48,6 +46,7 @@ export function UserMenu({ }) useEffect(() => { + // eslint-disable-next-line react-hooks/set-state-in-effect setLoginLink(`/${lang}/login?redirectTo=${window?.location.href}`) }, [lang, setLoginLink]) diff --git a/apps/partner-sas/eslint.config.mjs b/apps/partner-sas/eslint.config.mjs index fa67c2ee3..91f21eeca 100644 --- a/apps/partner-sas/eslint.config.mjs +++ b/apps/partner-sas/eslint.config.mjs @@ -1,48 +1,34 @@ -import { FlatCompat } from "@eslint/eslintrc" -import js from "@eslint/js" -import typescriptEslint from "@typescript-eslint/eslint-plugin" -import tsParser from "@typescript-eslint/parser" -import { defineConfig } from "eslint/config" +import { defineConfig, globalIgnores } from "eslint/config" +import nextVitals from "eslint-config-next/core-web-vitals" +import nextTs from "eslint-config-next/typescript" import formatjs from "eslint-plugin-formatjs" import simpleImportSort from "eslint-plugin-simple-import-sort" -const compat = new FlatCompat({ - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all, -}) - export default defineConfig([ + ...nextVitals, + ...nextTs, + globalIgnores([ + ".next/**", + "node_modules/**", + "dist/**", + "build/**", + "public/**", + "playwright-report/**", + "test-results/**", + "coverage/**", + "*.config.js", + "*.config.ts", + "*.config.mjs", + "next-env.d.ts", + ]), + { - ignores: [ - ".next/**", - "node_modules/**", - "dist/**", - "build/**", - "public/**", - "playwright-report/**", - "test-results/**", - "coverage/**", - "*.config.js", - "*.config.ts", - "*.config.mjs", - "next-env.d.ts", - ], - }, - { - extends: compat.extends( - "next/core-web-vitals", - "plugin:@typescript-eslint/recommended" - ), + files: ["**/*.{js,jsx,ts,tsx,mts}"], plugins: { "simple-import-sort": simpleImportSort, - "@typescript-eslint": typescriptEslint, formatjs, }, - languageOptions: { - parser: tsParser, - }, - rules: { "no-console": "warn", "no-unused-vars": "off", diff --git a/apps/partner-sas/package.json b/apps/partner-sas/package.json index d9748a6e2..f4c6b1c25 100644 --- a/apps/partner-sas/package.json +++ b/apps/partner-sas/package.json @@ -22,7 +22,7 @@ }, "dependencies": { "@formatjs/intl": "^3.1.6", - "@netlify/plugin-nextjs": "^5.14.4", + "@netlify/plugin-nextjs": "^5.15.1", "@scandic-hotels/booking-flow": "workspace:*", "@scandic-hotels/design-system": "workspace:*", "@scandic-hotels/tracking": "workspace:*", @@ -32,30 +32,27 @@ "@tanstack/react-query": "^5.75.5", "@tanstack/react-query-devtools": "^5.75.5", "iron-session": "^8.0.4", - "next": "^15.5.7", + "next": "16.0.10", "next-auth": "5.0.0-beta.29", - "react": "^19.0.0", + "react": "19.2.1", "react-aria-components": "1.8.0", - "react-dom": "^19.0.0", + "react-dom": "19.2.1", "react-intl": "^7.1.11", "server-only": "^0.0.1", "usehooks-ts": "3.1.1" }, "devDependencies": { - "@eslint/js": "^9.26.0", "@playwright/test": "^1.53.1", "@scandic-hotels/common": "workspace:*", "@scandic-hotels/typescript-config": "workspace:*", "@swc/plugin-formatjs": "^3.2.2", "@types/node": "^20", - "@types/react": "^19.2.3", - "@types/react-dom": "^19.2.3", - "@typescript-eslint/eslint-plugin": "^8.32.0", - "@typescript-eslint/parser": "^8.32.0", + "@types/react": "19.2.7", + "@types/react-dom": "19.2.3", "@typescript/native-preview": "^7.0.0-dev.20251104.1", "babel-plugin-formatjs": "^10.5.39", "eslint": "^9", - "eslint-config-next": "15.3.2", + "eslint-config-next": "16.0.7", "eslint-plugin-formatjs": "^5.3.1", "eslint-plugin-import": "^2.31.0", "eslint-plugin-simple-import-sort": "^12.1.1", diff --git a/apps/scandic-web/app/[lang]/(live)/(protected)/my-pages/@breadcrumbs/[...path]/error.tsx b/apps/scandic-web/app/[lang]/(live)/(protected)/my-pages/@breadcrumbs/[...path]/error.tsx index 34d3aaa00..1ab2f7f1b 100644 --- a/apps/scandic-web/app/[lang]/(live)/(protected)/my-pages/@breadcrumbs/[...path]/error.tsx +++ b/apps/scandic-web/app/[lang]/(live)/(protected)/my-pages/@breadcrumbs/[...path]/error.tsx @@ -29,6 +29,7 @@ export default function Error({ defaultMessage: "Breadcrumbs failed for this page ({errorId})", }, { + // eslint-disable-next-line react-hooks/purity errorId: `${error.digest}@${Date.now()}`, } )} diff --git a/apps/scandic-web/app/[lang]/(live)/(protected)/my-pages/[...path]/error.tsx b/apps/scandic-web/app/[lang]/(live)/(protected)/my-pages/[...path]/error.tsx index 2087e38fe..82ae2adb1 100644 --- a/apps/scandic-web/app/[lang]/(live)/(protected)/my-pages/[...path]/error.tsx +++ b/apps/scandic-web/app/[lang]/(live)/(protected)/my-pages/[...path]/error.tsx @@ -29,6 +29,7 @@ export default function Error({ defaultMessage: "Error loading this page ({errorId})", }, { + // eslint-disable-next-line react-hooks/purity errorId: `${error.digest}@${Date.now()}`, } )} diff --git a/apps/scandic-web/app/[lang]/(live)/(public)/(contentTypes)/@breadcrumbs/default.tsx b/apps/scandic-web/app/[lang]/(live)/(public)/(contentTypes)/@breadcrumbs/default.tsx new file mode 100644 index 000000000..86b9e9a38 --- /dev/null +++ b/apps/scandic-web/app/[lang]/(live)/(public)/(contentTypes)/@breadcrumbs/default.tsx @@ -0,0 +1,3 @@ +export default function Default() { + return null +} diff --git a/apps/scandic-web/app/[lang]/(live)/(public)/(contentTypes)/destination_overview_page/[uid]/error.tsx b/apps/scandic-web/app/[lang]/(live)/(public)/(contentTypes)/destination_overview_page/[uid]/error.tsx index 44dd10f69..9abe5a2e4 100644 --- a/apps/scandic-web/app/[lang]/(live)/(public)/(contentTypes)/destination_overview_page/[uid]/error.tsx +++ b/apps/scandic-web/app/[lang]/(live)/(public)/(contentTypes)/destination_overview_page/[uid]/error.tsx @@ -32,6 +32,7 @@ export default function Error({ defaultMessage: "An error occurred ({errorId})", }, { + // eslint-disable-next-line react-hooks/purity errorId: `${error.digest}@${Date.now()}`, } )} diff --git a/apps/scandic-web/app/[lang]/(live)/@bookingwidget/default.tsx b/apps/scandic-web/app/[lang]/(live)/@bookingwidget/default.tsx new file mode 100644 index 000000000..86b9e9a38 --- /dev/null +++ b/apps/scandic-web/app/[lang]/(live)/@bookingwidget/default.tsx @@ -0,0 +1,3 @@ +export default function Default() { + return null +} diff --git a/apps/scandic-web/app/api/web/revalidate/hotel/route.ts b/apps/scandic-web/app/api/web/revalidate/hotel/route.ts index 975794402..63fbe92be 100644 --- a/apps/scandic-web/app/api/web/revalidate/hotel/route.ts +++ b/apps/scandic-web/app/api/web/revalidate/hotel/route.ts @@ -67,7 +67,7 @@ export async function POST(request: NextRequest) { } revalidateHotelLogger.debug(`Revalidating hotel url tag: ${tag}`) - revalidateTag(tag) + revalidateTag(tag, { expire: 0 }) const cacheClient = await getCacheClient() await cacheClient.deleteKey(tag, { fuzzy: true }) diff --git a/apps/scandic-web/app/api/web/revalidate/loyaltyConfig/route.ts b/apps/scandic-web/app/api/web/revalidate/loyaltyConfig/route.ts index 53262d2e1..e40d87df7 100644 --- a/apps/scandic-web/app/api/web/revalidate/loyaltyConfig/route.ts +++ b/apps/scandic-web/app/api/web/revalidate/loyaltyConfig/route.ts @@ -84,7 +84,7 @@ export async function POST(request: NextRequest) { } loyaltyRevalidateLogger.info(`Revalidating loyalty config tag: ${tag}`) - revalidateTag(tag) + revalidateTag(tag, { expire: 0 }) const cacheClient = await getCacheClient() await cacheClient.deleteKey(tag, { fuzzy: true }) diff --git a/apps/scandic-web/app/api/web/revalidate/manually/route.ts b/apps/scandic-web/app/api/web/revalidate/manually/route.ts index 27c92acfd..09faf7593 100644 --- a/apps/scandic-web/app/api/web/revalidate/manually/route.ts +++ b/apps/scandic-web/app/api/web/revalidate/manually/route.ts @@ -48,7 +48,7 @@ export async function POST() { ) revalidateManuallyLogger.info(`Tag: ${tag}`) - revalidateTag(tag) + revalidateTag(tag, { expire: 0 }) cacheClient.deleteKey(tag, { fuzzy: false, includeGitHashInKey: true }) return Response.json({ revalidated: true, now: Date.now() }) diff --git a/apps/scandic-web/app/api/web/revalidate/route.ts b/apps/scandic-web/app/api/web/revalidate/route.ts index 7934b6dda..953b34cf8 100644 --- a/apps/scandic-web/app/api/web/revalidate/route.ts +++ b/apps/scandic-web/app/api/web/revalidate/route.ts @@ -103,31 +103,31 @@ export async function POST(request: NextRequest) { revalidateLogger.debug( `Revalidating tag by content_type_uid: ${contentTypeUidTag}` ) - revalidateTag(contentTypeUidTag) + revalidateTag(contentTypeUidTag, { expire: 0 }) keysToDelete.push(contentTypeUidTag) revalidateLogger.debug(`Revalidating refsTag: ${refsTag}`) - revalidateTag(refsTag) + revalidateTag(refsTag, { expire: 0 }) keysToDelete.push(refsTag) revalidateLogger.debug(`Revalidating refTag: ${refTag}`) - revalidateTag(refTag) + revalidateTag(refTag, { expire: 0 }) keysToDelete.push(refTag) revalidateLogger.debug(`Revalidating tag: ${tag}`) - revalidateTag(tag) + revalidateTag(tag, { expire: 0 }) keysToDelete.push(tag) revalidateLogger.debug( `Revalidating language switcher tag: ${languageSwitcherTag}` ) - revalidateTag(languageSwitcherTag) + revalidateTag(languageSwitcherTag, { expire: 0 }) keysToDelete.push(languageSwitcherTag) revalidateLogger.debug(`Revalidating metadataTag: ${metadataTag}`) - revalidateTag(metadataTag) + revalidateTag(metadataTag, { expire: 0 }) keysToDelete.push(metadataTag) revalidateLogger.debug(`Revalidating contentEntryTag: ${contentEntryTag}`) - revalidateTag(contentEntryTag) + revalidateTag(contentEntryTag, { expire: 0 }) keysToDelete.push(contentEntryTag) if (entry.url) { @@ -151,11 +151,11 @@ export async function POST(request: NextRequest) { revalidateLogger.debug( `Revalidating breadcrumbsRefsTag: ${breadcrumbsRefsTag}` ) - revalidateTag(breadcrumbsRefsTag) + revalidateTag(breadcrumbsRefsTag, { expire: 0 }) keysToDelete.push(breadcrumbsRefsTag) revalidateLogger.debug(`Revalidating breadcrumbsTag: ${breadcrumbsTag}`) - revalidateTag(breadcrumbsTag) + revalidateTag(breadcrumbsTag, { expire: 0 }) keysToDelete.push(breadcrumbsTag) } @@ -167,7 +167,7 @@ export async function POST(request: NextRequest) { ) revalidateLogger.debug(`Revalidating pageSettingsTag: ${pageSettingsTag}`) - revalidateTag(pageSettingsTag) + revalidateTag(pageSettingsTag, { expire: 0 }) keysToDelete.push(pageSettingsTag) } diff --git a/apps/scandic-web/components/Blocks/DynamicContent/OverviewTable/Client.tsx b/apps/scandic-web/components/Blocks/DynamicContent/OverviewTable/Client.tsx index e2cf2c3a0..812c96f7a 100644 --- a/apps/scandic-web/components/Blocks/DynamicContent/OverviewTable/Client.tsx +++ b/apps/scandic-web/components/Blocks/DynamicContent/OverviewTable/Client.tsx @@ -157,7 +157,9 @@ export default function OverviewTableClient({
+ {/* eslint-disable-next-line react-hooks/static-components */} + {/* eslint-disable-next-line react-hooks/static-components */}
{ if (!api) return + // eslint-disable-next-line react-hooks/set-state-in-effect onSelect(api) api.on("reInit", onSelect) api.on("select", onSelect) diff --git a/apps/scandic-web/components/ContentType/DestinationPage/DestinationCityPage/CityMap/HotelList/index.tsx b/apps/scandic-web/components/ContentType/DestinationPage/DestinationCityPage/CityMap/HotelList/index.tsx index 24b2d5c82..06f626767 100644 --- a/apps/scandic-web/components/ContentType/DestinationPage/DestinationCityPage/CityMap/HotelList/index.tsx +++ b/apps/scandic-web/components/ContentType/DestinationPage/DestinationCityPage/CityMap/HotelList/index.tsx @@ -59,6 +59,7 @@ export default function HotelList() { return } + // eslint-disable-next-line react-hooks/set-state-in-effect setVisibleHotels(getVisibleHotels(activeHotels, map)) }, [map, activeHotels]) diff --git a/apps/scandic-web/components/ContentType/DestinationPage/DestinationCityPage/CityMap/index.tsx b/apps/scandic-web/components/ContentType/DestinationPage/DestinationCityPage/CityMap/index.tsx index ae31fcadf..1e7cc5a8c 100644 --- a/apps/scandic-web/components/ContentType/DestinationPage/DestinationCityPage/CityMap/index.tsx +++ b/apps/scandic-web/components/ContentType/DestinationPage/DestinationCityPage/CityMap/index.tsx @@ -43,6 +43,7 @@ export default function CityMap({ useEffect(() => { const url = new URL(window.location.href) + // eslint-disable-next-line react-hooks/set-state-in-effect setIsFromCountryPage(url.searchParams.has("fromCountry")) }, [params]) diff --git a/apps/scandic-web/components/ContentType/DestinationPage/Map/DynamicMap/index.tsx b/apps/scandic-web/components/ContentType/DestinationPage/Map/DynamicMap/index.tsx index 0b4d14c21..7a742236b 100644 --- a/apps/scandic-web/components/ContentType/DestinationPage/Map/DynamicMap/index.tsx +++ b/apps/scandic-web/components/ContentType/DestinationPage/Map/DynamicMap/index.tsx @@ -82,6 +82,7 @@ export default function DynamicMap({ bounds.extend(marker.coordinates) }) map.fitBounds(bounds, boundsPadding) + // eslint-disable-next-line react-hooks/set-state-in-effect setHasFittedBounds(true) } }, [map, fitBounds, markers, hasFittedBounds, boundsPadding]) diff --git a/apps/scandic-web/components/ContentType/DestinationPage/Map/index.tsx b/apps/scandic-web/components/ContentType/DestinationPage/Map/index.tsx index 0bd879ff0..e79e8b0ad 100644 --- a/apps/scandic-web/components/ContentType/DestinationPage/Map/index.tsx +++ b/apps/scandic-web/components/ContentType/DestinationPage/Map/index.tsx @@ -86,6 +86,7 @@ export default function Map({ useEffect(() => { const url = new URL(window.location.href) + // eslint-disable-next-line react-hooks/set-state-in-effect setFromCountryPage(url.searchParams.has("fromCountry")) }, [params]) diff --git a/apps/scandic-web/components/ContentType/HotelPage/TabNavigation/index.tsx b/apps/scandic-web/components/ContentType/HotelPage/TabNavigation/index.tsx index 02b923dee..141101ca9 100644 --- a/apps/scandic-web/components/ContentType/HotelPage/TabNavigation/index.tsx +++ b/apps/scandic-web/components/ContentType/HotelPage/TabNavigation/index.tsx @@ -90,6 +90,7 @@ export default function TabNavigation({ url.hash = activeSectionId window.history.replaceState(null, "", url.toString()) + // eslint-disable-next-line react-hooks/set-state-in-effect setActiveHash(activeSectionId) } }, [activeSectionId]) diff --git a/apps/scandic-web/components/ContentType/PromoCampaignPage/Hero/ActivateOffer/index.tsx b/apps/scandic-web/components/ContentType/PromoCampaignPage/Hero/ActivateOffer/index.tsx index c27bcf634..07eeb9818 100644 --- a/apps/scandic-web/components/ContentType/PromoCampaignPage/Hero/ActivateOffer/index.tsx +++ b/apps/scandic-web/components/ContentType/PromoCampaignPage/Hero/ActivateOffer/index.tsx @@ -70,6 +70,7 @@ export default function ActivateOffer({ (activateCampaign.isSuccess && activateCampaign.data) ? ( ) : ( + // eslint-disable-next-line react-hooks/static-components )} ) : null}
+ {/* eslint-disable-next-line react-hooks/static-components */}
diff --git a/apps/scandic-web/components/DestinationFilterAndSort/FilterAndSortButton/index.tsx b/apps/scandic-web/components/DestinationFilterAndSort/FilterAndSortButton/index.tsx index 6953eefca..cbb725b42 100644 --- a/apps/scandic-web/components/DestinationFilterAndSort/FilterAndSortButton/index.tsx +++ b/apps/scandic-web/components/DestinationFilterAndSort/FilterAndSortButton/index.tsx @@ -22,14 +22,15 @@ export function FilterAndSortButton({ const searchParams = useSearchParams() const [isMapView, setIsMapView] = useState(false) + const [isHydrated, setIsHydrated] = useState(false) useEffect(() => { const isMapView = searchParams.get("view") === "map" + // eslint-disable-next-line react-hooks/set-state-in-effect setIsMapView(isMapView) setIsHydrated(true) }, [searchParams]) - const [isHydrated, setIsHydrated] = useState(false) const isDesktop = useMediaQuery("(min-width: 950px)") if (!isHydrated) return null diff --git a/apps/scandic-web/components/Forms/Edit/Profile/index.tsx b/apps/scandic-web/components/Forms/Edit/Profile/index.tsx index 8fb722617..b7dd4aa5f 100644 --- a/apps/scandic-web/components/Forms/Edit/Profile/index.tsx +++ b/apps/scandic-web/components/Forms/Edit/Profile/index.tsx @@ -96,6 +96,7 @@ export default function Form({ user }: EditFormProps) { utils.user.get.invalidate() if (isPasswordChanged) { // Kept logout out of Next router forcing browser to navigate on logout url + // eslint-disable-next-line react-hooks/immutability window.location.href = logout[lang] } else { const myStayReturnRoute = sessionStorage.getItem("myStayReturnRoute") diff --git a/apps/scandic-web/components/HotelReservation/FindMyBooking/AdditionalInfoForm.tsx b/apps/scandic-web/components/HotelReservation/FindMyBooking/AdditionalInfoForm.tsx index af0c92ddb..8cdf666f7 100644 --- a/apps/scandic-web/components/HotelReservation/FindMyBooking/AdditionalInfoForm.tsx +++ b/apps/scandic-web/components/HotelReservation/FindMyBooking/AdditionalInfoForm.tsx @@ -43,6 +43,7 @@ export default function AdditionalInfoForm({ confirmationNumber, lastName, } + // eslint-disable-next-line react-hooks/immutability document.cookie = `bv=${JSON.stringify(value)}; Path=/; Max-Age=600; Secure; SameSite=Strict` router.refresh() } diff --git a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/index.tsx index f735b2afa..d54308514 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/Ancillaries/AddAncillaryFlow/index.tsx @@ -270,6 +270,7 @@ export default function AddAncillaryFlowModal({ formMethods.reset(updatedFormData) } + // eslint-disable-next-line react-hooks/set-state-in-effect setErrorMessage(getErrorMessage(intl, errorCode)) queryParams.delete("ancillary") queryParams.delete("errorCode") diff --git a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/GuaranteePaymentFailed/index.tsx b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/GuaranteePaymentFailed/index.tsx index 2f5fe3f63..bf2919af8 100644 --- a/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/GuaranteePaymentFailed/index.tsx +++ b/apps/scandic-web/components/HotelReservation/MyStay/ReferenceCard/Actions/Upcoming/GuaranteePaymentFailed/index.tsx @@ -57,6 +57,7 @@ export default function GuaranteePaymentFailed() { ? AlertTypeEnum.Warning : AlertTypeEnum.Alarm + // eslint-disable-next-line react-hooks/set-state-in-effect setAlert({ type, message }) const newParams = new URLSearchParams(searchParams.toString()) diff --git a/apps/scandic-web/components/MyPages/ProfilingConsent/Modal/index.tsx b/apps/scandic-web/components/MyPages/ProfilingConsent/Modal/index.tsx index ce1f7dc89..8da4c917d 100644 --- a/apps/scandic-web/components/MyPages/ProfilingConsent/Modal/index.tsx +++ b/apps/scandic-web/components/MyPages/ProfilingConsent/Modal/index.tsx @@ -45,6 +45,7 @@ function usePromptInitialization(memberKey: string | undefined) { }) const mutationRef = useRef(updateConsentPromptDate) + // eslint-disable-next-line react-hooks/refs mutationRef.current = updateConsentPromptDate const [shouldOpenInitially, setShouldOpenInitially] = useState(false) @@ -99,6 +100,7 @@ export default function ProfilingConsentModal({ useUpdateProfilingConsent() useEffect(() => { + // eslint-disable-next-line react-hooks/set-state-in-effect if (shouldOpenInitially) setOpen(true) }, [shouldOpenInitially]) @@ -112,6 +114,7 @@ export default function ProfilingConsentModal({ }, [memberKey]) useEffect(() => { + // eslint-disable-next-line react-hooks/set-state-in-effect if (isSuccess) onClose() }, [isSuccess, onClose]) diff --git a/apps/scandic-web/eslint.config.mjs b/apps/scandic-web/eslint.config.mjs index d1441f304..0c21ed752 100644 --- a/apps/scandic-web/eslint.config.mjs +++ b/apps/scandic-web/eslint.config.mjs @@ -1,49 +1,35 @@ -import { FlatCompat } from "@eslint/eslintrc" -import js from "@eslint/js" -import typescriptEslint from "@typescript-eslint/eslint-plugin" -import tsParser from "@typescript-eslint/parser" -import { defineConfig } from "eslint/config" +import { defineConfig, globalIgnores } from "eslint/config" +import nextVitals from "eslint-config-next/core-web-vitals" +import nextTs from "eslint-config-next/typescript" import formatjs from "eslint-plugin-formatjs" import simpleImportSort from "eslint-plugin-simple-import-sort" -const compat = new FlatCompat({ - recommendedConfig: js.configs.recommended, - allConfig: js.configs.all, -}) - export default defineConfig([ + ...nextVitals, + ...nextTs, + globalIgnores([ + ".next/**", + "node_modules/**", + "dist/**", + "build/**", + ".netlify/**", + "public/**", + "playwright-report/**", + "test-results/**", + "coverage/**", + "*.config.js", + "*.config.ts", + "*.config.mjs", + "next-env.d.ts", + ]), + { - ignores: [ - ".next/**", - "node_modules/**", - "dist/**", - "build/**", - ".netlify/**", - "public/**", - "playwright-report/**", - "test-results/**", - "coverage/**", - "*.config.js", - "*.config.ts", - "*.config.mjs", - "next-env.d.ts", - ], - }, - { - extends: compat.extends( - "next/core-web-vitals", - "plugin:@typescript-eslint/recommended" - ), + files: ["**/*.{js,jsx,ts,tsx,mts}"], plugins: { "simple-import-sort": simpleImportSort, - "@typescript-eslint": typescriptEslint, formatjs, }, - languageOptions: { - parser: tsParser, - }, - rules: { "no-console": "warn", "no-unused-vars": "off", @@ -56,6 +42,7 @@ export default defineConfig([ propElementValues: "always", }, ], + "react-hooks/incompatible-library": "off", "import/no-relative-packages": "error", "simple-import-sort/imports": [ "warn", diff --git a/apps/scandic-web/hooks/booking/useGuaranteeBooking.ts b/apps/scandic-web/hooks/booking/useGuaranteeBooking.ts index 94b5b63d9..c689046cb 100644 --- a/apps/scandic-web/hooks/booking/useGuaranteeBooking.ts +++ b/apps/scandic-web/hooks/booking/useGuaranteeBooking.ts @@ -78,6 +78,7 @@ export function useGuaranteeBooking( if (bookingStatus?.data?.booking.paymentUrl && isPollingForBookingStatus) { router.push(bookingStatus.data.booking.paymentUrl) utils.booking.get.invalidate({ refId }) + // eslint-disable-next-line react-hooks/set-state-in-effect setIsPollingForBookingStatus(false) } else if (bookingStatus.isTimeout) { handleGuaranteeError("Timeout") diff --git a/apps/scandic-web/middlewares/redirect.ts b/apps/scandic-web/middlewares/redirect.ts index a4e437946..2aa2def8c 100644 --- a/apps/scandic-web/middlewares/redirect.ts +++ b/apps/scandic-web/middlewares/redirect.ts @@ -46,6 +46,7 @@ async function fetchAndCacheRedirect(lang: Lang, pathname: string) { "1d" ) } + const redirectCounter = createCounter("middleware.redirect") export const middleware: NextMiddleware = async (request) => { const lang = findLang(request.nextUrl.pathname)! diff --git a/apps/scandic-web/package.json b/apps/scandic-web/package.json index 09b5b9916..2e6e22702 100644 --- a/apps/scandic-web/package.json +++ b/apps/scandic-web/package.json @@ -30,7 +30,7 @@ "@internationalized/date": "^3.8.0", "@netlify/blobs": "^8.1.0", "@netlify/functions": "^3.0.0", - "@netlify/plugin-nextjs": "^5.14.4", + "@netlify/plugin-nextjs": "^5.15.1", "@radix-ui/react-slot": "^1.2.2", "@react-aria/ssr": "^3.9.8", "@scandic-hotels/booking-flow": "workspace:*", @@ -71,12 +71,12 @@ "md5": "^2.3.0", "motion": "^12.10.0", "nanoid": "^5.1.5", - "next": "^15.5.7", + "next": "16.0.10", "next-auth": "5.0.0-beta.29", - "react": "^19.1.0", + "react": "19.2.1", "react-aria-components": "1.8.0", "react-day-picker": "^9.6.7", - "react-dom": "^19.1.0", + "react-dom": "19.2.1", "react-feather": "^2.0.10", "react-focus-lock": "^2.13.6", "react-hook-form": "^7.56.2", @@ -89,8 +89,6 @@ "zustand": "^4.5.2" }, "devDependencies": { - "@eslint/compat": "^1.2.9", - "@eslint/js": "^9.26.0", "@formatjs/cli": "^6.7.1", "@lokalise/node-api": "^14.0.0", "@playwright/test": "^1.57.0", @@ -102,16 +100,14 @@ "@types/json-stable-stringify-without-jsonify": "^1.0.2", "@types/jsonwebtoken": "^9", "@types/node": "^20", - "@types/react": "^19.2.3", - "@types/react-dom": "^19.2.3", - "@typescript-eslint/eslint-plugin": "^8.32.0", - "@typescript-eslint/parser": "^8.32.0", + "@types/react": "19.2.7", + "@types/react-dom": "19.2.3", "@vitejs/plugin-react": "^5.0.0", "adm-zip": "^0.5.16", "babel-plugin-formatjs": "^10.5.39", "dotenv": "^16.5.0", "eslint": "^9", - "eslint-config-next": "15.3.2", + "eslint-config-next": "16.0.7", "eslint-plugin-formatjs": "^5.3.1", "eslint-plugin-import": "^2.31.0", "eslint-plugin-simple-import-sort": "^12.1.1", diff --git a/apps/scandic-web/providers/AddAncillaryProvider.tsx b/apps/scandic-web/providers/AddAncillaryProvider.tsx index 349b3cb54..980f86769 100644 --- a/apps/scandic-web/providers/AddAncillaryProvider.tsx +++ b/apps/scandic-web/providers/AddAncillaryProvider.tsx @@ -23,6 +23,7 @@ export function AddAncillaryProvider({ children: React.ReactNode }) { const storeRef = useRef(undefined) + // eslint-disable-next-line react-hooks/refs if (!storeRef.current) { storeRef.current = createAddAncillaryStore(booking, ancillaries) } @@ -40,6 +41,7 @@ export function AddAncillaryProvider({ }, []) return ( + // eslint-disable-next-line react-hooks/refs {children} diff --git a/apps/scandic-web/providers/DestinationDataProvider/index.tsx b/apps/scandic-web/providers/DestinationDataProvider/index.tsx index 92448414d..4ea331129 100644 --- a/apps/scandic-web/providers/DestinationDataProvider/index.tsx +++ b/apps/scandic-web/providers/DestinationDataProvider/index.tsx @@ -23,6 +23,7 @@ export default function DestinationDataProvider({ const storeRef = useRef(undefined) const searchParams = useSearchParams() + // eslint-disable-next-line react-hooks/refs if (!storeRef.current) { storeRef.current = createDestinationDataStore({ allCities, @@ -36,6 +37,7 @@ export default function DestinationDataProvider({ } return ( + // eslint-disable-next-line react-hooks/refs {children} diff --git a/apps/scandic-web/providers/HotelListingDataProvider/index.tsx b/apps/scandic-web/providers/HotelListingDataProvider/index.tsx index 0f3db8059..eab3d3adf 100644 --- a/apps/scandic-web/providers/HotelListingDataProvider/index.tsx +++ b/apps/scandic-web/providers/HotelListingDataProvider/index.tsx @@ -20,6 +20,7 @@ export default function HotelListingDataProvider({ const storeRef = useRef(undefined) const searchParams = useSearchParams() + // eslint-disable-next-line react-hooks/refs if (!storeRef.current) { storeRef.current = createHotelListingDataStore({ allHotels, @@ -30,6 +31,7 @@ export default function HotelListingDataProvider({ } return ( + // eslint-disable-next-line react-hooks/refs {children} diff --git a/apps/scandic-web/providers/MyStay.tsx b/apps/scandic-web/providers/MyStay.tsx index d853a0aba..62e83a511 100644 --- a/apps/scandic-web/providers/MyStay.tsx +++ b/apps/scandic-web/providers/MyStay.tsx @@ -101,6 +101,7 @@ export default function MyStayProvider({ (isFetchedAfterMount && data) || (linkedReservationsIsFetchedAfterMount && linkedReservations) + // eslint-disable-next-line react-hooks/refs if (!storeRef.current || hasInvalidatedQueryAndRefetched) { storeRef.current = createMyStayStore({ breakfastPackages, @@ -116,6 +117,7 @@ export default function MyStayProvider({ } return ( + // eslint-disable-next-line react-hooks/refs {children} diff --git a/package.json b/package.json index 498161c63..e4b3d8700 100644 --- a/package.json +++ b/package.json @@ -36,8 +36,8 @@ "devDependencies": { "@eslint/compat": "^1.2.9", "@formatjs/cli": "^6.7.1", - "@types/react": "^19.2.3", - "@types/react-dom": "^19.2.3", + "@types/react": "19.2.7", + "@types/react-dom": "19.2.3", "@typescript/native-preview": "^7.0.0-dev.20251104.1", "@yarnpkg/types": "^4.0.1", "commander": "^14.0.0", diff --git a/packages/booking-flow/package.json b/packages/booking-flow/package.json index 7cdce9b2e..f8b78d2b5 100644 --- a/packages/booking-flow/package.json +++ b/packages/booking-flow/package.json @@ -76,7 +76,7 @@ }, "peerDependencies": { "@sentry/nextjs": "^10", - "next": "^15", + "next": "^16", "react": "^19" }, "devDependencies": { @@ -85,7 +85,7 @@ "@eslint/js": "^9.26.0", "@scandic-hotels/typescript-config": "workspace:*", "@t3-oss/env-nextjs": "^0.13.4", - "@types/react": "^19.2.3", + "@types/react": "19.2.7", "@typescript-eslint/eslint-plugin": "^8.32.0", "@typescript-eslint/parser": "^8.32.0", "@vitest/coverage-v8": "^4.0.0", diff --git a/packages/design-system/package.json b/packages/design-system/package.json index 56f11d5e5..040a77ca2 100644 --- a/packages/design-system/package.json +++ b/packages/design-system/package.json @@ -239,7 +239,7 @@ "@internationalized/date": "^3.8.0", "@radix-ui/react-slot": "^1.2.2", "@vis.gl/react-google-maps": "^1.5.2", - "next": "^15", + "next": "^16", "react": "^19.1.0", "react-aria": "^3.39.0", "react-aria-components": "^1.8.0", @@ -264,8 +264,8 @@ "@testing-library/user-event": "^14.5.2", "@types/css-modules": "^1.0.5", "@types/node": "^20.17.17", - "@types/react": "^19.2.3", - "@types/react-dom": "^19.2.3", + "@types/react": "19.2.7", + "@types/react-dom": "19.2.3", "@typescript-eslint/eslint-plugin": "^8.32.0", "@typescript-eslint/parser": "^8.32.0", "@vitejs/plugin-react": "^5.1.1", diff --git a/packages/trpc/package.json b/packages/trpc/package.json index 8482a94b7..166003193 100644 --- a/packages/trpc/package.json +++ b/packages/trpc/package.json @@ -69,7 +69,7 @@ "@sentry/nextjs": "^10", "@tanstack/react-query": "^5.75.5", "@tanstack/react-query-devtools": "^5.75.5", - "next": "^15", + "next": "^16", "react": "^19" }, "devDependencies": { @@ -77,7 +77,7 @@ "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.26.0", "@scandic-hotels/typescript-config": "workspace:*", - "@types/react": "^19.2.3", + "@types/react": "19.2.7", "@typescript-eslint/eslint-plugin": "^8.32.0", "@typescript-eslint/parser": "^8.32.0", "dotenv": "^16.5.0", diff --git a/yarn.lock b/yarn.lock index c6bbd39fe..9a5e0ca6f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -184,7 +184,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.18.5, @babel/core@npm:^7.26.10, @babel/core@npm:^7.28.0, @babel/core@npm:^7.28.5": +"@babel/core@npm:^7.18.5, @babel/core@npm:^7.24.4, @babel/core@npm:^7.26.10, @babel/core@npm:^7.28.0, @babel/core@npm:^7.28.5": version: 7.28.5 resolution: "@babel/core@npm:7.28.5" dependencies: @@ -301,7 +301,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.5, @babel/parser@npm:^7.26.7, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.5, @babel/parser@npm:^7.24.4, @babel/parser@npm:^7.26.7, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5": version: 7.28.5 resolution: "@babel/parser@npm:7.28.5" dependencies: @@ -2018,7 +2018,7 @@ __metadata: languageName: node linkType: hard -"@netlify/plugin-nextjs@npm:^5.14.4": +"@netlify/plugin-nextjs@npm:^5.15.1": version: 5.15.1 resolution: "@netlify/plugin-nextjs@npm:5.15.1" checksum: 10c0/4b02d5d79d3697ff8c2fd64c65f774ed84e51c8d2dceb8aeab1b99a845a99fc9f62561d60bb7b9b5ef173e8b540f19709a8770b6f9b7c59e2847408a11817947 @@ -2089,13 +2089,6 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:15.5.7": - version: 15.5.7 - resolution: "@next/env@npm:15.5.7" - checksum: 10c0/f92d99e5fa3516c6b7699abafd9bd813f5c1889dd257ab098f1b71f93137f5e4f49792e22f6dddf8a59efcb134e8e84277c983ff88607b2a42aac651bfde78ea - languageName: node - linkType: hard - "@next/env@npm:16.0.0": version: 16.0.0 resolution: "@next/env@npm:16.0.0" @@ -2103,6 +2096,13 @@ __metadata: languageName: node linkType: hard +"@next/env@npm:16.0.10": + version: 16.0.10 + resolution: "@next/env@npm:16.0.10" + checksum: 10c0/6f2b5ba37733a49513ab3117c06f037fa962b4022fe2b4ba7801f830ab15974ad87ad8b47b6464fa5fcb3e9a3247b25f657ec97ae6eed1156b5736c6388246db + languageName: node + linkType: hard + "@next/env@npm:16.0.5": version: 16.0.5 resolution: "@next/env@npm:16.0.5" @@ -2110,18 +2110,18 @@ __metadata: languageName: node linkType: hard -"@next/eslint-plugin-next@npm:15.3.2": - version: 15.3.2 - resolution: "@next/eslint-plugin-next@npm:15.3.2" +"@next/eslint-plugin-next@npm:16.0.7": + version: 16.0.7 + resolution: "@next/eslint-plugin-next@npm:16.0.7" dependencies: fast-glob: "npm:3.3.1" - checksum: 10c0/b03e512c275d33f4159522a66d4aa56f60dbf8f2dbfca6db9dcb5ce4c51ab701d8b28d719499d5728913b1ed71f76a93d770797670d04ca525ea318a32aa8fab + checksum: 10c0/dce7be827de6686d11c68e1ae22f136e926bf63d9373a9f6c5fc8a2ce4a0ab92857c4becec9cd07c7293bb4ce6e0fa5c8407521e3632d61a42ad82769e190a8c languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:15.5.7": - version: 15.5.7 - resolution: "@next/swc-darwin-arm64@npm:15.5.7" +"@next/swc-darwin-arm64@npm:16.0.10": + version: 16.0.10 + resolution: "@next/swc-darwin-arm64@npm:16.0.10" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -2133,9 +2133,9 @@ __metadata: languageName: node linkType: hard -"@next/swc-darwin-x64@npm:15.5.7": - version: 15.5.7 - resolution: "@next/swc-darwin-x64@npm:15.5.7" +"@next/swc-darwin-x64@npm:16.0.10": + version: 16.0.10 + resolution: "@next/swc-darwin-x64@npm:16.0.10" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -2147,9 +2147,9 @@ __metadata: languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:15.5.7": - version: 15.5.7 - resolution: "@next/swc-linux-arm64-gnu@npm:15.5.7" +"@next/swc-linux-arm64-gnu@npm:16.0.10": + version: 16.0.10 + resolution: "@next/swc-linux-arm64-gnu@npm:16.0.10" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard @@ -2161,9 +2161,9 @@ __metadata: languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:15.5.7": - version: 15.5.7 - resolution: "@next/swc-linux-arm64-musl@npm:15.5.7" +"@next/swc-linux-arm64-musl@npm:16.0.10": + version: 16.0.10 + resolution: "@next/swc-linux-arm64-musl@npm:16.0.10" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard @@ -2175,9 +2175,9 @@ __metadata: languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:15.5.7": - version: 15.5.7 - resolution: "@next/swc-linux-x64-gnu@npm:15.5.7" +"@next/swc-linux-x64-gnu@npm:16.0.10": + version: 16.0.10 + resolution: "@next/swc-linux-x64-gnu@npm:16.0.10" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard @@ -2189,9 +2189,9 @@ __metadata: languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:15.5.7": - version: 15.5.7 - resolution: "@next/swc-linux-x64-musl@npm:15.5.7" +"@next/swc-linux-x64-musl@npm:16.0.10": + version: 16.0.10 + resolution: "@next/swc-linux-x64-musl@npm:16.0.10" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard @@ -2203,9 +2203,9 @@ __metadata: languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:15.5.7": - version: 15.5.7 - resolution: "@next/swc-win32-arm64-msvc@npm:15.5.7" +"@next/swc-win32-arm64-msvc@npm:16.0.10": + version: 16.0.10 + resolution: "@next/swc-win32-arm64-msvc@npm:16.0.10" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -2217,9 +2217,9 @@ __metadata: languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:15.5.7": - version: 15.5.7 - resolution: "@next/swc-win32-x64-msvc@npm:15.5.7" +"@next/swc-win32-x64-msvc@npm:16.0.10": + version: 16.0.10 + resolution: "@next/swc-win32-x64-msvc@npm:16.0.10" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -5082,13 +5082,6 @@ __metadata: languageName: node linkType: hard -"@rushstack/eslint-patch@npm:^1.10.3": - version: 1.15.0 - resolution: "@rushstack/eslint-patch@npm:1.15.0" - checksum: 10c0/b2aeae0c6228981c40eff7a3cf9fc1c4342f8fc7a0102d8b2b3d3f66137461b1cd2e3c22d9aa6bcde43f227c5e4e698be33ac145d356797774f212da496c0e9c - languageName: node - linkType: hard - "@rushstack/node-core-library@npm:5.19.0": version: 5.19.0 resolution: "@rushstack/node-core-library@npm:5.19.0" @@ -5223,7 +5216,7 @@ __metadata: "@scandic-hotels/typescript-config": "workspace:*" "@t3-oss/env-nextjs": "npm:^0.13.4" "@trpc/client": "npm:^11.1.2" - "@types/react": "npm:^19.2.3" + "@types/react": "npm:19.2.7" "@typescript-eslint/eslint-plugin": "npm:^8.32.0" "@typescript-eslint/parser": "npm:^8.32.0" "@vis.gl/react-google-maps": "npm:^1.5.2" @@ -5259,7 +5252,7 @@ __metadata: zustand: "npm:^4.5.2" peerDependencies: "@sentry/nextjs": ^10 - next: ^15 + next: ^16 react: ^19 languageName: unknown linkType: soft @@ -5312,8 +5305,8 @@ __metadata: "@testing-library/user-event": "npm:^14.5.2" "@types/css-modules": "npm:^1.0.5" "@types/node": "npm:^20.17.17" - "@types/react": "npm:^19.2.3" - "@types/react-dom": "npm:^19.2.3" + "@types/react": "npm:19.2.7" + "@types/react-dom": "npm:19.2.3" "@typescript-eslint/eslint-plugin": "npm:^8.32.0" "@typescript-eslint/parser": "npm:^8.32.0" "@vitejs/plugin-react": "npm:^5.1.1" @@ -5358,7 +5351,7 @@ __metadata: "@internationalized/date": ^3.8.0 "@radix-ui/react-slot": ^1.2.2 "@vis.gl/react-google-maps": ^1.5.2 - next: ^15 + next: ^16 react: ^19.1.0 react-aria: ^3.39.0 react-aria-components: ^1.8.0 @@ -5374,9 +5367,8 @@ __metadata: version: 0.0.0-use.local resolution: "@scandic-hotels/partner-sas@workspace:apps/partner-sas" dependencies: - "@eslint/js": "npm:^9.26.0" "@formatjs/intl": "npm:^3.1.6" - "@netlify/plugin-nextjs": "npm:^5.14.4" + "@netlify/plugin-nextjs": "npm:^5.15.1" "@playwright/test": "npm:^1.53.1" "@scandic-hotels/booking-flow": "workspace:*" "@scandic-hotels/common": "workspace:*" @@ -5389,24 +5381,22 @@ __metadata: "@tanstack/react-query": "npm:^5.75.5" "@tanstack/react-query-devtools": "npm:^5.75.5" "@types/node": "npm:^20" - "@types/react": "npm:^19.2.3" - "@types/react-dom": "npm:^19.2.3" - "@typescript-eslint/eslint-plugin": "npm:^8.32.0" - "@typescript-eslint/parser": "npm:^8.32.0" + "@types/react": "npm:19.2.7" + "@types/react-dom": "npm:19.2.3" "@typescript/native-preview": "npm:^7.0.0-dev.20251104.1" babel-plugin-formatjs: "npm:^10.5.39" eslint: "npm:^9" - eslint-config-next: "npm:15.3.2" + eslint-config-next: "npm:16.0.7" eslint-plugin-formatjs: "npm:^5.3.1" eslint-plugin-import: "npm:^2.31.0" eslint-plugin-simple-import-sort: "npm:^12.1.1" graphql-tag: "npm:^2.12.6" iron-session: "npm:^8.0.4" - next: "npm:^15.5.7" + next: "npm:16.0.10" next-auth: "npm:5.0.0-beta.29" - react: "npm:^19.0.0" + react: "npm:19.2.1" react-aria-components: "npm:1.8.0" - react-dom: "npm:^19.0.0" + react-dom: "npm:19.2.1" react-intl: "npm:^7.1.11" server-only: "npm:^0.0.1" typescript: "npm:5.8.3" @@ -5456,8 +5446,6 @@ __metadata: resolution: "@scandic-hotels/scandic-web@workspace:apps/scandic-web" dependencies: "@contentstack/live-preview-utils": "npm:^3.2.1" - "@eslint/compat": "npm:^1.2.9" - "@eslint/js": "npm:^9.26.0" "@formatjs/cli": "npm:^6.7.1" "@formatjs/intl": "npm:^3.1.6" "@hookform/error-message": "npm:^2.0.1" @@ -5466,7 +5454,7 @@ __metadata: "@lokalise/node-api": "npm:^14.0.0" "@netlify/blobs": "npm:^8.1.0" "@netlify/functions": "npm:^3.0.0" - "@netlify/plugin-nextjs": "npm:^5.14.4" + "@netlify/plugin-nextjs": "npm:^5.15.1" "@playwright/test": "npm:^1.57.0" "@radix-ui/react-slot": "npm:^1.2.2" "@react-aria/ssr": "npm:^3.9.8" @@ -5494,11 +5482,9 @@ __metadata: "@types/json-stable-stringify-without-jsonify": "npm:^1.0.2" "@types/jsonwebtoken": "npm:^9" "@types/node": "npm:^20" - "@types/react": "npm:^19.2.3" - "@types/react-dom": "npm:^19.2.3" + "@types/react": "npm:19.2.7" + "@types/react-dom": "npm:19.2.3" "@types/supercluster": "npm:^7.1.3" - "@typescript-eslint/eslint-plugin": "npm:^8.32.0" - "@typescript-eslint/parser": "npm:^8.32.0" "@typescript/native-preview": "npm:^7.0.0-dev.20251104.1" "@vis.gl/react-google-maps": "npm:^1.5.2" "@vitejs/plugin-react": "npm:^5.0.0" @@ -5514,7 +5500,7 @@ __metadata: embla-carousel: "npm:^8.6.0" embla-carousel-react: "npm:^8.6.0" eslint: "npm:^9" - eslint-config-next: "npm:15.3.2" + eslint-config-next: "npm:16.0.7" eslint-plugin-formatjs: "npm:^5.3.1" eslint-plugin-import: "npm:^2.31.0" eslint-plugin-simple-import-sort: "npm:^12.1.1" @@ -5532,12 +5518,12 @@ __metadata: md5: "npm:^2.3.0" motion: "npm:^12.10.0" nanoid: "npm:^5.1.5" - next: "npm:^15.5.7" + next: "npm:16.0.10" next-auth: "npm:5.0.0-beta.29" - react: "npm:^19.1.0" + react: "npm:19.2.1" react-aria-components: "npm:1.8.0" react-day-picker: "npm:^9.6.7" - react-dom: "npm:^19.1.0" + react-dom: "npm:19.2.1" react-feather: "npm:^2.0.10" react-focus-lock: "npm:^2.13.6" react-hook-form: "npm:^7.56.2" @@ -5591,7 +5577,7 @@ __metadata: "@trpc/client": "npm:^11.1.2" "@trpc/react-query": "npm:^11.1.2" "@trpc/server": "npm:^11.1.2" - "@types/react": "npm:^19.2.3" + "@types/react": "npm:19.2.7" "@typescript-eslint/eslint-plugin": "npm:^8.32.0" "@typescript-eslint/parser": "npm:^8.32.0" dayjs: "npm:^1.11.13" @@ -5617,7 +5603,7 @@ __metadata: "@sentry/nextjs": ^10 "@tanstack/react-query": ^5.75.5 "@tanstack/react-query-devtools": ^5.75.5 - next: ^15 + next: ^16 react: ^19 languageName: unknown linkType: soft @@ -7106,7 +7092,7 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^19.2.3": +"@types/react-dom@npm:19.2.3": version: 19.2.3 resolution: "@types/react-dom@npm:19.2.3" peerDependencies: @@ -7115,7 +7101,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:16 || 17 || 18 || 19, @types/react@npm:^19.2.3": +"@types/react@npm:16 || 17 || 18 || 19, @types/react@npm:19.2.7": version: 19.2.7 resolution: "@types/react@npm:19.2.7" dependencies: @@ -7179,7 +7165,28 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0, @typescript-eslint/eslint-plugin@npm:^8.32.0": +"@typescript-eslint/eslint-plugin@npm:8.48.1": + version: 8.48.1 + resolution: "@typescript-eslint/eslint-plugin@npm:8.48.1" + dependencies: + "@eslint-community/regexpp": "npm:^4.10.0" + "@typescript-eslint/scope-manager": "npm:8.48.1" + "@typescript-eslint/type-utils": "npm:8.48.1" + "@typescript-eslint/utils": "npm:8.48.1" + "@typescript-eslint/visitor-keys": "npm:8.48.1" + graphemer: "npm:^1.4.0" + ignore: "npm:^7.0.0" + natural-compare: "npm:^1.4.0" + ts-api-utils: "npm:^2.1.0" + peerDependencies: + "@typescript-eslint/parser": ^8.48.1 + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: 10c0/aeb4692ac27ded73dce5ddba08d46f15d617651f629cdfc5e874dd4ac767eac0523807f1f4e51f6f80675efff78e5937690f1c58740b8cb92b44b87d757a6a1a + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^8.32.0": version: 8.48.0 resolution: "@typescript-eslint/eslint-plugin@npm:8.48.0" dependencies: @@ -7200,7 +7207,23 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0, @typescript-eslint/parser@npm:^8.32.0": +"@typescript-eslint/parser@npm:8.48.1": + version: 8.48.1 + resolution: "@typescript-eslint/parser@npm:8.48.1" + dependencies: + "@typescript-eslint/scope-manager": "npm:8.48.1" + "@typescript-eslint/types": "npm:8.48.1" + "@typescript-eslint/typescript-estree": "npm:8.48.1" + "@typescript-eslint/visitor-keys": "npm:8.48.1" + debug: "npm:^4.3.4" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: 10c0/54ec22c82cc631f56131bfed9747f8cadf52ab123463a406c5221f258f9533431c4a33ebe21ef178840d50235e69bb370d36aa2fd6a066e7223b38bfa41a1788 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^8.32.0": version: 8.48.0 resolution: "@typescript-eslint/parser@npm:8.48.0" dependencies: @@ -7229,6 +7252,19 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/project-service@npm:8.48.1": + version: 8.48.1 + resolution: "@typescript-eslint/project-service@npm:8.48.1" + dependencies: + "@typescript-eslint/tsconfig-utils": "npm:^8.48.1" + "@typescript-eslint/types": "npm:^8.48.1" + debug: "npm:^4.3.4" + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + checksum: 10c0/0aeeea5e65d0f837bd9a47265f144f14ca72969d259ee929e63e06526b21f4e990e70c7bafdb2ceb3783373df7d9f5bae32c328a4c6403606f01339bc984b3f5 + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:8.48.0": version: 8.48.0 resolution: "@typescript-eslint/scope-manager@npm:8.48.0" @@ -7239,6 +7275,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:8.48.1": + version: 8.48.1 + resolution: "@typescript-eslint/scope-manager@npm:8.48.1" + dependencies: + "@typescript-eslint/types": "npm:8.48.1" + "@typescript-eslint/visitor-keys": "npm:8.48.1" + checksum: 10c0/16514823784cb598817b87d3d2b4fb618ab8b2378b3401a4c1160a5c914e51e7a925c3c1e7be73e0250e38390f0be70fecb3e0e0bdde7b243d74444933b95d3e + languageName: node + linkType: hard + "@typescript-eslint/tsconfig-utils@npm:8.48.0, @typescript-eslint/tsconfig-utils@npm:^8.48.0": version: 8.48.0 resolution: "@typescript-eslint/tsconfig-utils@npm:8.48.0" @@ -7248,6 +7294,15 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/tsconfig-utils@npm:8.48.1, @typescript-eslint/tsconfig-utils@npm:^8.48.1": + version: 8.48.1 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.48.1" + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + checksum: 10c0/0d540f7ab3018ed1bab8f008c0d30229e0ea12806fdbf1c756572b5cf536a1f2a6c59ca2544c09bcd5b89dcfcf79e5f6be3d765e725492b9c7e4cd64fcecffc6 + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:8.48.0": version: 8.48.0 resolution: "@typescript-eslint/type-utils@npm:8.48.0" @@ -7264,6 +7319,22 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/type-utils@npm:8.48.1": + version: 8.48.1 + resolution: "@typescript-eslint/type-utils@npm:8.48.1" + dependencies: + "@typescript-eslint/types": "npm:8.48.1" + "@typescript-eslint/typescript-estree": "npm:8.48.1" + "@typescript-eslint/utils": "npm:8.48.1" + debug: "npm:^4.3.4" + ts-api-utils: "npm:^2.1.0" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: 10c0/c98a71f7d374be249ecc7c9f20b0a867a73ad4f64e646a6bf9f2c1a5d74f0dc7bd59e9c94a0842068caa366af39ae0c550ede6d653b5c9418a0a587510bbb6d5 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:8.48.0, @typescript-eslint/types@npm:^8.48.0": version: 8.48.0 resolution: "@typescript-eslint/types@npm:8.48.0" @@ -7271,6 +7342,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:8.48.1, @typescript-eslint/types@npm:^8.48.1": + version: 8.48.1 + resolution: "@typescript-eslint/types@npm:8.48.1" + checksum: 10c0/366b8140f4c69319f1796b66b33c0c6e16eb6cbe543b9517003104e12ed143b620c1433ccf60d781a629d9433bd509a363c0c9d21fd438c17bb8840733af6caa + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:8.48.0, @typescript-eslint/typescript-estree@npm:^8.23.0": version: 8.48.0 resolution: "@typescript-eslint/typescript-estree@npm:8.48.0" @@ -7290,6 +7368,25 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:8.48.1": + version: 8.48.1 + resolution: "@typescript-eslint/typescript-estree@npm:8.48.1" + dependencies: + "@typescript-eslint/project-service": "npm:8.48.1" + "@typescript-eslint/tsconfig-utils": "npm:8.48.1" + "@typescript-eslint/types": "npm:8.48.1" + "@typescript-eslint/visitor-keys": "npm:8.48.1" + debug: "npm:^4.3.4" + minimatch: "npm:^9.0.4" + semver: "npm:^7.6.0" + tinyglobby: "npm:^0.2.15" + ts-api-utils: "npm:^2.1.0" + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + checksum: 10c0/72c0802f74222160f6a13ebbd32b0d504142a2427678c87ea78fc32672c65fd522377d43b31a97c944cbd0aefc36b320bf02f04e47c44f2797d6ccd0a8aa30ec + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:8.48.0, @typescript-eslint/utils@npm:^8.27.0, @typescript-eslint/utils@npm:^8.8.1": version: 8.48.0 resolution: "@typescript-eslint/utils@npm:8.48.0" @@ -7305,6 +7402,21 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:8.48.1": + version: 8.48.1 + resolution: "@typescript-eslint/utils@npm:8.48.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.7.0" + "@typescript-eslint/scope-manager": "npm:8.48.1" + "@typescript-eslint/types": "npm:8.48.1" + "@typescript-eslint/typescript-estree": "npm:8.48.1" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: 10c0/1775ac217b578f52d6c1e85258098f8ef764d04830c6ce11043b434860da80f1a5f7cc1b9f2e0a63de161e83b8d876f7ae8362d7644d5d8e636e60ad5eeff4e2 + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:8.48.0": version: 8.48.0 resolution: "@typescript-eslint/visitor-keys@npm:8.48.0" @@ -7315,6 +7427,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:8.48.1": + version: 8.48.1 + resolution: "@typescript-eslint/visitor-keys@npm:8.48.1" + dependencies: + "@typescript-eslint/types": "npm:8.48.1" + eslint-visitor-keys: "npm:^4.2.1" + checksum: 10c0/ecf4078ce63c296dd340672b516f42bf452534c75af7e7d6c1a3f32b143ff184cb3a4071d7429a9f870371ff9091a790acce28b85ce3c450bfc60554c79d43ca + languageName: node + linkType: hard + "@typescript/native-preview-darwin-arm64@npm:7.0.0-dev.20251127.1": version: 7.0.0-dev.20251127.1 resolution: "@typescript/native-preview-darwin-arm64@npm:7.0.0-dev.20251127.1" @@ -10277,27 +10399,26 @@ __metadata: languageName: node linkType: hard -"eslint-config-next@npm:15.3.2": - version: 15.3.2 - resolution: "eslint-config-next@npm:15.3.2" +"eslint-config-next@npm:16.0.7": + version: 16.0.7 + resolution: "eslint-config-next@npm:16.0.7" dependencies: - "@next/eslint-plugin-next": "npm:15.3.2" - "@rushstack/eslint-patch": "npm:^1.10.3" - "@typescript-eslint/eslint-plugin": "npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" - "@typescript-eslint/parser": "npm:^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0" + "@next/eslint-plugin-next": "npm:16.0.7" eslint-import-resolver-node: "npm:^0.3.6" eslint-import-resolver-typescript: "npm:^3.5.2" - eslint-plugin-import: "npm:^2.31.0" + eslint-plugin-import: "npm:^2.32.0" eslint-plugin-jsx-a11y: "npm:^6.10.0" eslint-plugin-react: "npm:^7.37.0" - eslint-plugin-react-hooks: "npm:^5.0.0" + eslint-plugin-react-hooks: "npm:^7.0.0" + globals: "npm:16.4.0" + typescript-eslint: "npm:^8.46.0" peerDependencies: - eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + eslint: ">=9.0.0" typescript: ">=3.3.1" peerDependenciesMeta: typescript: optional: true - checksum: 10c0/91cd6ba638d46c494f5cddc592c5705e342d5c459bc754b50bbf6d2047dc50e57fb7c907f3865fa92312d2df682900c102105b82a90d04cbd2519eb67d9ed172 + checksum: 10c0/ca3e974c6c1c0821d6ff9ec8590ff334417b2cb615b92b119dd7bd05303c9c987256668e90209d2a74c6b088df9fbcbdbe44e79cb24c52b2b00f3ef9d0f0a061 languageName: node linkType: hard @@ -10367,7 +10488,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-import@npm:^2.31.0": +"eslint-plugin-import@npm:^2.31.0, eslint-plugin-import@npm:^2.32.0": version: 2.32.0 resolution: "eslint-plugin-import@npm:2.32.0" dependencies: @@ -10421,7 +10542,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react-hooks@npm:^5.0.0, eslint-plugin-react-hooks@npm:^5.2.0": +"eslint-plugin-react-hooks@npm:^5.2.0": version: 5.2.0 resolution: "eslint-plugin-react-hooks@npm:5.2.0" peerDependencies: @@ -10430,6 +10551,21 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-react-hooks@npm:^7.0.0": + version: 7.0.1 + resolution: "eslint-plugin-react-hooks@npm:7.0.1" + dependencies: + "@babel/core": "npm:^7.24.4" + "@babel/parser": "npm:^7.24.4" + hermes-parser: "npm:^0.25.1" + zod: "npm:^3.25.0 || ^4.0.0" + zod-validation-error: "npm:^3.5.0 || ^4.0.0" + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + checksum: 10c0/1e711d1a9d1fa9cfc51fa1572500656577201199c70c795c6a27adfc1df39e5c598f69aab6aa91117753d23cc1f11388579a2bed14921cf9a4efe60ae8618496 + languageName: node + linkType: hard + "eslint-plugin-react-refresh@npm:^0.4.20": version: 0.4.24 resolution: "eslint-plugin-react-refresh@npm:0.4.24" @@ -11297,6 +11433,13 @@ __metadata: languageName: node linkType: hard +"globals@npm:16.4.0": + version: 16.4.0 + resolution: "globals@npm:16.4.0" + checksum: 10c0/a14b447a78b664b42f6d324e8675fcae6fe5e57924fecc1f6328dce08af9b2ca3a3138501e1b1f244a49814a732dc60cfc1aa24e714e0b64ac8bd18910bfac90 + languageName: node + linkType: hard + "globals@npm:^14.0.0": version: 14.0.0 resolution: "globals@npm:14.0.0" @@ -11471,6 +11614,22 @@ __metadata: languageName: node linkType: hard +"hermes-estree@npm:0.25.1": + version: 0.25.1 + resolution: "hermes-estree@npm:0.25.1" + checksum: 10c0/48be3b2fa37a0cbc77a112a89096fa212f25d06de92781b163d67853d210a8a5c3784fac23d7d48335058f7ed283115c87b4332c2a2abaaccc76d0ead1a282ac + languageName: node + linkType: hard + +"hermes-parser@npm:^0.25.1": + version: 0.25.1 + resolution: "hermes-parser@npm:0.25.1" + dependencies: + hermes-estree: "npm:0.25.1" + checksum: 10c0/3abaa4c6f1bcc25273f267297a89a4904963ea29af19b8e4f6eabe04f1c2c7e9abd7bfc4730ddb1d58f2ea04b6fee74053d8bddb5656ec6ebf6c79cc8d14202c + languageName: node + linkType: hard + "hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.2": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" @@ -13426,23 +13585,23 @@ __metadata: languageName: node linkType: hard -"next@npm:^15.5.7": - version: 15.5.7 - resolution: "next@npm:15.5.7" +"next@npm:16.0.10": + version: 16.0.10 + resolution: "next@npm:16.0.10" dependencies: - "@next/env": "npm:15.5.7" - "@next/swc-darwin-arm64": "npm:15.5.7" - "@next/swc-darwin-x64": "npm:15.5.7" - "@next/swc-linux-arm64-gnu": "npm:15.5.7" - "@next/swc-linux-arm64-musl": "npm:15.5.7" - "@next/swc-linux-x64-gnu": "npm:15.5.7" - "@next/swc-linux-x64-musl": "npm:15.5.7" - "@next/swc-win32-arm64-msvc": "npm:15.5.7" - "@next/swc-win32-x64-msvc": "npm:15.5.7" + "@next/env": "npm:16.0.10" + "@next/swc-darwin-arm64": "npm:16.0.10" + "@next/swc-darwin-x64": "npm:16.0.10" + "@next/swc-linux-arm64-gnu": "npm:16.0.10" + "@next/swc-linux-arm64-musl": "npm:16.0.10" + "@next/swc-linux-x64-gnu": "npm:16.0.10" + "@next/swc-linux-x64-musl": "npm:16.0.10" + "@next/swc-win32-arm64-msvc": "npm:16.0.10" + "@next/swc-win32-x64-msvc": "npm:16.0.10" "@swc/helpers": "npm:0.5.15" caniuse-lite: "npm:^1.0.30001579" postcss: "npm:8.4.31" - sharp: "npm:^0.34.3" + sharp: "npm:^0.34.4" styled-jsx: "npm:5.1.6" peerDependencies: "@opentelemetry/api": ^1.1.0 @@ -13481,7 +13640,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 10c0/baf5b9f42416c478702b3894479b3d7862bc4abf18afe0e43b7fc7ed35567b8dc6cb76cd94906505bab9013cb8d0f3370cdc0451c01ec15ae5a638d37b5ba7c7 + checksum: 10c0/c0e42bfaa0d38b0ee9a7fc54c748da2dfd807a76d75278b4c4f06768965d7b1035b836cae45e24a074dcf156a13c0fa555caa652886cc0f93e8be2b296dfbb51 languageName: node linkType: hard @@ -15344,8 +15503,8 @@ __metadata: dependencies: "@eslint/compat": "npm:^1.2.9" "@formatjs/cli": "npm:^6.7.1" - "@types/react": "npm:^19.2.3" - "@types/react-dom": "npm:^19.2.3" + "@types/react": "npm:19.2.7" + "@types/react-dom": "npm:19.2.3" "@typescript/native-preview": "npm:^7.0.0-dev.20251104.1" "@yarnpkg/types": "npm:^4.0.1" commander: "npm:^14.0.0" @@ -15451,7 +15610,7 @@ __metadata: languageName: node linkType: hard -"sharp@npm:^0.34.3, sharp@npm:^0.34.4": +"sharp@npm:^0.34.4": version: 0.34.5 resolution: "sharp@npm:0.34.5" dependencies: @@ -16609,6 +16768,21 @@ __metadata: languageName: node linkType: hard +"typescript-eslint@npm:^8.46.0": + version: 8.48.1 + resolution: "typescript-eslint@npm:8.48.1" + dependencies: + "@typescript-eslint/eslint-plugin": "npm:8.48.1" + "@typescript-eslint/parser": "npm:8.48.1" + "@typescript-eslint/typescript-estree": "npm:8.48.1" + "@typescript-eslint/utils": "npm:8.48.1" + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: 10c0/10b501bf69b14edd09d652b33e4a5dfad0498f2943992a433006933e384cdc5815217b2990801796ddf946d2ef4971d9a16c98c7cfbba41f6aa31b245ad057ac + languageName: node + linkType: hard + "typescript@npm:5.8.2": version: 5.8.2 resolution: "typescript@npm:5.8.2" @@ -17610,6 +17784,15 @@ __metadata: languageName: node linkType: hard +"zod-validation-error@npm:^3.5.0 || ^4.0.0": + version: 4.0.2 + resolution: "zod-validation-error@npm:4.0.2" + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + checksum: 10c0/0ccfec48c46de1be440b719cd02044d4abb89ed0e14c13e637cd55bf29102f67ccdba373f25def0fc7130e5f15025be4d557a7edcc95d5a3811599aade689e1b + languageName: node + linkType: hard + "zod@npm:^3.23.8, zod@npm:^3.24.1, zod@npm:^3.24.4": version: 3.25.76 resolution: "zod@npm:3.25.76" @@ -17617,6 +17800,13 @@ __metadata: languageName: node linkType: hard +"zod@npm:^3.25.0 || ^4.0.0": + version: 4.1.13 + resolution: "zod@npm:4.1.13" + checksum: 10c0/d7e74e82dba81a91ffc3239cd85bc034abe193a28f7087a94ab258a3e48e9a7ca4141920cac979a0d781495b48fc547777394149f26be04c3dc642f58bbc3941 + languageName: node + linkType: hard + "zustand@npm:^4.5.2": version: 4.5.7 resolution: "zustand@npm:4.5.7"