Openstatus www.openstatus.dev

fix(stpg): hydration issue (#1494)

* fix: invalid query key

* refactor: status blank

* fix: schema

authored by

Maximilian Kaske and committed by
GitHub
c3874f44 54e7f40b

+181 -186
+4 -1
apps/dashboard/src/components/forms/status-page/form-configuration.tsx
··· 65 65 66 66 const schema = z.object({ 67 67 new: z.boolean(), 68 - configuration: z.record(z.string(), z.string().or(z.boolean()).optional()), 68 + configuration: z.record( 69 + z.string(), 70 + z.string().or(z.boolean().nullish()).optional(), 71 + ), 69 72 homepageUrl: z.string().optional(), 70 73 contactUrl: z.string().optional(), 71 74 });
+6 -33
apps/status-page/src/app/(status-page)/[domain]/(public)/events/(list)/page.tsx
··· 1 1 "use client"; 2 2 3 - import { 4 - StatusBlankContainer, 5 - StatusBlankContent, 6 - StatusBlankDescription, 7 - StatusBlankReport, 8 - StatusBlankTitle, 9 - } from "@/components/status-page/status-blank"; 3 + import { StatusBlankEvents } from "@/components/status-page/status-blank"; 10 4 import { 11 5 StatusEvent, 12 6 StatusEventAffected, ··· 101 95 ); 102 96 }) 103 97 ) : ( 104 - <StatusBlankContainer> 105 - <div className="relative mt-8 flex w-full flex-col items-center justify-center"> 106 - <StatusBlankReport className="-top-16 absolute scale-60 opacity-50" /> 107 - <StatusBlankReport className="-top-8 absolute scale-80 opacity-80" /> 108 - <StatusBlankReport /> 109 - </div> 110 - <StatusBlankContent> 111 - <StatusBlankTitle>No reports found</StatusBlankTitle> 112 - <StatusBlankDescription> 113 - No reports found for this status page. 114 - </StatusBlankDescription> 115 - </StatusBlankContent> 116 - </StatusBlankContainer> 98 + <StatusBlankEvents /> 117 99 )} 118 100 </StatusEventGroup> 119 101 </TabsContent> ··· 154 136 ); 155 137 }) 156 138 ) : ( 157 - <StatusBlankContainer> 158 - <div className="relative mt-8 flex w-full flex-col items-center justify-center"> 159 - <StatusBlankReport className="-top-16 absolute scale-60 opacity-50" /> 160 - <StatusBlankReport className="-top-8 absolute scale-80 opacity-80" /> 161 - <StatusBlankReport /> 162 - </div> 163 - <StatusBlankContent> 164 - <StatusBlankTitle>No maintenances found</StatusBlankTitle> 165 - <StatusBlankDescription> 166 - No maintenances found for this status page. 167 - </StatusBlankDescription> 168 - </StatusBlankContent> 169 - </StatusBlankContainer> 139 + <StatusBlankEvents 140 + title="No maintenances found" 141 + description="No maintenances found for this status page." 142 + /> 170 143 )} 171 144 </StatusEventGroup> 172 145 </TabsContent>
+9 -1
apps/status-page/src/app/(status-page)/[domain]/(public)/events/(view)/maintenance/[id]/page.tsx
··· 5 5 6 6 import { ButtonBack } from "@/components/button/button-back"; 7 7 import { ButtonCopyLink } from "@/components/button/button-copy-link"; 8 + import { StatusBlankEvents } from "@/components/status-page/status-blank"; 8 9 import { 9 10 StatusEvent, 10 11 StatusEventAffected, ··· 27 28 }), 28 29 ); 29 30 30 - if (!maintenance) return null; 31 + if (!maintenance) { 32 + return ( 33 + <StatusBlankEvents 34 + title="Maintenance not found" 35 + description="The maintenance you are looking for does not exist." 36 + /> 37 + ); 38 + } 31 39 32 40 return ( 33 41 <div className="flex flex-col gap-4">
+9 -1
apps/status-page/src/app/(status-page)/[domain]/(public)/events/(view)/report/[id]/page.tsx
··· 2 2 3 3 import { ButtonBack } from "@/components/button/button-back"; 4 4 import { ButtonCopyLink } from "@/components/button/button-copy-link"; 5 + import { StatusBlankEvents } from "@/components/status-page/status-blank"; 5 6 import { 6 7 StatusEvent, 7 8 StatusEventAffected, ··· 24 25 trpc.statusPage.getReport.queryOptions({ id: Number(id), slug: domain }), 25 26 ); 26 27 27 - if (!report) return null; 28 + if (!report) { 29 + return ( 30 + <StatusBlankEvents 31 + title="Report not found" 32 + description="The report you are looking for does not exist." 33 + /> 34 + ); 35 + } 28 36 29 37 const updates = report.statusReportUpdates.sort( 30 38 (a, b) => b.date.getTime() - a.date.getTime(),
+10
apps/status-page/src/app/(status-page)/[domain]/(public)/monitors/[id]/page.tsx
··· 22 22 StatusHeader, 23 23 StatusTitle, 24 24 } from "@/components/status-page/status"; 25 + import { StatusBlankMonitors } from "@/components/status-page/status-blank"; 25 26 import { 26 27 StatusChartContent, 27 28 StatusChartDescription, ··· 200 201 : "N/A", 201 202 }; 202 203 }, [uptimeData, regionLatencyData, globalLatencyData]); 204 + 205 + if (!isLoading && !monitor) { 206 + return ( 207 + <StatusBlankMonitors 208 + title="Monitor not found" 209 + description="The monitor you are looking for does not exist." 210 + /> 211 + ); 212 + } 203 213 204 214 return ( 205 215 <Status>
+2 -20
apps/status-page/src/app/(status-page)/[domain]/(public)/monitors/page.tsx
··· 11 11 StatusHeader, 12 12 StatusTitle, 13 13 } from "@/components/status-page/status"; 14 - import { 15 - StatusBlankContainer, 16 - StatusBlankContent, 17 - StatusBlankDescription, 18 - StatusBlankMonitor, 19 - StatusBlankTitle, 20 - } from "@/components/status-page/status-blank"; 14 + import { StatusBlankMonitors } from "@/components/status-page/status-blank"; 21 15 import { StatusMonitorTitle } from "@/components/status-page/status-monitor"; 22 16 import { StatusMonitorDescription } from "@/components/status-page/status-monitor"; 23 17 import { useTRPC } from "@/lib/trpc/client"; ··· 94 88 ); 95 89 }) 96 90 ) : ( 97 - <StatusBlankContainer> 98 - <div className="relative mt-8 flex w-full flex-col items-center justify-center"> 99 - <StatusBlankMonitor className="-top-16 absolute scale-60 opacity-50" /> 100 - <StatusBlankMonitor className="-top-8 absolute scale-80 opacity-80" /> 101 - <StatusBlankMonitor /> 102 - </div> 103 - <StatusBlankContent> 104 - <StatusBlankTitle>No public monitors</StatusBlankTitle> 105 - <StatusBlankDescription> 106 - No public monitors have been added to this page. 107 - </StatusBlankDescription> 108 - </StatusBlankContent> 109 - </StatusBlankContainer> 91 + <StatusBlankMonitors /> 110 92 )} 111 93 </StatusContent> 112 94 </Status>
+30 -7
apps/status-page/src/app/(status-page)/[domain]/(public)/page.tsx
··· 34 34 const { domain } = useParams<{ domain: string }>(); 35 35 const { cardType, barType, showUptime } = useStatusPage(); 36 36 const trpc = useTRPC(); 37 - const { data: page } = useQuery( 38 - trpc.statusPage.get.queryOptions({ slug: domain, cardType, barType }), 37 + 38 + // NOTE: we cannot use `cardType` and `barType` here because of queryKey changes 39 + // It wouldn't match the server prefetch keys and we would have to refetch the page here 40 + const { data: pageInitial } = useQuery( 41 + trpc.statusPage.get.queryOptions({ 42 + slug: domain, 43 + }), 39 44 ); 40 45 46 + const hasCustomConfig = pageInitial?.configuration 47 + ? pageInitial.configuration.type !== barType || 48 + pageInitial.configuration.value !== cardType 49 + : false; 50 + 51 + // NOTE: instead, we use the `enabled` flag to only fetch the page if the configuration differs 52 + const { data: pageWithCustomConfiguration } = useQuery({ 53 + ...trpc.statusPage.get.queryOptions({ 54 + slug: domain, 55 + cardType, 56 + barType, 57 + }), 58 + enabled: hasCustomConfig, 59 + }); 60 + 41 61 // NOTE: we can prefetch that to avoid loading state 42 62 const { data: uptimeData, isLoading } = useQuery( 43 63 trpc.statusPage.getUptime.queryOptions({ 44 64 slug: domain, 45 - monitorIds: page?.monitors?.map((monitor) => monitor.id.toString()) || [], 46 - // NOTE: we could move that to the server as we query the page entry anyways 65 + monitorIds: 66 + pageInitial?.monitors?.map((monitor) => monitor.id.toString()) || [], 47 67 cardType, 48 68 barType, 49 69 }), ··· 54 74 const events = useMemo(() => { 55 75 let hasIncident = false; 56 76 return ( 57 - page?.openEvents.filter((e) => { 77 + pageInitial?.openEvents.filter((e) => { 58 78 if (e.type !== "incident") return true; 59 79 if (hasIncident) return false; 60 80 hasIncident = true; 61 81 return true; 62 82 }) ?? [] 63 83 ); 64 - }, [page]); 84 + }, [pageInitial]); 85 + 86 + if (!pageInitial) return null; 65 87 66 - if (!page) return null; 88 + // REMINDER: if we are using the custom configuration, we need to use the pageWithCustomConfiguration 89 + const page = pageWithCustomConfiguration ?? pageInitial; 67 90 68 91 return ( 69 92 <div className="flex flex-col gap-6">
+2
apps/status-page/src/app/(status-page)/[domain]/layout.tsx
··· 36 36 trpc.statusPage.get.queryOptions({ slug: domain }), 37 37 ); 38 38 39 + if (!page) return notFound(); 40 + 39 41 const validation = schema.safeParse(page?.configuration); 40 42 const communityTheme = validation.data?.theme; 41 43
+46
apps/status-page/src/components/status-page/status-blank.tsx
··· 213 213 </div> 214 214 ); 215 215 } 216 + 217 + export function StatusBlankEvents({ 218 + title = "No reports found", 219 + description = "No reports found for this status page.", 220 + ...props 221 + }: React.ComponentProps<typeof StatusBlankContainer> & { 222 + title?: string; 223 + description?: string; 224 + }) { 225 + return ( 226 + <StatusBlankContainer {...props}> 227 + <div className="relative mt-8 flex w-full flex-col items-center justify-center"> 228 + <StatusBlankReport className="-top-16 absolute scale-60 opacity-50" /> 229 + <StatusBlankReport className="-top-8 absolute scale-80 opacity-80" /> 230 + <StatusBlankReport /> 231 + </div> 232 + <StatusBlankContent> 233 + <StatusBlankTitle>{title}</StatusBlankTitle> 234 + <StatusBlankDescription>{description}</StatusBlankDescription> 235 + </StatusBlankContent> 236 + </StatusBlankContainer> 237 + ); 238 + } 239 + 240 + export function StatusBlankMonitors({ 241 + title = "No public monitors", 242 + description = "No public monitors have been added to this page.", 243 + ...props 244 + }: React.ComponentProps<typeof StatusBlankContainer> & { 245 + title?: string; 246 + description?: string; 247 + }) { 248 + return ( 249 + <StatusBlankContainer {...props}> 250 + <div className="relative mt-8 flex w-full flex-col items-center justify-center"> 251 + <StatusBlankMonitor className="-top-16 absolute scale-60 opacity-50" /> 252 + <StatusBlankMonitor className="-top-8 absolute scale-80 opacity-80" /> 253 + <StatusBlankMonitor /> 254 + </div> 255 + <StatusBlankContent> 256 + <StatusBlankTitle>{title}</StatusBlankTitle> 257 + <StatusBlankDescription>{description}</StatusBlankDescription> 258 + </StatusBlankContent> 259 + </StatusBlankContainer> 260 + ); 261 + }
+19 -6
packages/api/src/router/statusPage.ts
··· 5 5 maintenance, 6 6 monitorsToPages, 7 7 page, 8 + pageConfigurationSchema, 8 9 pageSubscriber, 9 10 selectPublicMonitorSchema, 10 11 selectPublicPageSchemaWithRelation, ··· 43 44 .input( 44 45 z.object({ 45 46 slug: z.string().toLowerCase(), 47 + // NOTE: override the defaults we are getting from the page configuration 46 48 cardType: z 47 49 .enum(["requests", "duration", "dominant", "manual"]) 48 - .default("requests"), 49 - barType: z.enum(["absolute", "dominant", "manual"]).default("dominant"), 50 + .nullish(), 51 + barType: z.enum(["absolute", "dominant", "manual"]).nullish(), 50 52 }), 51 53 ) 52 54 .output(selectPublicPageSchemaWithRelation.nullish()) ··· 88 90 89 91 if (!_page) return null; 90 92 93 + const configuration = pageConfigurationSchema.safeParse( 94 + _page.configuration ?? {}, 95 + ); 96 + 97 + if (!configuration.success) { 98 + console.error("Invalid configuration", configuration.error); 99 + return null; 100 + } 101 + 102 + const barType = opts.input.barType ?? configuration.data.type; 103 + // const cardType = opts.input.cardType ?? configuration.data.value; 104 + 91 105 const monitors = _page.monitorsToPages 92 106 // NOTE: we cannot nested `where` in drizzle to filter active monitors 93 107 .filter((m) => !m.monitor.deletedAt) ··· 100 114 }); 101 115 const status = 102 116 events.some((e) => e.type === "incident" && !e.to) && 103 - opts.input.barType !== "manual" 117 + barType !== "manual" 104 118 ? "error" 105 119 : events.some((e) => e.type === "report" && !e.to) 106 120 ? "degraded" ··· 117 131 }); 118 132 119 133 const status = 120 - monitors.some((m) => m.status === "error") && 121 - opts.input.barType !== "manual" 134 + monitors.some((m) => m.status === "error") && barType !== "manual" 122 135 ? "error" 123 136 : monitors.some((m) => m.status === "degraded") 124 137 ? "degraded" ··· 146 159 .sort((a, b) => a.from.getTime() - b.from.getTime()); 147 160 148 161 const openEvents = pageEvents.filter((event) => { 149 - if (event.type === "incident" && opts.input.barType !== "manual") { 162 + if (event.type === "incident" && barType !== "manual") { 150 163 if (!event.to) return true; 151 164 if (event.to < new Date()) return false; 152 165 return false;
+1
packages/db/package.json
··· 16 16 "@libsql/client": "0.15.15", 17 17 "@openstatus/assertions": "workspace:*", 18 18 "@openstatus/regions": "workspace:*", 19 + "@openstatus/theme-store": "workspace:*", 19 20 "@t3-oss/env-core": "0.7.1", 20 21 "drizzle-orm": "0.44.4", 21 22 "drizzle-zod": "0.5.1",
+16 -4
packages/db/src/schema/pages/validation.ts
··· 1 + import type { ThemeKey } from "@openstatus/theme-store"; 2 + import { THEME_KEYS } from "@openstatus/theme-store"; 1 3 import { createInsertSchema, createSelectSchema } from "drizzle-zod"; 2 4 import { z } from "zod"; 3 5 ··· 38 40 .default([]), 39 41 }); 40 42 43 + export const pageConfigurationSchema = z.object({ 44 + value: z 45 + .enum(["duration", "requests", "manual"]) 46 + .nullish() 47 + .default("requests"), 48 + type: z.enum(["absolute", "manual"]).nullish().default("absolute"), 49 + uptime: z.coerce.boolean().nullish().default(true), 50 + theme: z 51 + .enum(THEME_KEYS as [ThemeKey, ...ThemeKey[]]) 52 + .nullish() 53 + .default("default"), 54 + }); 55 + 41 56 export const selectPageSchema = createSelectSchema(page).extend({ 42 57 password: z.string().optional().nullable().default(""), 43 - configuration: z 44 - .record(z.string(), z.string().or(z.boolean()).optional()) 45 - .nullish() 46 - .default({}), 58 + configuration: pageConfigurationSchema.nullish().default({}), 47 59 }); 48 60 49 61 export type InsertPage = z.infer<typeof insertPageSchema>;
+27 -113
pnpm-lock.yaml
··· 64 64 version: 0.15.14(bufferutil@4.0.8)(utf-8-validate@6.0.5) 65 65 '@openpanel/nextjs': 66 66 specifier: 1.0.8 67 - version: 1.0.8(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 67 + version: 1.0.8(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 68 68 '@openstatus/analytics': 69 69 specifier: workspace:* 70 70 version: link:../../packages/analytics ··· 190 190 version: 1.2.7(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 191 191 '@sentry/nextjs': 192 192 specifier: 10.22.0 193 - version: 10.22.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1) 193 + version: 10.22.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1) 194 194 '@stripe/stripe-js': 195 195 specifier: 2.1.6 196 196 version: 2.1.6 ··· 205 205 version: 11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2) 206 206 '@trpc/next': 207 207 specifier: 11.4.4 208 - version: 11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) 208 + version: 11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) 209 209 '@trpc/react-query': 210 210 specifier: 11.4.4 211 211 version: 11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) ··· 232 232 version: 0.525.0(react@19.2.0) 233 233 next: 234 234 specifier: 15.5.3 235 - version: 15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 235 + version: 15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 236 236 next-auth: 237 237 specifier: 5.0.0-beta.29 238 - version: 5.0.0-beta.29(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) 238 + version: 5.0.0-beta.29(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) 239 239 next-themes: 240 240 specifier: 0.4.6 241 241 version: 0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 242 242 nuqs: 243 243 specifier: 2.4.3 244 - version: 2.4.3(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) 244 + version: 2.4.3(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) 245 245 random-word-slugs: 246 246 specifier: 0.1.7 247 247 version: 0.1.7 ··· 545 545 version: 0.15.9(bufferutil@4.0.8)(utf-8-validate@6.0.5) 546 546 '@openpanel/nextjs': 547 547 specifier: 1.0.8 548 - version: 1.0.8(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 548 + version: 1.0.8(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 549 549 '@openstatus/analytics': 550 550 specifier: workspace:* 551 551 version: link:../../packages/analytics ··· 713 713 version: 5.0.0-beta.29(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) 714 714 next-plausible: 715 715 specifier: 3.12.4 716 - version: 3.12.4(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 716 + version: 3.12.4(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 717 717 next-themes: 718 718 specifier: 0.4.6 719 719 version: 0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 720 720 nuqs: 721 721 specifier: 2.4.3 722 - version: 2.4.3(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) 722 + version: 2.4.3(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) 723 723 random-word-slugs: 724 724 specifier: 0.1.7 725 725 version: 0.1.7 ··· 819 819 version: 0.15.14(bufferutil@4.0.8)(utf-8-validate@6.0.5) 820 820 '@openpanel/nextjs': 821 821 specifier: 1.0.8 822 - version: 1.0.8(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 822 + version: 1.0.8(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 823 823 '@openstatus/analytics': 824 824 specifier: workspace:* 825 825 version: link:../../packages/analytics ··· 891 891 version: 1.1.3(@types/react-dom@19.2.2(@types/react@19.2.2))(@types/react@19.2.2)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 892 892 '@sentry/nextjs': 893 893 specifier: 10.22.0 894 - version: 10.22.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1(esbuild@0.21.5)) 894 + version: 10.22.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1(esbuild@0.21.5)) 895 895 '@stripe/stripe-js': 896 896 specifier: 2.1.6 897 897 version: 2.1.6 ··· 918 918 version: 11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2) 919 919 '@trpc/next': 920 920 specifier: 11.4.4 921 - version: 11.4.4(@tanstack/react-query@5.80.7(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.80.7(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) 921 + version: 11.4.4(@tanstack/react-query@5.80.7(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.80.7(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) 922 922 '@trpc/react-query': 923 923 specifier: 11.4.4 924 924 version: 11.4.4(@tanstack/react-query@5.80.7(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) ··· 972 972 version: 5.0.0-beta.29(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) 973 973 next-plausible: 974 974 specifier: 3.12.4 975 - version: 3.12.4(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 975 + version: 3.12.4(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 976 976 next-themes: 977 977 specifier: 0.2.1 978 978 version: 0.2.1(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 979 979 nuqs: 980 980 specifier: 2.2.3 981 - version: 2.2.3(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) 981 + version: 2.2.3(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0) 982 982 random-word-slugs: 983 983 specifier: 0.1.7 984 984 version: 0.1.7 ··· 1054 1054 version: 0.2.0(@content-collections/core@0.7.3(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 1055 1055 '@content-collections/next': 1056 1056 specifier: 0.2.4 1057 - version: 0.2.4(@content-collections/core@0.7.3(typescript@5.7.2))(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) 1057 + version: 0.2.4(@content-collections/core@0.7.3(typescript@5.7.2))(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)) 1058 1058 '@openstatus/tsconfig': 1059 1059 specifier: workspace:* 1060 1060 version: link:../../packages/tsconfig ··· 1305 1305 '@openstatus/regions': 1306 1306 specifier: workspace:* 1307 1307 version: link:../regions 1308 + '@openstatus/theme-store': 1309 + specifier: workspace:* 1310 + version: link:../theme-store 1308 1311 '@t3-oss/env-core': 1309 1312 specifier: 0.7.1 1310 1313 version: 0.7.1(typescript@5.7.2)(zod@3.24.2) ··· 13296 13299 - acorn 13297 13300 - supports-color 13298 13301 13299 - '@content-collections/next@0.2.4(@content-collections/core@0.7.3(typescript@5.7.2))(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': 13302 + '@content-collections/next@0.2.4(@content-collections/core@0.7.3(typescript@5.7.2))(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))': 13300 13303 dependencies: 13301 13304 '@content-collections/core': 0.7.3(typescript@5.7.2) 13302 13305 '@content-collections/integrations': 0.2.1(@content-collections/core@0.7.3(typescript@5.7.2)) ··· 14394 14397 '@openpanel/web': 1.0.1 14395 14398 astro: 5.13.7(@types/node@24.0.8)(encoding@0.1.13)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.45.1)(terser@5.43.1)(typescript@5.7.2)(yaml@2.6.1) 14396 14399 14397 - '@openpanel/nextjs@1.0.8(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 14398 - dependencies: 14399 - '@openpanel/web': 1.0.1 14400 - next: 15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 14401 - react: 19.2.0 14402 - react-dom: 19.2.0(react@19.2.0) 14403 - 14404 - '@openpanel/nextjs@1.0.8(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 14400 + '@openpanel/nextjs@1.0.8(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)': 14405 14401 dependencies: 14406 14402 '@openpanel/web': 1.0.1 14407 14403 next: 15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) ··· 16382 16378 16383 16379 '@sentry/core@9.46.0': {} 16384 16380 16385 - '@sentry/nextjs@10.22.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1)': 16381 + '@sentry/nextjs@10.22.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1)': 16386 16382 dependencies: 16387 16383 '@opentelemetry/api': 1.9.0 16388 16384 '@opentelemetry/semantic-conventions': 1.37.0 ··· 16395 16391 '@sentry/react': 10.22.0(react@19.2.0) 16396 16392 '@sentry/vercel-edge': 10.22.0 16397 16393 '@sentry/webpack-plugin': 4.5.0(encoding@0.1.13)(webpack@5.97.1) 16398 - next: 15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 16399 - resolve: 1.22.8 16400 - rollup: 4.45.1 16401 - stacktrace-parser: 0.1.10 16402 - transitivePeerDependencies: 16403 - - '@opentelemetry/context-async-hooks' 16404 - - '@opentelemetry/core' 16405 - - '@opentelemetry/sdk-trace-base' 16406 - - encoding 16407 - - react 16408 - - supports-color 16409 - - webpack 16410 - 16411 - '@sentry/nextjs@10.22.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1(esbuild@0.21.5))': 16412 - dependencies: 16413 - '@opentelemetry/api': 1.9.0 16414 - '@opentelemetry/semantic-conventions': 1.37.0 16415 - '@rollup/plugin-commonjs': 28.0.1(rollup@4.45.1) 16416 - '@sentry-internal/browser-utils': 10.22.0 16417 - '@sentry/bundler-plugin-core': 4.5.0(encoding@0.1.13) 16418 - '@sentry/core': 10.22.0 16419 - '@sentry/node': 10.22.0 16420 - '@sentry/opentelemetry': 10.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0) 16421 - '@sentry/react': 10.22.0(react@19.2.0) 16422 - '@sentry/vercel-edge': 10.22.0 16423 - '@sentry/webpack-plugin': 4.5.0(encoding@0.1.13)(webpack@5.97.1(esbuild@0.21.5)) 16424 16394 next: 15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 16425 16395 resolve: 1.22.8 16426 16396 rollup: 4.45.1 ··· 16434 16404 - supports-color 16435 16405 - webpack 16436 16406 16437 - '@sentry/nextjs@10.22.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1)': 16407 + '@sentry/nextjs@10.22.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)(webpack@5.97.1(esbuild@0.21.5))': 16438 16408 dependencies: 16439 16409 '@opentelemetry/api': 1.9.0 16440 16410 '@opentelemetry/semantic-conventions': 1.37.0 ··· 16446 16416 '@sentry/opentelemetry': 10.22.0(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.37.0) 16447 16417 '@sentry/react': 10.22.0(react@19.2.0) 16448 16418 '@sentry/vercel-edge': 10.22.0 16449 - '@sentry/webpack-plugin': 4.5.0(encoding@0.1.13)(webpack@5.97.1) 16419 + '@sentry/webpack-plugin': 4.5.0(encoding@0.1.13)(webpack@5.97.1(esbuild@0.21.5)) 16450 16420 next: 15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 16451 16421 resolve: 1.22.8 16452 16422 rollup: 4.45.1 ··· 17203 17173 '@trpc/server': 11.4.4(typescript@5.7.2) 17204 17174 typescript: 5.7.2 17205 17175 17206 - '@trpc/next@11.4.4(@tanstack/react-query@5.80.7(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.80.7(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2)': 17176 + '@trpc/next@11.4.4(@tanstack/react-query@5.80.7(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.80.7(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2)': 17207 17177 dependencies: 17208 17178 '@trpc/client': 11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2) 17209 17179 '@trpc/server': 11.4.4(typescript@5.7.2) ··· 17215 17185 '@tanstack/react-query': 5.80.7(react@19.2.0) 17216 17186 '@trpc/react-query': 11.4.4(@tanstack/react-query@5.80.7(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) 17217 17187 17218 - '@trpc/next@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2)': 17219 - dependencies: 17220 - '@trpc/client': 11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2) 17221 - '@trpc/server': 11.4.4(typescript@5.7.2) 17222 - next: 15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 17223 - react: 19.2.0 17224 - react-dom: 19.2.0(react@19.2.0) 17225 - typescript: 5.7.2 17226 - optionalDependencies: 17227 - '@tanstack/react-query': 5.81.5(react@19.2.0) 17228 - '@trpc/react-query': 11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2) 17229 - 17230 17188 '@trpc/next@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/react-query@11.4.4(@tanstack/react-query@5.81.5(react@19.2.0))(@trpc/client@11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2))(@trpc/server@11.4.4(typescript@5.7.2))(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.7.2)': 17231 17189 dependencies: 17232 17190 '@trpc/client': 11.4.4(@trpc/server@11.4.4(typescript@5.7.2))(typescript@5.7.2) ··· 21405 21363 21406 21364 netmask@2.0.2: {} 21407 21365 21408 - next-auth@5.0.0-beta.29(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0): 21409 - dependencies: 21410 - '@auth/core': 0.40.0 21411 - next: 15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 21412 - react: 19.2.0 21413 - 21414 21366 next-auth@5.0.0-beta.29(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0): 21415 21367 dependencies: 21416 21368 '@auth/core': 0.40.0 21417 21369 next: 15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 21418 21370 react: 19.2.0 21419 21371 21420 - next-plausible@3.12.4(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0): 21372 + next-plausible@3.12.4(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react-dom@19.2.0(react@19.2.0))(react@19.2.0): 21421 21373 dependencies: 21422 21374 next: 15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 21423 21375 react: 19.2.0 ··· 21433 21385 dependencies: 21434 21386 react: 19.2.0 21435 21387 react-dom: 19.2.0(react@19.2.0) 21436 - 21437 - next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): 21438 - dependencies: 21439 - '@next/env': 15.5.3 21440 - '@swc/helpers': 0.5.15 21441 - caniuse-lite: 1.0.30001726 21442 - postcss: 8.4.31 21443 - react: 19.2.0 21444 - react-dom: 19.2.0(react@19.2.0) 21445 - styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.2.0) 21446 - optionalDependencies: 21447 - '@next/swc-darwin-arm64': 15.5.3 21448 - '@next/swc-darwin-x64': 15.5.3 21449 - '@next/swc-linux-arm64-gnu': 15.5.3 21450 - '@next/swc-linux-arm64-musl': 15.5.3 21451 - '@next/swc-linux-x64-gnu': 15.5.3 21452 - '@next/swc-linux-x64-musl': 15.5.3 21453 - '@next/swc-win32-arm64-msvc': 15.5.3 21454 - '@next/swc-win32-x64-msvc': 15.5.3 21455 - '@opentelemetry/api': 1.9.0 21456 - sharp: 0.34.3 21457 - transitivePeerDependencies: 21458 - - '@babel/core' 21459 - - babel-plugin-macros 21460 21388 21461 21389 next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0): 21462 21390 dependencies: ··· 21554 21482 dependencies: 21555 21483 boolbase: 1.0.0 21556 21484 21557 - nuqs@2.2.3(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0): 21485 + nuqs@2.2.3(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0): 21558 21486 dependencies: 21559 21487 mitt: 3.0.1 21560 21488 react: 19.2.0 21561 21489 optionalDependencies: 21562 21490 next: 15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 21563 21491 21564 - nuqs@2.4.3(next@15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0): 21565 - dependencies: 21566 - mitt: 3.0.1 21567 - react: 19.2.0 21568 - optionalDependencies: 21569 - next: 15.5.3(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) 21570 - 21571 - nuqs@2.4.3(next@15.5.3(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0): 21492 + nuqs@2.4.3(next@15.5.3(@opentelemetry/api@1.9.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0): 21572 21493 dependencies: 21573 21494 mitt: 3.0.1 21574 21495 react: 19.2.0 ··· 23193 23114 style-to-object@1.0.9: 23194 23115 dependencies: 23195 23116 inline-style-parser: 0.2.4 23196 - 23197 - styled-jsx@5.1.6(@babel/core@7.26.0)(react@19.2.0): 23198 - dependencies: 23199 - client-only: 0.0.1 23200 - react: 19.2.0 23201 - optionalDependencies: 23202 - '@babel/core': 7.26.0 23203 23117 23204 23118 styled-jsx@5.1.6(@babel/core@7.28.4)(react@19.2.0): 23205 23119 dependencies: