diff --git a/app/(app)/challenges/[id]/page.tsx b/app/(app)/challenges/[id]/page.tsx new file mode 100644 index 0000000..b2a9141 --- /dev/null +++ b/app/(app)/challenges/[id]/page.tsx @@ -0,0 +1,9 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "挑戰題目", +}; + +export default function ChallengePage(/* _props: { params: Promise<{ id: string }> } */) { + return
ChallengePage
; +} diff --git a/app/(app)/challenges/_filter/index.tsx b/app/(app)/challenges/_filter/index.tsx new file mode 100644 index 0000000..5c0e246 --- /dev/null +++ b/app/(app)/challenges/_filter/index.tsx @@ -0,0 +1,29 @@ +"use client"; + +import SearchFilterSection from "./search"; +import TagFilterSection, { type TagState } from "./tag"; + +export interface FilterSectionProps { + search: string; + setSearch: (search: string) => void; + tags: TagState; + setTags: (tags: TagState) => void; +} + +export default function FilterSection({ + search, + setSearch, + tags, + setTags, +}: FilterSectionProps) { + return ( + + ); +} diff --git a/app/(app)/challenges/_filter/search.tsx b/app/(app)/challenges/_filter/search.tsx new file mode 100644 index 0000000..a3bbc3d --- /dev/null +++ b/app/(app)/challenges/_filter/search.tsx @@ -0,0 +1,22 @@ +import { Input } from "@/components/ui/input"; +import { SearchIcon } from "lucide-react"; + +export interface SearchFilterSectionProps { + value: string; + onChange: (value: string) => void; +} + +export default function SearchFilterSection({ value, onChange }: SearchFilterSectionProps) { + return ( +
+ + onChange(e.target.value)} /> +

+ 可以搜尋題目標題、題幹內容,或者是類別。 +

+
+ ); +} diff --git a/app/(app)/challenges/_filter/tag.tsx b/app/(app)/challenges/_filter/tag.tsx new file mode 100644 index 0000000..96cf81e --- /dev/null +++ b/app/(app)/challenges/_filter/tag.tsx @@ -0,0 +1,132 @@ +import { Checkbox } from "@/components/ui/checkbox"; +import { Label } from "@/components/ui/label"; +import { QuestionDifficulty } from "@/gql/graphql"; +import { FilterIcon } from "lucide-react"; +import { type Difficulty, difficultyTranslation, type SolvedStatus, solvedStatusTranslation } from "../model"; + +export interface TagState { + solvedStatus: SolvedStatus[]; + difficulty: Difficulty[]; +} + +export interface TagFilterSectionProps { + value: TagState; + onChange: (tags: TagState) => void; +} + +export default function TagFilterSection({ + value, + onChange, +}: TagFilterSectionProps) { + const getSolvedStatus = (solvedStatus: SolvedStatus) => { + return value.solvedStatus.includes(solvedStatus); + }; + + const getDifficulty = (difficulty: Difficulty) => { + return value.difficulty.includes(difficulty); + }; + + const handleDifficultyChange = (difficulty: Difficulty) => { + return (checked: boolean) => { + onChange({ + ...value, + difficulty: checked + ? [...value.difficulty, difficulty] + : value.difficulty.filter((d) => d !== difficulty), + }); + }; + }; + + const handleSolvedStatusChange = (status: SolvedStatus) => { + return (checked: boolean) => { + onChange({ + ...value, + solvedStatus: checked + ? [...value.solvedStatus, status] + : value.solvedStatus.filter((s) => s !== status), + }); + }; + }; + + return ( +
+ + +
+ 解題狀態 +
+ + + +
+
+ +
+ 難度 +
+ + + + +
+
+
+ ); +} + +function TagCheckbox({ + tag, + checked, + onChange, + translation, +}: { + tag: T; + checked: boolean; + onChange: (checked: boolean) => void; + translation: Record; +}) { + return ( +
+ + +
+ ); +} diff --git a/app/(app)/challenges/_header/index.tsx b/app/(app)/challenges/_header/index.tsx new file mode 100644 index 0000000..45a127f --- /dev/null +++ b/app/(app)/challenges/_header/index.tsx @@ -0,0 +1,104 @@ +"use client"; + +import { GridProgress } from "@/components/ui/grid-progress"; +import { graphql } from "@/gql"; +import { useSuspenseQuery } from "@apollo/client/react"; + +const CHALLENGE_STATISTICS_QUERY = graphql(` + query ChallengeStatisticsQuery { + me { + submissionStatistics { + totalQuestions + solvedQuestions + attemptedQuestions + } + } + } +`); + +export default function Header() { + const { data } = useSuspenseQuery(CHALLENGE_STATISTICS_QUERY); + + const totalQuestions = data.me.submissionStatistics.totalQuestions; + const totalSolvedQuestions = data.me.submissionStatistics.solvedQuestions; + const totalAttemptedQuestions = data.me.submissionStatistics.attemptedQuestions; + + return ( +
+
+

+ +

+

+ +

+
+ + +
+ ); +} + +export function HeaderTitle({ + totalQuestions, + totalSolvedQuestions, +}: { + totalQuestions: number; + totalSolvedQuestions: number; +}) { + const remainingQuestions = totalQuestions - totalSolvedQuestions; + + if (remainingQuestions === 0) { + return <>你成功挑戰了所有題目!; + } + + if (remainingQuestions === 1) { + return <>剩下最後一題就能全數通關!; + } + + return <>繼續挑戰接下來的 {remainingQuestions} 題題目吧!; +} + +export function HeaderDescription({ + totalSolvedQuestions, + totalAttemptedQuestions, +}: { + totalSolvedQuestions: number; + totalAttemptedQuestions: number; +}) { + if (totalAttemptedQuestions > 0 && totalSolvedQuestions === totalAttemptedQuestions) { + return <>你現在百戰百勝,繼續加油!; + } + + if (totalSolvedQuestions > 0) { + return ( + <> + 你目前已經嘗試作答了 {totalAttemptedQuestions} 題,其中攻克了 {totalSolvedQuestions} 題! + + ); + } + + if (totalAttemptedQuestions > 0) { + return <>你目前已經嘗試作答了 {totalAttemptedQuestions} 題,祝你成功攻克題目!; + } + + return <>你尚未嘗試作答任何題目,快點試試看你有興趣的題目吧!; +} diff --git a/app/(app)/challenges/_header/skeleton.tsx b/app/(app)/challenges/_header/skeleton.tsx new file mode 100644 index 0000000..1b8db76 --- /dev/null +++ b/app/(app)/challenges/_header/skeleton.tsx @@ -0,0 +1,19 @@ +import { Skeleton } from "@/components/ui/skeleton"; + +export default function HeaderSkeleton() { + return ( +
+
+ + +
+ +
+ ); +} diff --git a/app/(app)/challenges/_question/index.tsx b/app/(app)/challenges/_question/index.tsx new file mode 100644 index 0000000..322dbe7 --- /dev/null +++ b/app/(app)/challenges/_question/index.tsx @@ -0,0 +1,82 @@ +import { Badge } from "@/components/ui/badge"; +import { type FragmentType, graphql, readFragment } from "@/gql"; +import { QuestionDifficulty } from "@/gql/graphql"; +import { SwordIcon } from "lucide-react"; +import Link from "next/link"; +import { difficultyTranslation, type SolvedStatus, solvedStatusTranslation } from "../model"; +import { getQuestionSolvedStatus } from "./solved-status"; + +const QUESTION_CARD_FRAGMENT = graphql(` + fragment QuestionCard on Question { + id + title + description + difficulty + category + + ...QuestionSolvedStatus + } +`); + +const solvedStatusColor: Record = { + solved: "bg-green-800", + unsolved: "bg-yellow-800", + "not-tried": "bg-gray-800", +}; + +const badgeColor: Record = { + [QuestionDifficulty.Easy]: "bg-green-800", + [QuestionDifficulty.Medium]: "bg-yellow-800", + [QuestionDifficulty.Hard]: "bg-red-800", + [QuestionDifficulty.Unspecified]: "bg-gray-800", +}; + +export default function QuestionCard({ + fragment, +}: { + fragment: FragmentType; +}) { + const question = readFragment(QUESTION_CARD_FRAGMENT, fragment); + const descriptionFirstLine = question.description.split("\n")[0]; + const solvedStatus = getQuestionSolvedStatus(question); + + return ( +
+ {/* Question Body */} +
+
+

{question.title}

+

{descriptionFirstLine}

+
+
+ + {solvedStatusTranslation[solvedStatus]} + + + {difficultyTranslation[question.difficulty]} + + {question.category} +
+
+ + {/* Operation Button */} + +
+ ); +} + +function OperationButton({ href }: { href: string }) { + return ( + + + 練習 + + ); +} diff --git a/app/(app)/challenges/_question/solved-status.ts b/app/(app)/challenges/_question/solved-status.ts new file mode 100644 index 0000000..975d931 --- /dev/null +++ b/app/(app)/challenges/_question/solved-status.ts @@ -0,0 +1,25 @@ +import { type FragmentType, graphql, readFragment } from "@/gql"; +import type { SolvedStatus } from "../model"; + +export const QUESTION_SOLVED_STATUS_FRAGMENT = graphql(` + fragment QuestionSolvedStatus on Question { + solved + attempted + } +`); + +export function getQuestionSolvedStatus( + fragment: FragmentType, +): SolvedStatus { + const question = readFragment(QUESTION_SOLVED_STATUS_FRAGMENT, fragment); + + if (question.solved) { + return "solved"; + } + + if (question.attempted && !question.solved) { + return "unsolved"; + } + + return "not-tried"; +} diff --git a/app/(app)/challenges/content.tsx b/app/(app)/challenges/content.tsx new file mode 100644 index 0000000..fd02bba --- /dev/null +++ b/app/(app)/challenges/content.tsx @@ -0,0 +1,133 @@ +"use client"; + +import { useDebouncedValue } from "foxact/use-debounced-value"; +import { useState } from "react"; +import type { TagState } from "./_filter/tag"; + +import { Button } from "@/components/ui/button"; +import { graphql } from "@/gql"; +import { QuestionDifficulty, type QuestionWhereInput } from "@/gql/graphql"; +import { useSuspenseQuery } from "@apollo/client/react"; +import FilterSection from "./_filter"; +import QuestionCard from "./_question"; +import { getQuestionSolvedStatus } from "./_question/solved-status"; +import type { SolvedStatus } from "./model"; + +export const LIST_QUESTIONS = graphql(` + query ListQuestions($where: QuestionWhereInput, $after: Cursor) { + questions(where: $where, first: 10, after: $after) { + edges { + node { + id + ...QuestionCard + ...QuestionSolvedStatus + } + } + pageInfo { + hasNextPage + endCursor + } + } + } +`); + +export default function ChallengePageContent() { + const [search, setSearch] = useState(""); + const [tags, setTags] = useState({ + solvedStatus: ["solved", "unsolved", "not-tried"], + difficulty: [ + QuestionDifficulty.Easy, + QuestionDifficulty.Medium, + QuestionDifficulty.Hard, + QuestionDifficulty.Unspecified, + ], + }); + + const deferredSearch = useDebouncedValue(search, 200); + + const where: QuestionWhereInput = { + or: [ + { + titleContainsFold: deferredSearch, + }, + { + descriptionContainsFold: deferredSearch, + }, + { + categoryContainsFold: deferredSearch, + }, + ], + difficultyIn: tags.difficulty, + }; + + return ( +
+ +
+ +
+
+ ); +} + +export function ChallengeQuestionsList({ + where, + solvedStatusContains, +}: { + where: QuestionWhereInput; + solvedStatusContains: SolvedStatus[]; +}) { + const { data, fetchMore } = useSuspenseQuery(LIST_QUESTIONS, { + variables: { where }, + }); + + return ( +
+ {data?.questions.edges + ?.filter( + (question) => + question + && question.node + && solvedStatusContains.includes( + getQuestionSolvedStatus(question.node), + ), + ) + .map((question) => { + if (!question || !question.node) return null; + return ; + })} + + {data?.questions.pageInfo.hasNextPage && ( + + )} +
+ ); +} diff --git a/app/(app)/challenges/model.ts b/app/(app)/challenges/model.ts new file mode 100644 index 0000000..925e14e --- /dev/null +++ b/app/(app)/challenges/model.ts @@ -0,0 +1,24 @@ +import { QuestionDifficulty } from "@/gql/graphql"; + +/** + * 解題狀態 + */ +export type SolvedStatus = "solved" | "unsolved" | "not-tried"; + +/** + * 難度 + */ +export type Difficulty = QuestionDifficulty; + +export const solvedStatusTranslation: Record = { + solved: "✅ 已經解決", + unsolved: "尚未解決", + "not-tried": "還沒嘗試", +}; + +export const difficultyTranslation: Record = { + [QuestionDifficulty.Easy]: "簡單", + [QuestionDifficulty.Medium]: "中等", + [QuestionDifficulty.Hard]: "困難", + [QuestionDifficulty.Unspecified]: "未指定", +}; diff --git a/app/(app)/challenges/page.tsx b/app/(app)/challenges/page.tsx index 516b667..c416b3f 100644 --- a/app/(app)/challenges/page.tsx +++ b/app/(app)/challenges/page.tsx @@ -1,3 +1,21 @@ +import type { Metadata } from "next"; +import { Suspense } from "react"; +import Header from "./_header"; +import HeaderSkeleton from "./_header/skeleton"; +import ChallengePageContent from "./content"; + +export const metadata: Metadata = { + title: "挑戰題目", +}; + export default function ChallengesPage() { - return
ChallengesPage
; + return ( +
+ }> +
+ + + +
+ ); } diff --git a/app/(app)/comments/page.tsx b/app/(app)/comments/page.tsx index c1228bf..7f2cb14 100644 --- a/app/(app)/comments/page.tsx +++ b/app/(app)/comments/page.tsx @@ -1,3 +1,9 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "經驗分享", +}; + export default function CommentsPage() { return
CommentsPage
; } diff --git a/app/(app)/materials/page.tsx b/app/(app)/materials/page.tsx index f809f8f..8868b93 100644 --- a/app/(app)/materials/page.tsx +++ b/app/(app)/materials/page.tsx @@ -1,3 +1,9 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "補充資料", +}; + export default function MaterialsPage() { return
MaterialsPage
; } diff --git a/app/(app)/statistics/page.tsx b/app/(app)/statistics/page.tsx index d2d1a01..aa59291 100644 --- a/app/(app)/statistics/page.tsx +++ b/app/(app)/statistics/page.tsx @@ -1,3 +1,9 @@ +import type { Metadata } from "next"; + +export const metadata: Metadata = { + title: "統計資料", +}; + export default function StatisticsPage() { return
StatisticsPage
; } diff --git a/app/globals.css b/app/globals.css index 42b49ee..8347438 100644 --- a/app/globals.css +++ b/app/globals.css @@ -37,7 +37,7 @@ --sidebar-accent-foreground: oklch(0.3729 0.0306 259.7328); --sidebar-border: oklch(0.8717 0.0093 258.3382); --sidebar-ring: oklch(0.5854 0.2041 277.1173); - --font-sans: IBM Plex Sans, ui-sans-serif, sans-serif, system-ui; + --font-sans: IBM Plex Sans TC, ui-sans-serif, sans-serif, system-ui; --font-serif: Merriweather, serif; --font-mono: JetBrains Mono, monospace; --radius: 0.5rem; @@ -91,7 +91,7 @@ --sidebar-accent-foreground: oklch(0.8717 0.0093 258.3382); --sidebar-border: oklch(0.4461 0.0263 256.8018); --sidebar-ring: oklch(0.6801 0.1583 276.9349); - --font-sans: IBM Plex Sans, ui-sans-serif, sans-serif, system-ui; + --font-sans: IBM Plex Sans TC, ui-sans-serif, sans-serif, system-ui; --font-serif: Merriweather, serif; --font-mono: JetBrains Mono, monospace; --radius: 0.5rem; diff --git a/app/layout.tsx b/app/layout.tsx index a921e90..1216aa0 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -7,7 +7,7 @@ import { ProgressProvider } from "@/providers/use-progress-provider"; import { PreloadResources } from "./preload-resources"; export const metadata: Metadata = { - title: "資料庫練功坊", + title: { template: "%s | 資料庫練功坊", default: "首頁" }, description: "AI 賦能的資料庫練習平台", }; diff --git a/app/login/page.tsx b/app/login/page.tsx index d05370a..944544f 100644 --- a/app/login/page.tsx +++ b/app/login/page.tsx @@ -1,5 +1,6 @@ import { Logo } from "@/components/logo"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; +import type { Metadata } from "next"; import Link from "next/link"; import { Suspense } from "react"; import DoYouKnow from "./do-you-know"; @@ -15,6 +16,10 @@ interface LoginPageProps { }>; } +export const metadata: Metadata = { + title: "登入", +}; + export default async function LoginPage({ searchParams }: LoginPageProps) { const params = await searchParams; diff --git a/app/login/status.action.ts b/app/login/status.action.ts index 87ba659..54a1f22 100644 --- a/app/login/status.action.ts +++ b/app/login/status.action.ts @@ -1,10 +1,12 @@ "use server"; +import buildUri from "@/lib/build-uri"; + export async function getUpstreamLatency(): Promise { try { const start = Date.now(); - const response = await fetch("https://api.dbplay.app", { method: "HEAD" }); + const response = await fetch(buildUri("/")); if (!response.ok) { return -1; } diff --git a/codegen.ts b/codegen.ts index ac30bf3..f891559 100644 --- a/codegen.ts +++ b/codegen.ts @@ -7,10 +7,14 @@ const config: CodegenConfig = { generates: { "./gql/": { preset: "client", + presetConfig: { + fragmentMasking: { unmaskFunctionName: "readFragment" }, + }, config: { useTypeImports: true, scalars: { Time: "string", // ISO8601 + Cursor: "string", }, }, }, diff --git a/components/ui/grid-progress.tsx b/components/ui/grid-progress.tsx new file mode 100644 index 0000000..5864e25 --- /dev/null +++ b/components/ui/grid-progress.tsx @@ -0,0 +1,201 @@ +import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const gridProgressVariants = cva( + "inline-grid items-center justify-center", + { + variants: { + size: { + sm: "gap-0.5", + default: "gap-1", + lg: "gap-1.5", + }, + }, + defaultVariants: { + size: "default", + }, + }, +); + +const gridItemVariants = cva( + "rounded-sm transition-all duration-200 ease-in-out", + { + variants: { + size: { + sm: "h-2 w-2", + default: "h-3 w-3", + lg: "h-4 w-4", + }, + variant: { + default: "bg-muted", + primary: "bg-muted", + success: "bg-muted", + warning: "bg-muted", + destructive: "bg-muted", + }, + filled: { + true: "", + false: "", + }, + }, + compoundVariants: [ + // 主要填充狀態 + { + variant: "primary", + filled: true, + className: "bg-primary shadow-sm", + }, + // 成功填充狀態 + { + variant: "success", + filled: true, + className: "bg-green-500 shadow-sm", + }, + // 警告填充狀態 + { + variant: "warning", + filled: true, + className: "bg-yellow-500 shadow-sm", + }, + // 危險填充狀態 + { + variant: "destructive", + filled: true, + className: "bg-red-500 shadow-sm", + }, + // 預設填充狀態 + { + variant: "default", + filled: true, + className: "bg-foreground shadow-sm", + }, + ], + defaultVariants: { + size: "default", + variant: "default", + filled: false, + }, + }, +); + +interface GridProgressProps + extends + Omit, "children">, + VariantProps, + Pick, "variant"> +{ + /** + * 目前進度值,範圍 0-100 + */ + progress: number; + /** + * 網格列數 + * @default 2 + */ + rows?: number; + /** + * 網格欄數 + * @default 5 + */ + cols?: number; + /** + * 是否顯示進度文字 + * @default false + */ + showProgress?: boolean; + /** + * 進度文字的自訂格式化函式 + */ + progressFormatter?: (progress: number, filledSteps: number, totalSteps: number) => string; + /** + * 是否啟用懸停效果 + * @default true + */ + enableHover?: boolean; +} + +const GridProgress = React.forwardRef( + ({ + className, + size, + variant = "default", + progress, + rows = 2, + cols = 5, + showProgress = false, + progressFormatter, + enableHover = true, + ...props + }, ref) => { + const totalSteps = rows * cols; + + // 確保 progress 在有效範圍內 + const clampedProgress = Math.max(0, Math.min(100, progress)); + + // 計算需要填充的格子數 + const filledSteps = Math.round((clampedProgress / 100) * totalSteps); + + // 預設的進度文字格式化函式 + const defaultFormatter = (progress: number, filled: number, total: number) => + `${Math.round(progress)}% (${filled}/${total})`; + + const progressText = progressFormatter + ? progressFormatter(clampedProgress, filledSteps, totalSteps) + : defaultFormatter(clampedProgress, filledSteps, totalSteps); + + return ( +
+
+ {Array.from({ length: totalSteps }, (_, index) => { + const isFilled = index < filledSteps; + const row = Math.floor(index / cols) + 1; + const col = (index % cols) + 1; + + return ( +
+ ); + })} +
+ + {showProgress && ( +
+ {progressText} +
+ )} +
+ ); + }, +); + +GridProgress.displayName = "GridProgress"; + +export { gridItemVariants, GridProgress, type GridProgressProps, gridProgressVariants }; diff --git a/components/ui/toggle-group.tsx b/components/ui/toggle-group.tsx new file mode 100644 index 0000000..ad16239 --- /dev/null +++ b/components/ui/toggle-group.tsx @@ -0,0 +1,88 @@ +"use client"; + +import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group"; +import { type VariantProps } from "class-variance-authority"; +import * as React from "react"; + +import { toggleVariants } from "@/components/ui/toggle"; +import { cn } from "@/lib/utils"; + +const ToggleGroupContext = React.createContext< + VariantProps +>({ + size: "default", + variant: "default", +}); + +function ToggleGroup({ + className, + variant, + size, + children, + ...props +}: + & React.ComponentProps + & VariantProps) +{ + return ( + + + {children} + + + ); +} + +function ToggleGroupItem({ + className, + children, + variant, + size, + ...props +}: + & React.ComponentProps + & VariantProps) +{ + const context = React.useContext(ToggleGroupContext); + + return ( + + {children} + + ); +} + +export { ToggleGroup, ToggleGroupItem }; diff --git a/components/ui/toggle.tsx b/components/ui/toggle.tsx new file mode 100644 index 0000000..a02bd21 --- /dev/null +++ b/components/ui/toggle.tsx @@ -0,0 +1,63 @@ +"use client"; + +import * as TogglePrimitive from "@radix-ui/react-toggle"; +import { cva, type VariantProps } from "class-variance-authority"; +import * as React from "react"; + +import { cn } from "@/lib/utils"; + +const toggleVariants = cva( + ` + inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium + whitespace-nowrap transition-[color,box-shadow] outline-none + hover:bg-muted hover:text-muted-foreground + focus-visible:border-ring focus-visible:ring-[3px] + focus-visible:ring-ring/50 + disabled:pointer-events-none disabled:opacity-50 + aria-invalid:border-destructive aria-invalid:ring-destructive/20 + data-[state=on]:bg-accent data-[state=on]:text-accent-foreground + dark:aria-invalid:ring-destructive/40 + [&_svg]:pointer-events-none [&_svg]:shrink-0 + [&_svg:not([class*='size-'])]:size-4 + `, + { + variants: { + variant: { + default: "bg-transparent", + outline: ` + border border-input bg-transparent shadow-xs + hover:bg-accent hover:text-accent-foreground + `, + }, + size: { + default: "h-9 min-w-9 px-2", + sm: "h-8 min-w-8 px-1.5", + lg: "h-10 min-w-10 px-2.5", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +); + +function Toggle({ + className, + variant, + size, + ...props +}: + & React.ComponentProps + & VariantProps) +{ + return ( + + ); +} + +export { Toggle, toggleVariants }; diff --git a/gql/fragment-masking.ts b/gql/fragment-masking.ts index 743a364..6306be4 100644 --- a/gql/fragment-masking.ts +++ b/gql/fragment-masking.ts @@ -16,46 +16,46 @@ export type FragmentType> : never; // return non-nullable if `fragmentType` is non-nullable -export function useFragment( +export function readFragment( _documentNode: DocumentTypeDecoration, fragmentType: FragmentType> ): TType; // return nullable if `fragmentType` is undefined -export function useFragment( +export function readFragment( _documentNode: DocumentTypeDecoration, fragmentType: FragmentType> | undefined ): TType | undefined; // return nullable if `fragmentType` is nullable -export function useFragment( +export function readFragment( _documentNode: DocumentTypeDecoration, fragmentType: FragmentType> | null ): TType | null; // return nullable if `fragmentType` is nullable or undefined -export function useFragment( +export function readFragment( _documentNode: DocumentTypeDecoration, fragmentType: FragmentType> | null | undefined ): TType | null | undefined; // return array of non-nullable if `fragmentType` is array of non-nullable -export function useFragment( +export function readFragment( _documentNode: DocumentTypeDecoration, fragmentType: Array>> ): Array; // return array of nullable if `fragmentType` is array of nullable -export function useFragment( +export function readFragment( _documentNode: DocumentTypeDecoration, fragmentType: Array>> | null | undefined ): Array | null | undefined; // return readonly array of non-nullable if `fragmentType` is array of non-nullable -export function useFragment( +export function readFragment( _documentNode: DocumentTypeDecoration, fragmentType: ReadonlyArray>> ): ReadonlyArray; // return readonly array of nullable if `fragmentType` is array of nullable -export function useFragment( +export function readFragment( _documentNode: DocumentTypeDecoration, fragmentType: ReadonlyArray>> | null | undefined ): ReadonlyArray | null | undefined; -export function useFragment( +export function readFragment( _documentNode: DocumentTypeDecoration, fragmentType: FragmentType> | Array>> | ReadonlyArray>> | null | undefined ): TType | Array | ReadonlyArray | null | undefined { diff --git a/gql/gql.ts b/gql/gql.ts index 73b7680..c9a6d35 100644 --- a/gql/gql.ts +++ b/gql/gql.ts @@ -14,9 +14,17 @@ import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document- * Learn more about it here: https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#reducing-bundle-size */ type Documents = { + "\n query ChallengeStatisticsQuery {\n me {\n submissionStatistics {\n totalQuestions\n solvedQuestions\n attemptedQuestions\n }\n }\n }\n": typeof types.ChallengeStatisticsQueryDocument, + "\n fragment QuestionCard on Question {\n id\n title\n description\n difficulty\n category\n\n ...QuestionSolvedStatus\n }\n": typeof types.QuestionCardFragmentDoc, + "\n fragment QuestionSolvedStatus on Question {\n solved\n attempted\n }\n": typeof types.QuestionSolvedStatusFragmentDoc, + "\n query ListQuestions($where: QuestionWhereInput, $after: Cursor) {\n questions(where: $where, first: 10, after: $after) {\n edges {\n node {\n id\n ...QuestionCard\n ...QuestionSolvedStatus\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n": typeof types.ListQuestionsDocument, "\n query BasicUserInfo {\n me {\n id\n name\n email\n avatar\n\n group {\n name\n }\n }\n }\n": typeof types.BasicUserInfoDocument, }; const documents: Documents = { + "\n query ChallengeStatisticsQuery {\n me {\n submissionStatistics {\n totalQuestions\n solvedQuestions\n attemptedQuestions\n }\n }\n }\n": types.ChallengeStatisticsQueryDocument, + "\n fragment QuestionCard on Question {\n id\n title\n description\n difficulty\n category\n\n ...QuestionSolvedStatus\n }\n": types.QuestionCardFragmentDoc, + "\n fragment QuestionSolvedStatus on Question {\n solved\n attempted\n }\n": types.QuestionSolvedStatusFragmentDoc, + "\n query ListQuestions($where: QuestionWhereInput, $after: Cursor) {\n questions(where: $where, first: 10, after: $after) {\n edges {\n node {\n id\n ...QuestionCard\n ...QuestionSolvedStatus\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n": types.ListQuestionsDocument, "\n query BasicUserInfo {\n me {\n id\n name\n email\n avatar\n\n group {\n name\n }\n }\n }\n": types.BasicUserInfoDocument, }; @@ -34,6 +42,22 @@ const documents: Documents = { */ export function graphql(source: string): unknown; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n query ChallengeStatisticsQuery {\n me {\n submissionStatistics {\n totalQuestions\n solvedQuestions\n attemptedQuestions\n }\n }\n }\n"): (typeof documents)["\n query ChallengeStatisticsQuery {\n me {\n submissionStatistics {\n totalQuestions\n solvedQuestions\n attemptedQuestions\n }\n }\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n fragment QuestionCard on Question {\n id\n title\n description\n difficulty\n category\n\n ...QuestionSolvedStatus\n }\n"): (typeof documents)["\n fragment QuestionCard on Question {\n id\n title\n description\n difficulty\n category\n\n ...QuestionSolvedStatus\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n fragment QuestionSolvedStatus on Question {\n solved\n attempted\n }\n"): (typeof documents)["\n fragment QuestionSolvedStatus on Question {\n solved\n attempted\n }\n"]; +/** + * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. + */ +export function graphql(source: "\n query ListQuestions($where: QuestionWhereInput, $after: Cursor) {\n questions(where: $where, first: 10, after: $after) {\n edges {\n node {\n id\n ...QuestionCard\n ...QuestionSolvedStatus\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n"): (typeof documents)["\n query ListQuestions($where: QuestionWhereInput, $after: Cursor) {\n questions(where: $where, first: 10, after: $after) {\n edges {\n node {\n id\n ...QuestionCard\n ...QuestionSolvedStatus\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n"]; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ diff --git a/gql/graphql.ts b/gql/graphql.ts index 470d72c..dcfd794 100644 --- a/gql/graphql.ts +++ b/gql/graphql.ts @@ -1,7 +1,7 @@ /* eslint-disable */ import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core'; export type Maybe = T | null; -export type InputMaybe = Maybe; +export type InputMaybe = T | null | undefined; export type Exact = { [K in keyof T]: T[K] }; export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; @@ -18,7 +18,9 @@ export type Scalars = { * Define a Relay Cursor type: * https://relay.dev/graphql/connections.htm#sec-Cursor */ - Cursor: { input: any; output: any; } + Cursor: { input: string; output: string; } + /** The builtin Map type */ + Map: { input: any; output: any; } /** The builtin Time type */ Time: { input: string; output: string; } }; @@ -61,6 +63,7 @@ export type CreateQuestionInput = { difficulty?: InputMaybe; /** Reference answer */ referenceAnswer: Scalars['String']['input']; + submissionIDs?: InputMaybe>; /** Question title */ title: Scalars['String']['input']; }; @@ -83,8 +86,11 @@ export type CreateScopeSetInput = { export type CreateUserInput = { avatar?: InputMaybe; email: Scalars['String']['input']; + eventIDs?: InputMaybe>; groupID: Scalars['ID']['input']; name: Scalars['String']['input']; + pointIDs?: InputMaybe>; + submissionIDs?: InputMaybe>; }; export type Database = Node & { @@ -179,6 +185,99 @@ export type DatabaseWhereInput = { slugNotIn?: InputMaybe>; }; +export type Event = Node & { + __typename?: 'Event'; + id: Scalars['ID']['output']; + payload?: Maybe; + triggeredAt: Scalars['Time']['output']; + type: Scalars['String']['output']; + user: User; + userID: Scalars['ID']['output']; +}; + +/** A connection to a list of items. */ +export type EventConnection = { + __typename?: 'EventConnection'; + /** A list of edges. */ + edges?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; + /** Identifies the total count of items in the connection. */ + totalCount: Scalars['Int']['output']; +}; + +/** An edge in a connection. */ +export type EventEdge = { + __typename?: 'EventEdge'; + /** A cursor for use in pagination. */ + cursor: Scalars['Cursor']['output']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +/** Ordering options for Event connections */ +export type EventOrder = { + /** The ordering direction. */ + direction?: OrderDirection; + /** The field by which to order Events. */ + field: EventOrderField; +}; + +/** Properties by which Event connections can be ordered. */ +export enum EventOrderField { + TriggeredAt = 'TRIGGERED_AT' +} + +/** + * EventWhereInput is used for filtering Event objects. + * Input was generated by ent. + */ +export type EventWhereInput = { + and?: InputMaybe>; + /** user edge predicates */ + hasUser?: InputMaybe; + hasUserWith?: InputMaybe>; + /** id field predicates */ + id?: InputMaybe; + idGT?: InputMaybe; + idGTE?: InputMaybe; + idIn?: InputMaybe>; + idLT?: InputMaybe; + idLTE?: InputMaybe; + idNEQ?: InputMaybe; + idNotIn?: InputMaybe>; + not?: InputMaybe; + or?: InputMaybe>; + /** triggered_at field predicates */ + triggeredAt?: InputMaybe; + triggeredAtGT?: InputMaybe; + triggeredAtGTE?: InputMaybe; + triggeredAtIn?: InputMaybe>; + triggeredAtLT?: InputMaybe; + triggeredAtLTE?: InputMaybe; + triggeredAtNEQ?: InputMaybe; + triggeredAtNotIn?: InputMaybe>; + /** type field predicates */ + type?: InputMaybe; + typeContains?: InputMaybe; + typeContainsFold?: InputMaybe; + typeEqualFold?: InputMaybe; + typeGT?: InputMaybe; + typeGTE?: InputMaybe; + typeHasPrefix?: InputMaybe; + typeHasSuffix?: InputMaybe; + typeIn?: InputMaybe>; + typeLT?: InputMaybe; + typeLTE?: InputMaybe; + typeNEQ?: InputMaybe; + typeNotIn?: InputMaybe>; + /** user_id field predicates */ + userID?: InputMaybe; + userIDIn?: InputMaybe>; + userIDNEQ?: InputMaybe; + userIDNotIn?: InputMaybe>; +}; + export type Group = Node & { __typename?: 'Group'; createdAt: Scalars['Time']['output']; @@ -302,6 +401,8 @@ export type Mutation = { logoutAll: Scalars['Boolean']['output']; /** Logout a user from all his devices. */ logoutUser: Scalars['Boolean']['output']; + /** Submit your answer to a question. */ + submitAnswer: SubmissionResult; /** Update a database. */ updateDatabase: Database; /** Update a group. */ @@ -374,6 +475,12 @@ export type MutationLogoutUserArgs = { }; +export type MutationSubmitAnswerArgs = { + answer: Scalars['String']['input']; + id: Scalars['ID']['input']; +}; + + export type MutationUpdateDatabaseArgs = { id: Scalars['ID']['input']; input: UpdateDatabaseInput; @@ -441,11 +548,117 @@ export type PageInfo = { startCursor?: Maybe; }; +export type Point = Node & { + __typename?: 'Point'; + description?: Maybe; + grantedAt: Scalars['Time']['output']; + id: Scalars['ID']['output']; + points: Scalars['Int']['output']; + user: User; +}; + +/** A connection to a list of items. */ +export type PointConnection = { + __typename?: 'PointConnection'; + /** A list of edges. */ + edges?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; + /** Identifies the total count of items in the connection. */ + totalCount: Scalars['Int']['output']; +}; + +/** An edge in a connection. */ +export type PointEdge = { + __typename?: 'PointEdge'; + /** A cursor for use in pagination. */ + cursor: Scalars['Cursor']['output']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +/** Ordering options for Point connections */ +export type PointOrder = { + /** The ordering direction. */ + direction?: OrderDirection; + /** The field by which to order Points. */ + field: PointOrderField; +}; + +/** Properties by which Point connections can be ordered. */ +export enum PointOrderField { + GrantedAt = 'GRANTED_AT' +} + +/** + * PointWhereInput is used for filtering Point objects. + * Input was generated by ent. + */ +export type PointWhereInput = { + and?: InputMaybe>; + /** description field predicates */ + description?: InputMaybe; + descriptionContains?: InputMaybe; + descriptionContainsFold?: InputMaybe; + descriptionEqualFold?: InputMaybe; + descriptionGT?: InputMaybe; + descriptionGTE?: InputMaybe; + descriptionHasPrefix?: InputMaybe; + descriptionHasSuffix?: InputMaybe; + descriptionIn?: InputMaybe>; + descriptionIsNil?: InputMaybe; + descriptionLT?: InputMaybe; + descriptionLTE?: InputMaybe; + descriptionNEQ?: InputMaybe; + descriptionNotIn?: InputMaybe>; + descriptionNotNil?: InputMaybe; + /** granted_at field predicates */ + grantedAt?: InputMaybe; + grantedAtGT?: InputMaybe; + grantedAtGTE?: InputMaybe; + grantedAtIn?: InputMaybe>; + grantedAtLT?: InputMaybe; + grantedAtLTE?: InputMaybe; + grantedAtNEQ?: InputMaybe; + grantedAtNotIn?: InputMaybe>; + /** user edge predicates */ + hasUser?: InputMaybe; + hasUserWith?: InputMaybe>; + /** id field predicates */ + id?: InputMaybe; + idGT?: InputMaybe; + idGTE?: InputMaybe; + idIn?: InputMaybe>; + idLT?: InputMaybe; + idLTE?: InputMaybe; + idNEQ?: InputMaybe; + idNotIn?: InputMaybe>; + not?: InputMaybe; + or?: InputMaybe>; + /** points field predicates */ + points?: InputMaybe; + pointsGT?: InputMaybe; + pointsGTE?: InputMaybe; + pointsIn?: InputMaybe>; + pointsLT?: InputMaybe; + pointsLTE?: InputMaybe; + pointsNEQ?: InputMaybe; + pointsNotIn?: InputMaybe>; +}; + export type Query = { __typename?: 'Query'; /** Get a database by ID. */ database: Database; databases: Array; + /** + * Get an event by ID. + * + * If you have the "event:read" scope, you can get any event by ID; + * otherwise, you can only get your own events. + */ + event: Event; + events: EventConnection; /** Get a group by ID. */ group: Group; groups: Array; @@ -454,12 +667,28 @@ export type Query = { node?: Maybe; /** Lookup nodes by a list of IDs. */ nodes: Array>; + /** + * Get a point grant by ID. + * + * If you have the "point:read" scope, you can get any point grant by ID; + * otherwise, you can only get your own point grants. + */ + pointGrant: Point; + points: PointConnection; /** Get a question by ID. */ question: Question; questions: QuestionConnection; /** Get a scope set by ID or slug. */ scopeSet: ScopeSet; scopeSets: Array; + /** + * Get a submission by ID. + * + * If you have the "submission:read" scope, you can get any submission by ID; + * otherwise, you can only get your own submissions. + */ + submission: Submission; + submissions: SubmissionConnection; /** Get a user by ID. */ user: User; users: UserConnection; @@ -471,6 +700,21 @@ export type QueryDatabaseArgs = { }; +export type QueryEventArgs = { + id: Scalars['ID']['input']; +}; + + +export type QueryEventsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + orderBy?: InputMaybe; + where?: InputMaybe; +}; + + export type QueryGroupArgs = { id: Scalars['ID']['input']; }; @@ -486,6 +730,21 @@ export type QueryNodesArgs = { }; +export type QueryPointGrantArgs = { + id: Scalars['ID']['input']; +}; + + +export type QueryPointsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + orderBy?: InputMaybe; + where?: InputMaybe; +}; + + export type QueryQuestionArgs = { id: Scalars['ID']['input']; }; @@ -506,6 +765,21 @@ export type QueryScopeSetArgs = { }; +export type QuerySubmissionArgs = { + id: Scalars['ID']['input']; +}; + + +export type QuerySubmissionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + orderBy?: InputMaybe; + where?: InputMaybe; +}; + + export type QueryUserArgs = { id: Scalars['ID']['input']; }; @@ -522,6 +796,8 @@ export type QueryUsersArgs = { export type Question = Node & { __typename?: 'Question'; + /** Have you tried to solve the question? */ + attempted: Scalars['Boolean']['output']; /** Question category, e.g. 'query' */ category: Scalars['String']['output']; database: Database; @@ -532,9 +808,24 @@ export type Question = Node & { id: Scalars['ID']['output']; /** Reference answer */ referenceAnswer: Scalars['String']['output']; - referenceAnswerResult: SqlResponse; + referenceAnswerResult: SqlExecutionResult; + /** Have you solved the question? */ + solved: Scalars['Boolean']['output']; + submissions: SubmissionConnection; /** Question title */ title: Scalars['String']['output']; + /** List of your submissions for this question. */ + userSubmissions: Array; +}; + + +export type QuestionSubmissionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + orderBy?: InputMaybe; + where?: InputMaybe; }; /** A connection to a list of items. */ @@ -621,6 +912,9 @@ export type QuestionWhereInput = { /** database edge predicates */ hasDatabase?: InputMaybe; hasDatabaseWith?: InputMaybe>; + /** submissions edge predicates */ + hasSubmissions?: InputMaybe; + hasSubmissionsWith?: InputMaybe>; /** id field predicates */ id?: InputMaybe; idGT?: InputMaybe; @@ -662,6 +956,12 @@ export type QuestionWhereInput = { titleNotIn?: InputMaybe>; }; +export type SqlExecutionResult = { + __typename?: 'SQLExecutionResult'; + columns: Array; + rows: Array>; +}; + export type ScopeSet = Node & { __typename?: 'ScopeSet'; description?: Maybe; @@ -735,10 +1035,145 @@ export type ScopeSetWhereInput = { slugNotIn?: InputMaybe>; }; -export type SqlResponse = { - __typename?: 'SqlResponse'; - columns: Array; - rows: Array>; +export type SolvedQuestionByDifficulty = { + __typename?: 'SolvedQuestionByDifficulty'; + difficulty: QuestionDifficulty; + solvedQuestions: Scalars['Int']['output']; +}; + +export type Submission = Node & { + __typename?: 'Submission'; + error?: Maybe; + id: Scalars['ID']['output']; + queryResult?: Maybe; + question: Question; + status: SubmissionStatus; + submittedAt: Scalars['Time']['output']; + submittedCode: Scalars['String']['output']; + user: User; +}; + +/** A connection to a list of items. */ +export type SubmissionConnection = { + __typename?: 'SubmissionConnection'; + /** A list of edges. */ + edges?: Maybe>>; + /** Information to aid in pagination. */ + pageInfo: PageInfo; + /** Identifies the total count of items in the connection. */ + totalCount: Scalars['Int']['output']; +}; + +/** An edge in a connection. */ +export type SubmissionEdge = { + __typename?: 'SubmissionEdge'; + /** A cursor for use in pagination. */ + cursor: Scalars['Cursor']['output']; + /** The item at the end of the edge. */ + node?: Maybe; +}; + +/** Ordering options for Submission connections */ +export type SubmissionOrder = { + /** The ordering direction. */ + direction?: OrderDirection; + /** The field by which to order Submissions. */ + field: SubmissionOrderField; +}; + +/** Properties by which Submission connections can be ordered. */ +export enum SubmissionOrderField { + SubmittedAt = 'SUBMITTED_AT' +} + +export type SubmissionResult = { + __typename?: 'SubmissionResult'; + error?: Maybe; + result?: Maybe; +}; + +export type SubmissionStatistics = { + __typename?: 'SubmissionStatistics'; + attemptedQuestions: Scalars['Int']['output']; + solvedQuestionByDifficulty: Array; + solvedQuestions: Scalars['Int']['output']; + totalQuestions: Scalars['Int']['output']; +}; + +/** SubmissionStatus is enum for the field status */ +export enum SubmissionStatus { + Failed = 'failed', + Pending = 'pending', + Success = 'success' +} + +/** + * SubmissionWhereInput is used for filtering Submission objects. + * Input was generated by ent. + */ +export type SubmissionWhereInput = { + and?: InputMaybe>; + /** error field predicates */ + error?: InputMaybe; + errorContains?: InputMaybe; + errorContainsFold?: InputMaybe; + errorEqualFold?: InputMaybe; + errorGT?: InputMaybe; + errorGTE?: InputMaybe; + errorHasPrefix?: InputMaybe; + errorHasSuffix?: InputMaybe; + errorIn?: InputMaybe>; + errorIsNil?: InputMaybe; + errorLT?: InputMaybe; + errorLTE?: InputMaybe; + errorNEQ?: InputMaybe; + errorNotIn?: InputMaybe>; + errorNotNil?: InputMaybe; + /** question edge predicates */ + hasQuestion?: InputMaybe; + hasQuestionWith?: InputMaybe>; + /** user edge predicates */ + hasUser?: InputMaybe; + hasUserWith?: InputMaybe>; + /** id field predicates */ + id?: InputMaybe; + idGT?: InputMaybe; + idGTE?: InputMaybe; + idIn?: InputMaybe>; + idLT?: InputMaybe; + idLTE?: InputMaybe; + idNEQ?: InputMaybe; + idNotIn?: InputMaybe>; + not?: InputMaybe; + or?: InputMaybe>; + /** status field predicates */ + status?: InputMaybe; + statusIn?: InputMaybe>; + statusNEQ?: InputMaybe; + statusNotIn?: InputMaybe>; + /** submitted_at field predicates */ + submittedAt?: InputMaybe; + submittedAtGT?: InputMaybe; + submittedAtGTE?: InputMaybe; + submittedAtIn?: InputMaybe>; + submittedAtLT?: InputMaybe; + submittedAtLTE?: InputMaybe; + submittedAtNEQ?: InputMaybe; + submittedAtNotIn?: InputMaybe>; + /** submitted_code field predicates */ + submittedCode?: InputMaybe; + submittedCodeContains?: InputMaybe; + submittedCodeContainsFold?: InputMaybe; + submittedCodeEqualFold?: InputMaybe; + submittedCodeGT?: InputMaybe; + submittedCodeGTE?: InputMaybe; + submittedCodeHasPrefix?: InputMaybe; + submittedCodeHasSuffix?: InputMaybe; + submittedCodeIn?: InputMaybe>; + submittedCodeLT?: InputMaybe; + submittedCodeLTE?: InputMaybe; + submittedCodeNEQ?: InputMaybe; + submittedCodeNotIn?: InputMaybe>; }; /** @@ -775,6 +1210,8 @@ export type UpdateGroupInput = { * Input was generated by ent. */ export type UpdateQuestionInput = { + addSubmissionIDs?: InputMaybe>; + clearSubmissions?: InputMaybe; databaseID?: InputMaybe; /** Question stem */ description?: InputMaybe; @@ -782,6 +1219,7 @@ export type UpdateQuestionInput = { difficulty?: InputMaybe; /** Reference answer */ referenceAnswer?: InputMaybe; + removeSubmissionIDs?: InputMaybe>; /** Question title */ title?: InputMaybe; }; @@ -805,10 +1243,19 @@ export type UpdateScopeSetInput = { * Input was generated by ent. */ export type UpdateUserInput = { + addEventIDs?: InputMaybe>; + addPointIDs?: InputMaybe>; + addSubmissionIDs?: InputMaybe>; avatar?: InputMaybe; clearAvatar?: InputMaybe; + clearEvents?: InputMaybe; + clearPoints?: InputMaybe; + clearSubmissions?: InputMaybe; groupID?: InputMaybe; name?: InputMaybe; + removeEventIDs?: InputMaybe>; + removePointIDs?: InputMaybe>; + removeSubmissionIDs?: InputMaybe>; }; export type User = Node & { @@ -817,14 +1264,50 @@ export type User = Node & { createdAt: Scalars['Time']['output']; deletedAt?: Maybe; email: Scalars['String']['output']; + events: EventConnection; group: Group; id: Scalars['ID']['output']; /** The user who impersonated this user. */ impersonatedBy?: Maybe; name: Scalars['String']['output']; + points: PointConnection; + submissionStatistics: SubmissionStatistics; + submissions: SubmissionConnection; + /** The total points of the user. */ + totalPoints: Scalars['Int']['output']; updatedAt: Scalars['Time']['output']; }; + +export type UserEventsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + orderBy?: InputMaybe; + where?: InputMaybe; +}; + + +export type UserPointsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + orderBy?: InputMaybe; + where?: InputMaybe; +}; + + +export type UserSubmissionsArgs = { + after?: InputMaybe; + before?: InputMaybe; + first?: InputMaybe; + last?: InputMaybe; + orderBy?: InputMaybe; + where?: InputMaybe; +}; + /** A connection to a list of items. */ export type UserConnection = { __typename?: 'UserConnection'; @@ -858,6 +1341,13 @@ export enum UserOrderField { Email = 'EMAIL' } +export type UserSqlExecutionResult = { + __typename?: 'UserSQLExecutionResult'; + columns: Array; + matchAnswer: Scalars['Boolean']['output']; + rows: Array>; +}; + /** * UserWhereInput is used for filtering User objects. * Input was generated by ent. @@ -914,9 +1404,18 @@ export type UserWhereInput = { emailLTE?: InputMaybe; emailNEQ?: InputMaybe; emailNotIn?: InputMaybe>; + /** events edge predicates */ + hasEvents?: InputMaybe; + hasEventsWith?: InputMaybe>; /** group edge predicates */ hasGroup?: InputMaybe; hasGroupWith?: InputMaybe>; + /** points edge predicates */ + hasPoints?: InputMaybe; + hasPointsWith?: InputMaybe>; + /** submissions edge predicates */ + hasSubmissions?: InputMaybe; + hasSubmissionsWith?: InputMaybe>; /** id field predicates */ id?: InputMaybe; idGT?: InputMaybe; @@ -953,10 +1452,36 @@ export type UserWhereInput = { updatedAtNotIn?: InputMaybe>; }; +export type ChallengeStatisticsQueryQueryVariables = Exact<{ [key: string]: never; }>; + + +export type ChallengeStatisticsQueryQuery = { __typename?: 'Query', me: { __typename?: 'User', submissionStatistics: { __typename?: 'SubmissionStatistics', totalQuestions: number, solvedQuestions: number, attemptedQuestions: number } } }; + +export type QuestionCardFragment = ( + { __typename?: 'Question', id: string, title: string, description: string, difficulty: QuestionDifficulty, category: string } + & { ' $fragmentRefs'?: { 'QuestionSolvedStatusFragment': QuestionSolvedStatusFragment } } +) & { ' $fragmentName'?: 'QuestionCardFragment' }; + +export type QuestionSolvedStatusFragment = { __typename?: 'Question', solved: boolean, attempted: boolean } & { ' $fragmentName'?: 'QuestionSolvedStatusFragment' }; + +export type ListQuestionsQueryVariables = Exact<{ + where?: InputMaybe; + after?: InputMaybe; +}>; + + +export type ListQuestionsQuery = { __typename?: 'Query', questions: { __typename?: 'QuestionConnection', edges?: Array<{ __typename?: 'QuestionEdge', node?: ( + { __typename?: 'Question', id: string } + & { ' $fragmentRefs'?: { 'QuestionCardFragment': QuestionCardFragment;'QuestionSolvedStatusFragment': QuestionSolvedStatusFragment } } + ) | null } | null> | null, pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean, endCursor?: string | null } } }; + export type BasicUserInfoQueryVariables = Exact<{ [key: string]: never; }>; export type BasicUserInfoQuery = { __typename?: 'Query', me: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, group: { __typename?: 'Group', name: string } } }; - +export const QuestionSolvedStatusFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"QuestionSolvedStatus"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Question"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"solved"}},{"kind":"Field","name":{"kind":"Name","value":"attempted"}}]}}]} as unknown as DocumentNode; +export const QuestionCardFragmentDoc = {"kind":"Document","definitions":[{"kind":"FragmentDefinition","name":{"kind":"Name","value":"QuestionCard"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Question"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"difficulty"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"QuestionSolvedStatus"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"QuestionSolvedStatus"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Question"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"solved"}},{"kind":"Field","name":{"kind":"Name","value":"attempted"}}]}}]} as unknown as DocumentNode; +export const ChallengeStatisticsQueryDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ChallengeStatisticsQuery"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"submissionStatistics"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"totalQuestions"}},{"kind":"Field","name":{"kind":"Name","value":"solvedQuestions"}},{"kind":"Field","name":{"kind":"Name","value":"attemptedQuestions"}}]}}]}}]}}]} as unknown as DocumentNode; +export const ListQuestionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"ListQuestions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"where"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"QuestionWhereInput"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"after"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Cursor"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"questions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"where"},"value":{"kind":"Variable","name":{"kind":"Name","value":"where"}}},{"kind":"Argument","name":{"kind":"Name","value":"first"},"value":{"kind":"IntValue","value":"10"}},{"kind":"Argument","name":{"kind":"Name","value":"after"},"value":{"kind":"Variable","name":{"kind":"Name","value":"after"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"edges"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"node"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"QuestionCard"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"QuestionSolvedStatus"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"pageInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"hasNextPage"}},{"kind":"Field","name":{"kind":"Name","value":"endCursor"}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"QuestionSolvedStatus"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Question"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"solved"}},{"kind":"Field","name":{"kind":"Name","value":"attempted"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"QuestionCard"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Question"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"description"}},{"kind":"Field","name":{"kind":"Name","value":"difficulty"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"FragmentSpread","name":{"kind":"Name","value":"QuestionSolvedStatus"}}]}}]} as unknown as DocumentNode; export const BasicUserInfoDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"BasicUserInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"me"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"email"}},{"kind":"Field","name":{"kind":"Name","value":"avatar"}},{"kind":"Field","name":{"kind":"Name","value":"group"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"name"}}]}}]}}]}}]} as unknown as DocumentNode; \ No newline at end of file diff --git a/package.json b/package.json index ffa0c26..a2f7351 100644 --- a/package.json +++ b/package.json @@ -29,26 +29,29 @@ "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-separator": "^1.1.7", "@radix-ui/react-slot": "^1.2.3", + "@radix-ui/react-toggle": "^1.1.10", + "@radix-ui/react-toggle-group": "^1.1.11", "@radix-ui/react-tooltip": "^1.2.8", "@swc-contrib/plugin-graphql-codegen-client-preset": "^0.6.0", - "@tailwindcss/typography": "^0.5.16", + "@tailwindcss/typography": "^0.5.18", "@tanstack/react-table": "^8.21.3", "babel-plugin-react-compiler": "19.1.0-rc.3", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", + "foxact": "^0.2.49", "graphql": "^16.11.0", "lucide-react": "^0.544.0", - "next": "15.6.0-canary.6", + "next": "15.6.0-canary.20", "next-themes": "^0.4.6", - "react": "19.2.0-canary-8a8e9a7e-20250912", - "react-dom": "19.2.0-canary-8a8e9a7e-20250912", - "react-hook-form": "^7.62.0", + "react": "19.2.0-canary-d415fd3e-20250919", + "react-dom": "19.2.0-canary-d415fd3e-20250919", + "react-hook-form": "^7.63.0", "react-remark": "^2.1.0", "remark": "^15.0.1", "remark-html": "^16.0.1", "sonner": "^2.0.7", "tailwind-merge": "^3.3.1", - "zod": "^4.1.9" + "zod": "^4.1.11" }, "devDependencies": { "@0no-co/graphqlsp": "^1.15.0", @@ -63,7 +66,7 @@ "@types/react-dom": "^19.1.9", "@typescript-eslint/parser": "^8.44.0", "dprint": "^0.50.2", - "eslint": "^9.35.0", + "eslint": "^9.36.0", "eslint-config-next": "15.5.3", "eslint-plugin-better-tailwindcss": "^3.7.9", "eslint-plugin-react-hooks": "^5.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e141c38..11a3190 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,61 +10,67 @@ importers: dependencies: '@apollo/client': specifier: 4.0.5 - version: 4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)(rxjs@7.8.2) + version: 4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)(rxjs@7.8.2) '@apollo/client-integration-nextjs': specifier: ^0.13.1 - version: 0.13.1(@apollo/client@4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)(rxjs@7.8.2))(@types/react@19.1.13)(graphql@16.11.0)(next@15.6.0-canary.6(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912))(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)(rxjs@7.8.2) + version: 0.13.1(@apollo/client@4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)(rxjs@7.8.2))(@types/react@19.1.13)(graphql@16.11.0)(next@15.6.0-canary.20(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919))(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)(rxjs@7.8.2) '@bprogress/next': specifier: ^3.2.12 - version: 3.2.12(next@15.6.0-canary.6(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912))(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 3.2.12(next@15.6.0-canary.20(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919))(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) '@graphql-codegen/client-preset': specifier: ^5.0.1 version: 5.0.1(graphql@16.11.0) '@hookform/resolvers': specifier: ^5.2.2 - version: 5.2.2(react-hook-form@7.62.0(react@19.2.0-canary-8a8e9a7e-20250912)) + version: 5.2.2(react-hook-form@7.63.0(react@19.2.0-canary-d415fd3e-20250919)) '@radix-ui/react-alert-dialog': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) '@radix-ui/react-avatar': specifier: ^1.1.10 - version: 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) '@radix-ui/react-checkbox': specifier: ^1.3.3 - version: 1.3.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 1.3.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) '@radix-ui/react-collapsible': specifier: ^1.1.12 - version: 1.1.12(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 1.1.12(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) '@radix-ui/react-dialog': specifier: ^1.1.15 - version: 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) '@radix-ui/react-dropdown-menu': specifier: ^2.1.16 - version: 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) '@radix-ui/react-label': specifier: ^2.1.7 - version: 2.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 2.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) '@radix-ui/react-select': specifier: ^2.2.6 - version: 2.2.6(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 2.2.6(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) '@radix-ui/react-separator': specifier: ^1.1.7 - version: 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) '@radix-ui/react-slot': specifier: ^1.2.3 - version: 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) + version: 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-toggle': + specifier: ^1.1.10 + version: 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-toggle-group': + specifier: ^1.1.11 + version: 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) '@radix-ui/react-tooltip': specifier: ^1.2.8 - version: 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) '@swc-contrib/plugin-graphql-codegen-client-preset': specifier: ^0.6.0 version: 0.6.0 '@tailwindcss/typography': - specifier: ^0.5.16 - version: 0.5.16(tailwindcss@4.1.13) + specifier: ^0.5.18 + version: 0.5.18(tailwindcss@4.1.13) '@tanstack/react-table': specifier: ^8.21.3 - version: 8.21.3(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 8.21.3(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) babel-plugin-react-compiler: specifier: 19.1.0-rc.3 version: 19.1.0-rc.3 @@ -74,30 +80,33 @@ importers: clsx: specifier: ^2.1.1 version: 2.1.1 + foxact: + specifier: ^0.2.49 + version: 0.2.49(react@19.2.0-canary-d415fd3e-20250919) graphql: specifier: ^16.11.0 version: 16.11.0 lucide-react: specifier: ^0.544.0 - version: 0.544.0(react@19.2.0-canary-8a8e9a7e-20250912) + version: 0.544.0(react@19.2.0-canary-d415fd3e-20250919) next: - specifier: 15.6.0-canary.6 - version: 15.6.0-canary.6(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + specifier: 15.6.0-canary.20 + version: 15.6.0-canary.20(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) next-themes: specifier: ^0.4.6 - version: 0.4.6(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 0.4.6(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) react: - specifier: 19.2.0-canary-8a8e9a7e-20250912 - version: 19.2.0-canary-8a8e9a7e-20250912 + specifier: 19.2.0-canary-d415fd3e-20250919 + version: 19.2.0-canary-d415fd3e-20250919 react-dom: - specifier: 19.2.0-canary-8a8e9a7e-20250912 - version: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + specifier: 19.2.0-canary-d415fd3e-20250919 + version: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) react-hook-form: - specifier: ^7.62.0 - version: 7.62.0(react@19.2.0-canary-8a8e9a7e-20250912) + specifier: ^7.63.0 + version: 7.63.0(react@19.2.0-canary-d415fd3e-20250919) react-remark: specifier: ^2.1.0 - version: 2.1.0(react@19.2.0-canary-8a8e9a7e-20250912) + version: 2.1.0(react@19.2.0-canary-d415fd3e-20250919) remark: specifier: ^15.0.1 version: 15.0.1 @@ -106,13 +115,13 @@ importers: version: 16.0.1 sonner: specifier: ^2.0.7 - version: 2.0.7(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + version: 2.0.7(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) tailwind-merge: specifier: ^3.3.1 version: 3.3.1 zod: - specifier: ^4.1.9 - version: 4.1.9 + specifier: ^4.1.11 + version: 4.1.11 devDependencies: '@0no-co/graphqlsp': specifier: ^1.15.0 @@ -146,22 +155,22 @@ importers: version: 19.1.9(@types/react@19.1.13) '@typescript-eslint/parser': specifier: ^8.44.0 - version: 8.44.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + version: 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) dprint: specifier: ^0.50.2 version: 0.50.2 eslint: - specifier: ^9.35.0 - version: 9.35.0(jiti@2.5.1) + specifier: ^9.36.0 + version: 9.36.0(jiti@2.5.1) eslint-config-next: specifier: 15.5.3 - version: 15.5.3(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + version: 15.5.3(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) eslint-plugin-better-tailwindcss: specifier: ^3.7.9 - version: 3.7.9(eslint@9.35.0(jiti@2.5.1))(tailwindcss@4.1.13) + version: 3.7.9(eslint@9.36.0(jiti@2.5.1))(tailwindcss@4.1.13) eslint-plugin-react-hooks: specifier: ^5.2.0 - version: 5.2.0(eslint@9.35.0(jiti@2.5.1)) + version: 5.2.0(eslint@9.36.0(jiti@2.5.1)) tailwindcss: specifier: ^4.1.13 version: 4.1.13 @@ -401,12 +410,6 @@ packages: resolution: {integrity: sha512-CsFmA3u3c2QoLDTfEpGr4t25fjMU31nyvse7IzWTvb0ZycuPjMjb0fjlheh+PbhBYb9YLugnT2uY6Mwcg1o+Zg==} engines: {node: '>=18.0.0'} - '@eslint-community/eslint-utils@4.8.0': - resolution: {integrity: sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/eslint-utils@4.9.0': resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -437,8 +440,8 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.35.0': - resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==} + '@eslint/js@9.36.0': + resolution: {integrity: sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': @@ -732,124 +735,128 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@img/sharp-darwin-arm64@0.34.3': - resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==} + '@img/colour@1.0.0': + resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + engines: {node: '>=18'} + + '@img/sharp-darwin-arm64@0.34.4': + resolution: {integrity: sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.3': - resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==} + '@img/sharp-darwin-x64@0.34.4': + resolution: {integrity: sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.2.0': - resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==} + '@img/sharp-libvips-darwin-arm64@1.2.3': + resolution: {integrity: sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.2.0': - resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==} + '@img/sharp-libvips-darwin-x64@1.2.3': + resolution: {integrity: sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.2.0': - resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==} + '@img/sharp-libvips-linux-arm64@1.2.3': + resolution: {integrity: sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.2.0': - resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==} + '@img/sharp-libvips-linux-arm@1.2.3': + resolution: {integrity: sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-ppc64@1.2.0': - resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==} + '@img/sharp-libvips-linux-ppc64@1.2.3': + resolution: {integrity: sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==} cpu: [ppc64] os: [linux] - '@img/sharp-libvips-linux-s390x@1.2.0': - resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==} + '@img/sharp-libvips-linux-s390x@1.2.3': + resolution: {integrity: sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.2.0': - resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==} + '@img/sharp-libvips-linux-x64@1.2.3': + resolution: {integrity: sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.2.0': - resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==} + '@img/sharp-libvips-linuxmusl-arm64@1.2.3': + resolution: {integrity: sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.2.0': - resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==} + '@img/sharp-libvips-linuxmusl-x64@1.2.3': + resolution: {integrity: sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.34.3': - resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==} + '@img/sharp-linux-arm64@0.34.4': + resolution: {integrity: sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.34.3': - resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==} + '@img/sharp-linux-arm@0.34.4': + resolution: {integrity: sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-ppc64@0.34.3': - resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==} + '@img/sharp-linux-ppc64@0.34.4': + resolution: {integrity: sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] - '@img/sharp-linux-s390x@0.34.3': - resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==} + '@img/sharp-linux-s390x@0.34.4': + resolution: {integrity: sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.34.3': - resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==} + '@img/sharp-linux-x64@0.34.4': + resolution: {integrity: sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.3': - resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==} + '@img/sharp-linuxmusl-arm64@0.34.4': + resolution: {integrity: sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.3': - resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==} + '@img/sharp-linuxmusl-x64@0.34.4': + resolution: {integrity: sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.34.3': - resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==} + '@img/sharp-wasm32@0.34.4': + resolution: {integrity: sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.3': - resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==} + '@img/sharp-win32-arm64@0.34.4': + resolution: {integrity: sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.3': - resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==} + '@img/sharp-win32-ia32@0.34.4': + resolution: {integrity: sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.3': - resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==} + '@img/sharp-win32-x64@0.34.4': + resolution: {integrity: sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -1011,56 +1018,56 @@ packages: '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@next/env@15.6.0-canary.6': - resolution: {integrity: sha512-n2gnLG889CaemRQc/h2O50VckrfIH6Pgk1dbiGYA3oeVOhLqDfX8477mJ6Oz1T83bpCa5rj4zyDuQGD/i8t0Iw==} + '@next/env@15.6.0-canary.20': + resolution: {integrity: sha512-+ljGWYCPxG5SNlTecwlcVcBnARQNv/CjzD73VlJg2oMvRnVrLCr+1zrjY1KnOVF4KsDxVTCD52V92YeAaJojNw==} '@next/eslint-plugin-next@15.5.3': resolution: {integrity: sha512-SdhaKdko6dpsSr0DldkESItVrnPYB1NS2NpShCSX5lc7SSQmLZt5Mug6t2xbiuVWEVDLZSuIAoQyYVBYp0dR5g==} - '@next/swc-darwin-arm64@15.6.0-canary.6': - resolution: {integrity: sha512-swBBlmfZOwgrPBKy4Q/gdmxXjkDWIdGuE5LEwM19NXTXXMOHaCb4+BgVW840zDchkw8QdTq2SfiKU/SK7KUi7g==} + '@next/swc-darwin-arm64@15.6.0-canary.20': + resolution: {integrity: sha512-UFv71kNjbKhzdd7nd6f4UKALqKzal/f+dZ9X/ld9rfUmE/sVsCpBqbzu/Uw8KtGVwz1TKcsuR5A+p79SRhY39Q==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.6.0-canary.6': - resolution: {integrity: sha512-6JlgbpyxB4sMh3qKVWcgDlYTZ5Z7/FhiEHfSNpKwf7LW/5rfqy8o9/TuOilSllpyk+hVzn3gZMO3sNrISx1m4w==} + '@next/swc-darwin-x64@15.6.0-canary.20': + resolution: {integrity: sha512-Re+46/ZpzquBczPruty09ywO/uTVo2i6yeCr1+x7YpgEj/7jevIIOr9qHoWtTxdceco8+NwmjyPX3jKwqK/IEQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.6.0-canary.6': - resolution: {integrity: sha512-rknhiiQxMF61jjyqssEDfBlln7Q9TUTFLUyiiHY6W/CWUulFd7dcC0HOnBuczDG57gtEA6YS/CBA2GaPNWVmWQ==} + '@next/swc-linux-arm64-gnu@15.6.0-canary.20': + resolution: {integrity: sha512-NdReZ2W87z8HttNuWgDPlcpBkQdzaG0WfB2KCwH17mT3NNhaZ3WCrRfp1FICiMIB/TjNi8ewjqYb+7J4vrslBg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.6.0-canary.6': - resolution: {integrity: sha512-3uBUL6D/LBCuSyzwztl5mSHjHe2F8Y0m4hbFM/diGXYlh3dL+yIDZvoW3VQ0kNcYAQ/QRmSYAadywonTf30Hug==} + '@next/swc-linux-arm64-musl@15.6.0-canary.20': + resolution: {integrity: sha512-3ItqqT6eRyz3tTtO0H+s/ZnmHWLioNxvNQ+NrCopprMQX4aCqT14g8juSCWyCxUpUCJewu1qzH1b8MG/w49ynA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.6.0-canary.6': - resolution: {integrity: sha512-wnSDhyaC8PddfRUKACcss3gyfv2+LaFjmOQCo3E/C1vIbjs1gRy3z8jEICJ6GUA6ZYgoWzoVXEoJ5T7quTlKYw==} + '@next/swc-linux-x64-gnu@15.6.0-canary.20': + resolution: {integrity: sha512-4MwMRDSdkDk1URFfq8Jh4N2Ck6BY9QjSVukV0PqaF1BIncOdSd+OhdmawAI5h3GAmyhkEXajmqGz33U66uEHAg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.6.0-canary.6': - resolution: {integrity: sha512-nXZV/Wnh3yZNF/QwmlM4AJcWiApCvU82BZ5BfzkKyumbn/UmicnC7JZUE0PJNBfcHhwctMz0UG4O1CloMZW9cg==} + '@next/swc-linux-x64-musl@15.6.0-canary.20': + resolution: {integrity: sha512-XLGkiwp5z7BUd6DbpAkU+Y12JbckzEhwcRmPC9LMWgPzZovsFscjrDyTmYuyRMqaq2qKP+TmXWBwkHvalH8JEw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.6.0-canary.6': - resolution: {integrity: sha512-7YMceVUo/axUxKrRC0MFvEC4Db7M9vvExwVzWN5vvJJIzAahgWiNdyTSEZStRfPMiYAboOENWTa9SoN4ZNolOQ==} + '@next/swc-win32-arm64-msvc@15.6.0-canary.20': + resolution: {integrity: sha512-rRmwdrIt4g/oX9m/oOiOvXf35cwmyDUbAgSJeE/sB5QZYz7dOgx7Cfj3K5YJJ8fYPCVIO9cALQCeWZuvIrVCBw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.6.0-canary.6': - resolution: {integrity: sha512-CVyq4/euwXtqi6nr+aPJuN1vPUuh/IlsXVBVNWJjS3rGVqxHKMkKCJXGNINv6v4l96waE7mnN/kTIW1Ke/Lj6Q==} + '@next/swc-win32-x64-msvc@15.6.0-canary.20': + resolution: {integrity: sha512-3jfmbFAOLgRvqs5TKclq3u25lS7ctB/RwLiflbCq8pd9rmu0kIoUlFQP8kiX67bNLSv/p6tWYCd1XMEbyMRn2w==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1474,6 +1481,32 @@ packages: '@types/react': optional: true + '@radix-ui/react-toggle-group@1.1.11': + resolution: {integrity: sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-toggle@1.1.10': + resolution: {integrity: sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-tooltip@1.2.8': resolution: {integrity: sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==} peerDependencies: @@ -1691,8 +1724,8 @@ packages: '@tailwindcss/postcss@4.1.13': resolution: {integrity: sha512-HLgx6YSFKJT7rJqh9oJs/TkBFhxuMOfUKSBEPYwV+t78POOBsdQ7crhZLzwcH3T0UyUuOzU/GK5pk5eKr3wCiQ==} - '@tailwindcss/typography@0.5.16': - resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} + '@tailwindcss/typography@0.5.18': + resolution: {integrity: sha512-dDIgwZOlf+tVkZ7A029VvQ1+ngKATENDjMEx2N35s2yPjfTS05RWSM8ilhEWSa5DMJ6ci2Ha9WNZEd2GQjrdQg==} peerDependencies: tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' @@ -2141,6 +2174,9 @@ packages: caniuse-lite@1.0.30001741: resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==} + caniuse-lite@1.0.30001743: + resolution: {integrity: sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==} + capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} @@ -2215,13 +2251,6 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -2368,6 +2397,10 @@ packages: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} + detect-libc@2.1.0: + resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==} + engines: {node: '>=8'} + detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} @@ -2557,8 +2590,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.35.0: - resolution: {integrity: sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==} + eslint@9.36.0: + resolution: {integrity: sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2662,6 +2695,14 @@ packages: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} + foxact@0.2.49: + resolution: {integrity: sha512-9Pbu4IbkaNqtS/H4887/QWegclMpBn54mzbPp3t1mg0iJuB83jpQGBY2fshal50NmchlAFIT/GSWBFsa0YI31Q==} + peerDependencies: + react: '*' + peerDependenciesMeta: + react: + optional: true + function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} @@ -2872,9 +2913,6 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} - is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} engines: {node: '>= 0.4'} @@ -3175,12 +3213,6 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.castarray@4.4.0: - resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==} - - lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -3399,8 +3431,8 @@ packages: react: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc react-dom: ^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc - next@15.6.0-canary.6: - resolution: {integrity: sha512-aFB10CgjHG1fXv7wVVegbHYAsS/uEPi+tNUJI2piTzoy2xVKfHGZG9yqDor8PZaUr8tr/CEhxvt6Ay4ZsKFfOA==} + next@15.6.0-canary.20: + resolution: {integrity: sha512-FzC5rYa5JgeITRnWX69kqrwM2xgaDlSO1EoPDtmMewpAH/H5Yh1D7+MaYQr+cyfDM0luSpqD6PJd2ej8950RTw==} engines: {node: '>=20.9.0'} hasBin: true peerDependencies: @@ -3622,13 +3654,13 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - react-dom@19.2.0-canary-8a8e9a7e-20250912: - resolution: {integrity: sha512-L8M3aTJG8Mw+4mdQ+hICkgB8p8NqhxkoWW5WkvDhWfa850RkrnnuhjOYw+X+/x/2t+Twq8wYHjtxcCn2yLTfaA==} + react-dom@19.2.0-canary-d415fd3e-20250919: + resolution: {integrity: sha512-x6oMy2coDRpRxmci7mbUm8a3SbuMFKAq+4RsnkcdTx9O+9CZh/av8lOSwoNQq83to4exCR5wxBZYeBr7jloZbA==} peerDependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 - react-hook-form@7.62.0: - resolution: {integrity: sha512-7KWFejc98xqG/F4bAxpL41NB3o1nnvQO1RWZT3TqRZYL8RryQETGfEdVnJN2fy1crCiBLLjkRBVK05j24FxJGA==} + react-hook-form@7.63.0: + resolution: {integrity: sha512-ZwueDMvUeucovM2VjkCf7zIHcs1aAlDimZu2Hvel5C5907gUzMpm4xCrQXtRzCvsBqFjonB4m3x4LzCFI1ZKWA==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 || ^19 @@ -3672,8 +3704,8 @@ packages: '@types/react': optional: true - react@19.2.0-canary-8a8e9a7e-20250912: - resolution: {integrity: sha512-mSS+N5hg8bGa2eBY8Gxbus6j58kHYHZTHXwZk7pxnHYgOmsfl6DrUS9LtPZEK4jVrbzQI9QOcxLYPmZfDDLfmw==} + react@19.2.0-canary-d415fd3e-20250919: + resolution: {integrity: sha512-gNQ6vJjVZ73TiwaX9tRjGj5039lEQuGlkkncdLkA4XLsIyttTY8bmDEq1JtcQdybxsM7/WE1hgT8Xi/nk2LBrw==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -3776,8 +3808,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - scheduler@0.27.0-canary-8a8e9a7e-20250912: - resolution: {integrity: sha512-vtzmSwlJL0Ca81fgrp5NN8m0uUcbMTa0I/RfDWJY4giqYpiO2IZe6rJ+SjPp1ceFwMIn9+VvVe0pG1IACzXhRw==} + scheduler@0.27.0-canary-d415fd3e-20250919: + resolution: {integrity: sha512-0lNnfpCOaj3cae33jshLBYVKRkLY6ga5JGrSVQX9M+q5Lkoor8PTFNTLNW4s7WlDui78ntyJrOrjirwoBaCWvw==} semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} @@ -3791,6 +3823,9 @@ packages: sentence-case@3.0.4: resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + server-only@0.0.1: + resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -3806,8 +3841,8 @@ packages: setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - sharp@0.34.3: - resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} + sharp@0.34.4: + resolution: {integrity: sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: @@ -3845,9 +3880,6 @@ packages: signedsource@1.0.0: resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -4317,8 +4349,8 @@ packages: resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} - zod@4.1.9: - resolution: {integrity: sha512-HI32jTq0AUAC125z30E8bQNz0RQ+9Uc+4J7V97gLYjZVKRjeydPgGt6dvQzFrav7MYOUGFqqOGiHpA/fdbd0cQ==} + zod@4.1.11: + resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==} zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -4337,31 +4369,31 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@apollo/client-integration-nextjs@0.13.1(@apollo/client@4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)(rxjs@7.8.2))(@types/react@19.1.13)(graphql@16.11.0)(next@15.6.0-canary.6(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912))(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)(rxjs@7.8.2)': + '@apollo/client-integration-nextjs@0.13.1(@apollo/client@4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)(rxjs@7.8.2))(@types/react@19.1.13)(graphql@16.11.0)(next@15.6.0-canary.20(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919))(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)(rxjs@7.8.2)': dependencies: - '@apollo/client': 4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)(rxjs@7.8.2) - '@apollo/client-react-streaming': 0.13.1(@apollo/client@4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)(rxjs@7.8.2))(@types/react@19.1.13)(graphql@16.11.0)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)(rxjs@7.8.2) - next: 15.6.0-canary.6(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 + '@apollo/client': 4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)(rxjs@7.8.2) + '@apollo/client-react-streaming': 0.13.1(@apollo/client@4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)(rxjs@7.8.2))(@types/react@19.1.13)(graphql@16.11.0)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)(rxjs@7.8.2) + next: 15.6.0-canary.20(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 rxjs: 7.8.2 transitivePeerDependencies: - '@types/react' - graphql - react-dom - '@apollo/client-react-streaming@0.13.1(@apollo/client@4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)(rxjs@7.8.2))(@types/react@19.1.13)(graphql@16.11.0)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)(rxjs@7.8.2)': + '@apollo/client-react-streaming@0.13.1(@apollo/client@4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)(rxjs@7.8.2))(@types/react@19.1.13)(graphql@16.11.0)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)(rxjs@7.8.2)': dependencies: - '@apollo/client': 4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)(rxjs@7.8.2) + '@apollo/client': 4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)(rxjs@7.8.2) '@types/react-dom': 19.1.9(@types/react@19.1.13) '@wry/equality': 0.5.7 graphql: 16.11.0 - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) rxjs: 7.8.2 transitivePeerDependencies: - '@types/react' - '@apollo/client@4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)(rxjs@7.8.2)': + '@apollo/client@4.0.5(graphql-ws@6.0.6(graphql@16.11.0)(ws@8.18.3))(graphql@16.11.0)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)(rxjs@7.8.2)': dependencies: '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) '@wry/caches': 1.0.1 @@ -4374,8 +4406,8 @@ snapshots: tslib: 2.8.1 optionalDependencies: graphql-ws: 6.0.6(graphql@16.11.0)(ws@8.18.3) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) '@ardatan/relay-compiler@12.0.3(graphql@16.11.0)': dependencies: @@ -4509,19 +4541,19 @@ snapshots: '@bprogress/core@1.3.4': {} - '@bprogress/next@3.2.12(next@15.6.0-canary.6(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912))(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@bprogress/next@3.2.12(next@15.6.0-canary.20(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919))(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@bprogress/core': 1.3.4 - '@bprogress/react': 1.2.7(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - next: 15.6.0-canary.6(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@bprogress/react': 1.2.7(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + next: 15.6.0-canary.20(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) - '@bprogress/react@1.2.7(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@bprogress/react@1.2.7(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@bprogress/core': 1.3.4 - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) '@dprint/darwin-arm64@0.50.2': optional: true @@ -4583,14 +4615,9 @@ snapshots: '@whatwg-node/promise-helpers': 1.3.2 tslib: 2.8.1 - '@eslint-community/eslint-utils@4.8.0(eslint@9.35.0(jiti@2.5.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.5.1))': dependencies: - eslint: 9.35.0(jiti@2.5.1) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.9.0(eslint@9.35.0(jiti@2.5.1))': - dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -4598,7 +4625,7 @@ snapshots: '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.1 + debug: 4.4.3 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4628,7 +4655,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.35.0': {} + '@eslint/js@9.36.0': {} '@eslint/object-schema@2.1.6': {} @@ -4648,11 +4675,11 @@ snapshots: '@floating-ui/core': 1.7.3 '@floating-ui/utils': 0.2.10 - '@floating-ui/react-dom@2.1.5(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@floating-ui/react-dom@2.1.5(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@floating-ui/dom': 1.7.3 - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) '@floating-ui/utils@0.2.10': {} @@ -5086,10 +5113,10 @@ snapshots: dependencies: graphql: 16.11.0 - '@hookform/resolvers@5.2.2(react-hook-form@7.62.0(react@19.2.0-canary-8a8e9a7e-20250912))': + '@hookform/resolvers@5.2.2(react-hook-form@7.63.0(react@19.2.0-canary-d415fd3e-20250919))': dependencies: '@standard-schema/utils': 0.3.0 - react-hook-form: 7.62.0(react@19.2.0-canary-8a8e9a7e-20250912) + react-hook-form: 7.63.0(react@19.2.0-canary-d415fd3e-20250919) '@humanfs/core@0.19.1': {} @@ -5102,90 +5129,93 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@img/sharp-darwin-arm64@0.34.3': + '@img/colour@1.0.0': + optional: true + + '@img/sharp-darwin-arm64@0.34.4': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.2.0 + '@img/sharp-libvips-darwin-arm64': 1.2.3 optional: true - '@img/sharp-darwin-x64@0.34.3': + '@img/sharp-darwin-x64@0.34.4': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.2.0 + '@img/sharp-libvips-darwin-x64': 1.2.3 optional: true - '@img/sharp-libvips-darwin-arm64@1.2.0': + '@img/sharp-libvips-darwin-arm64@1.2.3': optional: true - '@img/sharp-libvips-darwin-x64@1.2.0': + '@img/sharp-libvips-darwin-x64@1.2.3': optional: true - '@img/sharp-libvips-linux-arm64@1.2.0': + '@img/sharp-libvips-linux-arm64@1.2.3': optional: true - '@img/sharp-libvips-linux-arm@1.2.0': + '@img/sharp-libvips-linux-arm@1.2.3': optional: true - '@img/sharp-libvips-linux-ppc64@1.2.0': + '@img/sharp-libvips-linux-ppc64@1.2.3': optional: true - '@img/sharp-libvips-linux-s390x@1.2.0': + '@img/sharp-libvips-linux-s390x@1.2.3': optional: true - '@img/sharp-libvips-linux-x64@1.2.0': + '@img/sharp-libvips-linux-x64@1.2.3': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.2.0': + '@img/sharp-libvips-linuxmusl-arm64@1.2.3': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.2.0': + '@img/sharp-libvips-linuxmusl-x64@1.2.3': optional: true - '@img/sharp-linux-arm64@0.34.3': + '@img/sharp-linux-arm64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.2.0 + '@img/sharp-libvips-linux-arm64': 1.2.3 optional: true - '@img/sharp-linux-arm@0.34.3': + '@img/sharp-linux-arm@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.2.0 + '@img/sharp-libvips-linux-arm': 1.2.3 optional: true - '@img/sharp-linux-ppc64@0.34.3': + '@img/sharp-linux-ppc64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-ppc64': 1.2.0 + '@img/sharp-libvips-linux-ppc64': 1.2.3 optional: true - '@img/sharp-linux-s390x@0.34.3': + '@img/sharp-linux-s390x@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.2.0 + '@img/sharp-libvips-linux-s390x': 1.2.3 optional: true - '@img/sharp-linux-x64@0.34.3': + '@img/sharp-linux-x64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.2.0 + '@img/sharp-libvips-linux-x64': 1.2.3 optional: true - '@img/sharp-linuxmusl-arm64@0.34.3': + '@img/sharp-linuxmusl-arm64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 optional: true - '@img/sharp-linuxmusl-x64@0.34.3': + '@img/sharp-linuxmusl-x64@0.34.4': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.2.0 + '@img/sharp-libvips-linuxmusl-x64': 1.2.3 optional: true - '@img/sharp-wasm32@0.34.3': + '@img/sharp-wasm32@0.34.4': dependencies: '@emnapi/runtime': 1.5.0 optional: true - '@img/sharp-win32-arm64@0.34.3': + '@img/sharp-win32-arm64@0.34.4': optional: true - '@img/sharp-win32-ia32@0.34.3': + '@img/sharp-win32-ia32@0.34.4': optional: true - '@img/sharp-win32-x64@0.34.3': + '@img/sharp-win32-x64@0.34.4': optional: true '@inquirer/checkbox@4.2.2(@types/node@24.5.2)': @@ -5345,34 +5375,34 @@ snapshots: '@tybys/wasm-util': 0.10.0 optional: true - '@next/env@15.6.0-canary.6': {} + '@next/env@15.6.0-canary.20': {} '@next/eslint-plugin-next@15.5.3': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.6.0-canary.6': + '@next/swc-darwin-arm64@15.6.0-canary.20': optional: true - '@next/swc-darwin-x64@15.6.0-canary.6': + '@next/swc-darwin-x64@15.6.0-canary.20': optional: true - '@next/swc-linux-arm64-gnu@15.6.0-canary.6': + '@next/swc-linux-arm64-gnu@15.6.0-canary.20': optional: true - '@next/swc-linux-arm64-musl@15.6.0-canary.6': + '@next/swc-linux-arm64-musl@15.6.0-canary.20': optional: true - '@next/swc-linux-x64-gnu@15.6.0-canary.6': + '@next/swc-linux-x64-gnu@15.6.0-canary.20': optional: true - '@next/swc-linux-x64-musl@15.6.0-canary.6': + '@next/swc-linux-x64-musl@15.6.0-canary.20': optional: true - '@next/swc-win32-arm64-msvc@15.6.0-canary.6': + '@next/swc-win32-arm64-msvc@15.6.0-canary.20': optional: true - '@next/swc-win32-x64-msvc@15.6.0-canary.6': + '@next/swc-win32-x64-msvc@15.6.0-canary.20': optional: true '@nodelib/fs.scandir@2.1.5': @@ -5455,408 +5485,434 @@ snapshots: '@radix-ui/primitive@1.1.3': {} - '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-alert-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-dialog': 1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-avatar@1.1.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-is-hydrated': 0.1.0(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-checkbox@1.3.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-collapsible@1.1.12(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-collection@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 optionalDependencies: '@types/react': 19.1.13 - '@radix-ui/react-context@1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-context@1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 optionalDependencies: '@types/react': 19.1.13 - '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-dialog@1.1.15(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) aria-hidden: 1.2.6 - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) - react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) + react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-direction@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-direction@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 optionalDependencies: '@types/react': 19.1.13 - '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-dropdown-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-menu': 2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 optionalDependencies: '@types/react': 19.1.13 - '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-focus-scope@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-id@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-id@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 optionalDependencies: '@types/react': 19.1.13 - '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-label@2.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-menu@2.1.16(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) aria-hidden: 1.2.6 - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) - react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) + react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': - dependencies: - '@floating-ui/react-dom': 2.1.5(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-popper@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': + dependencies: + '@floating-ui/react-dom': 2.1.5(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) '@radix-ui/rect': 1.1.1 - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-presence@1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-roving-focus@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-select@2.2.6(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-select@2.2.6(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-collection': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-previous': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) aria-hidden: 1.2.6 - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) - react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) + react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-separator@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-separator@1.1.7(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-slot@1.2.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-slot@1.2.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 optionalDependencies: '@types/react': 19.1.13 - '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-toggle-group@1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@radix-ui/primitive': 1.1.3 - '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-direction': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-roving-focus': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-toggle': 1.1.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-toggle@1.1.10(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 + '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-tooltip@1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-popper': 1.2.8(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-presence': 1.1.5(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 + '@types/react-dom': 19.1.9(@types/react@19.1.13) - '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 optionalDependencies: '@types/react': 19.1.13 - '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 optionalDependencies: '@types/react': 19.1.13 - '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 - use-sync-external-store: 1.5.0(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 optionalDependencies: '@types/react': 19.1.13 - '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 optionalDependencies: '@types/react': 19.1.13 - '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-use-is-hydrated@0.1.0(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 + use-sync-external-store: 1.5.0(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 - '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': + dependencies: + react: 19.2.0-canary-d415fd3e-20250919 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-previous@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': + dependencies: + react: 19.2.0-canary-d415fd3e-20250919 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@radix-ui/rect': 1.1.1 - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 optionalDependencies: '@types/react': 19.1.13 - '@radix-ui/react-use-size@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 optionalDependencies: '@types/react': 19.1.13 - '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: - '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912) - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.9(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) @@ -5949,19 +6005,16 @@ snapshots: postcss: 8.5.6 tailwindcss: 4.1.13 - '@tailwindcss/typography@0.5.16(tailwindcss@4.1.13)': + '@tailwindcss/typography@0.5.18(tailwindcss@4.1.13)': dependencies: - lodash.castarray: 4.4.0 - lodash.isplainobject: 4.0.6 - lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 tailwindcss: 4.1.13 - '@tanstack/react-table@8.21.3(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912)': + '@tanstack/react-table@8.21.3(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919)': dependencies: '@tanstack/table-core': 8.21.3 - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) '@tanstack/table-core@8.21.3': {} @@ -6024,15 +6077,15 @@ snapshots: dependencies: '@types/node': 24.5.2 - '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.44.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/scope-manager': 8.43.0 - '@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/type-utils': 8.43.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.43.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.43.0 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -6041,14 +6094,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.44.0 '@typescript-eslint/types': 8.44.0 '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.44.0 debug: 4.4.3 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6089,13 +6142,13 @@ snapshots: dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/type-utils@8.43.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.43.0 '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.43.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) debug: 4.4.3 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: @@ -6137,13 +6190,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.43.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.43.0 '@typescript-eslint/types': 8.43.0 '@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -6440,6 +6493,8 @@ snapshots: caniuse-lite@1.0.30001741: {} + caniuse-lite@1.0.30001743: {} + capital-case@1.0.4: dependencies: no-case: 3.0.4 @@ -6528,18 +6583,6 @@ snapshots: color-name@1.1.4: {} - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.2 - optional: true - - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - optional: true - colorette@2.0.20: {} comma-separated-tokens@1.0.8: {} @@ -6662,6 +6705,9 @@ snapshots: detect-libc@2.0.4: {} + detect-libc@2.1.0: + optional: true + detect-node-es@1.1.0: {} devlop@1.1.0: @@ -6827,19 +6873,19 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-next@15.5.3(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2): + eslint-config-next@15.5.3(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2): dependencies: '@next/eslint-plugin-next': 15.5.3 '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - '@typescript-eslint/parser': 8.44.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) + '@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-react: 7.37.5(eslint@9.35.0(jiti@2.5.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.35.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-react: 7.37.5(eslint@9.36.0(jiti@2.5.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.36.0(jiti@2.5.1)) optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -6855,37 +6901,37 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.35.0(jiti@2.5.1)): + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.36.0(jiti@2.5.1)): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.15 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0(jiti@2.5.1)) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.36.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0(jiti@2.5.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.36.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.44.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) - eslint: 9.35.0(jiti@2.5.1) + '@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) + eslint: 9.36.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.35.0(jiti@2.5.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.36.0(jiti@2.5.1)) transitivePeerDependencies: - supports-color - eslint-plugin-better-tailwindcss@3.7.9(eslint@9.35.0(jiti@2.5.1))(tailwindcss@4.1.13): + eslint-plugin-better-tailwindcss@3.7.9(eslint@9.36.0(jiti@2.5.1))(tailwindcss@4.1.13): dependencies: '@eslint/css-tree': 3.6.5 enhanced-resolve: 5.18.3 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) jiti: 2.5.1 postcss: 8.5.6 postcss-import: 16.1.1(postcss@8.5.6) @@ -6894,7 +6940,7 @@ snapshots: tailwindcss: 4.1.13 tsconfig-paths-webpack-plugin: 4.2.0 - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-typescript@3.10.1)(eslint@9.36.0(jiti@2.5.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -6903,9 +6949,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.44.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.35.0(jiti@2.5.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.36.0(jiti@2.5.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -6917,13 +6963,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.44.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.36.0(jiti@2.5.1)): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -6933,7 +6979,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -6942,11 +6988,11 @@ snapshots: safe-regex-test: 1.1.0 string.prototype.includes: 2.0.1 - eslint-plugin-react-hooks@5.2.0(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.36.0(jiti@2.5.1)): dependencies: - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) - eslint-plugin-react@7.37.5(eslint@9.35.0(jiti@2.5.1)): + eslint-plugin-react@7.37.5(eslint@9.36.0(jiti@2.5.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -6954,7 +7000,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.35.0(jiti@2.5.1) + eslint: 9.36.0(jiti@2.5.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -6977,15 +7023,15 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.35.0(jiti@2.5.1): + eslint@9.36.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.1 '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.35.0 + '@eslint/js': 9.36.0 '@eslint/plugin-kit': 0.3.5 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 @@ -6995,7 +7041,7 @@ snapshots: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1 + debug: 4.4.3 escape-string-regexp: 4.0.0 eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 @@ -7122,6 +7168,13 @@ snapshots: dependencies: fetch-blob: 3.2.0 + foxact@0.2.49(react@19.2.0-canary-d415fd3e-20250919): + dependencies: + client-only: 0.0.1 + server-only: 0.0.1 + optionalDependencies: + react: 19.2.0-canary-d415fd3e-20250919 + function-bind@1.1.2: {} function.prototype.name@1.1.8: @@ -7352,9 +7405,6 @@ snapshots: is-arrayish@0.2.1: {} - is-arrayish@0.3.2: - optional: true - is-async-function@2.1.1: dependencies: async-function: 1.0.0 @@ -7626,10 +7676,6 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash.castarray@4.4.0: {} - - lodash.isplainobject@4.0.6: {} - lodash.merge@4.6.2: {} lodash.sortby@4.7.0: {} @@ -7667,9 +7713,9 @@ snapshots: dependencies: yallist: 3.1.1 - lucide-react@0.544.0(react@19.2.0-canary-8a8e9a7e-20250912): + lucide-react@0.544.0(react@19.2.0-canary-d415fd3e-20250919): dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 magic-string@0.30.18: dependencies: @@ -7941,31 +7987,31 @@ snapshots: natural-compare@1.4.0: {} - next-themes@0.4.6(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912): + next-themes@0.4.6(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919): dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) - next@15.6.0-canary.6(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912): + next@15.6.0-canary.20(@babel/core@7.28.4)(babel-plugin-react-compiler@19.1.0-rc.3)(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919): dependencies: - '@next/env': 15.6.0-canary.6 + '@next/env': 15.6.0-canary.20 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001741 + caniuse-lite: 1.0.30001743 postcss: 8.4.31 - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) - styled-jsx: 5.1.6(@babel/core@7.28.4)(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) + styled-jsx: 5.1.6(@babel/core@7.28.4)(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: - '@next/swc-darwin-arm64': 15.6.0-canary.6 - '@next/swc-darwin-x64': 15.6.0-canary.6 - '@next/swc-linux-arm64-gnu': 15.6.0-canary.6 - '@next/swc-linux-arm64-musl': 15.6.0-canary.6 - '@next/swc-linux-x64-gnu': 15.6.0-canary.6 - '@next/swc-linux-x64-musl': 15.6.0-canary.6 - '@next/swc-win32-arm64-msvc': 15.6.0-canary.6 - '@next/swc-win32-x64-msvc': 15.6.0-canary.6 + '@next/swc-darwin-arm64': 15.6.0-canary.20 + '@next/swc-darwin-x64': 15.6.0-canary.20 + '@next/swc-linux-arm64-gnu': 15.6.0-canary.20 + '@next/swc-linux-arm64-musl': 15.6.0-canary.20 + '@next/swc-linux-x64-gnu': 15.6.0-canary.20 + '@next/swc-linux-x64-musl': 15.6.0-canary.20 + '@next/swc-win32-arm64-msvc': 15.6.0-canary.20 + '@next/swc-win32-x64-msvc': 15.6.0-canary.20 babel-plugin-react-compiler: 19.1.0-rc.3 - sharp: 0.34.3 + sharp: 0.34.4 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -8188,20 +8234,20 @@ snapshots: queue-microtask@1.2.3: {} - react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912): + react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919): dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 - scheduler: 0.27.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 + scheduler: 0.27.0-canary-d415fd3e-20250919 - react-hook-form@7.62.0(react@19.2.0-canary-8a8e9a7e-20250912): + react-hook-form@7.63.0(react@19.2.0-canary-d415fd3e-20250919): dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 react-is@16.13.1: {} - react-remark@2.1.0(react@19.2.0-canary-8a8e9a7e-20250912): + react-remark@2.1.0(react@19.2.0-canary-d415fd3e-20250919): dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 rehype-react: 6.2.1 remark-parse: 9.0.0 remark-rehype: 8.1.0 @@ -8209,34 +8255,34 @@ snapshots: transitivePeerDependencies: - supports-color - react-remove-scroll-bar@2.3.8(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912): + react-remove-scroll-bar@2.3.8(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919): dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 - react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) tslib: 2.8.1 optionalDependencies: '@types/react': 19.1.13 - react-remove-scroll@2.7.1(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912): + react-remove-scroll@2.7.1(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919): dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 - react-remove-scroll-bar: 2.3.8(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-remove-scroll-bar: 2.3.8(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) tslib: 2.8.1 - use-callback-ref: 1.3.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) - use-sidecar: 1.1.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912) + use-callback-ref: 1.3.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) + use-sidecar: 1.1.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919) optionalDependencies: '@types/react': 19.1.13 - react-style-singleton@2.2.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912): + react-style-singleton@2.2.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919): dependencies: get-nonce: 1.0.1 - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 tslib: 2.8.1 optionalDependencies: '@types/react': 19.1.13 - react@19.2.0-canary-8a8e9a7e-20250912: {} + react@19.2.0-canary-d415fd3e-20250919: {} read-cache@1.0.0: dependencies: @@ -8381,7 +8427,7 @@ snapshots: safer-buffer@2.1.2: {} - scheduler@0.27.0-canary-8a8e9a7e-20250912: {} + scheduler@0.27.0-canary-d415fd3e-20250919: {} semver@6.3.1: {} @@ -8393,6 +8439,8 @@ snapshots: tslib: 2.8.1 upper-case-first: 2.0.2 + server-only@0.0.1: {} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -8417,34 +8465,34 @@ snapshots: setimmediate@1.0.5: {} - sharp@0.34.3: + sharp@0.34.4: dependencies: - color: 4.2.3 - detect-libc: 2.0.4 + '@img/colour': 1.0.0 + detect-libc: 2.1.0 semver: 7.7.2 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.3 - '@img/sharp-darwin-x64': 0.34.3 - '@img/sharp-libvips-darwin-arm64': 1.2.0 - '@img/sharp-libvips-darwin-x64': 1.2.0 - '@img/sharp-libvips-linux-arm': 1.2.0 - '@img/sharp-libvips-linux-arm64': 1.2.0 - '@img/sharp-libvips-linux-ppc64': 1.2.0 - '@img/sharp-libvips-linux-s390x': 1.2.0 - '@img/sharp-libvips-linux-x64': 1.2.0 - '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 - '@img/sharp-libvips-linuxmusl-x64': 1.2.0 - '@img/sharp-linux-arm': 0.34.3 - '@img/sharp-linux-arm64': 0.34.3 - '@img/sharp-linux-ppc64': 0.34.3 - '@img/sharp-linux-s390x': 0.34.3 - '@img/sharp-linux-x64': 0.34.3 - '@img/sharp-linuxmusl-arm64': 0.34.3 - '@img/sharp-linuxmusl-x64': 0.34.3 - '@img/sharp-wasm32': 0.34.3 - '@img/sharp-win32-arm64': 0.34.3 - '@img/sharp-win32-ia32': 0.34.3 - '@img/sharp-win32-x64': 0.34.3 + '@img/sharp-darwin-arm64': 0.34.4 + '@img/sharp-darwin-x64': 0.34.4 + '@img/sharp-libvips-darwin-arm64': 1.2.3 + '@img/sharp-libvips-darwin-x64': 1.2.3 + '@img/sharp-libvips-linux-arm': 1.2.3 + '@img/sharp-libvips-linux-arm64': 1.2.3 + '@img/sharp-libvips-linux-ppc64': 1.2.3 + '@img/sharp-libvips-linux-s390x': 1.2.3 + '@img/sharp-libvips-linux-x64': 1.2.3 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.3 + '@img/sharp-libvips-linuxmusl-x64': 1.2.3 + '@img/sharp-linux-arm': 0.34.4 + '@img/sharp-linux-arm64': 0.34.4 + '@img/sharp-linux-ppc64': 0.34.4 + '@img/sharp-linux-s390x': 0.34.4 + '@img/sharp-linux-x64': 0.34.4 + '@img/sharp-linuxmusl-arm64': 0.34.4 + '@img/sharp-linuxmusl-x64': 0.34.4 + '@img/sharp-wasm32': 0.34.4 + '@img/sharp-win32-arm64': 0.34.4 + '@img/sharp-win32-ia32': 0.34.4 + '@img/sharp-win32-x64': 0.34.4 optional: true shebang-command@2.0.0: @@ -8487,11 +8535,6 @@ snapshots: signedsource@1.0.0: {} - simple-swizzle@0.2.2: - dependencies: - is-arrayish: 0.3.2 - optional: true - slash@3.0.0: {} slice-ansi@5.0.0: @@ -8509,10 +8552,10 @@ snapshots: dot-case: 3.0.4 tslib: 2.8.1 - sonner@2.0.7(react-dom@19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912))(react@19.2.0-canary-8a8e9a7e-20250912): + sonner@2.0.7(react-dom@19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919))(react@19.2.0-canary-d415fd3e-20250919): dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 - react-dom: 19.2.0-canary-8a8e9a7e-20250912(react@19.2.0-canary-8a8e9a7e-20250912) + react: 19.2.0-canary-d415fd3e-20250919 + react-dom: 19.2.0-canary-d415fd3e-20250919(react@19.2.0-canary-d415fd3e-20250919) source-map-js@1.2.1: {} @@ -8616,10 +8659,10 @@ snapshots: dependencies: inline-style-parser: 0.1.1 - styled-jsx@5.1.6(@babel/core@7.28.4)(react@19.2.0-canary-8a8e9a7e-20250912): + styled-jsx@5.1.6(@babel/core@7.28.4)(react@19.2.0-canary-d415fd3e-20250919): dependencies: client-only: 0.0.1 - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 optionalDependencies: '@babel/core': 7.28.4 @@ -8895,24 +8938,24 @@ snapshots: urlpattern-polyfill@10.1.0: {} - use-callback-ref@1.3.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912): + use-callback-ref@1.3.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919): dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 tslib: 2.8.1 optionalDependencies: '@types/react': 19.1.13 - use-sidecar@1.1.3(@types/react@19.1.13)(react@19.2.0-canary-8a8e9a7e-20250912): + use-sidecar@1.1.3(@types/react@19.1.13)(react@19.2.0-canary-d415fd3e-20250919): dependencies: detect-node-es: 1.1.0 - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 tslib: 2.8.1 optionalDependencies: '@types/react': 19.1.13 - use-sync-external-store@1.5.0(react@19.2.0-canary-8a8e9a7e-20250912): + use-sync-external-store@1.5.0(react@19.2.0-canary-d415fd3e-20250919): dependencies: - react: 19.2.0-canary-8a8e9a7e-20250912 + react: 19.2.0-canary-d415fd3e-20250919 util-deprecate@1.0.2: {} @@ -9044,6 +9087,6 @@ snapshots: yoctocolors-cjs@2.1.3: {} - zod@4.1.9: {} + zod@4.1.11: {} zwitch@2.0.4: {} diff --git a/schema.graphql b/schema.graphql index 2fdf56f..bc34327 100644 --- a/schema.graphql +++ b/schema.graphql @@ -57,6 +57,7 @@ input CreateQuestionInput { difficulty: QuestionDifficulty """Reference answer""" referenceAnswer: String! + submissionIDs: [ID!] """Question title""" title: String! } @@ -79,8 +80,11 @@ Input was generated by ent. input CreateUserInput { avatar: String email: String! + eventIDs: [ID!] groupID: ID! name: String! + pointIDs: [ID!] + submissionIDs: [ID!] } """ @@ -180,6 +184,96 @@ input DatabaseWhereInput { slugNotIn: [String!] } +type Event implements Node { + id: ID! + payload: Map + triggeredAt: Time! + type: String! + user: User! + userID: ID! +} + +"""A connection to a list of items.""" +type EventConnection { + """A list of edges.""" + edges: [EventEdge] + """Information to aid in pagination.""" + pageInfo: PageInfo! + """Identifies the total count of items in the connection.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type EventEdge { + """A cursor for use in pagination.""" + cursor: Cursor! + """The item at the end of the edge.""" + node: Event +} + +"""Ordering options for Event connections""" +input EventOrder { + """The ordering direction.""" + direction: OrderDirection! = ASC + """The field by which to order Events.""" + field: EventOrderField! +} + +"""Properties by which Event connections can be ordered.""" +enum EventOrderField { + TRIGGERED_AT +} + +""" +EventWhereInput is used for filtering Event objects. +Input was generated by ent. +""" +input EventWhereInput { + and: [EventWhereInput!] + """user edge predicates""" + hasUser: Boolean + hasUserWith: [UserWhereInput!] + """id field predicates""" + id: ID + idGT: ID + idGTE: ID + idIn: [ID!] + idLT: ID + idLTE: ID + idNEQ: ID + idNotIn: [ID!] + not: EventWhereInput + or: [EventWhereInput!] + """triggered_at field predicates""" + triggeredAt: Time + triggeredAtGT: Time + triggeredAtGTE: Time + triggeredAtIn: [Time!] + triggeredAtLT: Time + triggeredAtLTE: Time + triggeredAtNEQ: Time + triggeredAtNotIn: [Time!] + """type field predicates""" + type: String + typeContains: String + typeContainsFold: String + typeEqualFold: String + typeGT: String + typeGTE: String + typeHasPrefix: String + typeHasSuffix: String + typeIn: [String!] + typeLT: String + typeLTE: String + typeNEQ: String + typeNotIn: [String!] + """user_id field predicates""" + userID: ID + userIDIn: [ID!] + userIDNEQ: ID + userIDNotIn: [ID!] +} + type Group implements Node { createdAt: Time! deletedAt: Time @@ -271,6 +365,9 @@ input GroupWhereInput { updatedAtNotIn: [Time!] } +"""The builtin Map type""" +scalar Map + type Mutation { """Create a database.""" createDatabase(input: CreateDatabaseInput!): Database! @@ -301,6 +398,8 @@ type Mutation { logoutAll: Boolean! """Logout a user from all his devices.""" logoutUser(userID: ID!): Boolean! + """Submit your answer to a question.""" + submitAnswer(answer: String!, id: ID!): SubmissionResult! """Update a database.""" updateDatabase(id: ID!, input: UpdateDatabaseInput!): Database! """Update a group.""" @@ -351,10 +450,128 @@ type PageInfo { startCursor: Cursor } +type Point implements Node { + description: String + grantedAt: Time! + id: ID! + points: Int! + user: User! +} + +"""A connection to a list of items.""" +type PointConnection { + """A list of edges.""" + edges: [PointEdge] + """Information to aid in pagination.""" + pageInfo: PageInfo! + """Identifies the total count of items in the connection.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type PointEdge { + """A cursor for use in pagination.""" + cursor: Cursor! + """The item at the end of the edge.""" + node: Point +} + +"""Ordering options for Point connections""" +input PointOrder { + """The ordering direction.""" + direction: OrderDirection! = ASC + """The field by which to order Points.""" + field: PointOrderField! +} + +"""Properties by which Point connections can be ordered.""" +enum PointOrderField { + GRANTED_AT +} + +""" +PointWhereInput is used for filtering Point objects. +Input was generated by ent. +""" +input PointWhereInput { + and: [PointWhereInput!] + """description field predicates""" + description: String + descriptionContains: String + descriptionContainsFold: String + descriptionEqualFold: String + descriptionGT: String + descriptionGTE: String + descriptionHasPrefix: String + descriptionHasSuffix: String + descriptionIn: [String!] + descriptionIsNil: Boolean + descriptionLT: String + descriptionLTE: String + descriptionNEQ: String + descriptionNotIn: [String!] + descriptionNotNil: Boolean + """granted_at field predicates""" + grantedAt: Time + grantedAtGT: Time + grantedAtGTE: Time + grantedAtIn: [Time!] + grantedAtLT: Time + grantedAtLTE: Time + grantedAtNEQ: Time + grantedAtNotIn: [Time!] + """user edge predicates""" + hasUser: Boolean + hasUserWith: [UserWhereInput!] + """id field predicates""" + id: ID + idGT: ID + idGTE: ID + idIn: [ID!] + idLT: ID + idLTE: ID + idNEQ: ID + idNotIn: [ID!] + not: PointWhereInput + or: [PointWhereInput!] + """points field predicates""" + points: Int + pointsGT: Int + pointsGTE: Int + pointsIn: [Int!] + pointsLT: Int + pointsLTE: Int + pointsNEQ: Int + pointsNotIn: [Int!] +} + type Query { """Get a database by ID.""" database(id: ID!): Database! databases: [Database!]! + """ + Get an event by ID. + + If you have the "event:read" scope, you can get any event by ID; + otherwise, you can only get your own events. + """ + event(id: ID!): Event! + events( + """Returns the elements in the list that come after the specified cursor.""" + after: Cursor + """ + Returns the elements in the list that come before the specified cursor. + """ + before: Cursor + """Returns the first _n_ elements from the list.""" + first: Int + """Returns the last _n_ elements from the list.""" + last: Int + """Ordering options for Events returned from the connection.""" + orderBy: EventOrder + """Filtering options for Events returned from the connection.""" + where: EventWhereInput + ): EventConnection! """Get a group by ID.""" group(id: ID!): Group! groups: [Group!]! @@ -369,6 +586,29 @@ type Query { """The list of node IDs.""" ids: [ID!]! ): [Node]! + """ + Get a point grant by ID. + + If you have the "point:read" scope, you can get any point grant by ID; + otherwise, you can only get your own point grants. + """ + pointGrant(id: ID!): Point! + points( + """Returns the elements in the list that come after the specified cursor.""" + after: Cursor + """ + Returns the elements in the list that come before the specified cursor. + """ + before: Cursor + """Returns the first _n_ elements from the list.""" + first: Int + """Returns the last _n_ elements from the list.""" + last: Int + """Ordering options for Points returned from the connection.""" + orderBy: PointOrder + """Filtering options for Points returned from the connection.""" + where: PointWhereInput + ): PointConnection! """Get a question by ID.""" question(id: ID!): Question! questions( @@ -390,6 +630,29 @@ type Query { """Get a scope set by ID or slug.""" scopeSet(filter: ScopeSetFilter!): ScopeSet! scopeSets: [ScopeSet!]! + """ + Get a submission by ID. + + If you have the "submission:read" scope, you can get any submission by ID; + otherwise, you can only get your own submissions. + """ + submission(id: ID!): Submission! + submissions( + """Returns the elements in the list that come after the specified cursor.""" + after: Cursor + """ + Returns the elements in the list that come before the specified cursor. + """ + before: Cursor + """Returns the first _n_ elements from the list.""" + first: Int + """Returns the last _n_ elements from the list.""" + last: Int + """Ordering options for Submissions returned from the connection.""" + orderBy: SubmissionOrder + """Filtering options for Submissions returned from the connection.""" + where: SubmissionWhereInput + ): SubmissionConnection! """Get a user by ID.""" user(id: ID!): User! users( @@ -411,6 +674,8 @@ type Query { } type Question implements Node { + """Have you tried to solve the question?""" + attempted: Boolean! """Question category, e.g. 'query'""" category: String! database: Database! @@ -421,9 +686,29 @@ type Question implements Node { id: ID! """Reference answer""" referenceAnswer: String! - referenceAnswerResult: SqlResponse! + referenceAnswerResult: SQLExecutionResult! + """Have you solved the question?""" + solved: Boolean! + submissions( + """Returns the elements in the list that come after the specified cursor.""" + after: Cursor + """ + Returns the elements in the list that come before the specified cursor. + """ + before: Cursor + """Returns the first _n_ elements from the list.""" + first: Int + """Returns the last _n_ elements from the list.""" + last: Int + """Ordering options for Submissions returned from the connection.""" + orderBy: SubmissionOrder + """Filtering options for Submissions returned from the connection.""" + where: SubmissionWhereInput + ): SubmissionConnection! """Question title""" title: String! + """List of your submissions for this question.""" + userSubmissions: [Submission!]! } """A connection to a list of items.""" @@ -508,6 +793,9 @@ input QuestionWhereInput { """database edge predicates""" hasDatabase: Boolean hasDatabaseWith: [DatabaseWhereInput!] + """submissions edge predicates""" + hasSubmissions: Boolean + hasSubmissionsWith: [SubmissionWhereInput!] """id field predicates""" id: ID idGT: ID @@ -549,6 +837,11 @@ input QuestionWhereInput { titleNotIn: [String!] } +type SQLExecutionResult { + columns: [String!]! + rows: [[String!]!]! +} + type ScopeSet implements Node { description: String groups: [Group!] @@ -621,9 +914,139 @@ input ScopeSetWhereInput { slugNotIn: [String!] } -type SqlResponse { - columns: [String!]! - rows: [[String!]!]! +type SolvedQuestionByDifficulty { + difficulty: QuestionDifficulty! + solvedQuestions: Int! +} + +type Submission implements Node { + error: String + id: ID! + queryResult: UserSQLExecutionResult + question: Question! + status: SubmissionStatus! + submittedAt: Time! + submittedCode: String! + user: User! +} + +"""A connection to a list of items.""" +type SubmissionConnection { + """A list of edges.""" + edges: [SubmissionEdge] + """Information to aid in pagination.""" + pageInfo: PageInfo! + """Identifies the total count of items in the connection.""" + totalCount: Int! +} + +"""An edge in a connection.""" +type SubmissionEdge { + """A cursor for use in pagination.""" + cursor: Cursor! + """The item at the end of the edge.""" + node: Submission +} + +"""Ordering options for Submission connections""" +input SubmissionOrder { + """The ordering direction.""" + direction: OrderDirection! = ASC + """The field by which to order Submissions.""" + field: SubmissionOrderField! +} + +"""Properties by which Submission connections can be ordered.""" +enum SubmissionOrderField { + SUBMITTED_AT +} + +type SubmissionResult { + error: String + result: UserSQLExecutionResult +} + +type SubmissionStatistics { + attemptedQuestions: Int! + solvedQuestionByDifficulty: [SolvedQuestionByDifficulty!]! + solvedQuestions: Int! + totalQuestions: Int! +} + +"""SubmissionStatus is enum for the field status""" +enum SubmissionStatus { + failed + pending + success +} + +""" +SubmissionWhereInput is used for filtering Submission objects. +Input was generated by ent. +""" +input SubmissionWhereInput { + and: [SubmissionWhereInput!] + """error field predicates""" + error: String + errorContains: String + errorContainsFold: String + errorEqualFold: String + errorGT: String + errorGTE: String + errorHasPrefix: String + errorHasSuffix: String + errorIn: [String!] + errorIsNil: Boolean + errorLT: String + errorLTE: String + errorNEQ: String + errorNotIn: [String!] + errorNotNil: Boolean + """question edge predicates""" + hasQuestion: Boolean + hasQuestionWith: [QuestionWhereInput!] + """user edge predicates""" + hasUser: Boolean + hasUserWith: [UserWhereInput!] + """id field predicates""" + id: ID + idGT: ID + idGTE: ID + idIn: [ID!] + idLT: ID + idLTE: ID + idNEQ: ID + idNotIn: [ID!] + not: SubmissionWhereInput + or: [SubmissionWhereInput!] + """status field predicates""" + status: SubmissionStatus + statusIn: [SubmissionStatus!] + statusNEQ: SubmissionStatus + statusNotIn: [SubmissionStatus!] + """submitted_at field predicates""" + submittedAt: Time + submittedAtGT: Time + submittedAtGTE: Time + submittedAtIn: [Time!] + submittedAtLT: Time + submittedAtLTE: Time + submittedAtNEQ: Time + submittedAtNotIn: [Time!] + """submitted_code field predicates""" + submittedCode: String + submittedCodeContains: String + submittedCodeContainsFold: String + submittedCodeEqualFold: String + submittedCodeGT: String + submittedCodeGTE: String + submittedCodeHasPrefix: String + submittedCodeHasSuffix: String + submittedCodeIn: [String!] + submittedCodeLT: String + submittedCodeLTE: String + submittedCodeNEQ: String + submittedCodeNotIn: [String!] } """The builtin Time type""" @@ -663,6 +1086,8 @@ UpdateQuestionInput is used for update Question object. Input was generated by ent. """ input UpdateQuestionInput { + addSubmissionIDs: [ID!] + clearSubmissions: Boolean databaseID: ID """Question stem""" description: String @@ -670,6 +1095,7 @@ input UpdateQuestionInput { difficulty: QuestionDifficulty """Reference answer""" referenceAnswer: String + removeSubmissionIDs: [ID!] """Question title""" title: String } @@ -693,10 +1119,19 @@ UpdateUserInput is used for update User object. Input was generated by ent. """ input UpdateUserInput { + addEventIDs: [ID!] + addPointIDs: [ID!] + addSubmissionIDs: [ID!] avatar: String clearAvatar: Boolean + clearEvents: Boolean + clearPoints: Boolean + clearSubmissions: Boolean groupID: ID name: String + removeEventIDs: [ID!] + removePointIDs: [ID!] + removeSubmissionIDs: [ID!] } type User implements Node { @@ -704,11 +1139,62 @@ type User implements Node { createdAt: Time! deletedAt: Time email: String! + events( + """Returns the elements in the list that come after the specified cursor.""" + after: Cursor + """ + Returns the elements in the list that come before the specified cursor. + """ + before: Cursor + """Returns the first _n_ elements from the list.""" + first: Int + """Returns the last _n_ elements from the list.""" + last: Int + """Ordering options for Events returned from the connection.""" + orderBy: EventOrder + """Filtering options for Events returned from the connection.""" + where: EventWhereInput + ): EventConnection! group: Group! id: ID! """The user who impersonated this user.""" impersonatedBy: User name: String! + points( + """Returns the elements in the list that come after the specified cursor.""" + after: Cursor + """ + Returns the elements in the list that come before the specified cursor. + """ + before: Cursor + """Returns the first _n_ elements from the list.""" + first: Int + """Returns the last _n_ elements from the list.""" + last: Int + """Ordering options for Points returned from the connection.""" + orderBy: PointOrder + """Filtering options for Points returned from the connection.""" + where: PointWhereInput + ): PointConnection! + submissionStatistics: SubmissionStatistics! + submissions( + """Returns the elements in the list that come after the specified cursor.""" + after: Cursor + """ + Returns the elements in the list that come before the specified cursor. + """ + before: Cursor + """Returns the first _n_ elements from the list.""" + first: Int + """Returns the last _n_ elements from the list.""" + last: Int + """Ordering options for Submissions returned from the connection.""" + orderBy: SubmissionOrder + """Filtering options for Submissions returned from the connection.""" + where: SubmissionWhereInput + ): SubmissionConnection! + """The total points of the user.""" + totalPoints: Int! updatedAt: Time! } @@ -743,6 +1229,12 @@ enum UserOrderField { EMAIL } +type UserSQLExecutionResult { + columns: [String!]! + matchAnswer: Boolean! + rows: [[String!]!]! +} + """ UserWhereInput is used for filtering User objects. Input was generated by ent. @@ -799,9 +1291,18 @@ input UserWhereInput { emailLTE: String emailNEQ: String emailNotIn: [String!] + """events edge predicates""" + hasEvents: Boolean + hasEventsWith: [EventWhereInput!] """group edge predicates""" hasGroup: Boolean hasGroupWith: [GroupWhereInput!] + """points edge predicates""" + hasPoints: Boolean + hasPointsWith: [PointWhereInput!] + """submissions edge predicates""" + hasSubmissions: Boolean + hasSubmissionsWith: [SubmissionWhereInput!] """id field predicates""" id: ID idGT: ID