AT-based link agregator. Mirror of https://github.com/likeandscribe/frontpage

Update to use Tailwindcss v4 (#316)

* Update tailwind to v4

* Use size utility

* Code style fix in postcss file

* Trigger deploy

* Fix animations for dialog

authored by

Timothy and committed by
GitHub
5b8770ef ab6ce802

+642 -333
+1 -1
packages/frontpage/app/(app)/_components/notification-indicator-client.tsx
··· 25 25 26 26 return ( 27 27 <div 28 - className="absolute -top-1 -right-1 w-4 h-4 bg-red-500 text-white text-xs rounded-full flex items-center justify-center" 28 + className="absolute -top-1 -right-1 size-4 bg-red-500 text-white text-xs rounded-full flex items-center justify-center" 29 29 aria-label={`${count} notifications.`} 30 30 > 31 31 {count > 9 ? "9+" : count}
+1 -1
packages/frontpage/app/(app)/_components/post-card.tsx
··· 51 51 52 52 return ( 53 53 // TODO: Make article route to postHref via onClick on card except innser links or buttons 54 - <article className="flex items-center gap-4 shadow-sm rounded-lg p-4 bg-white dark:bg-slate-900"> 54 + <article className="flex items-center gap-4 shadow-xs rounded-lg p-4 bg-white dark:bg-slate-900"> 55 55 <div className="flex flex-col items-center"> 56 56 <VoteButton 57 57 disabled={!cid}
+1 -1
packages/frontpage/app/(app)/_components/report-dialog.tsx
··· 123 123 e.preventDefault(); 124 124 }} 125 125 > 126 - <ExclamationTriangleIcon className="mr-2 h-4 w-4" /> 126 + <ExclamationTriangleIcon className="mr-2 size-4" /> 127 127 Report 128 128 </DropdownMenuItem> 129 129 </ReportDialog>
+2 -2
packages/frontpage/app/(app)/_components/theme-toggle.tsx
··· 22 22 <span>Light</span> 23 23 </DropdownMenuRadioItem> 24 24 <DropdownMenuRadioItem value="dark" className="flex gap-1.5"> 25 - <MoonIcon className="h-[1.2rem] w-[1.2rem]" /> 25 + <MoonIcon className="size-[1.2rem]" /> 26 26 <span>Dark</span> 27 27 </DropdownMenuRadioItem> 28 28 <DropdownMenuRadioItem value="system" className="flex gap-1.5"> 29 - <Half2Icon className="h-[1.2rem] w-[1.2rem]" /> 29 + <Half2Icon className="size-[1.2rem]" /> 30 30 <span>System</span> 31 31 </DropdownMenuRadioItem> 32 32 </DropdownMenuRadioGroup>
+1 -1
packages/frontpage/app/(app)/_components/vote-button.tsx
··· 78 78 > 79 79 <ChevronUpIcon 80 80 className={cn( 81 - "w-5 h-5", 81 + "size-5", 82 82 hasVoted && "text-yellow-500 group-disabled:text-yellow-500", 83 83 )} 84 84 />
+1 -1
packages/frontpage/app/(app)/about/page.tsx
··· 68 68 } 69 69 70 70 function Paragraph({ children }: { children: ReactNode }) { 71 - return <p className="leading-7 [&:not(:first-child)]:mt-6">{children}</p>; 71 + return <p className="leading-7 not-first:mt-6">{children}</p>; 72 72 }
+1 -1
packages/frontpage/app/(app)/notifications/_lib/mark-as-read-button.tsx
··· 24 24 disabled={isPending} 25 25 onClick={(e) => e.stopPropagation()} 26 26 > 27 - <CheckCircledIcon className="h-4 w-4" /> 27 + <CheckCircledIcon className="size-4" /> 28 28 <span className="sr-only">Mark as read</span> 29 29 </Button> 30 30 </form>
+1 -1
packages/frontpage/app/(app)/notifications/page.tsx
··· 116 116 > 117 117 <div className="flex items-start justify-between"> 118 118 <div className="flex items-center gap-4"> 119 - <model.Icon className="text-gray-500 dark:text-gray-400 h-4 w-4 self-start mt-1 shrink-0" /> 119 + <model.Icon className="text-gray-500 dark:text-gray-400 size-4 self-start mt-1 shrink-0" /> 120 120 <div> 121 121 <p className="font-medium">{model.title}</p> 122 122 <p className="text-gray-500 dark:text-gray-400">
+2 -2
packages/frontpage/app/(app)/post/[postAuthor]/[postRkey]/_lib/comment-client.tsx
··· 115 115 onClick={() => setShowNewComment(true)} 116 116 disabled={!allowReply || cid === null} 117 117 > 118 - <ChatBubbleIcon className="w-4 h-4" /> 118 + <ChatBubbleIcon className="size-4" /> 119 119 <span className="sr-only">Reply</span> 120 120 </Button> 121 121 </SimpleTooltip> ··· 169 169 } 170 170 }} 171 171 > 172 - <TrashIcon className="w-4 h-4" /> 172 + <TrashIcon className="size-4" /> 173 173 </Button> 174 174 </AlertDialogTrigger> 175 175 </SimpleTooltip>
+4 -4
packages/frontpage/app/(app)/post/[postAuthor]/[postRkey]/loading.tsx
··· 15 15 return ( 16 16 <div className={clsx("flex flex-col gap-2", className)}> 17 17 <div className="flex items-center gap-2"> 18 - <Skeleton className="h-6 w-6 rounded-full" /> 18 + <Skeleton className="size-6 rounded-full" /> 19 19 <Skeleton className="h-4 w-24" /> 20 20 <Skeleton className="h-3 w-16" /> 21 21 </div> 22 22 <Skeleton className="h-16 w-full" /> 23 23 <div className="flex items-center gap-4 mt-1"> 24 - <Skeleton className="h-4 w-4" /> 25 - <Skeleton className="h-4 w-4" /> 26 - <Skeleton className="h-4 w-4" /> 24 + <Skeleton className="size-4" /> 25 + <Skeleton className="size-4" /> 26 + <Skeleton className="size-4" /> 27 27 </div> 28 28 </div> 29 29 );
+1 -1
packages/frontpage/app/(auth)/login/_lib/form.tsx
··· 123 123 return ( 124 124 <div> 125 125 <Alert variant="destructive"> 126 - <CrossCircledIcon className="h-4 w-4" /> 126 + <CrossCircledIcon className="size-4" /> 127 127 <AlertTitle>{error ?? "Login error"}</AlertTitle> 128 128 129 129 <AlertDescription>
+1 -1
packages/frontpage/app/(auth)/login/page.tsx
··· 26 26 <LoginForm /> 27 27 {error ? ( 28 28 <Alert variant="destructive"> 29 - <CrossCircledIcon className="h-4 w-4" /> 29 + <CrossCircledIcon className="size-4" /> 30 30 <AlertTitle>Login error, please try again</AlertTitle> 31 31 <AlertDescription>{error}</AlertDescription> 32 32 </Alert>
+1 -1
packages/frontpage/app/(auth)/reauthenticate/_lib/reauthenticate-form.tsx
··· 27 27 </form> 28 28 {state?.error ? ( 29 29 <Alert variant="destructive"> 30 - <CrossCircledIcon className="h-4 w-4" /> 30 + <CrossCircledIcon className="size-4" /> 31 31 <AlertTitle>Error</AlertTitle> 32 32 <AlertDescription>{state?.error}</AlertDescription> 33 33 </Alert>
+121 -65
packages/frontpage/app/globals.css
··· 1 - @tailwind base; 2 - @tailwind components; 3 - @tailwind utilities; 1 + @import "tailwindcss"; 2 + @import "tw-animate-css"; 4 3 5 - html { 6 - overflow-y: scroll; 7 - scrollbar-gutter: stable; 4 + @custom-variant dark (&:is(.dark *)); 5 + 6 + @utility container { 7 + margin-inline: auto; 8 + padding-inline: 2rem; 9 + @media (width >= --theme(--breakpoint-sm)) { 10 + max-width: none; 11 + } 12 + @media (width >= 1400px) { 13 + max-width: 1400px; 14 + } 8 15 } 9 16 10 - @layer base { 11 - :root { 12 - --background: 0 0% 100%; 13 - --foreground: 222.2 84% 4.9%; 17 + :root { 18 + --background: oklch(100% 0 0); 19 + --foreground: oklch(13.627% 0.0364 259.20245); 20 + --card: oklch(100% 0 0); 21 + --card-foreground: oklch(13.627% 0.0364 259.20245); 22 + --popover: oklch(100% 0 0); 23 + --popover-foreground: oklch(13.627% 0.0364 259.20245); 24 + --primary: oklch(20.768% 0.03983 265.75245); 25 + --primary-foreground: oklch(98.415% 0.00341 247.79335); 26 + --secondary: oklch(96.826% 0.00685 247.88813); 27 + --secondary-foreground: oklch(20.768% 0.03983 265.75245); 28 + --muted: oklch(96.826% 0.00685 247.88813); 29 + --muted-foreground: oklch(55.439% 0.04072 257.41777); 30 + --accent: oklch(96.826% 0.00685 247.88813); 31 + --accent-foreground: oklch(20.768% 0.03983 265.75245); 32 + --destructive: oklch(63.683% 0.20785 25.33215); 33 + --destructive-foreground: oklch(98.415% 0.00341 247.79335); 34 + --success: oklch(71.983% 0.19184 149.51977); 35 + --success-foreground: oklch(98.415% 0.00341 247.79335); 36 + --border: oklch(92.876% 0.01262 255.50135); 37 + --input: oklch(92.876% 0.01262 255.50135); 38 + --ring: oklch(13.627% 0.0364 259.20245); 14 39 15 - --card: 0 0% 100%; 16 - --card-foreground: 222.2 84% 4.9%; 40 + --radius: 0.5rem; 41 + } 17 42 18 - --popover: 0 0% 100%; 19 - --popover-foreground: 222.2 84% 4.9%; 43 + .dark { 44 + --background: oklch(13.627% 0.0364 259.20245); 45 + --foreground: oklch(98.415% 0.00341 247.79335); 46 + --card: oklch(13.627% 0.0364 259.20245); 47 + --card-foreground: oklch(98.415% 0.00341 247.79335); 48 + --popover: oklch(13.627% 0.0364 259.20245); 49 + --popover-foreground: oklch(98.415% 0.00341 247.79335); 50 + --primary: oklch(98.415% 0.00341 247.79335); 51 + --primary-foreground: oklch(20.768% 0.03983 265.75245); 52 + --secondary: oklch(27.95% 0.03685 260.02895); 53 + --secondary-foreground: oklch(98.415% 0.00341 247.79335); 54 + --muted: oklch(27.95% 0.03685 260.02895); 55 + --muted-foreground: oklch(71.067% 0.03511 256.7791); 56 + --accent: oklch(27.95% 0.03685 260.02895); 57 + --accent-foreground: oklch(98.415% 0.00341 247.79335); 58 + --destructive: oklch(39.584% 0.13308 25.7236); 59 + --destructive-foreground: oklch(98.415% 0.00341 247.79335); 60 + --success: oklch(41.939% 0.07699 153.85097); 61 + --success-foreground: oklch(98.415% 0.00341 247.79335); 62 + --border: oklch(27.95% 0.03685 260.02895); 63 + --input: oklch(27.95% 0.03685 260.02895); 64 + --ring: oklch(55.439% 0.04072 257.41777); 65 + } 20 66 21 - --primary: 222.2 47.4% 11.2%; 22 - --primary-foreground: 210 40% 98%; 67 + @theme inline { 68 + --color-border: var(--border); 69 + --color-input: var(--input); 70 + --color-ring: var(--ring); 71 + --color-background: var(--background); 72 + --color-foreground: var(--foreground); 23 73 24 - --secondary: 210 40% 96.1%; 25 - --secondary-foreground: 222.2 47.4% 11.2%; 74 + --color-primary: var(--primary); 75 + --color-primary-foreground: var(--primary-foreground); 26 76 27 - --muted: 210 40% 96.1%; 28 - --muted-foreground: 215.4 16.3% 46.9%; 77 + --color-secondary: var(--secondary); 78 + --color-secondary-foreground: var(--secondary-foreground); 29 79 30 - --accent: 210 40% 96.1%; 31 - --accent-foreground: 222.2 47.4% 11.2%; 80 + --color-destructive: var(--destructive); 81 + --color-destructive-foreground: var(--destructive-foreground); 32 82 33 - --destructive: 0 84.2% 60.2%; 34 - --destructive-foreground: 210 40% 98%; 83 + --color-success: var(--success); 84 + --color-success-foreground: var(--success-foreground); 35 85 36 - --success: 142 71% 45%; 37 - --success-foreground: 210 40% 98%; 86 + --color-muted: var(--muted); 87 + --color-muted-foreground: var(--muted-foreground); 88 + 89 + --color-accent: var(--accent); 90 + --color-accent-foreground: var(--accent-foreground); 91 + 92 + --color-popover: var(--popover); 93 + --color-popover-foreground: var(--popover-foreground); 94 + 95 + --color-card: var(--card); 96 + --color-card-foreground: var(--card-foreground); 97 + 98 + --radius-lg: var(--radius); 99 + --radius-md: calc(var(--radius) - 2px); 100 + --radius-sm: calc(var(--radius) - 4px); 101 + 102 + --animate-accordion-down: accordion-down 0.2s ease-out; 103 + --animate-accordion-up: accordion-up 0.2s ease-out; 38 104 39 - --border: 214.3 31.8% 91.4%; 40 - --input: 214.3 31.8% 91.4%; 41 - --ring: 222.2 84% 4.9%; 105 + --font-serif: 106 + var(--font-source_serif), ui-serif, Georgia, Cambria, "Times New Roman", 107 + Times, serif; 42 108 43 - --radius: 0.5rem; 109 + @keyframes accordion-down { 110 + from { 111 + height: 0; 112 + } 113 + to { 114 + height: var(--radix-accordion-content-height); 115 + } 116 + } 117 + @keyframes accordion-up { 118 + from { 119 + height: var(--radix-accordion-content-height); 120 + } 121 + to { 122 + height: 0; 123 + } 44 124 } 125 + } 45 126 127 + @layer base { 46 128 * { 47 - @apply border-border; 129 + @apply border-border outline-ring/50; 48 130 } 49 131 50 132 body { ··· 60 142 h6 { 61 143 font-family: var(--font-source_serif), serif; 62 144 } 63 - } 64 - 65 - .dark { 66 - --background: 222.2 84% 4.9%; 67 - --foreground: 210 40% 98%; 68 - 69 - --card: 222.2 84% 4.9%; 70 - --card-foreground: 210 40% 98%; 71 145 72 - --popover: 222.2 84% 4.9%; 73 - --popover-foreground: 210 40% 98%; 74 - 75 - --primary: 210 40% 98%; 76 - --primary-foreground: 222.2 47.4% 11.2%; 77 - 78 - --secondary: 217.2 32.6% 17.5%; 79 - --secondary-foreground: 210 40% 98%; 80 - 81 - --muted: 217.2 32.6% 17.5%; 82 - --muted-foreground: 215 20.2% 65.1%; 83 - 84 - --accent: 217.2 32.6% 17.5%; 85 - --accent-foreground: 210 40% 98%; 86 - 87 - --destructive: 0 62.8% 30.6%; 88 - --destructive-foreground: 210 40% 98%; 89 - 90 - --success: 142 40% 25%; 91 - --success-foreground: 210 40% 98%; 92 - 93 - --border: 217.2 32.6% 17.5%; 94 - --input: 217.2 32.6% 17.5%; 95 - --ring: 215.4 16.3% 46.9%; 146 + .prose :where(a):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 147 + @apply text-indigo-600 hover:text-indigo-500 dark:text-indigo-400 dark:hover:text-indigo-300; 148 + } 96 149 } 97 150 98 - .prose :where(a):not(:where([class~="not-prose"], [class~="not-prose"] *)) { 99 - @apply text-indigo-600 hover:text-indigo-500 dark:text-indigo-400 dark:hover:text-indigo-300; 151 + @layer utilities { 152 + html { 153 + overflow-y: scroll; 154 + scrollbar-gutter: stable; 155 + } 100 156 }
+1 -1
packages/frontpage/lib/components/ui/accordion.tsx
··· 35 35 <AccordionPrimitive.Trigger 36 36 data-slot="accordion-trigger" 37 37 className={cn( 38 - "focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-none hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180", 38 + "focus-visible:border-ring focus-visible:ring-ring/50 flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left text-sm font-medium transition-all outline-hidden hover:underline focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180", 39 39 className, 40 40 )} 41 41 {...props}
+3 -3
packages/frontpage/lib/components/ui/badge.tsx
··· 3 3 import { cn } from "@/lib/utils"; 4 4 5 5 const badgeVariants = cva( 6 - "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", 6 + "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2", 7 7 { 8 8 variants: { 9 9 variant: { 10 10 default: 11 - "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80", 11 + "border-transparent bg-primary text-primary-foreground shadow-sm hover:bg-primary/80", 12 12 secondary: 13 13 "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", 14 14 destructive: 15 - "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80", 15 + "border-transparent bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/80", 16 16 outline: "text-foreground", 17 17 }, 18 18 },
+6 -6
packages/frontpage/lib/components/ui/button.tsx
··· 4 4 import { cn } from "@/lib/utils"; 5 5 6 6 const buttonVariants = cva( 7 - "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", 7 + "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", 8 8 { 9 9 variants: { 10 10 variant: { 11 11 default: 12 - "bg-primary text-primary-foreground shadow hover:bg-primary/90 dark:bg-slate-200 dark:hover:bg-slate-100", 12 + "bg-primary text-primary-foreground shadow-sm hover:bg-primary/90 dark:bg-slate-200 dark:hover:bg-slate-100", 13 13 success: 14 - "bg-success text-success-foreground shadow-sm hover:bg-success/90", 14 + "bg-success text-success-foreground shadow-xs hover:bg-success/90", 15 15 destructive: 16 - "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", 16 + "bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90", 17 17 outline: 18 - "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", 18 + "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground", 19 19 secondary: 20 - "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", 20 + "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80", 21 21 ghost: "hover:bg-accent hover:text-accent-foreground", 22 22 "ghost-destructive": "hover:bg-accent text-destructive", 23 23 link: "text-primary underline-offset-4 hover:underline",
+1 -1
packages/frontpage/lib/components/ui/card.tsx
··· 9 9 <div 10 10 ref={ref} 11 11 className={cn( 12 - "rounded-xl border bg-card text-card-foreground shadow", 12 + "rounded-xl border bg-card text-card-foreground shadow-sm", 13 13 className, 14 14 )} 15 15 {...props}
+2 -2
packages/frontpage/lib/components/ui/dialog.tsx
··· 42 42 <DialogPrimitive.Content 43 43 ref={contentRef} 44 44 className={cn( 45 - "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg", 45 + "bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 rounded-lg border p-6 shadow-lg duration-200 outline-none sm:max-w-lg", 46 46 className, 47 47 )} 48 48 onPointerDownOutside={(e) => { ··· 70 70 {...props} 71 71 > 72 72 {children} 73 - <DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground"> 73 + <DialogPrimitive.Close className="absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground"> 74 74 <Cross2Icon className="h-4 w-4" /> 75 75 <span className="sr-only">Close</span> 76 76 </DialogPrimitive.Close>
+6 -6
packages/frontpage/lib/components/ui/dropdown-menu.tsx
··· 33 33 return ( 34 34 <DropdownMenuPrimitive.SubTrigger 35 35 className={cn( 36 - "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent", 36 + "flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden focus:bg-accent data-[state=open]:bg-accent", 37 37 inset && "pl-8", 38 38 className, 39 39 )} ··· 54 54 return ( 55 55 <DropdownMenuPrimitive.SubContent 56 56 className={cn( 57 - "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", 57 + "z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", 58 58 className, 59 59 )} 60 60 {...props} ··· 74 74 <DropdownMenuPrimitive.Content 75 75 sideOffset={sideOffset} 76 76 className={cn( 77 - "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md", 77 + "z-50 min-w-32 overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md", 78 78 "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", 79 79 className, 80 80 )} ··· 95 95 return ( 96 96 <DropdownMenuPrimitive.Item 97 97 className={cn( 98 - "relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", 98 + "relative flex cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50", 99 99 inset && "pl-8", 100 100 className, 101 101 )} ··· 114 114 return ( 115 115 <DropdownMenuPrimitive.CheckboxItem 116 116 className={cn( 117 - "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", 117 + "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50", 118 118 className, 119 119 )} 120 120 checked={checked} ··· 140 140 return ( 141 141 <DropdownMenuPrimitive.RadioItem 142 142 className={cn( 143 - "relative flex cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", 143 + "relative flex cursor-pointer select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-hidden transition-colors focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50", 144 144 className, 145 145 )} 146 146 {...props}
+9 -9
packages/frontpage/lib/components/ui/field.tsx
··· 46 46 <div 47 47 data-slot="field-group" 48 48 className={cn( 49 - "group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4", 49 + "group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4", 50 50 className, 51 51 )} 52 52 {...props} ··· 59 59 { 60 60 variants: { 61 61 orientation: { 62 - vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"], 62 + vertical: ["flex-col *:w-full [&>.sr-only]:w-auto"], 63 63 horizontal: [ 64 64 "flex-row items-center", 65 - "[&>[data-slot=field-label]]:flex-auto", 66 - "has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px has-[>[data-slot=field-content]]:items-start", 65 + "*:data-[slot=field-label]:flex-auto", 66 + "[&>[role=checkbox],[role=radio]]:has-[>[data-slot=field-content]]:mt-px has-[>[data-slot=field-content]]:items-start", 67 67 ], 68 68 responsive: [ 69 - "@md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto flex-col [&>*]:w-full [&>.sr-only]:w-auto", 70 - "@md/field-group:[&>[data-slot=field-label]]:flex-auto", 71 - "@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px", 69 + "@md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto flex-col *:w-full [&>.sr-only]:w-auto", 70 + "@md/field-group:*:data-[slot=field-label]:flex-auto", 71 + "@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:[&>[role=checkbox],[role=radio]]:has-[>[data-slot=field-content]]:mt-px", 72 72 ], 73 73 }, 74 74 }, ··· 116 116 data-slot="field-label" 117 117 className={cn( 118 118 "group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50", 119 - "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>[data-slot=field]]:p-4", 119 + "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border *:data-[slot=field]:p-4", 120 120 "has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10", 121 121 className, 122 122 )} ··· 143 143 <p 144 144 data-slot="field-description" 145 145 className={cn( 146 - "text-muted-foreground text-sm font-normal leading-normal group-has-[[data-orientation=horizontal]]/field:text-balance", 146 + "text-muted-foreground text-sm font-normal leading-normal group-has-data-[orientation=horizontal]/field:text-balance", 147 147 "nth-last-2:-mt-1 last:mt-0 [[data-variant=legend]+&]:-mt-1.5", 148 148 "[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4", 149 149 className,
+1 -1
packages/frontpage/lib/components/ui/hover-card.tsx
··· 18 18 align={align} 19 19 sideOffset={sideOffset} 20 20 className={cn( 21 - "z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", 21 + "z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", 22 22 className, 23 23 )} 24 24 {...props}
+1 -1
packages/frontpage/lib/components/ui/input.tsx
··· 9 9 <input 10 10 type={type} 11 11 className={cn( 12 - "flex h-9 w-full rounded-md border border-input bg-white dark:bg-slate-900 px-3 py-1 text-sm shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50", 12 + "flex h-9 w-full rounded-md border border-input bg-white dark:bg-slate-900 px-3 py-1 text-sm shadow-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50", 13 13 className, 14 14 )} 15 15 {...props}
+1 -1
packages/frontpage/lib/components/ui/popover.tsx
··· 26 26 align={align} 27 27 sideOffset={sideOffset} 28 28 className={cn( 29 - "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", 29 + "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", 30 30 className, 31 31 )} 32 32 {...props}
+4 -4
packages/frontpage/lib/components/ui/select.tsx
··· 25 25 return ( 26 26 <SelectPrimitive.Trigger 27 27 className={cn( 28 - "flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1", 28 + "flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs ring-offset-background placeholder:text-muted-foreground focus:outline-hidden focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1", 29 29 className, 30 30 )} 31 31 {...props} ··· 86 86 <SelectPrimitive.Portal> 87 87 <SelectPrimitive.Content 88 88 className={cn( 89 - "relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", 89 + "relative z-50 max-h-96 min-w-32 overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", 90 90 position === "popper" && 91 91 "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", 92 92 className, ··· 99 99 className={cn( 100 100 "p-1", 101 101 position === "popper" && 102 - "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]", 102 + "h-(--radix-select-trigger-height) w-full min-w-(--radix-select-trigger-width)", 103 103 )} 104 104 > 105 105 {children} ··· 132 132 return ( 133 133 <SelectPrimitive.Item 134 134 className={cn( 135 - "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50", 135 + "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-hidden focus:bg-accent focus:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50", 136 136 className, 137 137 )} 138 138 {...props}
+1 -1
packages/frontpage/lib/components/ui/separator.tsx
··· 16 16 orientation={orientation} 17 17 className={cn( 18 18 "shrink-0 bg-border", 19 - orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]", 19 + orientation === "horizontal" ? "h-px w-full" : "h-full w-px", 20 20 className, 21 21 )} 22 22 {...props}
+2 -2
packages/frontpage/lib/components/ui/tabs.tsx
··· 31 31 return ( 32 32 <TabsPrimitive.Trigger 33 33 className={cn( 34 - "inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow", 34 + "inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm", 35 35 className, 36 36 )} 37 37 {...props} ··· 48 48 return ( 49 49 <TabsPrimitive.Content 50 50 className={cn( 51 - "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2", 51 + "mt-2 ring-offset-background focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2", 52 52 className, 53 53 )} 54 54 {...props}
+1 -1
packages/frontpage/lib/components/ui/textarea.tsx
··· 8 8 return ( 9 9 <textarea 10 10 className={cn( 11 - "flex min-h-[60px] w-full rounded-md border border-input resize-none rounded-2xl bg-transparent px-3 py-3 text-sm shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 dark:bg-slate-900/30", 11 + "flex min-h-[60px] w-full rounded-md border border-input resize-none rounded-2xl bg-transparent px-3 py-3 text-sm shadow-xs placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 dark:bg-slate-900/30", 12 12 className, 13 13 )} 14 14 {...props}
+4 -4
packages/frontpage/lib/components/ui/toast.tsx
··· 20 20 return ( 21 21 <ToastPrimitives.Viewport 22 22 className={cn( 23 - "fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]", 23 + "fixed top-0 z-100 flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]", 24 24 className, 25 25 )} 26 26 {...props} ··· 31 31 ToastViewport.displayName = ToastPrimitives.Viewport.displayName; 32 32 33 33 const toastVariants = cva( 34 - "group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full", 34 + "group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md border p-4 pr-6 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-(--radix-toast-swipe-end-x) data-[swipe=move]:translate-x-(--radix-toast-swipe-move-x) data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full", 35 35 { 36 36 variants: { 37 37 variant: { ··· 69 69 return ( 70 70 <ToastPrimitives.Action 71 71 className={cn( 72 - "inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors hover:bg-secondary focus:outline-none focus:ring-1 focus:ring-ring disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive", 72 + "inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors hover:bg-secondary focus:outline-hidden focus:ring-1 focus:ring-ring disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 hover:group-[.destructive]:border-destructive/30 hover:group-[.destructive]:bg-destructive hover:group-[.destructive]:text-destructive-foreground focus:group-[.destructive]:ring-destructive", 73 73 className, 74 74 )} 75 75 {...props} ··· 86 86 return ( 87 87 <ToastPrimitives.Close 88 88 className={cn( 89 - "absolute right-1 top-1 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600", 89 + "absolute right-1 top-1 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-hidden focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 hover:group-[.destructive]:text-red-50 focus:group-[.destructive]:ring-red-400 focus:group-[.destructive]:ring-offset-red-600", 90 90 className, 91 91 )} 92 92 toast-close=""
+3 -2
packages/frontpage/package.json
··· 50 50 "slugify": "^1.6.6", 51 51 "swr": "^2.3.4", 52 52 "tailwind-merge": "^2.6.0", 53 - "tailwindcss-animate": "^1.0.7", 54 53 "zod": "^3.25.76" 55 54 }, 56 55 "devDependencies": { 57 56 "@repo/eslint-config": "workspace:*", 58 57 "@repo/typescript-config": "workspace:*", 58 + "@tailwindcss/postcss": "^4.1.18", 59 59 "@tailwindcss/typography": "^0.5.19", 60 60 "@testing-library/react": "^16.3.0", 61 61 "@types/node": "catalog:", ··· 67 67 "eslint": "catalog:", 68 68 "jsdom": "^24.1.3", 69 69 "postcss": "^8.5.6", 70 - "tailwindcss": "^3.4.17", 70 + "tailwindcss": "^4.1.18", 71 + "tw-animate-css": "^1.4.0", 71 72 "typescript": "catalog:", 72 73 "vite-tsconfig-paths": "catalog:", 73 74 "vitest": "catalog:"
+1 -1
packages/frontpage/postcss.config.mjs
··· 1 1 /** @type {import('postcss-load-config').Config} */ 2 2 const config = { 3 3 plugins: { 4 - tailwindcss: {}, 4 + "@tailwindcss/postcss": {}, 5 5 }, 6 6 }; 7 7
-89
packages/frontpage/tailwind.config.ts
··· 1 - import type { Config } from "tailwindcss"; 2 - import defaultTheme from "tailwindcss/defaultTheme"; 3 - 4 - const config = { 5 - darkMode: ["selector"], 6 - content: [ 7 - "./pages/**/*.{ts,tsx}", 8 - "./components/**/*.{ts,tsx}", 9 - "./app/**/*.{ts,tsx}", 10 - "./lib/**/*.{ts,tsx}", 11 - ], 12 - prefix: "", 13 - theme: { 14 - container: { 15 - center: true, 16 - padding: "2rem", 17 - screens: { 18 - "2xl": "1400px", 19 - }, 20 - }, 21 - extend: { 22 - colors: { 23 - border: "hsl(var(--border))", 24 - input: "hsl(var(--input))", 25 - ring: "hsl(var(--ring))", 26 - background: "hsl(var(--background))", 27 - foreground: "hsl(var(--foreground))", 28 - primary: { 29 - DEFAULT: "hsl(var(--primary))", 30 - foreground: "hsl(var(--primary-foreground))", 31 - }, 32 - secondary: { 33 - DEFAULT: "hsl(var(--secondary))", 34 - foreground: "hsl(var(--secondary-foreground))", 35 - }, 36 - destructive: { 37 - DEFAULT: "hsl(var(--destructive))", 38 - foreground: "hsl(var(--destructive-foreground))", 39 - }, 40 - success: { 41 - DEFAULT: "hsl(var(--success))", 42 - foreground: "hsl(var(--success-foreground))", 43 - }, 44 - muted: { 45 - DEFAULT: "hsl(var(--muted))", 46 - foreground: "hsl(var(--muted-foreground))", 47 - }, 48 - accent: { 49 - DEFAULT: "hsl(var(--accent))", 50 - foreground: "hsl(var(--accent-foreground))", 51 - }, 52 - popover: { 53 - DEFAULT: "hsl(var(--popover))", 54 - foreground: "hsl(var(--popover-foreground))", 55 - }, 56 - card: { 57 - DEFAULT: "hsl(var(--card))", 58 - foreground: "hsl(var(--card-foreground))", 59 - }, 60 - }, 61 - borderRadius: { 62 - lg: "var(--radius)", 63 - md: "calc(var(--radius) - 2px)", 64 - sm: "calc(var(--radius) - 4px)", 65 - }, 66 - keyframes: { 67 - "accordion-down": { 68 - from: { height: "0" }, 69 - to: { height: "var(--radix-accordion-content-height)" }, 70 - }, 71 - "accordion-up": { 72 - from: { height: "var(--radix-accordion-content-height)" }, 73 - to: { height: "0" }, 74 - }, 75 - }, 76 - animation: { 77 - "accordion-down": "accordion-down 0.2s ease-out", 78 - "accordion-up": "accordion-up 0.2s ease-out", 79 - }, 80 - fontFamily: { 81 - serif: ["var(--font-source_serif)", ...defaultTheme.fontFamily.serif], 82 - }, 83 - }, 84 - }, 85 - // eslint-disable-next-line @typescript-eslint/no-require-imports 86 - plugins: [require("tailwindcss-animate"), require("@tailwindcss/typography")], 87 - } satisfies Config; 88 - 89 - export default config;
+456 -115
pnpm-lock.yaml
··· 12 12 '@atcute/identity-resolver': 13 13 specifier: ^1.2.0 14 14 version: 1.2.0 15 - '@atproto/api': 16 - specifier: ^0.18.8 17 - version: 0.18.8 18 - '@atproto/did': 19 - specifier: ^0.2.3 20 - version: 0.2.3 21 - '@atproto/identity': 22 - specifier: ^0.4.10 23 - version: 0.4.10 24 - '@atproto/lexicon': 25 - specifier: ^0.6.0 26 - version: 0.6.0 27 - '@atproto/repo': 28 - specifier: ^0.8.12 29 - version: 0.8.12 30 15 '@atproto/syntax': 31 16 specifier: ^0.4.2 32 17 version: 0.4.2 33 18 '@next/env': 34 - specifier: ^16.1.0 35 - version: 16.1.0 36 - '@next/eslint-plugin-next': 37 19 specifier: ^16.1.0 38 20 version: 16.1.0 39 21 '@types/node': ··· 54 36 eslint: 55 37 specifier: ^9.37.0 56 38 version: 9.31.0 57 - eslint-config-next: 58 - specifier: ^16.1.0 59 - version: 16.1.0 60 39 next: 61 40 specifier: ^16.1.0 62 41 version: 16.1.0 ··· 173 152 version: 19.2.3(@types/react@19.2.7) 174 153 eslint: 175 154 specifier: 'catalog:' 176 - version: 9.31.0(jiti@1.21.7) 155 + version: 9.31.0(jiti@2.6.1) 177 156 typescript: 178 157 specifier: 'catalog:' 179 158 version: 5.8.3 180 159 vite-tsconfig-paths: 181 160 specifier: 'catalog:' 182 - version: 5.1.4(typescript@5.8.3)(vite@7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0)) 161 + version: 5.1.4(typescript@5.8.3)(vite@7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0)) 183 162 vitest: 184 163 specifier: 'catalog:' 185 - version: 4.0.8(@types/node@22.16.4)(jiti@1.21.7)(jsdom@24.1.3(bufferutil@4.0.8)(utf-8-validate@6.0.3))(terser@5.34.1)(yaml@2.8.0) 164 + version: 4.0.8(@types/node@22.16.4)(jiti@2.6.1)(jsdom@24.1.3(bufferutil@4.0.8)(utf-8-validate@6.0.3))(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0) 186 165 187 166 packages/eslint-config: 188 167 devDependencies: ··· 209 188 version: 19.2.7 210 189 '@typescript-eslint/utils': 211 190 specifier: ^8.37.0 212 - version: 8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3) 191 + version: 8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) 213 192 eslint: 214 193 specifier: 'catalog:' 215 - version: 9.31.0(jiti@1.21.7) 194 + version: 9.31.0(jiti@2.6.1) 216 195 eslint-config-next: 217 196 specifier: 'catalog:' 218 - version: 16.1.0(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3) 197 + version: 16.1.0(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) 219 198 eslint-config-turbo: 220 199 specifier: ^2.5.4 221 - version: 2.5.4(eslint@9.31.0(jiti@1.21.7))(turbo@2.5.0) 200 + version: 2.5.4(eslint@9.31.0(jiti@2.6.1))(turbo@2.5.0) 222 201 eslint-plugin-jsx-a11y: 223 202 specifier: ^6.10.2 224 - version: 6.10.2(eslint@9.31.0(jiti@1.21.7)) 203 + version: 6.10.2(eslint@9.31.0(jiti@2.6.1)) 225 204 eslint-plugin-react: 226 205 specifier: ^7.37.5 227 - version: 7.37.5(eslint@9.31.0(jiti@1.21.7)) 206 + version: 7.37.5(eslint@9.31.0(jiti@2.6.1)) 228 207 eslint-plugin-react-hooks: 229 208 specifier: ^6.0.0 230 - version: 6.1.1(eslint@9.31.0(jiti@1.21.7)) 209 + version: 6.1.1(eslint@9.31.0(jiti@2.6.1)) 231 210 react: 232 211 specifier: 'catalog:' 233 212 version: 19.2.3 ··· 236 215 version: 5.8.3 237 216 typescript-eslint: 238 217 specifier: ^8.37.0 239 - version: 8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3) 218 + version: 8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) 240 219 241 220 packages/frontpage: 242 221 dependencies: ··· 278 257 version: 1.5.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3) 279 258 '@vercel/toolbar': 280 259 specifier: ^0.1.41 281 - version: 0.1.41(@vercel/analytics@1.5.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(@vercel/speed-insights@1.2.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0)) 260 + version: 0.1.41(@vercel/analytics@1.5.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(@vercel/speed-insights@1.2.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0)) 282 261 class-variance-authority: 283 262 specifier: ^0.7.1 284 263 version: 0.7.1 ··· 330 309 tailwind-merge: 331 310 specifier: ^2.6.0 332 311 version: 2.6.0 333 - tailwindcss-animate: 334 - specifier: ^1.0.7 335 - version: 1.0.7(tailwindcss@3.4.18(yaml@2.8.0)) 336 312 zod: 337 313 specifier: ^3.25.76 338 314 version: 3.25.76 ··· 343 319 '@repo/typescript-config': 344 320 specifier: workspace:* 345 321 version: link:../typescript-config 322 + '@tailwindcss/postcss': 323 + specifier: ^4.1.18 324 + version: 4.1.18 346 325 '@tailwindcss/typography': 347 326 specifier: ^0.5.19 348 - version: 0.5.19(tailwindcss@3.4.18(yaml@2.8.0)) 327 + version: 0.5.19(tailwindcss@4.1.18) 349 328 '@testing-library/react': 350 329 specifier: ^16.3.0 351 330 version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) ··· 360 339 version: 19.2.3(@types/react@19.2.7) 361 340 '@vitejs/plugin-react': 362 341 specifier: 'catalog:' 363 - version: 5.1.0(vite@7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0)) 342 + version: 5.1.0(vite@7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0)) 364 343 babel-plugin-react-compiler: 365 344 specifier: 'catalog:' 366 345 version: 1.0.0 ··· 369 348 version: 0.31.5 370 349 eslint: 371 350 specifier: 'catalog:' 372 - version: 9.31.0(jiti@1.21.7) 351 + version: 9.31.0(jiti@2.6.1) 373 352 jsdom: 374 353 specifier: ^24.1.3 375 354 version: 24.1.3(bufferutil@4.0.8)(utf-8-validate@6.0.3) ··· 377 356 specifier: ^8.5.6 378 357 version: 8.5.6 379 358 tailwindcss: 380 - specifier: ^3.4.17 381 - version: 3.4.18(yaml@2.8.0) 359 + specifier: ^4.1.18 360 + version: 4.1.18 361 + tw-animate-css: 362 + specifier: ^1.4.0 363 + version: 1.4.0 382 364 typescript: 383 365 specifier: 'catalog:' 384 366 version: 5.8.3 385 367 vite-tsconfig-paths: 386 368 specifier: 'catalog:' 387 - version: 5.1.4(typescript@5.8.3)(vite@7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0)) 369 + version: 5.1.4(typescript@5.8.3)(vite@7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0)) 388 370 vitest: 389 371 specifier: 'catalog:' 390 - version: 4.0.8(@types/node@22.16.4)(jiti@1.21.7)(jsdom@24.1.3(bufferutil@4.0.8)(utf-8-validate@6.0.3))(terser@5.34.1)(yaml@2.8.0) 372 + version: 4.0.8(@types/node@22.16.4)(jiti@2.6.1)(jsdom@24.1.3(bufferutil@4.0.8)(utf-8-validate@6.0.3))(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0) 391 373 392 374 packages/frontpage-atproto-client: 393 375 dependencies: ··· 434 416 version: link:../typescript-config 435 417 eslint: 436 418 specifier: 'catalog:' 437 - version: 9.31.0(jiti@1.21.7) 419 + version: 9.31.0(jiti@2.6.1) 438 420 typescript: 439 421 specifier: 'catalog:' 440 422 version: 5.8.3 ··· 474 456 version: 19.2.3(@types/react@19.2.7) 475 457 eslint: 476 458 specifier: 'catalog:' 477 - version: 9.31.0(jiti@1.21.7) 459 + version: 9.31.0(jiti@2.6.1) 478 460 typescript: 479 461 specifier: 'catalog:' 480 462 version: 5.8.3 ··· 2265 2247 '@swc/helpers@0.5.15': 2266 2248 resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} 2267 2249 2250 + '@tailwindcss/node@4.1.18': 2251 + resolution: {integrity: sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ==} 2252 + 2253 + '@tailwindcss/oxide-android-arm64@4.1.18': 2254 + resolution: {integrity: sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==} 2255 + engines: {node: '>= 10'} 2256 + cpu: [arm64] 2257 + os: [android] 2258 + 2259 + '@tailwindcss/oxide-darwin-arm64@4.1.18': 2260 + resolution: {integrity: sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A==} 2261 + engines: {node: '>= 10'} 2262 + cpu: [arm64] 2263 + os: [darwin] 2264 + 2265 + '@tailwindcss/oxide-darwin-x64@4.1.18': 2266 + resolution: {integrity: sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==} 2267 + engines: {node: '>= 10'} 2268 + cpu: [x64] 2269 + os: [darwin] 2270 + 2271 + '@tailwindcss/oxide-freebsd-x64@4.1.18': 2272 + resolution: {integrity: sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==} 2273 + engines: {node: '>= 10'} 2274 + cpu: [x64] 2275 + os: [freebsd] 2276 + 2277 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': 2278 + resolution: {integrity: sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==} 2279 + engines: {node: '>= 10'} 2280 + cpu: [arm] 2281 + os: [linux] 2282 + 2283 + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': 2284 + resolution: {integrity: sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==} 2285 + engines: {node: '>= 10'} 2286 + cpu: [arm64] 2287 + os: [linux] 2288 + 2289 + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': 2290 + resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==} 2291 + engines: {node: '>= 10'} 2292 + cpu: [arm64] 2293 + os: [linux] 2294 + 2295 + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': 2296 + resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==} 2297 + engines: {node: '>= 10'} 2298 + cpu: [x64] 2299 + os: [linux] 2300 + 2301 + '@tailwindcss/oxide-linux-x64-musl@4.1.18': 2302 + resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==} 2303 + engines: {node: '>= 10'} 2304 + cpu: [x64] 2305 + os: [linux] 2306 + 2307 + '@tailwindcss/oxide-wasm32-wasi@4.1.18': 2308 + resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==} 2309 + engines: {node: '>=14.0.0'} 2310 + cpu: [wasm32] 2311 + bundledDependencies: 2312 + - '@napi-rs/wasm-runtime' 2313 + - '@emnapi/core' 2314 + - '@emnapi/runtime' 2315 + - '@tybys/wasm-util' 2316 + - '@emnapi/wasi-threads' 2317 + - tslib 2318 + 2319 + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': 2320 + resolution: {integrity: sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==} 2321 + engines: {node: '>= 10'} 2322 + cpu: [arm64] 2323 + os: [win32] 2324 + 2325 + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': 2326 + resolution: {integrity: sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==} 2327 + engines: {node: '>= 10'} 2328 + cpu: [x64] 2329 + os: [win32] 2330 + 2331 + '@tailwindcss/oxide@4.1.18': 2332 + resolution: {integrity: sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A==} 2333 + engines: {node: '>= 10'} 2334 + 2335 + '@tailwindcss/postcss@4.1.18': 2336 + resolution: {integrity: sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g==} 2337 + 2268 2338 '@tailwindcss/typography@0.5.19': 2269 2339 resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} 2270 2340 peerDependencies: ··· 3223 3293 emoji-regex@9.2.2: 3224 3294 resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 3225 3295 3296 + enhanced-resolve@5.18.4: 3297 + resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==} 3298 + engines: {node: '>=10.13.0'} 3299 + 3226 3300 entities@4.5.0: 3227 3301 resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 3228 3302 engines: {node: '>=0.12'} ··· 3628 3702 resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 3629 3703 engines: {node: '>= 0.4'} 3630 3704 3705 + graceful-fs@4.2.11: 3706 + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 3707 + 3631 3708 graphemer@1.4.0: 3632 3709 resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 3633 3710 ··· 3864 3941 resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} 3865 3942 hasBin: true 3866 3943 3944 + jiti@2.6.1: 3945 + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} 3946 + hasBin: true 3947 + 3867 3948 jose@5.10.0: 3868 3949 resolution: {integrity: sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==} 3869 3950 ··· 3938 4019 cpu: [x64, arm64, wasm32, arm] 3939 4020 os: [darwin, linux, win32] 3940 4021 4022 + lightningcss-android-arm64@1.30.2: 4023 + resolution: {integrity: sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==} 4024 + engines: {node: '>= 12.0.0'} 4025 + cpu: [arm64] 4026 + os: [android] 4027 + 4028 + lightningcss-darwin-arm64@1.30.2: 4029 + resolution: {integrity: sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==} 4030 + engines: {node: '>= 12.0.0'} 4031 + cpu: [arm64] 4032 + os: [darwin] 4033 + 4034 + lightningcss-darwin-x64@1.30.2: 4035 + resolution: {integrity: sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==} 4036 + engines: {node: '>= 12.0.0'} 4037 + cpu: [x64] 4038 + os: [darwin] 4039 + 4040 + lightningcss-freebsd-x64@1.30.2: 4041 + resolution: {integrity: sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==} 4042 + engines: {node: '>= 12.0.0'} 4043 + cpu: [x64] 4044 + os: [freebsd] 4045 + 4046 + lightningcss-linux-arm-gnueabihf@1.30.2: 4047 + resolution: {integrity: sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==} 4048 + engines: {node: '>= 12.0.0'} 4049 + cpu: [arm] 4050 + os: [linux] 4051 + 4052 + lightningcss-linux-arm64-gnu@1.30.2: 4053 + resolution: {integrity: sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==} 4054 + engines: {node: '>= 12.0.0'} 4055 + cpu: [arm64] 4056 + os: [linux] 4057 + 4058 + lightningcss-linux-arm64-musl@1.30.2: 4059 + resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==} 4060 + engines: {node: '>= 12.0.0'} 4061 + cpu: [arm64] 4062 + os: [linux] 4063 + 4064 + lightningcss-linux-x64-gnu@1.30.2: 4065 + resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==} 4066 + engines: {node: '>= 12.0.0'} 4067 + cpu: [x64] 4068 + os: [linux] 4069 + 4070 + lightningcss-linux-x64-musl@1.30.2: 4071 + resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==} 4072 + engines: {node: '>= 12.0.0'} 4073 + cpu: [x64] 4074 + os: [linux] 4075 + 4076 + lightningcss-win32-arm64-msvc@1.30.2: 4077 + resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==} 4078 + engines: {node: '>= 12.0.0'} 4079 + cpu: [arm64] 4080 + os: [win32] 4081 + 4082 + lightningcss-win32-x64-msvc@1.30.2: 4083 + resolution: {integrity: sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==} 4084 + engines: {node: '>= 12.0.0'} 4085 + cpu: [x64] 4086 + os: [win32] 4087 + 4088 + lightningcss@1.30.2: 4089 + resolution: {integrity: sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==} 4090 + engines: {node: '>= 12.0.0'} 4091 + 3941 4092 lilconfig@3.1.3: 3942 4093 resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 3943 4094 engines: {node: '>=14'} ··· 4708 4859 engines: {node: '>=14.0.0'} 4709 4860 hasBin: true 4710 4861 4862 + tailwindcss@4.1.18: 4863 + resolution: {integrity: sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw==} 4864 + 4865 + tapable@2.3.0: 4866 + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} 4867 + engines: {node: '>=6'} 4868 + 4711 4869 terser@5.34.1: 4712 4870 resolution: {integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==} 4713 4871 engines: {node: '>=10'} ··· 4814 4972 turbo@2.5.0: 4815 4973 resolution: {integrity: sha512-PvSRruOsitjy6qdqwIIyolv99+fEn57gP6gn4zhsHTEcCYgXPhv6BAxzAjleS8XKpo+Y582vTTA9nuqYDmbRuA==} 4816 4974 hasBin: true 4975 + 4976 + tw-animate-css@1.4.0: 4977 + resolution: {integrity: sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==} 4817 4978 4818 4979 type-check@0.4.0: 4819 4980 resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} ··· 5575 5736 eslint: 9.31.0(jiti@1.21.7) 5576 5737 eslint-visitor-keys: 3.4.3 5577 5738 5739 + '@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.6.1))': 5740 + dependencies: 5741 + eslint: 9.31.0(jiti@2.6.1) 5742 + eslint-visitor-keys: 3.4.3 5743 + 5578 5744 '@eslint-community/regexpp@4.12.1': {} 5579 5745 5580 5746 '@eslint/config-array@0.21.0': ··· 6744 6910 dependencies: 6745 6911 tslib: 2.8.1 6746 6912 6747 - '@tailwindcss/typography@0.5.19(tailwindcss@3.4.18(yaml@2.8.0))': 6913 + '@tailwindcss/node@4.1.18': 6914 + dependencies: 6915 + '@jridgewell/remapping': 2.3.5 6916 + enhanced-resolve: 5.18.4 6917 + jiti: 2.6.1 6918 + lightningcss: 1.30.2 6919 + magic-string: 0.30.21 6920 + source-map-js: 1.2.1 6921 + tailwindcss: 4.1.18 6922 + 6923 + '@tailwindcss/oxide-android-arm64@4.1.18': 6924 + optional: true 6925 + 6926 + '@tailwindcss/oxide-darwin-arm64@4.1.18': 6927 + optional: true 6928 + 6929 + '@tailwindcss/oxide-darwin-x64@4.1.18': 6930 + optional: true 6931 + 6932 + '@tailwindcss/oxide-freebsd-x64@4.1.18': 6933 + optional: true 6934 + 6935 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18': 6936 + optional: true 6937 + 6938 + '@tailwindcss/oxide-linux-arm64-gnu@4.1.18': 6939 + optional: true 6940 + 6941 + '@tailwindcss/oxide-linux-arm64-musl@4.1.18': 6942 + optional: true 6943 + 6944 + '@tailwindcss/oxide-linux-x64-gnu@4.1.18': 6945 + optional: true 6946 + 6947 + '@tailwindcss/oxide-linux-x64-musl@4.1.18': 6948 + optional: true 6949 + 6950 + '@tailwindcss/oxide-wasm32-wasi@4.1.18': 6951 + optional: true 6952 + 6953 + '@tailwindcss/oxide-win32-arm64-msvc@4.1.18': 6954 + optional: true 6955 + 6956 + '@tailwindcss/oxide-win32-x64-msvc@4.1.18': 6957 + optional: true 6958 + 6959 + '@tailwindcss/oxide@4.1.18': 6960 + optionalDependencies: 6961 + '@tailwindcss/oxide-android-arm64': 4.1.18 6962 + '@tailwindcss/oxide-darwin-arm64': 4.1.18 6963 + '@tailwindcss/oxide-darwin-x64': 4.1.18 6964 + '@tailwindcss/oxide-freebsd-x64': 4.1.18 6965 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.18 6966 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.18 6967 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.18 6968 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.18 6969 + '@tailwindcss/oxide-linux-x64-musl': 4.1.18 6970 + '@tailwindcss/oxide-wasm32-wasi': 4.1.18 6971 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.18 6972 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.18 6973 + 6974 + '@tailwindcss/postcss@4.1.18': 6975 + dependencies: 6976 + '@alloc/quick-lru': 5.2.0 6977 + '@tailwindcss/node': 4.1.18 6978 + '@tailwindcss/oxide': 4.1.18 6979 + postcss: 8.5.6 6980 + tailwindcss: 4.1.18 6981 + 6982 + '@tailwindcss/typography@0.5.19(tailwindcss@4.1.18)': 6748 6983 dependencies: 6749 6984 postcss-selector-parser: 6.0.10 6750 - tailwindcss: 3.4.18(yaml@2.8.0) 6985 + tailwindcss: 4.1.18 6751 6986 6752 6987 '@testing-library/dom@10.4.0': 6753 6988 dependencies: ··· 6928 7163 dependencies: 6929 7164 '@types/node': 22.16.4 6930 7165 6931 - '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3)': 7166 + '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3)': 6932 7167 dependencies: 6933 7168 '@eslint-community/regexpp': 4.12.1 6934 - '@typescript-eslint/parser': 8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3) 7169 + '@typescript-eslint/parser': 8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) 6935 7170 '@typescript-eslint/scope-manager': 8.46.2 6936 - '@typescript-eslint/type-utils': 8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3) 6937 - '@typescript-eslint/utils': 8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3) 7171 + '@typescript-eslint/type-utils': 8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) 7172 + '@typescript-eslint/utils': 8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) 6938 7173 '@typescript-eslint/visitor-keys': 8.46.2 6939 - eslint: 9.31.0(jiti@1.21.7) 7174 + eslint: 9.31.0(jiti@2.6.1) 6940 7175 graphemer: 1.4.0 6941 7176 ignore: 7.0.5 6942 7177 natural-compare: 1.4.0 ··· 6945 7180 transitivePeerDependencies: 6946 7181 - supports-color 6947 7182 6948 - '@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3)': 7183 + '@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3)': 6949 7184 dependencies: 6950 7185 '@typescript-eslint/scope-manager': 8.46.2 6951 7186 '@typescript-eslint/types': 8.46.2 6952 7187 '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.8.3) 6953 7188 '@typescript-eslint/visitor-keys': 8.46.2 6954 7189 debug: 4.4.3 6955 - eslint: 9.31.0(jiti@1.21.7) 7190 + eslint: 9.31.0(jiti@2.6.1) 6956 7191 typescript: 5.8.3 6957 7192 transitivePeerDependencies: 6958 7193 - supports-color ··· 6975 7210 dependencies: 6976 7211 typescript: 5.8.3 6977 7212 6978 - '@typescript-eslint/type-utils@8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3)': 7213 + '@typescript-eslint/type-utils@8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3)': 6979 7214 dependencies: 6980 7215 '@typescript-eslint/types': 8.46.2 6981 7216 '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.8.3) 6982 - '@typescript-eslint/utils': 8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3) 7217 + '@typescript-eslint/utils': 8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) 6983 7218 debug: 4.4.3 6984 - eslint: 9.31.0(jiti@1.21.7) 7219 + eslint: 9.31.0(jiti@2.6.1) 6985 7220 ts-api-utils: 2.1.0(typescript@5.8.3) 6986 7221 typescript: 5.8.3 6987 7222 transitivePeerDependencies: ··· 7005 7240 transitivePeerDependencies: 7006 7241 - supports-color 7007 7242 7008 - '@typescript-eslint/utils@8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3)': 7243 + '@typescript-eslint/utils@8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3)': 7009 7244 dependencies: 7010 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@1.21.7)) 7245 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.6.1)) 7011 7246 '@typescript-eslint/scope-manager': 8.46.2 7012 7247 '@typescript-eslint/types': 8.46.2 7013 7248 '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.8.3) 7014 - eslint: 9.31.0(jiti@1.21.7) 7249 + eslint: 9.31.0(jiti@2.6.1) 7015 7250 typescript: 5.8.3 7016 7251 transitivePeerDependencies: 7017 7252 - supports-color ··· 7085 7320 next: 16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) 7086 7321 react: 19.2.3 7087 7322 7088 - '@vercel/microfrontends@1.3.0(@vercel/analytics@1.5.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(@vercel/speed-insights@1.2.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0))': 7323 + '@vercel/microfrontends@1.3.0(@vercel/analytics@1.5.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(@vercel/speed-insights@1.2.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0))': 7089 7324 dependencies: 7090 7325 '@next/env': 15.1.6 7091 7326 ajv: 8.17.1 ··· 7102 7337 next: 16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) 7103 7338 react: 19.2.3 7104 7339 react-dom: 19.2.3(react@19.2.3) 7105 - vite: 7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0) 7340 + vite: 7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0) 7106 7341 transitivePeerDependencies: 7107 7342 - debug 7108 7343 ··· 7116 7351 react: 19.2.3 7117 7352 optional: true 7118 7353 7119 - '@vercel/toolbar@0.1.41(@vercel/analytics@1.5.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(@vercel/speed-insights@1.2.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0))': 7354 + '@vercel/toolbar@0.1.41(@vercel/analytics@1.5.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(@vercel/speed-insights@1.2.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0))': 7120 7355 dependencies: 7121 7356 '@tinyhttp/app': 1.3.0 7122 - '@vercel/microfrontends': 1.3.0(@vercel/analytics@1.5.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(@vercel/speed-insights@1.2.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0)) 7357 + '@vercel/microfrontends': 1.3.0(@vercel/analytics@1.5.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(@vercel/speed-insights@1.2.0(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3))(next@16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(vite@7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0)) 7123 7358 chokidar: 3.6.0 7124 7359 execa: 5.1.1 7125 7360 fast-glob: 3.3.3 ··· 7130 7365 optionalDependencies: 7131 7366 next: 16.1.0(@babel/core@7.28.4)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) 7132 7367 react: 19.2.3 7133 - vite: 7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0) 7368 + vite: 7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0) 7134 7369 transitivePeerDependencies: 7135 7370 - '@sveltejs/kit' 7136 7371 - '@vercel/analytics' ··· 7138 7373 - debug 7139 7374 - react-dom 7140 7375 7141 - '@vitejs/plugin-react@5.1.0(vite@7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0))': 7376 + '@vitejs/plugin-react@5.1.0(vite@7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0))': 7142 7377 dependencies: 7143 7378 '@babel/core': 7.28.4 7144 7379 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) ··· 7146 7381 '@rolldown/pluginutils': 1.0.0-beta.43 7147 7382 '@types/babel__core': 7.20.5 7148 7383 react-refresh: 0.18.0 7149 - vite: 7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0) 7384 + vite: 7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0) 7150 7385 transitivePeerDependencies: 7151 7386 - supports-color 7152 7387 ··· 7159 7394 chai: 6.2.0 7160 7395 tinyrainbow: 3.0.3 7161 7396 7162 - '@vitest/mocker@4.0.8(vite@7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0))': 7397 + '@vitest/mocker@4.0.8(vite@7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0))': 7163 7398 dependencies: 7164 7399 '@vitest/spy': 4.0.8 7165 7400 estree-walker: 3.0.3 7166 7401 magic-string: 0.30.21 7167 7402 optionalDependencies: 7168 - vite: 7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0) 7403 + vite: 7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0) 7169 7404 7170 7405 '@vitest/pretty-format@4.0.8': 7171 7406 dependencies: ··· 7547 7782 7548 7783 detect-libc@2.0.2: {} 7549 7784 7550 - detect-libc@2.1.2: 7551 - optional: true 7785 + detect-libc@2.1.2: {} 7552 7786 7553 7787 detect-node-es@1.1.0: {} 7554 7788 ··· 7609 7843 emoji-regex@8.0.0: {} 7610 7844 7611 7845 emoji-regex@9.2.2: {} 7846 + 7847 + enhanced-resolve@5.18.4: 7848 + dependencies: 7849 + graceful-fs: 4.2.11 7850 + tapable: 2.3.0 7612 7851 7613 7852 entities@4.5.0: {} 7614 7853 ··· 7794 8033 7795 8034 escape-string-regexp@4.0.0: {} 7796 8035 7797 - eslint-config-next@16.1.0(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3): 8036 + eslint-config-next@16.1.0(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3): 7798 8037 dependencies: 7799 8038 '@next/eslint-plugin-next': 16.1.0 7800 - eslint: 9.31.0(jiti@1.21.7) 8039 + eslint: 9.31.0(jiti@2.6.1) 7801 8040 eslint-import-resolver-node: 0.3.9 7802 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@1.21.7)) 7803 - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@1.21.7)) 7804 - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.31.0(jiti@1.21.7)) 7805 - eslint-plugin-react: 7.37.5(eslint@9.31.0(jiti@1.21.7)) 7806 - eslint-plugin-react-hooks: 7.0.0(eslint@9.31.0(jiti@1.21.7)) 8041 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.6.1)) 8042 + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.6.1)) 8043 + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.31.0(jiti@2.6.1)) 8044 + eslint-plugin-react: 7.37.5(eslint@9.31.0(jiti@2.6.1)) 8045 + eslint-plugin-react-hooks: 7.0.0(eslint@9.31.0(jiti@2.6.1)) 7807 8046 globals: 16.4.0 7808 - typescript-eslint: 8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3) 8047 + typescript-eslint: 8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) 7809 8048 optionalDependencies: 7810 8049 typescript: 5.8.3 7811 8050 transitivePeerDependencies: ··· 7814 8053 - eslint-plugin-import-x 7815 8054 - supports-color 7816 8055 7817 - eslint-config-turbo@2.5.4(eslint@9.31.0(jiti@1.21.7))(turbo@2.5.0): 8056 + eslint-config-turbo@2.5.4(eslint@9.31.0(jiti@2.6.1))(turbo@2.5.0): 7818 8057 dependencies: 7819 - eslint: 9.31.0(jiti@1.21.7) 7820 - eslint-plugin-turbo: 2.5.4(eslint@9.31.0(jiti@1.21.7))(turbo@2.5.0) 8058 + eslint: 9.31.0(jiti@2.6.1) 8059 + eslint-plugin-turbo: 2.5.4(eslint@9.31.0(jiti@2.6.1))(turbo@2.5.0) 7821 8060 turbo: 2.5.0 7822 8061 7823 8062 eslint-import-resolver-node@0.3.9: ··· 7828 8067 transitivePeerDependencies: 7829 8068 - supports-color 7830 8069 7831 - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@1.21.7)): 8070 + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.6.1)): 7832 8071 dependencies: 7833 8072 '@nolyfill/is-core-module': 1.0.39 7834 8073 debug: 4.4.3 7835 - eslint: 9.31.0(jiti@1.21.7) 8074 + eslint: 9.31.0(jiti@2.6.1) 7836 8075 get-tsconfig: 4.12.0 7837 8076 is-bun-module: 2.0.0 7838 8077 stable-hash: 0.0.5 7839 8078 tinyglobby: 0.2.15 7840 8079 unrs-resolver: 1.11.1 7841 8080 optionalDependencies: 7842 - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@1.21.7)) 8081 + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.6.1)) 7843 8082 transitivePeerDependencies: 7844 8083 - supports-color 7845 8084 7846 - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@1.21.7)): 8085 + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.6.1)): 7847 8086 dependencies: 7848 8087 debug: 3.2.7 7849 8088 optionalDependencies: 7850 - '@typescript-eslint/parser': 8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3) 7851 - eslint: 9.31.0(jiti@1.21.7) 8089 + '@typescript-eslint/parser': 8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) 8090 + eslint: 9.31.0(jiti@2.6.1) 7852 8091 eslint-import-resolver-node: 0.3.9 7853 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@1.21.7)) 8092 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.6.1)) 7854 8093 transitivePeerDependencies: 7855 8094 - supports-color 7856 8095 7857 - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@1.21.7)): 8096 + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.6.1)): 7858 8097 dependencies: 7859 8098 '@rtsao/scc': 1.1.0 7860 8099 array-includes: 3.1.9 ··· 7863 8102 array.prototype.flatmap: 1.3.3 7864 8103 debug: 3.2.7 7865 8104 doctrine: 2.1.0 7866 - eslint: 9.31.0(jiti@1.21.7) 8105 + eslint: 9.31.0(jiti@2.6.1) 7867 8106 eslint-import-resolver-node: 0.3.9 7868 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@1.21.7)) 8107 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.6.1)) 7869 8108 hasown: 2.0.2 7870 8109 is-core-module: 2.16.1 7871 8110 is-glob: 4.0.3 ··· 7877 8116 string.prototype.trimend: 1.0.9 7878 8117 tsconfig-paths: 3.15.0 7879 8118 optionalDependencies: 7880 - '@typescript-eslint/parser': 8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3) 8119 + '@typescript-eslint/parser': 8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) 7881 8120 transitivePeerDependencies: 7882 8121 - eslint-import-resolver-typescript 7883 8122 - eslint-import-resolver-webpack 7884 8123 - supports-color 7885 8124 7886 - eslint-plugin-jsx-a11y@6.10.2(eslint@9.31.0(jiti@1.21.7)): 8125 + eslint-plugin-jsx-a11y@6.10.2(eslint@9.31.0(jiti@2.6.1)): 7887 8126 dependencies: 7888 8127 aria-query: 5.3.2 7889 8128 array-includes: 3.1.9 ··· 7893 8132 axobject-query: 4.1.0 7894 8133 damerau-levenshtein: 1.0.8 7895 8134 emoji-regex: 9.2.2 7896 - eslint: 9.31.0(jiti@1.21.7) 8135 + eslint: 9.31.0(jiti@2.6.1) 7897 8136 hasown: 2.0.2 7898 8137 jsx-ast-utils: 3.3.5 7899 8138 language-tags: 1.0.9 ··· 7902 8141 safe-regex-test: 1.1.0 7903 8142 string.prototype.includes: 2.0.1 7904 8143 7905 - eslint-plugin-react-hooks@6.1.1(eslint@9.31.0(jiti@1.21.7)): 8144 + eslint-plugin-react-hooks@6.1.1(eslint@9.31.0(jiti@2.6.1)): 7906 8145 dependencies: 7907 8146 '@babel/core': 7.28.4 7908 8147 '@babel/parser': 7.28.4 7909 - eslint: 9.31.0(jiti@1.21.7) 8148 + eslint: 9.31.0(jiti@2.6.1) 7910 8149 zod: 3.25.76 7911 8150 zod-validation-error: 3.5.3(zod@3.25.76) 7912 8151 transitivePeerDependencies: 7913 8152 - supports-color 7914 8153 7915 - eslint-plugin-react-hooks@7.0.0(eslint@9.31.0(jiti@1.21.7)): 8154 + eslint-plugin-react-hooks@7.0.0(eslint@9.31.0(jiti@2.6.1)): 7916 8155 dependencies: 7917 8156 '@babel/core': 7.28.4 7918 8157 '@babel/parser': 7.28.4 7919 - eslint: 9.31.0(jiti@1.21.7) 8158 + eslint: 9.31.0(jiti@2.6.1) 7920 8159 hermes-parser: 0.25.1 7921 8160 zod: 3.25.76 7922 8161 zod-validation-error: 3.5.3(zod@3.25.76) 7923 8162 transitivePeerDependencies: 7924 8163 - supports-color 7925 8164 7926 - eslint-plugin-react@7.37.5(eslint@9.31.0(jiti@1.21.7)): 8165 + eslint-plugin-react@7.37.5(eslint@9.31.0(jiti@2.6.1)): 7927 8166 dependencies: 7928 8167 array-includes: 3.1.9 7929 8168 array.prototype.findlast: 1.2.5 ··· 7931 8170 array.prototype.tosorted: 1.1.4 7932 8171 doctrine: 2.1.0 7933 8172 es-iterator-helpers: 1.2.1 7934 - eslint: 9.31.0(jiti@1.21.7) 8173 + eslint: 9.31.0(jiti@2.6.1) 7935 8174 estraverse: 5.3.0 7936 8175 hasown: 2.0.2 7937 8176 jsx-ast-utils: 3.3.5 ··· 7945 8184 string.prototype.matchall: 4.0.12 7946 8185 string.prototype.repeat: 1.0.0 7947 8186 7948 - eslint-plugin-turbo@2.5.4(eslint@9.31.0(jiti@1.21.7))(turbo@2.5.0): 8187 + eslint-plugin-turbo@2.5.4(eslint@9.31.0(jiti@2.6.1))(turbo@2.5.0): 7949 8188 dependencies: 7950 8189 dotenv: 16.0.3 7951 - eslint: 9.31.0(jiti@1.21.7) 8190 + eslint: 9.31.0(jiti@2.6.1) 7952 8191 turbo: 2.5.0 7953 8192 7954 8193 eslint-scope@8.4.0: ··· 8002 8241 transitivePeerDependencies: 8003 8242 - supports-color 8004 8243 8244 + eslint@9.31.0(jiti@2.6.1): 8245 + dependencies: 8246 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.6.1)) 8247 + '@eslint-community/regexpp': 4.12.1 8248 + '@eslint/config-array': 0.21.0 8249 + '@eslint/config-helpers': 0.3.0 8250 + '@eslint/core': 0.15.1 8251 + '@eslint/eslintrc': 3.3.1 8252 + '@eslint/js': 9.31.0 8253 + '@eslint/plugin-kit': 0.3.3 8254 + '@humanfs/node': 0.16.6 8255 + '@humanwhocodes/module-importer': 1.0.1 8256 + '@humanwhocodes/retry': 0.4.3 8257 + '@types/estree': 1.0.8 8258 + '@types/json-schema': 7.0.15 8259 + ajv: 6.12.6 8260 + chalk: 4.1.2 8261 + cross-spawn: 7.0.6 8262 + debug: 4.4.3 8263 + escape-string-regexp: 4.0.0 8264 + eslint-scope: 8.4.0 8265 + eslint-visitor-keys: 4.2.1 8266 + espree: 10.4.0 8267 + esquery: 1.6.0 8268 + esutils: 2.0.3 8269 + fast-deep-equal: 3.1.3 8270 + file-entry-cache: 8.0.0 8271 + find-up: 5.0.0 8272 + glob-parent: 6.0.2 8273 + ignore: 5.3.2 8274 + imurmurhash: 0.1.4 8275 + is-glob: 4.0.3 8276 + json-stable-stringify-without-jsonify: 1.0.1 8277 + lodash.merge: 4.6.2 8278 + minimatch: 3.1.2 8279 + natural-compare: 1.4.0 8280 + optionator: 0.9.4 8281 + optionalDependencies: 8282 + jiti: 2.6.1 8283 + transitivePeerDependencies: 8284 + - supports-color 8285 + 8005 8286 esm-env@1.2.2: {} 8006 8287 8007 8288 espree@10.4.0: ··· 8210 8491 8211 8492 gopd@1.2.0: {} 8212 8493 8494 + graceful-fs@4.2.11: {} 8495 + 8213 8496 graphemer@1.4.0: {} 8214 8497 8215 8498 has-bigints@1.1.0: {} ··· 8443 8726 8444 8727 jiti@1.21.7: {} 8445 8728 8729 + jiti@2.6.1: {} 8730 + 8446 8731 jose@5.10.0: {} 8447 8732 8448 8733 js-base64@3.7.8: {} ··· 8536 8821 '@libsql/linux-x64-musl': 0.5.22 8537 8822 '@libsql/win32-x64-msvc': 0.5.22 8538 8823 8824 + lightningcss-android-arm64@1.30.2: 8825 + optional: true 8826 + 8827 + lightningcss-darwin-arm64@1.30.2: 8828 + optional: true 8829 + 8830 + lightningcss-darwin-x64@1.30.2: 8831 + optional: true 8832 + 8833 + lightningcss-freebsd-x64@1.30.2: 8834 + optional: true 8835 + 8836 + lightningcss-linux-arm-gnueabihf@1.30.2: 8837 + optional: true 8838 + 8839 + lightningcss-linux-arm64-gnu@1.30.2: 8840 + optional: true 8841 + 8842 + lightningcss-linux-arm64-musl@1.30.2: 8843 + optional: true 8844 + 8845 + lightningcss-linux-x64-gnu@1.30.2: 8846 + optional: true 8847 + 8848 + lightningcss-linux-x64-musl@1.30.2: 8849 + optional: true 8850 + 8851 + lightningcss-win32-arm64-msvc@1.30.2: 8852 + optional: true 8853 + 8854 + lightningcss-win32-x64-msvc@1.30.2: 8855 + optional: true 8856 + 8857 + lightningcss@1.30.2: 8858 + dependencies: 8859 + detect-libc: 2.1.2 8860 + optionalDependencies: 8861 + lightningcss-android-arm64: 1.30.2 8862 + lightningcss-darwin-arm64: 1.30.2 8863 + lightningcss-darwin-x64: 1.30.2 8864 + lightningcss-freebsd-x64: 1.30.2 8865 + lightningcss-linux-arm-gnueabihf: 1.30.2 8866 + lightningcss-linux-arm64-gnu: 1.30.2 8867 + lightningcss-linux-arm64-musl: 1.30.2 8868 + lightningcss-linux-x64-gnu: 1.30.2 8869 + lightningcss-linux-x64-musl: 1.30.2 8870 + lightningcss-win32-arm64-msvc: 1.30.2 8871 + lightningcss-win32-x64-msvc: 1.30.2 8872 + 8539 8873 lilconfig@3.1.3: {} 8540 8874 8541 8875 lines-and-columns@1.2.4: {} ··· 9412 9746 - tsx 9413 9747 - yaml 9414 9748 9749 + tailwindcss@4.1.18: {} 9750 + 9751 + tapable@2.3.0: {} 9752 + 9415 9753 terser@5.34.1: 9416 9754 dependencies: 9417 9755 '@jridgewell/source-map': 0.3.11 ··· 9511 9849 turbo-windows-64: 2.5.0 9512 9850 turbo-windows-arm64: 2.5.0 9513 9851 9852 + tw-animate-css@1.4.0: {} 9853 + 9514 9854 type-check@0.4.0: 9515 9855 dependencies: 9516 9856 prelude-ls: 1.2.1 ··· 9548 9888 possible-typed-array-names: 1.1.0 9549 9889 reflect.getprototypeof: 1.0.10 9550 9890 9551 - typescript-eslint@8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3): 9891 + typescript-eslint@8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3): 9552 9892 dependencies: 9553 - '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3))(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3) 9554 - '@typescript-eslint/parser': 8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3) 9893 + '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3))(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) 9894 + '@typescript-eslint/parser': 8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) 9555 9895 '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.8.3) 9556 - '@typescript-eslint/utils': 8.46.2(eslint@9.31.0(jiti@1.21.7))(typescript@5.8.3) 9557 - eslint: 9.31.0(jiti@1.21.7) 9896 + '@typescript-eslint/utils': 8.46.2(eslint@9.31.0(jiti@2.6.1))(typescript@5.8.3) 9897 + eslint: 9.31.0(jiti@2.6.1) 9558 9898 typescript: 5.8.3 9559 9899 transitivePeerDependencies: 9560 9900 - supports-color ··· 9645 9985 9646 9986 varint@6.0.0: {} 9647 9987 9648 - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0)): 9988 + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0)): 9649 9989 dependencies: 9650 9990 debug: 4.4.3 9651 9991 globrex: 0.1.2 9652 9992 tsconfck: 3.1.6(typescript@5.8.3) 9653 9993 optionalDependencies: 9654 - vite: 7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0) 9994 + vite: 7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0) 9655 9995 transitivePeerDependencies: 9656 9996 - supports-color 9657 9997 - typescript 9658 9998 9659 - vite@7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0): 9999 + vite@7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0): 9660 10000 dependencies: 9661 10001 esbuild: 0.25.10 9662 10002 fdir: 6.5.0(picomatch@4.0.3) ··· 9667 10007 optionalDependencies: 9668 10008 '@types/node': 22.16.4 9669 10009 fsevents: 2.3.3 9670 - jiti: 1.21.7 10010 + jiti: 2.6.1 10011 + lightningcss: 1.30.2 9671 10012 terser: 5.34.1 9672 10013 yaml: 2.8.0 9673 10014 9674 - vitest@4.0.8(@types/node@22.16.4)(jiti@1.21.7)(jsdom@24.1.3(bufferutil@4.0.8)(utf-8-validate@6.0.3))(terser@5.34.1)(yaml@2.8.0): 10015 + vitest@4.0.8(@types/node@22.16.4)(jiti@2.6.1)(jsdom@24.1.3(bufferutil@4.0.8)(utf-8-validate@6.0.3))(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0): 9675 10016 dependencies: 9676 10017 '@vitest/expect': 4.0.8 9677 - '@vitest/mocker': 4.0.8(vite@7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0)) 10018 + '@vitest/mocker': 4.0.8(vite@7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0)) 9678 10019 '@vitest/pretty-format': 4.0.8 9679 10020 '@vitest/runner': 4.0.8 9680 10021 '@vitest/snapshot': 4.0.8 ··· 9691 10032 tinyexec: 0.3.2 9692 10033 tinyglobby: 0.2.15 9693 10034 tinyrainbow: 3.0.3 9694 - vite: 7.2.2(@types/node@22.16.4)(jiti@1.21.7)(terser@5.34.1)(yaml@2.8.0) 10035 + vite: 7.2.2(@types/node@22.16.4)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.34.1)(yaml@2.8.0) 9695 10036 why-is-node-running: 2.3.0 9696 10037 optionalDependencies: 9697 10038 '@types/node': 22.16.4