diff --git a/CHANGELOG.md b/CHANGELOG.md index d2f2db5fa..e65168e0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed +- Replaced placeholder avatars with deterministic minidenticon-based avatars generated from email addresses [#1072](https://github.com/sourcebot-dev/sourcebot/pull/1072) + ## [4.16.4] - 2026-04-01 ### Added diff --git a/packages/web/package.json b/packages/web/package.json index ceee7d2a8..d88f3e2a5 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -151,6 +151,7 @@ "linguist-languages": "^9.3.1", "lucide-react": "^0.517.0", "micromatch": "^4.0.8", + "minidenticons": "^4.2.1", "next": "16.1.6", "next-auth": "^5.0.0-beta.30", "next-navigation-guard": "^0.2.0", @@ -195,7 +196,7 @@ "devDependencies": { "@asteasolutions/zod-to-openapi": "7.3.4", "@eslint/eslintrc": "^3", - "@react-email/preview-server": "5.2.8", + "@react-email/preview-server": "5.2.10", "@react-grab/mcp": "^0.1.23", "@tanstack/eslint-plugin-query": "^5.74.7", "@testing-library/dom": "^10.4.1", @@ -218,7 +219,7 @@ "npm-run-all": "^4.1.5", "postcss": "^8", "raw-loader": "^4.0.2", - "react-email": "^5.1.0", + "react-email": "^5.2.10", "react-grab": "^0.1.23", "react-scan": "^0.5.3", "tailwindcss": "^3.4.1", diff --git a/packages/web/src/actions.ts b/packages/web/src/actions.ts index 0ca58fdc2..22550455c 100644 --- a/packages/web/src/actions.ts +++ b/packages/web/src/actions.ts @@ -723,6 +723,7 @@ export const createInvites = async (emails: string[]): Promise<{ success: boolea const inviteLink = `${env.AUTH_URL}/redeem?invite_id=${invite.id}`; const transport = createTransport(smtpConnectionUrl); const html = await render(InviteUserEmail({ + baseUrl: env.AUTH_URL, host: { name: user.name ?? undefined, email: user.email!, @@ -999,6 +1000,7 @@ export const getOrgAccountRequests = async () => sew(() => email: request.requestedBy.email!, createdAt: request.createdAt, name: request.requestedBy.name ?? undefined, + image: request.requestedBy.image ?? undefined, })); })); diff --git a/packages/web/src/app/[domain]/chat/[id]/opengraph-image.tsx b/packages/web/src/app/[domain]/chat/[id]/opengraph-image.tsx index 4d3176416..cfde021db 100644 --- a/packages/web/src/app/[domain]/chat/[id]/opengraph-image.tsx +++ b/packages/web/src/app/[domain]/chat/[id]/opengraph-image.tsx @@ -4,6 +4,7 @@ import { prisma } from '@/prisma'; import { getOrgFromDomain } from '@/data/org'; import { ChatVisibility } from '@sourcebot/db'; import { env } from "@sourcebot/shared"; +import { minidenticon } from 'minidenticons'; export const runtime = 'nodejs'; export const alt = 'Sourcebot Chat'; @@ -37,6 +38,7 @@ export default async function Image({ params }: ImageProps) { createdBy: { select: { name: true, + email: true, image: true, }, }, @@ -53,7 +55,9 @@ export default async function Image({ params }: ImageProps) { const chatName = rawChatName.length > MAX_CHAT_NAME_LENGTH ? rawChatName.substring(0, MAX_CHAT_NAME_LENGTH).trim() + '...' : rawChatName; - const creatorImage = chat.createdBy?.image; + const creatorEmail = chat.createdBy?.email; + const creatorImage = chat.createdBy?.image + ?? (creatorEmail ? 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(creatorEmail, 50, 50)) : undefined); return new ImageResponse( ( diff --git a/packages/web/src/app/[domain]/chat/components/shareChatPopover/ee/invitePanel.tsx b/packages/web/src/app/[domain]/chat/components/shareChatPopover/ee/invitePanel.tsx index 8e9db0888..146a209b0 100644 --- a/packages/web/src/app/[domain]/chat/components/shareChatPopover/ee/invitePanel.tsx +++ b/packages/web/src/app/[domain]/chat/components/shareChatPopover/ee/invitePanel.tsx @@ -3,13 +3,12 @@ import { searchChatShareableMembers } from "@/app/api/(client)/client"; import { SearchChatShareableMembersResponse } from "@/app/api/(server)/ee/chat/[chatId]/searchMembers/route"; import { SessionUser } from "@/auth"; -import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { LoadingButton } from "@/components/ui/loading-button"; import { Separator } from "@/components/ui/separator"; import { unwrapServiceError } from "@/lib/utils"; -import placeholderAvatar from "@/public/placeholder_avatar.png"; +import { UserAvatar } from "@/components/userAvatar"; import { useQuery } from "@tanstack/react-query"; import { useDebounce } from "@uidotdev/usehooks"; import { ChevronLeft, Circle, CircleCheck, Loader2, X } from "lucide-react"; @@ -33,17 +32,6 @@ export const InvitePanel = ({ const resultsRef = useRef(null); const inputRef = useRef(null); - const getInitials = (name?: string, email?: string) => { - if (name) { - return name.split(' ').map((n) => n[0]).join('').toUpperCase().slice(0, 2); - } - if (email) { - return email[0].toUpperCase(); - } - return '?'; - }; - - const debouncedSearchQuery = useDebounce(searchQuery, 100); const { data: searchResults, isPending, isError } = useQuery({ @@ -157,10 +145,11 @@ export const InvitePanel = ({ ) : ( )} - - - {getInitials(user.name ?? undefined, user.email ?? undefined)} - +
{user.name || user.email} {user.name && ( diff --git a/packages/web/src/app/[domain]/chat/components/shareChatPopover/shareSettings.tsx b/packages/web/src/app/[domain]/chat/components/shareChatPopover/shareSettings.tsx index bf1335f82..9dd0a6668 100644 --- a/packages/web/src/app/[domain]/chat/components/shareChatPopover/shareSettings.tsx +++ b/packages/web/src/app/[domain]/chat/components/shareChatPopover/shareSettings.tsx @@ -2,7 +2,6 @@ import { SessionUser } from "@/auth"; import { useToast } from "@/components/hooks/use-toast"; -import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { Button } from "@/components/ui/button"; import { Select, @@ -13,7 +12,7 @@ import { } from "@/components/ui/select"; import { Separator } from "@/components/ui/separator"; import { cn } from "@/lib/utils"; -import placeholderAvatar from "@/public/placeholder_avatar.png"; +import { UserAvatar } from "@/components/userAvatar"; import { ChatVisibility } from "@sourcebot/db"; import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip"; import { Info, Link2Icon, Loader2, Lock, X } from "lucide-react"; @@ -69,16 +68,6 @@ export const ShareSettings = ({ } }, [chatId, visibility, toast]); - const getInitials = (name?: string | null, email?: string | null) => { - if (name) { - return name.split(' ').map((n) => n[0]).join('').toUpperCase().slice(0, 2); - } - if (email) { - return email[0].toUpperCase(); - } - return '?'; - }; - return (

Share

@@ -113,10 +102,11 @@ export const ShareSettings = ({ {currentUser && (
- - - {getInitials(currentUser.name, currentUser.email)} - +
{currentUser.name || currentUser.email} @@ -134,10 +124,11 @@ export const ShareSettings = ({ {sharedWithUsers.map((user) => (
- - - {getInitials(user.name, user.email)} - +
{user.name || user.email} {user.name && ( diff --git a/packages/web/src/app/[domain]/components/meControlDropdownMenu.tsx b/packages/web/src/app/[domain]/components/meControlDropdownMenu.tsx index ae3263cb5..d9e4ee782 100644 --- a/packages/web/src/app/[domain]/components/meControlDropdownMenu.tsx +++ b/packages/web/src/app/[domain]/components/meControlDropdownMenu.tsx @@ -13,13 +13,12 @@ import { DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { cn } from "@/lib/utils" -import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"; import { signOut } from "next-auth/react" import posthog from "posthog-js"; import { useDomain } from "@/hooks/useDomain"; import { Session } from "next-auth"; import { AppearanceDropdownMenuGroup } from "./appearanceDropdownMenuGroup"; -import placeholderAvatar from "@/public/placeholder_avatar.png"; +import { UserAvatar } from "@/components/userAvatar"; interface MeControlDropdownMenuProps { menuButtonClassName?: string; @@ -35,24 +34,20 @@ export const MeControlDropdownMenu = ({ return ( - - - - {session.user.name && session.user.name.length > 0 ? session.user.name[0].toUpperCase() : 'U'} - - +
- - - - {session.user.name && session.user.name.length > 0 ? session.user.name[0].toUpperCase() : 'U'} - - +

{session.user.name ?? "User"}

{session.user.email && ( diff --git a/packages/web/src/app/[domain]/settings/members/components/invitesList.tsx b/packages/web/src/app/[domain]/settings/members/components/invitesList.tsx index 89444629b..42ab41135 100644 --- a/packages/web/src/app/[domain]/settings/members/components/invitesList.tsx +++ b/packages/web/src/app/[domain]/settings/members/components/invitesList.tsx @@ -3,13 +3,12 @@ import { OrgRole } from "@sourcebot/db"; import { useToast } from "@/components/hooks/use-toast"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@/components/ui/alert-dialog"; -import { Avatar, AvatarImage } from "@/components/ui/avatar"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { createPathWithQueryParams, isServiceError } from "@/lib/utils"; -import placeholderAvatar from "@/public/placeholder_avatar.png"; +import { UserAvatar } from "@/components/userAvatar"; import { Copy, MoreVertical, Search } from "lucide-react"; import { useCallback, useMemo, useState } from "react"; import { cancelInvite } from "@/actions"; @@ -107,9 +106,7 @@ export const InvitesList = ({ invites, currentUserRole }: InviteListProps) => { filteredInvites.map((invite) => (
- - - +
{invite.email}
diff --git a/packages/web/src/app/[domain]/settings/members/components/membersList.tsx b/packages/web/src/app/[domain]/settings/members/components/membersList.tsx index 8b197bfc9..63810ce73 100644 --- a/packages/web/src/app/[domain]/settings/members/components/membersList.tsx +++ b/packages/web/src/app/[domain]/settings/members/components/membersList.tsx @@ -3,12 +3,11 @@ import { Input } from "@/components/ui/input"; import { Search, MoreVertical } from "lucide-react"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" -import { Avatar, AvatarImage } from "@/components/ui/avatar"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"; import { Button } from "@/components/ui/button"; import { useCallback, useMemo, useState } from "react"; import { OrgRole } from "@prisma/client"; -import placeholderAvatar from "@/public/placeholder_avatar.png"; +import { UserAvatar } from "@/components/userAvatar"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@/components/ui/alert-dialog"; import { promoteToOwner, demoteToMember } from "@/ee/features/userManagement/actions"; import { leaveOrg, removeMemberFromOrg } from "@/features/userManagement/actions"; @@ -200,9 +199,10 @@ export const MembersList = ({ members, currentUserId, currentUserRole, orgName, filteredMembers.map((member) => (
- - - +
{member.name}
{member.email}
diff --git a/packages/web/src/app/[domain]/settings/members/components/requestsList.tsx b/packages/web/src/app/[domain]/settings/members/components/requestsList.tsx index 3b2c35b69..5856a0cc6 100644 --- a/packages/web/src/app/[domain]/settings/members/components/requestsList.tsx +++ b/packages/web/src/app/[domain]/settings/members/components/requestsList.tsx @@ -3,12 +3,11 @@ import { OrgRole } from "@sourcebot/db"; import { useToast } from "@/components/hooks/use-toast"; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle } from "@/components/ui/alert-dialog"; -import { Avatar, AvatarImage } from "@/components/ui/avatar"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { isServiceError } from "@/lib/utils"; -import placeholderAvatar from "@/public/placeholder_avatar.png"; +import { UserAvatar } from "@/components/userAvatar"; import { CheckCircle, Search, XCircle } from "lucide-react"; import { useCallback, useMemo, useState } from "react"; import { approveAccountRequest, rejectAccountRequest } from "@/actions"; @@ -20,6 +19,7 @@ interface Request { email: string; createdAt: Date; name?: string; + image?: string; } interface RequestsListProps { @@ -130,9 +130,7 @@ export const RequestsList = ({ requests, currentUserRole }: RequestsListProps) = filteredRequests.map((request) => (
- - - +
{request.name || request.email}
{request.email}
diff --git a/packages/web/src/app/api/minidenticon/route.ts b/packages/web/src/app/api/minidenticon/route.ts new file mode 100644 index 000000000..139683b19 --- /dev/null +++ b/packages/web/src/app/api/minidenticon/route.ts @@ -0,0 +1,29 @@ +'use server'; + +import { minidenticon } from 'minidenticons'; +import sharp from 'sharp'; +import { NextRequest } from 'next/server'; +import { apiHandler } from '@/lib/apiHandler'; + +// Generates a minidenticon avatar PNG from an email address. +// Used as a fallback avatar in emails where data URIs aren't supported. +export const GET = apiHandler(async (request: NextRequest) => { + const email = request.nextUrl.searchParams.get('email'); + if (!email) { + return new Response('Missing email parameter', { status: 400 }); + } + + const svg = minidenticon(email, 50, 50); + const png = await sharp(Buffer.from(svg)) + .flatten({ background: { r: 241, g: 245, b: 249 } }) + .resize(128, 128) + .png() + .toBuffer(); + + return new Response(new Uint8Array(png), { + headers: { + 'Content-Type': 'image/png', + 'Cache-Control': 'public, max-age=31536000, immutable', + }, + }); +}, { track: false }); diff --git a/packages/web/src/app/redeem/components/acceptInviteCard.tsx b/packages/web/src/app/redeem/components/acceptInviteCard.tsx index d8f32e997..4d9b3ce23 100644 --- a/packages/web/src/app/redeem/components/acceptInviteCard.tsx +++ b/packages/web/src/app/redeem/components/acceptInviteCard.tsx @@ -4,6 +4,7 @@ import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; import { SourcebotLogo } from "@/app/components/sourcebotLogo"; import Link from "next/link"; import { Avatar, AvatarImage } from "@/components/ui/avatar"; +import { UserAvatar } from "@/components/userAvatar"; import placeholderAvatar from "@/public/placeholder_avatar.png"; import { ArrowRight, Loader2 } from "lucide-react"; import { Button } from "@/components/ui/button"; @@ -74,9 +75,11 @@ export const AcceptInviteCard = ({ inviteId, orgName, orgDomain, orgImageUrl, ho invited you to join the {orgName} organization.

- - - + diff --git a/packages/web/src/app/redeem/components/inviteNotFoundCard.tsx b/packages/web/src/app/redeem/components/inviteNotFoundCard.tsx index 52c9b80d2..496b8583e 100644 --- a/packages/web/src/app/redeem/components/inviteNotFoundCard.tsx +++ b/packages/web/src/app/redeem/components/inviteNotFoundCard.tsx @@ -1,6 +1,5 @@ import { SourcebotLogo } from "@/app/components/sourcebotLogo"; -import { Avatar, AvatarImage } from "@/components/ui/avatar"; -import placeholderAvatar from "@/public/placeholder_avatar.png"; +import { UserAvatar } from "@/components/userAvatar"; import { auth } from "@/auth"; import { Card } from "@/components/ui/card"; @@ -19,9 +18,11 @@ export const InviteNotFoundCard = async () => { The invite you are trying to redeem has already been used, expired, or does not exist.

- - - +

Logged in as {session?.user?.email}

diff --git a/packages/web/src/components/userAvatar.tsx b/packages/web/src/components/userAvatar.tsx new file mode 100644 index 000000000..77ecda8b3 --- /dev/null +++ b/packages/web/src/components/userAvatar.tsx @@ -0,0 +1,30 @@ +'use client'; + +import { minidenticon } from 'minidenticons'; +import { ComponentPropsWithoutRef, forwardRef, useMemo } from 'react'; +import { Avatar, AvatarImage } from '@/components/ui/avatar'; +import { cn } from '@/lib/utils'; + +interface UserAvatarProps extends ComponentPropsWithoutRef { + email?: string | null; + imageUrl?: string | null; +} + +export const UserAvatar = forwardRef( + ({ email, imageUrl, className, ...rest }, ref) => { + const identiconUri = useMemo(() => { + if (!email) { + return undefined; + } + return 'data:image/svg+xml;utf8,' + encodeURIComponent(minidenticon(email, 50, 50)); + }, [email]); + + return ( + + + + ); + } +); + +UserAvatar.displayName = 'UserAvatar'; diff --git a/packages/web/src/emails/inviteUserEmail.tsx b/packages/web/src/emails/inviteUserEmail.tsx index eb35ea8b2..fbcd0304d 100644 --- a/packages/web/src/emails/inviteUserEmail.tsx +++ b/packages/web/src/emails/inviteUserEmail.tsx @@ -18,6 +18,7 @@ import { EmailFooter } from './emailFooter'; import { SOURCEBOT_LOGO_LIGHT_LARGE_URL, SOURCEBOT_ARROW_IMAGE_URL, SOURCEBOT_PLACEHOLDER_AVATAR_URL } from './constants'; interface InviteUserEmailProps { + baseUrl: string; inviteLink: string; host: { email: string; @@ -32,6 +33,7 @@ interface InviteUserEmailProps { } export const InviteUserEmail = ({ + baseUrl, host, recipient, orgName, @@ -71,7 +73,7 @@ export const InviteUserEmail = ({ @@ -128,17 +130,16 @@ const InvitedByText = ({ email, name }: { email: string, name?: string }) => { } InviteUserEmail.PreviewProps = { + baseUrl: 'http://localhost:3000', host: { name: 'Alan Turing', email: 'alan.turing@example.com', - avatarUrl: SOURCEBOT_PLACEHOLDER_AVATAR_URL, }, recipient: { // name: 'alanturing', }, orgName: 'Enigma', - orgImageUrl: SOURCEBOT_PLACEHOLDER_AVATAR_URL, - inviteLink: 'https://sourcebot.example.com/redeem?invite_id=1234', + inviteLink: 'http://localhost:3000/redeem?invite_id=1234', } satisfies InviteUserEmailProps; export default InviteUserEmail; \ No newline at end of file diff --git a/packages/web/src/emails/joinRequestSubmittedEmail.tsx b/packages/web/src/emails/joinRequestSubmittedEmail.tsx index de9752064..dd690fcf8 100644 --- a/packages/web/src/emails/joinRequestSubmittedEmail.tsx +++ b/packages/web/src/emails/joinRequestSubmittedEmail.tsx @@ -69,7 +69,7 @@ export const JoinRequestSubmittedEmail = ({ Requestor avatar { } JoinRequestSubmittedEmail.PreviewProps = { - baseUrl: 'https://sourcebot.example.com', + baseUrl: 'http://localhost:3000', requestor: { name: 'Alan Turing', email: 'alan.turing@example.com', - avatarUrl: SOURCEBOT_PLACEHOLDER_AVATAR_URL, }, orgName: 'Enigma', orgDomain: '~', - orgImageUrl: SOURCEBOT_PLACEHOLDER_AVATAR_URL, } satisfies JoinRequestSubmittedEmailProps; export default JoinRequestSubmittedEmail; diff --git a/packages/web/src/features/chat/components/chatThread/messageAvatar.tsx b/packages/web/src/features/chat/components/chatThread/messageAvatar.tsx index 904a8c053..6261a631a 100644 --- a/packages/web/src/features/chat/components/chatThread/messageAvatar.tsx +++ b/packages/web/src/features/chat/components/chatThread/messageAvatar.tsx @@ -5,6 +5,7 @@ import { cn } from '@/lib/utils'; import { useThemeNormalized } from '@/hooks/useThemeNormalized'; import { useSession } from 'next-auth/react'; import { SBChatMessage } from '../../types'; +import { UserAvatar } from '@/components/userAvatar'; interface MessageAvatarProps { role: SBChatMessage['role']; @@ -16,16 +17,22 @@ export const MessageAvatar = ({ role, className }: MessageAvatarProps) => { const { data: session } = useSession(); const { theme } = useThemeNormalized(); + if (role === "user") { + return ( + + ); + } + return ( - {role === "user" ? "U" : "AI"} - {role === "user" ? ( - - ) : ( - - )} + AI + ) } diff --git a/yarn.lock b/yarn.lock index 659ac594d..2d9edceeb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -840,7 +840,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.27.1": +"@babel/code-frame@npm:^7.10.4": version: 7.27.1 resolution: "@babel/code-frame@npm:7.27.1" dependencies: @@ -946,7 +946,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.26.2, @babel/generator@npm:^7.29.0": +"@babel/generator@npm:^7.26.2, @babel/generator@npm:^7.27.0, @babel/generator@npm:^7.29.0": version: 7.29.1 resolution: "@babel/generator@npm:7.29.1" dependencies: @@ -959,19 +959,6 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.28.5": - version: 7.28.5 - resolution: "@babel/generator@npm:7.28.5" - dependencies: - "@babel/parser": "npm:^7.28.5" - "@babel/types": "npm:^7.28.5" - "@jridgewell/gen-mapping": "npm:^0.3.12" - "@jridgewell/trace-mapping": "npm:^0.3.28" - jsesc: "npm:^3.0.2" - checksum: 10c0/9f219fe1d5431b6919f1a5c60db8d5d34fe546c0d8f5a8511b32f847569234ffc8032beb9e7404649a143f54e15224ecb53a3d11b6bb85c3203e573d91fca752 - languageName: node - linkType: hard - "@babel/helper-compilation-targets@npm:^7.26.5": version: 7.26.5 resolution: "@babel/helper-compilation-targets@npm:7.26.5" @@ -1120,6 +1107,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:7.27.0": + version: 7.27.0 + resolution: "@babel/parser@npm:7.27.0" + dependencies: + "@babel/types": "npm:^7.27.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/ba2ed3f41735826546a3ef2a7634a8d10351df221891906e59b29b0a0cd748f9b0e7a6f07576858a9de8e77785aad925c8389ddef146de04ea2842047c9d2859 + languageName: node + linkType: hard + "@babel/parser@npm:^7.24.4, @babel/parser@npm:^7.28.6, @babel/parser@npm:^7.29.0": version: 7.29.0 resolution: "@babel/parser@npm:7.29.0" @@ -1142,7 +1140,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.27.0, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5": +"@babel/parser@npm:^7.27.0": version: 7.28.5 resolution: "@babel/parser@npm:7.28.5" dependencies: @@ -1194,18 +1192,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.27.2": - version: 7.27.2 - resolution: "@babel/template@npm:7.27.2" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/parser": "npm:^7.27.2" - "@babel/types": "npm:^7.27.1" - checksum: 10c0/ed9e9022651e463cc5f2cc21942f0e74544f1754d231add6348ff1b472985a3b3502041c0be62dc99ed2d12cfae0c51394bf827452b98a2f8769c03b87aadc81 - languageName: node - linkType: hard - -"@babel/template@npm:^7.28.6": +"@babel/template@npm:^7.27.0, @babel/template@npm:^7.28.6": version: 7.28.6 resolution: "@babel/template@npm:7.28.6" dependencies: @@ -1216,6 +1203,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:7.27.0": + version: 7.27.0 + resolution: "@babel/traverse@npm:7.27.0" + dependencies: + "@babel/code-frame": "npm:^7.26.2" + "@babel/generator": "npm:^7.27.0" + "@babel/parser": "npm:^7.27.0" + "@babel/template": "npm:^7.27.0" + "@babel/types": "npm:^7.27.0" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/c7af29781960dacaae51762e8bc6c4b13d6ab4b17312990fbca9fc38e19c4ad7fecaae24b1cf52fb844e8e6cdc76c70ad597f90e496bcb3cc0a1d66b41a0aa5b + languageName: node + linkType: hard + "@babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.10": version: 7.26.10 resolution: "@babel/traverse@npm:7.26.10" @@ -1231,21 +1233,6 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.27.0": - version: 7.28.5 - resolution: "@babel/traverse@npm:7.28.5" - dependencies: - "@babel/code-frame": "npm:^7.27.1" - "@babel/generator": "npm:^7.28.5" - "@babel/helper-globals": "npm:^7.28.0" - "@babel/parser": "npm:^7.28.5" - "@babel/template": "npm:^7.27.2" - "@babel/types": "npm:^7.28.5" - debug: "npm:^4.3.1" - checksum: 10c0/f6c4a595993ae2b73f2d4cd9c062f2e232174d293edd4abe1d715bd6281da8d99e47c65857e8d0917d9384c65972f4acdebc6749a7c40a8fcc38b3c7fb3e706f - languageName: node - linkType: hard - "@babel/traverse@npm:^7.28.6, @babel/traverse@npm:^7.29.0": version: 7.29.0 resolution: "@babel/traverse@npm:7.29.0" @@ -1271,7 +1258,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.26.0, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0": +"@babel/types@npm:^7.26.0, @babel/types@npm:^7.27.0, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0": version: 7.29.0 resolution: "@babel/types@npm:7.29.0" dependencies: @@ -1281,7 +1268,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.27.1, @babel/types@npm:^7.28.5": +"@babel/types@npm:^7.28.5": version: 7.28.5 resolution: "@babel/types@npm:7.28.5" dependencies: @@ -1906,16 +1893,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/aix-ppc64@npm:0.25.10" +"@esbuild/aix-ppc64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/aix-ppc64@npm:0.25.12" conditions: os=aix & cpu=ppc64 languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/aix-ppc64@npm:0.25.12" +"@esbuild/aix-ppc64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/aix-ppc64@npm:0.27.3" conditions: os=aix & cpu=ppc64 languageName: node linkType: hard @@ -1934,16 +1921,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/android-arm64@npm:0.25.10" +"@esbuild/android-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-arm64@npm:0.25.12" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm64@npm:0.25.12" +"@esbuild/android-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/android-arm64@npm:0.27.3" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -1962,16 +1949,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/android-arm@npm:0.25.10" +"@esbuild/android-arm@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-arm@npm:0.25.12" conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/android-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm@npm:0.25.12" +"@esbuild/android-arm@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/android-arm@npm:0.27.3" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -1990,16 +1977,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/android-x64@npm:0.25.10" +"@esbuild/android-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-x64@npm:0.25.12" conditions: os=android & cpu=x64 languageName: node linkType: hard -"@esbuild/android-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-x64@npm:0.25.12" +"@esbuild/android-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/android-x64@npm:0.27.3" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -2018,16 +2005,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/darwin-arm64@npm:0.25.10" +"@esbuild/darwin-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/darwin-arm64@npm:0.25.12" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-arm64@npm:0.25.12" +"@esbuild/darwin-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/darwin-arm64@npm:0.27.3" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -2046,16 +2033,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/darwin-x64@npm:0.25.10" +"@esbuild/darwin-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/darwin-x64@npm:0.25.12" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-x64@npm:0.25.12" +"@esbuild/darwin-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/darwin-x64@npm:0.27.3" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -2074,16 +2061,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/freebsd-arm64@npm:0.25.10" +"@esbuild/freebsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/freebsd-arm64@npm:0.25.12" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-arm64@npm:0.25.12" +"@esbuild/freebsd-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/freebsd-arm64@npm:0.27.3" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -2102,16 +2089,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/freebsd-x64@npm:0.25.10" +"@esbuild/freebsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/freebsd-x64@npm:0.25.12" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-x64@npm:0.25.12" +"@esbuild/freebsd-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/freebsd-x64@npm:0.27.3" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -2130,16 +2117,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-arm64@npm:0.25.10" +"@esbuild/linux-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-arm64@npm:0.25.12" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm64@npm:0.25.12" +"@esbuild/linux-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-arm64@npm:0.27.3" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -2158,16 +2145,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-arm@npm:0.25.10" +"@esbuild/linux-arm@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-arm@npm:0.25.12" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm@npm:0.25.12" +"@esbuild/linux-arm@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-arm@npm:0.27.3" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -2186,16 +2173,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-ia32@npm:0.25.10" +"@esbuild/linux-ia32@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-ia32@npm:0.25.12" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ia32@npm:0.25.12" +"@esbuild/linux-ia32@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-ia32@npm:0.27.3" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -2214,16 +2201,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-loong64@npm:0.25.10" +"@esbuild/linux-loong64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-loong64@npm:0.25.12" conditions: os=linux & cpu=loong64 languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-loong64@npm:0.25.12" +"@esbuild/linux-loong64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-loong64@npm:0.27.3" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -2242,16 +2229,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-mips64el@npm:0.25.10" +"@esbuild/linux-mips64el@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-mips64el@npm:0.25.12" conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-mips64el@npm:0.25.12" +"@esbuild/linux-mips64el@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-mips64el@npm:0.27.3" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -2270,16 +2257,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-ppc64@npm:0.25.10" +"@esbuild/linux-ppc64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-ppc64@npm:0.25.12" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ppc64@npm:0.25.12" +"@esbuild/linux-ppc64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-ppc64@npm:0.27.3" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -2298,16 +2285,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-riscv64@npm:0.25.10" +"@esbuild/linux-riscv64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-riscv64@npm:0.25.12" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-riscv64@npm:0.25.12" +"@esbuild/linux-riscv64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-riscv64@npm:0.27.3" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -2326,16 +2313,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-s390x@npm:0.25.10" +"@esbuild/linux-s390x@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-s390x@npm:0.25.12" conditions: os=linux & cpu=s390x languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-s390x@npm:0.25.12" +"@esbuild/linux-s390x@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-s390x@npm:0.27.3" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -2354,16 +2341,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-x64@npm:0.25.10" +"@esbuild/linux-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-x64@npm:0.25.12" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-x64@npm:0.25.12" +"@esbuild/linux-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/linux-x64@npm:0.27.3" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -2375,16 +2362,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/netbsd-arm64@npm:0.25.10" +"@esbuild/netbsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/netbsd-arm64@npm:0.25.12" conditions: os=netbsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/netbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-arm64@npm:0.25.12" +"@esbuild/netbsd-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/netbsd-arm64@npm:0.27.3" conditions: os=netbsd & cpu=arm64 languageName: node linkType: hard @@ -2403,16 +2390,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/netbsd-x64@npm:0.25.10" +"@esbuild/netbsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/netbsd-x64@npm:0.25.12" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-x64@npm:0.25.12" +"@esbuild/netbsd-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/netbsd-x64@npm:0.27.3" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -2424,16 +2411,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/openbsd-arm64@npm:0.25.10" +"@esbuild/openbsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/openbsd-arm64@npm:0.25.12" conditions: os=openbsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openbsd-arm64@npm:0.25.12" +"@esbuild/openbsd-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/openbsd-arm64@npm:0.27.3" conditions: os=openbsd & cpu=arm64 languageName: node linkType: hard @@ -2452,13 +2439,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/openbsd-x64@npm:0.25.10" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/openbsd-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/openbsd-x64@npm:0.25.12" @@ -2466,10 +2446,10 @@ __metadata: languageName: node linkType: hard -"@esbuild/openharmony-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/openharmony-arm64@npm:0.25.10" - conditions: os=openharmony & cpu=arm64 +"@esbuild/openbsd-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/openbsd-x64@npm:0.27.3" + conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -2480,6 +2460,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openharmony-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/openharmony-arm64@npm:0.27.3" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/sunos-x64@npm:0.21.5" @@ -2494,16 +2481,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/sunos-x64@npm:0.25.10" +"@esbuild/sunos-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/sunos-x64@npm:0.25.12" conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/sunos-x64@npm:0.25.12" +"@esbuild/sunos-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/sunos-x64@npm:0.27.3" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -2522,16 +2509,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/win32-arm64@npm:0.25.10" +"@esbuild/win32-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-arm64@npm:0.25.12" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-arm64@npm:0.25.12" +"@esbuild/win32-arm64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/win32-arm64@npm:0.27.3" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -2550,16 +2537,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/win32-ia32@npm:0.25.10" +"@esbuild/win32-ia32@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-ia32@npm:0.25.12" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-ia32@npm:0.25.12" +"@esbuild/win32-ia32@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/win32-ia32@npm:0.27.3" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -2578,16 +2565,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/win32-x64@npm:0.25.10" +"@esbuild/win32-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-x64@npm:0.25.12" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-x64@npm:0.25.12" +"@esbuild/win32-x64@npm:0.27.3": + version: 0.27.3 + resolution: "@esbuild/win32-x64@npm:0.27.3" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3951,6 +3938,13 @@ __metadata: languageName: node linkType: hard +"@next/env@npm:16.1.7": + version: 16.1.7 + resolution: "@next/env@npm:16.1.7" + checksum: 10c0/89a9e657b29d01be04394cd8a4c917cfdd76aec76ea9a0f7670896efe7668e665713adcf72632958b0c19ce66cf7e1f39961cfd9ba69d10c5a3e08ee20d2370a + languageName: node + linkType: hard + "@next/eslint-plugin-next@npm:16.1.6": version: 16.1.6 resolution: "@next/eslint-plugin-next@npm:16.1.6" @@ -3967,6 +3961,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-darwin-arm64@npm:16.1.7": + version: 16.1.7 + resolution: "@next/swc-darwin-arm64@npm:16.1.7" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@next/swc-darwin-x64@npm:16.1.6": version: 16.1.6 resolution: "@next/swc-darwin-x64@npm:16.1.6" @@ -3974,6 +3975,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-darwin-x64@npm:16.1.7": + version: 16.1.7 + resolution: "@next/swc-darwin-x64@npm:16.1.7" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@next/swc-linux-arm64-gnu@npm:16.1.6": version: 16.1.6 resolution: "@next/swc-linux-arm64-gnu@npm:16.1.6" @@ -3981,6 +3989,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-arm64-gnu@npm:16.1.7": + version: 16.1.7 + resolution: "@next/swc-linux-arm64-gnu@npm:16.1.7" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@next/swc-linux-arm64-musl@npm:16.1.6": version: 16.1.6 resolution: "@next/swc-linux-arm64-musl@npm:16.1.6" @@ -3988,6 +4003,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-arm64-musl@npm:16.1.7": + version: 16.1.7 + resolution: "@next/swc-linux-arm64-musl@npm:16.1.7" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@next/swc-linux-x64-gnu@npm:16.1.6": version: 16.1.6 resolution: "@next/swc-linux-x64-gnu@npm:16.1.6" @@ -3995,6 +4017,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-x64-gnu@npm:16.1.7": + version: 16.1.7 + resolution: "@next/swc-linux-x64-gnu@npm:16.1.7" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@next/swc-linux-x64-musl@npm:16.1.6": version: 16.1.6 resolution: "@next/swc-linux-x64-musl@npm:16.1.6" @@ -4002,6 +4031,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-linux-x64-musl@npm:16.1.7": + version: 16.1.7 + resolution: "@next/swc-linux-x64-musl@npm:16.1.7" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@next/swc-win32-arm64-msvc@npm:16.1.6": version: 16.1.6 resolution: "@next/swc-win32-arm64-msvc@npm:16.1.6" @@ -4009,6 +4045,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-win32-arm64-msvc@npm:16.1.7": + version: 16.1.7 + resolution: "@next/swc-win32-arm64-msvc@npm:16.1.7" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@next/swc-win32-x64-msvc@npm:16.1.6": version: 16.1.6 resolution: "@next/swc-win32-x64-msvc@npm:16.1.6" @@ -4016,6 +4059,13 @@ __metadata: languageName: node linkType: hard +"@next/swc-win32-x64-msvc@npm:16.1.7": + version: 16.1.7 + resolution: "@next/swc-win32-x64-msvc@npm:16.1.7" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -7180,13 +7230,13 @@ __metadata: languageName: node linkType: hard -"@react-email/preview-server@npm:5.2.8": - version: 5.2.8 - resolution: "@react-email/preview-server@npm:5.2.8" +"@react-email/preview-server@npm:5.2.10": + version: 5.2.10 + resolution: "@react-email/preview-server@npm:5.2.10" dependencies: - esbuild: "npm:0.25.10" - next: "npm:16.1.6" - checksum: 10c0/e3832f80d73aeab214423c8675072eb8ce635d0750fec5b3683359ed4a7b69451ebcef314e3a27b0b8d9c58c009005cea426e83706557d386c4e420fb74c6d83 + esbuild: "npm:0.27.3" + next: "npm:16.1.7" + checksum: 10c0/6b4c59048c088c94fa1020e44d74c91527ab48a2c02f331ddd56a855fe4254f2bb4158f6a8e2f6ec62ddaba7acb8c5b44f81374879b7d377a9d6b0629f09a330 languageName: node linkType: hard @@ -8958,7 +9008,7 @@ __metadata: "@radix-ui/react-toggle": "npm:^1.1.0" "@radix-ui/react-tooltip": "npm:^1.1.4" "@react-email/components": "npm:^1.0.2" - "@react-email/preview-server": "npm:5.2.8" + "@react-email/preview-server": "npm:5.2.10" "@react-email/render": "npm:^2.0.0" "@react-grab/mcp": "npm:^0.1.23" "@replit/codemirror-lang-csharp": "npm:^6.2.0" @@ -9042,6 +9092,7 @@ __metadata: linguist-languages: "npm:^9.3.1" lucide-react: "npm:^0.517.0" micromatch: "npm:^4.0.8" + minidenticons: "npm:^4.2.1" next: "npm:16.1.6" next-auth: "npm:^5.0.0-beta.30" next-navigation-guard: "npm:^0.2.0" @@ -9060,7 +9111,7 @@ __metadata: react: "npm:19.2.4" react-device-detect: "npm:^2.2.3" react-dom: "npm:19.2.4" - react-email: "npm:^5.1.0" + react-email: "npm:^5.2.10" react-grab: "npm:^0.1.23" react-hook-form: "npm:^7.53.0" react-hotkeys-hook: "npm:^4.5.1" @@ -10964,6 +11015,15 @@ __metadata: languageName: node linkType: hard +"baseline-browser-mapping@npm:^2.9.19": + version: 2.10.13 + resolution: "baseline-browser-mapping@npm:2.10.13" + bin: + baseline-browser-mapping: dist/cli.cjs + checksum: 10c0/3296604492f600927a9f519c81164522ac26456e63eb7b6816e39bfbb184494b48c58490639f2c0e35be97969d3a03613fddddbfdd3074710592369ed36957d5 + languageName: node + linkType: hard + "bcryptjs@npm:^3.0.2": version: 3.0.2 resolution: "bcryptjs@npm:3.0.2" @@ -11900,7 +11960,7 @@ __metadata: languageName: node linkType: hard -"consola@npm:^3.2.3, consola@npm:^3.4.0": +"consola@npm:^3.2.3, consola@npm:^3.4.2": version: 3.4.2 resolution: "consola@npm:3.4.2" checksum: 10c0/7cebe57ecf646ba74b300bcce23bff43034ed6fbec9f7e39c27cee1dc00df8a21cd336b466ad32e304ea70fba04ec9e890c200270de9a526ce021ba8a7e4c11a @@ -13102,36 +13162,36 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:0.25.10": - version: 0.25.10 - resolution: "esbuild@npm:0.25.10" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.10" - "@esbuild/android-arm": "npm:0.25.10" - "@esbuild/android-arm64": "npm:0.25.10" - "@esbuild/android-x64": "npm:0.25.10" - "@esbuild/darwin-arm64": "npm:0.25.10" - "@esbuild/darwin-x64": "npm:0.25.10" - "@esbuild/freebsd-arm64": "npm:0.25.10" - "@esbuild/freebsd-x64": "npm:0.25.10" - "@esbuild/linux-arm": "npm:0.25.10" - "@esbuild/linux-arm64": "npm:0.25.10" - "@esbuild/linux-ia32": "npm:0.25.10" - "@esbuild/linux-loong64": "npm:0.25.10" - "@esbuild/linux-mips64el": "npm:0.25.10" - "@esbuild/linux-ppc64": "npm:0.25.10" - "@esbuild/linux-riscv64": "npm:0.25.10" - "@esbuild/linux-s390x": "npm:0.25.10" - "@esbuild/linux-x64": "npm:0.25.10" - "@esbuild/netbsd-arm64": "npm:0.25.10" - "@esbuild/netbsd-x64": "npm:0.25.10" - "@esbuild/openbsd-arm64": "npm:0.25.10" - "@esbuild/openbsd-x64": "npm:0.25.10" - "@esbuild/openharmony-arm64": "npm:0.25.10" - "@esbuild/sunos-x64": "npm:0.25.10" - "@esbuild/win32-arm64": "npm:0.25.10" - "@esbuild/win32-ia32": "npm:0.25.10" - "@esbuild/win32-x64": "npm:0.25.10" +"esbuild@npm:0.27.3": + version: 0.27.3 + resolution: "esbuild@npm:0.27.3" + dependencies: + "@esbuild/aix-ppc64": "npm:0.27.3" + "@esbuild/android-arm": "npm:0.27.3" + "@esbuild/android-arm64": "npm:0.27.3" + "@esbuild/android-x64": "npm:0.27.3" + "@esbuild/darwin-arm64": "npm:0.27.3" + "@esbuild/darwin-x64": "npm:0.27.3" + "@esbuild/freebsd-arm64": "npm:0.27.3" + "@esbuild/freebsd-x64": "npm:0.27.3" + "@esbuild/linux-arm": "npm:0.27.3" + "@esbuild/linux-arm64": "npm:0.27.3" + "@esbuild/linux-ia32": "npm:0.27.3" + "@esbuild/linux-loong64": "npm:0.27.3" + "@esbuild/linux-mips64el": "npm:0.27.3" + "@esbuild/linux-ppc64": "npm:0.27.3" + "@esbuild/linux-riscv64": "npm:0.27.3" + "@esbuild/linux-s390x": "npm:0.27.3" + "@esbuild/linux-x64": "npm:0.27.3" + "@esbuild/netbsd-arm64": "npm:0.27.3" + "@esbuild/netbsd-x64": "npm:0.27.3" + "@esbuild/openbsd-arm64": "npm:0.27.3" + "@esbuild/openbsd-x64": "npm:0.27.3" + "@esbuild/openharmony-arm64": "npm:0.27.3" + "@esbuild/sunos-x64": "npm:0.27.3" + "@esbuild/win32-arm64": "npm:0.27.3" + "@esbuild/win32-ia32": "npm:0.27.3" + "@esbuild/win32-x64": "npm:0.27.3" dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -13187,7 +13247,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 10c0/8ee5fdd43ed0d4092ce7f41577c63147f54049d5617763f0549c638bbe939e8adaa8f1a2728adb63417eb11df51956b7b0d8eb88ee08c27ad1d42960256158fa + checksum: 10c0/fdc3f87a3f08b3ef98362f37377136c389a0d180fda4b8d073b26ba930cf245521db0a368f119cc7624bc619248fff1439f5811f062d853576f8ffa3df8ee5f1 languageName: node linkType: hard @@ -14650,7 +14710,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^11.0.0, glob@npm:^11.1.0": +"glob@npm:^11.1.0": version: 11.1.0 resolution: "glob@npm:11.1.0" dependencies: @@ -17298,6 +17358,13 @@ __metadata: languageName: node linkType: hard +"minidenticons@npm:^4.2.1": + version: 4.2.1 + resolution: "minidenticons@npm:4.2.1" + checksum: 10c0/086f78ce0fa36030275a206c66e8c228dc5c035b4909ea42e298c0595b305f178733230d9d11d9ff8411d6d4a1a390f07fe75871bfb82c1afdaeca4ae253bf1a + languageName: node + linkType: hard + "minimalistic-assert@npm:^1.0.0": version: 1.0.1 resolution: "minimalistic-assert@npm:1.0.1" @@ -17679,6 +17746,66 @@ __metadata: languageName: node linkType: hard +"next@npm:16.1.7": + version: 16.1.7 + resolution: "next@npm:16.1.7" + dependencies: + "@next/env": "npm:16.1.7" + "@next/swc-darwin-arm64": "npm:16.1.7" + "@next/swc-darwin-x64": "npm:16.1.7" + "@next/swc-linux-arm64-gnu": "npm:16.1.7" + "@next/swc-linux-arm64-musl": "npm:16.1.7" + "@next/swc-linux-x64-gnu": "npm:16.1.7" + "@next/swc-linux-x64-musl": "npm:16.1.7" + "@next/swc-win32-arm64-msvc": "npm:16.1.7" + "@next/swc-win32-x64-msvc": "npm:16.1.7" + "@swc/helpers": "npm:0.5.15" + baseline-browser-mapping: "npm:^2.9.19" + caniuse-lite: "npm:^1.0.30001579" + postcss: "npm:8.4.31" + sharp: "npm:^0.34.4" + styled-jsx: "npm:5.1.6" + peerDependencies: + "@opentelemetry/api": ^1.1.0 + "@playwright/test": ^1.51.1 + babel-plugin-react-compiler: "*" + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + dependenciesMeta: + "@next/swc-darwin-arm64": + optional: true + "@next/swc-darwin-x64": + optional: true + "@next/swc-linux-arm64-gnu": + optional: true + "@next/swc-linux-arm64-musl": + optional: true + "@next/swc-linux-x64-gnu": + optional: true + "@next/swc-linux-x64-musl": + optional: true + "@next/swc-win32-arm64-msvc": + optional: true + "@next/swc-win32-x64-msvc": + optional: true + sharp: + optional: true + peerDependenciesMeta: + "@opentelemetry/api": + optional: true + "@playwright/test": + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + bin: + next: dist/bin/next + checksum: 10c0/f6cebb3ce57d267cd92fb364b56710004c883baafea9cfed36434c0cd51db74299d59094ab782674d9813f10ce2891b633bc6d94e7e38aa9af7a1870194818d0 + languageName: node + linkType: hard + "nice-try@npm:^1.0.4": version: 1.0.5 resolution: "nice-try@npm:1.0.5" @@ -17882,18 +18009,18 @@ __metadata: languageName: node linkType: hard -"nypm@npm:0.6.0": - version: 0.6.0 - resolution: "nypm@npm:0.6.0" +"nypm@npm:0.6.2": + version: 0.6.2 + resolution: "nypm@npm:0.6.2" dependencies: citty: "npm:^0.1.6" - consola: "npm:^3.4.0" + consola: "npm:^3.4.2" pathe: "npm:^2.0.3" - pkg-types: "npm:^2.0.0" - tinyexec: "npm:^0.3.2" + pkg-types: "npm:^2.3.0" + tinyexec: "npm:^1.0.1" bin: nypm: dist/cli.mjs - checksum: 10c0/899f16c2df1bdf3ef4de5f7d4ed5530e2e1ca097cc7dedbaa25abb6b8e44bb470c25cd26639f6e3e4f5734867e61f7f77c4ed5dfbe86b2a1bdef4525a2dc0026 + checksum: 10c0/b1aca658e29ed616ad6e487f9c3fd76773485ad75c1f99efe130ccb304de60b639a3dda43c3ce6c060113a3eebaee7ccbea554f5fbd1f244474181dc9bf3f17c languageName: node linkType: hard @@ -18626,7 +18753,7 @@ __metadata: languageName: node linkType: hard -"pkg-types@npm:^2.0.0": +"pkg-types@npm:^2.3.0": version: 2.3.0 resolution: "pkg-types@npm:2.3.0" dependencies: @@ -19239,30 +19366,30 @@ __metadata: languageName: node linkType: hard -"react-email@npm:^5.1.0": - version: 5.1.0 - resolution: "react-email@npm:5.1.0" +"react-email@npm:^5.2.10": + version: 5.2.10 + resolution: "react-email@npm:5.2.10" dependencies: - "@babel/parser": "npm:^7.27.0" - "@babel/traverse": "npm:^7.27.0" + "@babel/parser": "npm:7.27.0" + "@babel/traverse": "npm:7.27.0" chokidar: "npm:^4.0.3" commander: "npm:^13.0.0" conf: "npm:^15.0.2" debounce: "npm:^2.0.0" - esbuild: "npm:^0.25.0" - glob: "npm:^11.0.0" + esbuild: "npm:0.27.3" + glob: "npm:^13.0.6" jiti: "npm:2.4.2" log-symbols: "npm:^7.0.0" mime-types: "npm:^3.0.0" normalize-path: "npm:^3.0.0" - nypm: "npm:0.6.0" + nypm: "npm:0.6.2" ora: "npm:^8.0.0" prompts: "npm:2.4.2" socket.io: "npm:^4.8.1" tsconfig-paths: "npm:4.2.0" bin: - email: dist/index.js - checksum: 10c0/7dd6d344a9d27c4ac9238fe7c67ed0e9288200176a1ecdc27470163ea3ad48e3b782e895c21ee7870430dc873dbe930c7ea37d02199308d93eee25e16206db70 + email: dist/index.mjs + checksum: 10c0/0749af457911de31fd65fc3efde5e706c23ea745293f0d4e347d6587a4b3cf14485b9bb8d2ec9408b06160943a55175275e8c5be0d392388f42959950269be21 languageName: node linkType: hard @@ -21541,13 +21668,20 @@ __metadata: languageName: node linkType: hard -"tinyexec@npm:^0.3.1, tinyexec@npm:^0.3.2": +"tinyexec@npm:^0.3.1": version: 0.3.2 resolution: "tinyexec@npm:0.3.2" checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 languageName: node linkType: hard +"tinyexec@npm:^1.0.1": + version: 1.0.4 + resolution: "tinyexec@npm:1.0.4" + checksum: 10c0/d4a5bbcf6bdb23527a4b74c4aa566f41432167112fe76f420ec7e3a90a3ecfd3a7d944383e2719fc3987b69400f7b928daf08700d145fb527c2e80ec01e198bd + languageName: node + linkType: hard + "tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.9": version: 0.2.12 resolution: "tinyglobby@npm:0.2.12"