mirror of
https://github.com/LukeHagar/better-auth.git
synced 2025-12-10 04:19:32 +00:00
docs: v1.2 release notes (#1602)
This commit is contained in:
@@ -5,28 +5,51 @@ import {
|
|||||||
Card,
|
Card,
|
||||||
CardContent,
|
CardContent,
|
||||||
CardDescription,
|
CardDescription,
|
||||||
CardFooter,
|
|
||||||
CardHeader,
|
CardHeader,
|
||||||
CardTitle,
|
CardTitle,
|
||||||
} from "@/components/ui/card";
|
} from "@/components/ui/card";
|
||||||
import { Checkbox } from "@/components/ui/checkbox";
|
|
||||||
import { Input } from "@/components/ui/input";
|
import { Input } from "@/components/ui/input";
|
||||||
import { Label } from "@/components/ui/label";
|
import { Label } from "@/components/ui/label";
|
||||||
import { PasswordInput } from "@/components/ui/password-input";
|
import { PasswordInput } from "@/components/ui/password-input";
|
||||||
import { signIn } from "@/lib/auth-client";
|
import { signIn } from "@/lib/auth-client";
|
||||||
import { DiscordLogoIcon, GitHubLogoIcon } from "@radix-ui/react-icons";
|
import { DiscordLogoIcon, GitHubLogoIcon } from "@radix-ui/react-icons";
|
||||||
import { Key, Loader2 } from "lucide-react";
|
import { Loader2 } from "lucide-react";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { useState } from "react";
|
import { useState, useEffect } from "react";
|
||||||
import { toast } from "sonner";
|
import { toast } from "sonner";
|
||||||
|
import { z } from "zod";
|
||||||
|
|
||||||
|
const signInSchema = z.object({
|
||||||
|
email: z.string().email("Invalid email address"),
|
||||||
|
password: z.string().min(8, "Password must be at least 8 characters"),
|
||||||
|
});
|
||||||
|
|
||||||
export default function SignIn() {
|
export default function SignIn() {
|
||||||
const [email, setEmail] = useState("");
|
const [email, setEmail] = useState("");
|
||||||
const [password, setPassword] = useState("");
|
const [password, setPassword] = useState("");
|
||||||
const [rememberMe, setRememberMe] = useState(false);
|
const [rememberMe, setRememberMe] = useState(false);
|
||||||
|
const [errors, setErrors] = useState({ email: "", password: "" });
|
||||||
|
const [isValid, setIsValid] = useState(false);
|
||||||
|
const [touched, setTouched] = useState({ email: false, password: false });
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const validationResult = signInSchema.safeParse({ email, password });
|
||||||
|
if (!validationResult.success) {
|
||||||
|
const newErrors: any = {};
|
||||||
|
validationResult.error.errors.forEach((err) => {
|
||||||
|
newErrors[err.path[0]] = err.message;
|
||||||
|
});
|
||||||
|
setErrors(newErrors);
|
||||||
|
setIsValid(false);
|
||||||
|
} else {
|
||||||
|
setErrors({ email: "", password: "" });
|
||||||
|
setIsValid(true);
|
||||||
|
}
|
||||||
|
}, [email, password]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card className="z-50 rounded-md rounded-t-none max-w-md">
|
<Card className="z-50 rounded-md rounded-t-none max-w-md">
|
||||||
<CardHeader>
|
<CardHeader>
|
||||||
@@ -46,9 +69,13 @@ export default function SignIn() {
|
|||||||
required
|
required
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
setEmail(e.target.value);
|
setEmail(e.target.value);
|
||||||
|
setTouched((prev) => ({ ...prev, email: true }));
|
||||||
}}
|
}}
|
||||||
value={email}
|
value={email}
|
||||||
/>
|
/>
|
||||||
|
{touched.email && errors.email && (
|
||||||
|
<p className="text-red-500 text-sm">{errors.email}</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="grid gap-2">
|
<div className="grid gap-2">
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
@@ -63,24 +90,21 @@ export default function SignIn() {
|
|||||||
<PasswordInput
|
<PasswordInput
|
||||||
id="password"
|
id="password"
|
||||||
value={password}
|
value={password}
|
||||||
onChange={(e) => setPassword(e.target.value)}
|
onChange={(e) => {
|
||||||
|
setPassword(e.target.value);
|
||||||
|
setTouched((prev) => ({ ...prev, password: true }));
|
||||||
|
}}
|
||||||
autoComplete="password"
|
autoComplete="password"
|
||||||
placeholder="Password"
|
placeholder="Password"
|
||||||
/>
|
/>
|
||||||
|
{touched.password && errors.password && (
|
||||||
|
<p className="text-red-500 text-sm">{errors.password}</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-2">
|
|
||||||
<Checkbox
|
|
||||||
onClick={() => {
|
|
||||||
setRememberMe(!rememberMe);
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<Label>Remember me</Label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
type="submit"
|
type="submit"
|
||||||
className="w-full"
|
className="w-full"
|
||||||
disabled={loading}
|
disabled={!isValid || loading}
|
||||||
onClick={async () => {
|
onClick={async () => {
|
||||||
await signIn.email(
|
await signIn.email(
|
||||||
{
|
{
|
||||||
@@ -90,21 +114,16 @@ export default function SignIn() {
|
|||||||
rememberMe,
|
rememberMe,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
onRequest: () => {
|
onRequest: () => setLoading(true),
|
||||||
setLoading(true);
|
onResponse: () => setLoading(false),
|
||||||
},
|
onError: (ctx) => toast.error(ctx.error.message),
|
||||||
onResponse: () => {
|
|
||||||
setLoading(false);
|
|
||||||
},
|
|
||||||
onError: (ctx) => {
|
|
||||||
toast.error(ctx.error.message);
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{loading ? <Loader2 size={16} className="animate-spin" /> : "Login"}
|
{loading ? <Loader2 size={16} className="animate-spin" /> : "Login"}
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<div className="grid grid-cols-4 gap-2">
|
<div className="grid grid-cols-4 gap-2">
|
||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
@@ -262,34 +281,8 @@ export default function SignIn() {
|
|||||||
</svg>
|
</svg>
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
<Button
|
|
||||||
variant="outline"
|
|
||||||
className="gap-2"
|
|
||||||
onClick={async () => {
|
|
||||||
await signIn.passkey({
|
|
||||||
fetchOptions: {
|
|
||||||
onSuccess(context) {
|
|
||||||
router.push("/dashboard");
|
|
||||||
},
|
|
||||||
onError(context) {
|
|
||||||
toast.error(context.error.message);
|
|
||||||
},
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<Key size={16} />
|
|
||||||
Sign-in with Passkey
|
|
||||||
</Button>
|
|
||||||
</div>
|
</div>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
<CardFooter>
|
|
||||||
<div className="flex justify-center w-full border-t py-4">
|
|
||||||
<p className="text-center text-xs text-neutral-500">
|
|
||||||
Secured by <span className="text-orange-400">better-auth.</span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</CardFooter>
|
|
||||||
</Card>
|
</Card>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,48 +1,102 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
import Image from "next/image";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import {
|
import {
|
||||||
Card,
|
Card,
|
||||||
CardContent,
|
CardContent,
|
||||||
CardDescription,
|
CardDescription,
|
||||||
CardFooter,
|
|
||||||
CardHeader,
|
CardHeader,
|
||||||
CardTitle,
|
CardTitle,
|
||||||
} from "@/components/ui/card";
|
} from "@/components/ui/card";
|
||||||
|
import { toast } from "sonner";
|
||||||
import { Input } from "@/components/ui/input";
|
import { Input } from "@/components/ui/input";
|
||||||
import { Label } from "@/components/ui/label";
|
import { Label } from "@/components/ui/label";
|
||||||
import { PasswordInput } from "@/components/ui/password-input";
|
import { PasswordInput } from "@/components/ui/password-input";
|
||||||
import { DiscordLogoIcon, GitHubLogoIcon } from "@radix-ui/react-icons";
|
import { signUp, signIn } from "@/lib/auth-client";
|
||||||
import { useState } from "react";
|
|
||||||
import { signIn, signUp } from "@/lib/auth-client";
|
|
||||||
import Image from "next/image";
|
|
||||||
import { Loader2, X } from "lucide-react";
|
|
||||||
import { toast } from "sonner";
|
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
import { useState, useEffect, ChangeEvent } from "react";
|
||||||
|
import { z } from "zod";
|
||||||
|
import { DiscordLogoIcon, GitHubLogoIcon } from "@radix-ui/react-icons";
|
||||||
|
import { Loader2, X } from "lucide-react";
|
||||||
|
const signUpSchema = z
|
||||||
|
.object({
|
||||||
|
firstName: z.string().min(1, "First name is required"),
|
||||||
|
lastName: z.string().min(1, "Last name is required"),
|
||||||
|
email: z.string().email("Invalid email address"),
|
||||||
|
image: z
|
||||||
|
.instanceof(File)
|
||||||
|
.optional()
|
||||||
|
.refine((file) => !file || file.type.startsWith("image/"), {
|
||||||
|
message: "Invalid file type. Only images are allowed.",
|
||||||
|
path: ["image"],
|
||||||
|
}),
|
||||||
|
password: z.string().min(6, "Password must be at least 6 characters"),
|
||||||
|
passwordConfirmation: z
|
||||||
|
.string()
|
||||||
|
.min(6, "Password must be at least 6 characters"),
|
||||||
|
})
|
||||||
|
|
||||||
|
.refine((data) => data.password === data.passwordConfirmation, {
|
||||||
|
message: "Passwords do not match",
|
||||||
|
path: ["passwordConfirmation"],
|
||||||
|
});
|
||||||
|
|
||||||
|
type FormDataType = z.infer<typeof signUpSchema>;
|
||||||
|
|
||||||
|
type ErrorsType = Partial<Record<keyof FormDataType, string>>;
|
||||||
|
|
||||||
|
type TouchedType = Partial<Record<keyof FormDataType, boolean>>;
|
||||||
|
|
||||||
export function SignUp() {
|
export function SignUp() {
|
||||||
const [firstName, setFirstName] = useState("");
|
const [formData, setFormData] = useState<FormDataType>({
|
||||||
const [lastName, setLastName] = useState("");
|
firstName: "",
|
||||||
const [email, setEmail] = useState("");
|
lastName: "",
|
||||||
const [password, setPassword] = useState("");
|
email: "",
|
||||||
const [passwordConfirmation, setPasswordConfirmation] = useState("");
|
password: "",
|
||||||
|
image: undefined,
|
||||||
|
passwordConfirmation: "",
|
||||||
|
});
|
||||||
|
const [errors, setErrors] = useState<ErrorsType>({});
|
||||||
|
const [isValid, setIsValid] = useState(false);
|
||||||
|
const [touched, setTouched] = useState<TouchedType>({});
|
||||||
|
const [loading, setLoading] = useState(false);
|
||||||
const [image, setImage] = useState<File | null>(null);
|
const [image, setImage] = useState<File | null>(null);
|
||||||
const [imagePreview, setImagePreview] = useState<string | null>(null);
|
const [imagePreview, setImagePreview] = useState<string | null>(null);
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
const handleImageChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
useEffect(() => {
|
||||||
const file = e.target.files?.[0];
|
const validationResult = signUpSchema.safeParse(formData);
|
||||||
if (file) {
|
if (!validationResult.success) {
|
||||||
setImage(file);
|
const newErrors: ErrorsType = {};
|
||||||
const reader = new FileReader();
|
validationResult.error.errors.forEach((err) => {
|
||||||
reader.onloadend = () => {
|
if (err.path[0])
|
||||||
setImagePreview(reader.result as string);
|
newErrors[err.path[0] as keyof FormDataType] = err.message;
|
||||||
|
});
|
||||||
|
setErrors(newErrors);
|
||||||
|
setIsValid(false);
|
||||||
|
} else {
|
||||||
|
setErrors({});
|
||||||
|
setIsValid(true);
|
||||||
|
}
|
||||||
|
}, [formData]);
|
||||||
|
|
||||||
|
const handleChange = (e: ChangeEvent<HTMLInputElement>) => {
|
||||||
|
const { id, value } = e.target;
|
||||||
|
setFormData((prev) => ({ ...prev, [id]: value }));
|
||||||
|
setTouched((prev) => ({ ...prev, [id]: true }));
|
||||||
};
|
};
|
||||||
|
const handleImageChange = (e: ChangeEvent<HTMLInputElement>) => {
|
||||||
|
const file = e.target.files?.[0] || null;
|
||||||
|
setImage(file);
|
||||||
|
setFormData((prev) => ({ ...prev, image: file || undefined }));
|
||||||
|
if (file) {
|
||||||
|
const reader = new FileReader();
|
||||||
|
reader.onload = () => setImagePreview(reader.result as string);
|
||||||
reader.readAsDataURL(file);
|
reader.readAsDataURL(file);
|
||||||
|
} else {
|
||||||
|
setImagePreview(null);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
const [loading, setLoading] = useState(false);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card className="z-50 rounded-md rounded-t-none max-w-md">
|
<Card className="z-50 rounded-md rounded-t-none max-w-md">
|
||||||
<CardHeader>
|
<CardHeader>
|
||||||
@@ -55,28 +109,28 @@ export function SignUp() {
|
|||||||
<div className="grid gap-4">
|
<div className="grid gap-4">
|
||||||
<div className="grid grid-cols-2 gap-4">
|
<div className="grid grid-cols-2 gap-4">
|
||||||
<div className="grid gap-2">
|
<div className="grid gap-2">
|
||||||
<Label htmlFor="first-name">First name</Label>
|
<Label htmlFor="firstName">First name</Label>
|
||||||
<Input
|
<Input
|
||||||
id="first-name"
|
id="firstName"
|
||||||
placeholder="Max"
|
placeholder="Max"
|
||||||
required
|
value={formData.firstName}
|
||||||
onChange={(e) => {
|
onChange={handleChange}
|
||||||
setFirstName(e.target.value);
|
|
||||||
}}
|
|
||||||
value={firstName}
|
|
||||||
/>
|
/>
|
||||||
|
{touched.firstName && errors.firstName && (
|
||||||
|
<p className="text-red-500 text-sm">{errors.firstName}</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="grid gap-2">
|
<div className="grid gap-2">
|
||||||
<Label htmlFor="last-name">Last name</Label>
|
<Label htmlFor="lastName">Last name</Label>
|
||||||
<Input
|
<Input
|
||||||
id="last-name"
|
id="lastName"
|
||||||
placeholder="Robinson"
|
placeholder="Robinson"
|
||||||
required
|
value={formData.lastName}
|
||||||
onChange={(e) => {
|
onChange={handleChange}
|
||||||
setLastName(e.target.value);
|
|
||||||
}}
|
|
||||||
value={lastName}
|
|
||||||
/>
|
/>
|
||||||
|
{touched.lastName && errors.lastName && (
|
||||||
|
<p className="text-red-500 text-sm">{errors.lastName}</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="grid gap-2">
|
<div className="grid gap-2">
|
||||||
@@ -85,32 +139,38 @@ export function SignUp() {
|
|||||||
id="email"
|
id="email"
|
||||||
type="email"
|
type="email"
|
||||||
placeholder="m@example.com"
|
placeholder="m@example.com"
|
||||||
required
|
value={formData.email}
|
||||||
onChange={(e) => {
|
onChange={handleChange}
|
||||||
setEmail(e.target.value);
|
|
||||||
}}
|
|
||||||
value={email}
|
|
||||||
/>
|
/>
|
||||||
|
{touched.email && errors.email && (
|
||||||
|
<p className="text-red-500 text-sm">{errors.email}</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="grid gap-2">
|
<div className="grid gap-2">
|
||||||
<Label htmlFor="password">Password</Label>
|
<Label htmlFor="password">Password</Label>
|
||||||
<PasswordInput
|
<PasswordInput
|
||||||
id="password"
|
id="password"
|
||||||
value={password}
|
value={formData.password}
|
||||||
onChange={(e) => setPassword(e.target.value)}
|
onChange={handleChange}
|
||||||
autoComplete="new-password"
|
|
||||||
placeholder="Password"
|
placeholder="Password"
|
||||||
/>
|
/>
|
||||||
|
{touched.password && errors.password && (
|
||||||
|
<p className="text-red-500 text-sm">{errors.password}</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="grid gap-2">
|
<div className="grid gap-2">
|
||||||
<Label htmlFor="password">Confirm Password</Label>
|
<Label htmlFor="passwordConfirmation">Confirm Password</Label>
|
||||||
<PasswordInput
|
<PasswordInput
|
||||||
id="password_confirmation"
|
id="passwordConfirmation"
|
||||||
value={passwordConfirmation}
|
value={formData.passwordConfirmation}
|
||||||
onChange={(e) => setPasswordConfirmation(e.target.value)}
|
onChange={handleChange}
|
||||||
autoComplete="new-password"
|
|
||||||
placeholder="Confirm Password"
|
placeholder="Confirm Password"
|
||||||
/>
|
/>
|
||||||
|
{touched.passwordConfirmation && errors.passwordConfirmation && (
|
||||||
|
<p className="text-red-500 text-sm">
|
||||||
|
{errors.passwordConfirmation}
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="grid gap-2">
|
<div className="grid gap-2">
|
||||||
<Label htmlFor="image">Profile Image (optional)</Label>
|
<Label htmlFor="image">Profile Image (optional)</Label>
|
||||||
@@ -125,7 +185,6 @@ export function SignUp() {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
<div className="flex items-center gap-2 w-full">
|
|
||||||
<Input
|
<Input
|
||||||
id="image"
|
id="image"
|
||||||
type="file"
|
type="file"
|
||||||
@@ -144,23 +203,18 @@ export function SignUp() {
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<Button
|
<Button
|
||||||
type="submit"
|
|
||||||
className="w-full"
|
className="w-full"
|
||||||
disabled={loading}
|
disabled={!isValid || loading}
|
||||||
onClick={async () => {
|
onClick={async () => {
|
||||||
if (password !== passwordConfirmation) {
|
setLoading(true);
|
||||||
toast.error(
|
|
||||||
"Please ensure your password and confirm password match.",
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
await signUp.email({
|
await signUp.email({
|
||||||
email,
|
email: formData.email,
|
||||||
password,
|
password: formData.password,
|
||||||
name: `${firstName} ${lastName}`,
|
name: `${formData.firstName} ${formData.lastName}`,
|
||||||
image: image ? await convertImageToBase64(image) : "",
|
image: formData.image
|
||||||
|
? await convertImageToBase64(formData.image)
|
||||||
|
: "",
|
||||||
callbackURL: "/dashboard",
|
callbackURL: "/dashboard",
|
||||||
fetchOptions: {
|
fetchOptions: {
|
||||||
onResponse: () => {
|
onResponse: () => {
|
||||||
@@ -177,6 +231,8 @@ export function SignUp() {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
setLoading(false);
|
||||||
|
router.push("/dashboard");
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{loading ? (
|
{loading ? (
|
||||||
@@ -269,17 +325,9 @@ export function SignUp() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
<CardFooter>
|
|
||||||
<div className="flex justify-center w-full border-t py-4">
|
|
||||||
<p className="text-center text-xs text-neutral-500">
|
|
||||||
Secured by <span className="text-orange-400">better-auth.</span>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</CardFooter>
|
|
||||||
</Card>
|
</Card>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function convertImageToBase64(file: File): Promise<string> {
|
async function convertImageToBase64(file: File): Promise<string> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const reader = new FileReader();
|
const reader = new FileReader();
|
||||||
|
|||||||
173
docs/app/api/og-release/route.tsx
Normal file
173
docs/app/api/og-release/route.tsx
Normal file
@@ -0,0 +1,173 @@
|
|||||||
|
import { ImageResponse } from "@vercel/og";
|
||||||
|
import { z } from "zod";
|
||||||
|
export const runtime = "edge";
|
||||||
|
|
||||||
|
const ogSchema = z.object({
|
||||||
|
heading: z.string(),
|
||||||
|
description: z.string().optional(),
|
||||||
|
date: z.string().optional(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export async function GET(req: Request) {
|
||||||
|
try {
|
||||||
|
const geist = await fetch(
|
||||||
|
new URL("../../../assets/Geist.ttf", import.meta.url),
|
||||||
|
).then((res) => res.arrayBuffer());
|
||||||
|
|
||||||
|
const url = new URL(req.url);
|
||||||
|
const urlParamsValues = Object.fromEntries(url.searchParams);
|
||||||
|
const validParams = ogSchema.parse(urlParamsValues);
|
||||||
|
|
||||||
|
const { heading, description, date } = validParams;
|
||||||
|
const trueHeading =
|
||||||
|
heading.length > 140 ? `${heading.substring(0, 140)}...` : heading;
|
||||||
|
|
||||||
|
return new ImageResponse(
|
||||||
|
(
|
||||||
|
<div
|
||||||
|
tw="flex w-full h-full relative flex-col"
|
||||||
|
style={{
|
||||||
|
background:
|
||||||
|
"radial-gradient(circle 230px at 0% 0%, #000000, #000000)",
|
||||||
|
fontFamily: "Geist",
|
||||||
|
color: "white",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
tw="flex w-full h-full relative"
|
||||||
|
style={{
|
||||||
|
borderRadius: "10px",
|
||||||
|
border: "1px solid rgba(32, 34, 34, 0.5)",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
tw="absolute"
|
||||||
|
style={{
|
||||||
|
width: "350px",
|
||||||
|
height: "120px",
|
||||||
|
borderRadius: "100px",
|
||||||
|
background: "#c7c7c7",
|
||||||
|
opacity: 0.21,
|
||||||
|
filter: "blur(35px)",
|
||||||
|
transform: "rotate(50deg)",
|
||||||
|
top: "18%",
|
||||||
|
// zIndex: 999,
|
||||||
|
left: "0%",
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div
|
||||||
|
tw="flex flex-col w-full relative h-full p-8"
|
||||||
|
style={{
|
||||||
|
gap: "14px",
|
||||||
|
position: "relative",
|
||||||
|
zIndex: 999,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
tw="absolute bg-repeat w-full h-full"
|
||||||
|
style={{
|
||||||
|
width: "100%",
|
||||||
|
height: "100%",
|
||||||
|
zIndex: 999,
|
||||||
|
|
||||||
|
background:
|
||||||
|
"url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zOnN2Z2pzPSJodHRwOi8vc3ZnanMuZGV2L3N2Z2pzIiB2aWV3Qm94PSIwIDAgODAwIDgwMCIgd2lkdGg9IjgwMCIgaGVpZ2h0PSI4MDAiPjxnIHN0cm9rZS13aWR0aD0iMy41IiBzdHJva2U9ImhzbGEoMCwgMCUsIDEwMCUsIDEuMDApIiBmaWxsPSJub25lIiBvcGFjaXR5PSIwLjUiPjxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIiB4PSIwIiB5PSIwIiBvcGFjaXR5PSIwLjE1Ij48L3JlY3Q+PGNpcmNsZSByPSIxMC44NTUyNjMxNTc4OTQ3MzYiIGN4PSIwIiBjeT0iMCIgZmlsbD0iaHNsYSgwLCAwJSwgMTAwJSwgMS4wMCkiIHN0cm9rZT0ibm9uZSI+PC9jaXJjbGU+PHJlY3Qgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiIHg9IjQwMCIgeT0iMCIgb3BhY2l0eT0iMC4xNSI+PC9yZWN0PjxjaXJjbGUgcj0iMTAuODU1MjYzMTU3ODk0NzM2IiBjeD0iNDAwIiBjeT0iMCIgZmlsbD0iaHNsYSgwLCAwJSwgMTAwJSwgMS4wMCkiIHN0cm9rZT0ibm9uZSI+PC9jaXJjbGU+PHJlY3Qgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiIHg9IjgwMCIgeT0iMCIgb3BhY2l0eT0iMC4xNSI+PC9yZWN0PjxjaXJjbGUgcj0iMTAuODU1MjYzMTU3ODk0NzM2IiBjeD0iODAwIiBjeT0iMCIgZmlsbD0iaHNsYSgwLCAwJSwgMTAwJSwgMS4wMCkiIHN0cm9rZT0ibm9uZSI+PC9jaXJjbGU+PHJlY3Qgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiIHg9IjAiIHk9IjQwMCIgb3BhY2l0eT0iMC4xNSI+PC9yZWN0PjxjaXJjbGUgcj0iMTAuODU1MjYzMTU3ODk0NzM2IiBjeD0iMCIgY3k9IjQwMCIgZmlsbD0iaHNsYSgwLCAwJSwgMTAwJSwgMS4wMCkiIHN0cm9rZT0ibm9uZSI+PC9jaXJjbGU+PHJlY3Qgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiIHg9IjQwMCIgeT0iNDAwIiBvcGFjaXR5PSIwLjE1Ij48L3JlY3Q+PGNpcmNsZSByPSIxMC44NTUyNjMxNTc4OTQ3MzYiIGN4PSI0MDAiIGN5PSI0MDAiIGZpbGw9ImhzbGEoMCwgMCUsIDEwMCUsIDEuMDApIiBzdHJva2U9Im5vbmUiPjwvY2lyY2xlPjxyZWN0IHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIiB4PSI4MDAiIHk9IjQwMCIgb3BhY2l0eT0iMC4xNSI+PC9yZWN0PjxjaXJjbGUgcj0iMTAuODU1MjYzMTU3ODk0NzM2IiBjeD0iODAwIiBjeT0iNDAwIiBmaWxsPSJoc2xhKDAsIDAlLCAxMDAlLCAxLjAwKSIgc3Ryb2tlPSJub25lIj48L2NpcmNsZT48cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCIgeD0iMCIgeT0iODAwIiBvcGFjaXR5PSIwLjE1Ij48L3JlY3Q+PGNpcmNsZSByPSIxMC44NTUyNjMxNTc4OTQ3MzYiIGN4PSIwIiBjeT0iODAwIiBmaWxsPSJoc2xhKDAsIDAlLCAxMDAlLCAxLjAwKSIgc3Ryb2tlPSJub25lIj48L2NpcmNsZT48cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCIgeD0iNDAwIiB5PSI4MDAiIG9wYWNpdHk9IjAuMTUiPjwvcmVjdD48Y2lyY2xlIHI9IjEwLjg1NTI2MzE1Nzg5NDczNiIgY3g9IjQwMCIgY3k9IjgwMCIgZmlsbD0iaHNsYSgwLCAwJSwgMTAwJSwgMS4wMCkiIHN0cm9rZT0ibm9uZSI+PC9jaXJjbGU+PHJlY3Qgd2lkdGg9IjQwMCIgaGVpZ2h0PSI0MDAiIHg9IjgwMCIgeT0iODAwIiBvcGFjaXR5PSIwLjE1Ij48L3JlY3Q+PGNpcmNsZSByPSIxMC44NTUyNjM1NTc4OTQ3MzYiIGN4PSI4MDAiIGN5PSI4MDAiIGZpbGw9ImhzbGEoMCwgMCUsIDEwMCUsIDEuMDApIiBzdHJva2U9Im5vbmUiPjwvY2lyY2xlPjwvZz48L3N2Zz4=')",
|
||||||
|
backgroundSize: "25px 25px",
|
||||||
|
display: "flex",
|
||||||
|
alignItems: "flex-start",
|
||||||
|
justifyContent: "flex-start",
|
||||||
|
position: "relative",
|
||||||
|
flexDirection: "column",
|
||||||
|
textAlign: "left",
|
||||||
|
gap: "14px",
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
tw="flex text-6xl absolute bottom-56 isolate font-bold"
|
||||||
|
style={{
|
||||||
|
paddingLeft: "145px",
|
||||||
|
paddingTop: "200px",
|
||||||
|
background: "linear-gradient(45deg, #000000 4%, #fff, #000)",
|
||||||
|
backgroundClip: "text",
|
||||||
|
color: "transparent",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{trueHeading}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
tw="flex absolute bottom-44 z-[999] text-2xl"
|
||||||
|
style={{
|
||||||
|
paddingLeft: "145px",
|
||||||
|
background:
|
||||||
|
"linear-gradient(10deg, #d4d4d8, 04%, #fff, #d4d4d8)",
|
||||||
|
backgroundClip: "text",
|
||||||
|
opacity: 0.7,
|
||||||
|
color: "transparent",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{description}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div
|
||||||
|
tw="flex text-2xl absolute bottom-28 z-[999]"
|
||||||
|
style={{
|
||||||
|
paddingLeft: "145px",
|
||||||
|
background:
|
||||||
|
"linear-gradient(10deg, #d4d4d8, 04%, #fff, #d4d4d8)",
|
||||||
|
backgroundClip: "text",
|
||||||
|
opacity: 0.8,
|
||||||
|
color: "transparent",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{date}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{/* Lines */}
|
||||||
|
<div
|
||||||
|
tw="absolute top-10% w-full h-px"
|
||||||
|
style={{
|
||||||
|
background: "linear-gradient(90deg, #888888 30%, #1d1f1f 70%)",
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
tw="absolute bottom-10% w-full h-px"
|
||||||
|
style={{
|
||||||
|
background: "#2c2c2c",
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
tw="absolute left-10% h-full w-px"
|
||||||
|
style={{
|
||||||
|
background: "linear-gradient(180deg, #747474 30%, #222424 70%)",
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
tw="absolute right-10% h-full w-px"
|
||||||
|
style={{
|
||||||
|
background: "#2c2c2c",
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
),
|
||||||
|
{
|
||||||
|
width: 1200,
|
||||||
|
height: 630,
|
||||||
|
fonts: [
|
||||||
|
{
|
||||||
|
name: "Geist",
|
||||||
|
data: geist,
|
||||||
|
weight: 400,
|
||||||
|
style: "normal",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} catch (err) {
|
||||||
|
console.log({ err });
|
||||||
|
return new Response("Failed to generate the OG image", { status: 500 });
|
||||||
|
}
|
||||||
|
}
|
||||||
228
docs/app/changelogs/[[...slug]]/page.tsx
Normal file
228
docs/app/changelogs/[[...slug]]/page.tsx
Normal file
@@ -0,0 +1,228 @@
|
|||||||
|
import { changelogs } from "@/app/source";
|
||||||
|
import { notFound } from "next/navigation";
|
||||||
|
import { absoluteUrl, formatDate } from "@/lib/utils";
|
||||||
|
import DatabaseTable from "@/components/mdx/database-tables";
|
||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
import { Step, Steps } from "fumadocs-ui/components/steps";
|
||||||
|
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
|
||||||
|
import { GenerateSecret } from "@/components/generate-secret";
|
||||||
|
import { AnimatePresence } from "@/components/ui/fade-in";
|
||||||
|
import { TypeTable } from "fumadocs-ui/components/type-table";
|
||||||
|
import { Features } from "@/components/blocks/features";
|
||||||
|
import { ForkButton } from "@/components/fork-button";
|
||||||
|
import Link from "next/link";
|
||||||
|
import defaultMdxComponents from "fumadocs-ui/mdx";
|
||||||
|
import { File, Folder, Files } from "fumadocs-ui/components/files";
|
||||||
|
import { Accordion, Accordions } from "fumadocs-ui/components/accordion";
|
||||||
|
import { Pre } from "fumadocs-ui/components/codeblock";
|
||||||
|
import { DocsBody } from "fumadocs-ui/page";
|
||||||
|
import ChangelogPage, { Glow } from "../_components/default-changelog";
|
||||||
|
import { IconLink } from "../_components/changelog-layout";
|
||||||
|
import { BookIcon, GitHubIcon, XIcon } from "../_components/icons";
|
||||||
|
import { DiscordLogoIcon } from "@radix-ui/react-icons";
|
||||||
|
import { StarField } from "../_components/stat-field";
|
||||||
|
import { CalendarClockIcon } from "lucide-react";
|
||||||
|
|
||||||
|
export default async function Page({
|
||||||
|
params,
|
||||||
|
}: {
|
||||||
|
params: Promise<{ slug?: string[] }>;
|
||||||
|
}) {
|
||||||
|
const { slug } = await params;
|
||||||
|
const page = changelogs.getPage(slug);
|
||||||
|
if (!slug) {
|
||||||
|
//@ts-ignore
|
||||||
|
return <ChangelogPage />;
|
||||||
|
}
|
||||||
|
if (!page) {
|
||||||
|
notFound();
|
||||||
|
}
|
||||||
|
const MDX = page.data?.body;
|
||||||
|
const toc = page.data?.toc;
|
||||||
|
const { title, description, date } = page.data;
|
||||||
|
return (
|
||||||
|
<div className="grid md:grid-cols-2 items-start">
|
||||||
|
<div className="bg-gradient-to-tr overflow-hidden px-12 py-24 md:py-0 -mt-[100px] md:h-dvh relative md:sticky top-0 from-transparent dark:via-stone-950/5 via-stone-100/30 to-stone-200/20 dark:to-transparent/10">
|
||||||
|
<StarField className="top-1/2 -translate-y-1/2 left-1/2 -translate-x-1/2" />
|
||||||
|
<Glow />
|
||||||
|
|
||||||
|
<div className="flex flex-col md:justify-center max-w-xl mx-auto h-full">
|
||||||
|
<h1 className="mt-14 font-sans font-semibold tracking-tighter text-5xl">
|
||||||
|
{title}{" "}
|
||||||
|
</h1>
|
||||||
|
|
||||||
|
<p className="text-sm text-gray-600 dark:text-gray-300">
|
||||||
|
{description}
|
||||||
|
</p>
|
||||||
|
<div className="text-gray-600 dark:text-gray-300 flex items-center gap-x-1">
|
||||||
|
<CalendarClockIcon className="w-4 h-4" />
|
||||||
|
<p>{formatDate(date)}</p>
|
||||||
|
</div>
|
||||||
|
<hr className="h-px bg-gray-300 mt-5" />
|
||||||
|
<div className="mt-8 flex flex-wrap text-gray-600 dark:text-gray-300 gap-x-1 gap-y-3 sm:gap-x-2">
|
||||||
|
<IconLink
|
||||||
|
href="/docs"
|
||||||
|
icon={BookIcon}
|
||||||
|
className="flex-none text-gray-600 dark:text-gray-300"
|
||||||
|
>
|
||||||
|
Documentation
|
||||||
|
</IconLink>
|
||||||
|
<IconLink
|
||||||
|
href="https://github.com/better-auth/better-auth"
|
||||||
|
icon={GitHubIcon}
|
||||||
|
className="flex-none text-gray-600 dark:text-gray-300"
|
||||||
|
>
|
||||||
|
GitHub
|
||||||
|
</IconLink>
|
||||||
|
<IconLink
|
||||||
|
href="https://discord.gg/GYC3W7tZzb"
|
||||||
|
icon={DiscordLogoIcon}
|
||||||
|
className="flex-none text-gray-600 dark:text-gray-300"
|
||||||
|
>
|
||||||
|
Community
|
||||||
|
</IconLink>
|
||||||
|
</div>
|
||||||
|
<p className="flex items-baseline absolute bottom-4 max-md:left-1/2 max-md:-translate-x-1/2 gap-x-2 text-[0.8125rem]/6 text-gray-500">
|
||||||
|
<IconLink href="https://x.com/better_auth" icon={XIcon} compact>
|
||||||
|
BETTER-AUTH.
|
||||||
|
</IconLink>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div className="px-4 relative md:px-8 pb-12 md:py-12">
|
||||||
|
<div className="absolute top-0 left-0 h-full -translate-x-full w-px bg-gradient-to-b from-black/5 dark:from-white/10 via-black/3 dark:via-white/5 to-transparent"></div>
|
||||||
|
<Link
|
||||||
|
href="/changelogs"
|
||||||
|
className="mb-6 inline-flex items-center text-sm font-medium text-gray-600 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 transition-colors"
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="16"
|
||||||
|
height="16"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
strokeWidth="2"
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
className="mr-2"
|
||||||
|
>
|
||||||
|
<path d="m15 18-6-6 6-6" />
|
||||||
|
</svg>
|
||||||
|
Back to Changelogs
|
||||||
|
</Link>
|
||||||
|
<DocsBody>
|
||||||
|
<MDX
|
||||||
|
components={{
|
||||||
|
...defaultMdxComponents,
|
||||||
|
Link: ({
|
||||||
|
className,
|
||||||
|
...props
|
||||||
|
}: React.ComponentProps<typeof Link>) => (
|
||||||
|
<Link
|
||||||
|
className={cn(
|
||||||
|
"font-medium underline underline-offset-4",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
{...props}
|
||||||
|
/>
|
||||||
|
),
|
||||||
|
Step,
|
||||||
|
Steps,
|
||||||
|
File,
|
||||||
|
Folder,
|
||||||
|
Files,
|
||||||
|
Tab,
|
||||||
|
Tabs,
|
||||||
|
Pre: Pre,
|
||||||
|
GenerateSecret,
|
||||||
|
AnimatePresence,
|
||||||
|
TypeTable,
|
||||||
|
Features,
|
||||||
|
ForkButton,
|
||||||
|
DatabaseTable,
|
||||||
|
Accordion,
|
||||||
|
Accordions,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
</DocsBody>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function generateMetadata({
|
||||||
|
params,
|
||||||
|
}: {
|
||||||
|
params: Promise<{ slug?: string[] }>;
|
||||||
|
}) {
|
||||||
|
const { slug } = await params;
|
||||||
|
if (!slug) {
|
||||||
|
return {
|
||||||
|
title: "Changelogs",
|
||||||
|
description: "Changelogs",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
const page = changelogs.getPage(slug);
|
||||||
|
if (page == null) notFound();
|
||||||
|
const baseUrl = process.env.NEXT_PUBLIC_URL || process.env.VERCEL_URL;
|
||||||
|
const url = new URL(`${baseUrl}/api/og-release`);
|
||||||
|
const { title, description, date } = page.data;
|
||||||
|
const dateString = formatDate(date);
|
||||||
|
const pageSlug = page.file.path;
|
||||||
|
url.searchParams.set("type", "Version Release");
|
||||||
|
url.searchParams.set("mode", "dark");
|
||||||
|
url.searchParams.set("heading", `${title}`);
|
||||||
|
url.searchParams.set("description", `${description}`);
|
||||||
|
url.searchParams.set("date", `${dateString}`);
|
||||||
|
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
description,
|
||||||
|
openGraph: {
|
||||||
|
title,
|
||||||
|
description,
|
||||||
|
type: "website",
|
||||||
|
url: absoluteUrl(`v/${pageSlug}`),
|
||||||
|
images: [
|
||||||
|
{
|
||||||
|
url: url.toString(),
|
||||||
|
width: 1200,
|
||||||
|
height: 630,
|
||||||
|
alt: title,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
twitter: {
|
||||||
|
card: "summary_large_image",
|
||||||
|
title,
|
||||||
|
description,
|
||||||
|
images: [url.toString()],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
export function generateStaticParams() {
|
||||||
|
return changelogs.generateParams();
|
||||||
|
}
|
||||||
|
|
||||||
|
const Icon = ({ className, ...rest }: any) => {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
width={24}
|
||||||
|
height={30}
|
||||||
|
strokeWidth="1"
|
||||||
|
stroke="currentColor"
|
||||||
|
{...rest}
|
||||||
|
className={cn(
|
||||||
|
"dark:text-white/50 text-black/50 size-6 absolute",
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<path strokeLinecap="round" strokeLinejoin="round" d="M12 6v12m6-6H6" />
|
||||||
|
</svg>
|
||||||
|
);
|
||||||
|
};
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useId } from "react";
|
import { useId } from "react";
|
||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import { IconLink } from "./_components/changelog-layout";
|
import { IconLink } from "./changelog-layout";
|
||||||
import { BookIcon, GitHubIcon, XIcon } from "./_components/icons";
|
import { BookIcon, GitHubIcon, XIcon } from "./icons";
|
||||||
import { DiscordLogoIcon } from "@radix-ui/react-icons";
|
import { DiscordLogoIcon } from "@radix-ui/react-icons";
|
||||||
import { StarField } from "./_components/stat-field";
|
import { StarField } from "./stat-field";
|
||||||
import { betterFetch } from "@better-fetch/fetch";
|
import { betterFetch } from "@better-fetch/fetch";
|
||||||
import Markdown from "react-markdown";
|
import Markdown from "react-markdown";
|
||||||
import defaultMdxComponents from "fumadocs-ui/mdx";
|
import defaultMdxComponents from "fumadocs-ui/mdx";
|
||||||
@@ -141,10 +141,19 @@ const ChangelogPage = async () => {
|
|||||||
</div>
|
</div>
|
||||||
<Link
|
<Link
|
||||||
href={
|
href={
|
||||||
`#${props.children
|
props.children
|
||||||
?.toString()
|
?.toString()
|
||||||
.split("date=")[0]
|
.split("date=")[0]
|
||||||
.trim()}` || "#"
|
.trim()
|
||||||
|
.endsWith(".00")
|
||||||
|
? `/changelogs/${props.children
|
||||||
|
?.toString()
|
||||||
|
.split("date=")[0]
|
||||||
|
.trim()}`
|
||||||
|
: `#${props.children
|
||||||
|
?.toString()
|
||||||
|
.split("date=")[0]
|
||||||
|
.trim()}`
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
{props.children?.toString().split("date=")[0].trim()}
|
{props.children?.toString().split("date=")[0].trim()}
|
||||||
@@ -206,7 +215,7 @@ ${message.content}
|
|||||||
|
|
||||||
export default ChangelogPage;
|
export default ChangelogPage;
|
||||||
|
|
||||||
function Glow() {
|
export function Glow() {
|
||||||
let id = useId();
|
let id = useId();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
5
docs/app/changelogs/layout.tsx
Normal file
5
docs/app/changelogs/layout.tsx
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
import type { ReactNode } from "react";
|
||||||
|
|
||||||
|
export default function Layout({ children }: { children: ReactNode }) {
|
||||||
|
return <div>{children}</div>;
|
||||||
|
}
|
||||||
@@ -147,7 +147,9 @@ export async function generateStaticParams() {
|
|||||||
|
|
||||||
export async function generateMetadata({
|
export async function generateMetadata({
|
||||||
params,
|
params,
|
||||||
}: { params: Promise<{ slug?: string[] }> }) {
|
}: {
|
||||||
|
params: Promise<{ slug?: string[] }>;
|
||||||
|
}) {
|
||||||
const { slug } = await params;
|
const { slug } = await params;
|
||||||
const page = source.getPage(slug);
|
const page = source.getPage(slug);
|
||||||
if (page == null) notFound();
|
if (page == null) notFound();
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { source } from "@/app/source";
|
import { source, changelogs } from "@/app/source";
|
||||||
import {
|
import {
|
||||||
DocsNavbarMobileBtn,
|
DocsNavbarMobileBtn,
|
||||||
DocsNavbarMobileTitle,
|
DocsNavbarMobileTitle,
|
||||||
@@ -27,3 +27,7 @@ export const docsOptions = {
|
|||||||
...baseOptions,
|
...baseOptions,
|
||||||
tree: source.pageTree,
|
tree: source.pageTree,
|
||||||
};
|
};
|
||||||
|
export const changelogOptions = {
|
||||||
|
...baseOptions,
|
||||||
|
tree: changelogs.pageTree,
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import { docs, meta } from "@/.source";
|
import { changelogCollection, docs, meta } from "@/.source";
|
||||||
import { createMDXSource } from "fumadocs-mdx";
|
import { createMDXSource } from "fumadocs-mdx";
|
||||||
import { loader } from "fumadocs-core/source";
|
import { loader } from "fumadocs-core/source";
|
||||||
import { createOpenAPI } from "fumadocs-openapi/server";
|
import { createOpenAPI } from "fumadocs-openapi/server";
|
||||||
@@ -7,5 +7,9 @@ export const source = loader({
|
|||||||
baseUrl: "/docs",
|
baseUrl: "/docs",
|
||||||
source: createMDXSource(docs, meta),
|
source: createMDXSource(docs, meta),
|
||||||
});
|
});
|
||||||
|
export const changelogs = loader({
|
||||||
|
baseUrl: "/changelogs",
|
||||||
|
source: createMDXSource(changelogCollection),
|
||||||
|
});
|
||||||
|
|
||||||
export const openapi = createOpenAPI({});
|
export const openapi = createOpenAPI({});
|
||||||
|
|||||||
41
docs/components/ui/stepper.tsx
Normal file
41
docs/components/ui/stepper.tsx
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import { cn } from "@/lib/utils";
|
||||||
|
import clsx from "clsx";
|
||||||
|
import { Children, PropsWithChildren } from "react";
|
||||||
|
|
||||||
|
export function Stepper({ children }: PropsWithChildren) {
|
||||||
|
const length = Children.count(children);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="flex flex-col">
|
||||||
|
{Children.map(children, (child, index) => {
|
||||||
|
return (
|
||||||
|
<div
|
||||||
|
className={cn(
|
||||||
|
"border-l pl-9 ml-3 relative",
|
||||||
|
clsx({
|
||||||
|
"pb-5 ": index < length - 1,
|
||||||
|
}),
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
<div className="bg-muted w-8 h-8 text-xs font-medium rounded-md border flex items-center justify-center absolute -left-4 font-code">
|
||||||
|
{index + 1}
|
||||||
|
</div>
|
||||||
|
{child}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
})}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function StepperItem({
|
||||||
|
children,
|
||||||
|
title,
|
||||||
|
}: PropsWithChildren & { title?: string }) {
|
||||||
|
return (
|
||||||
|
<div className="pt-0.5">
|
||||||
|
<h4 className="mt-0">{title}</h4>
|
||||||
|
<div>{children}</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
94
docs/content/changelogs/1-2.mdx
Normal file
94
docs/content/changelogs/1-2.mdx
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
---
|
||||||
|
title: 1.2 Release
|
||||||
|
description: Stripe, Captcha, API Keys, Teams, Init CLI, and more.
|
||||||
|
date: 2025-02-27
|
||||||
|
---
|
||||||
|
|
||||||
|
# Better Auth 1.2 – Stripe, Captcha, API Keys, Teams, Init CLI, and more
|
||||||
|
|
||||||
|
```package-install
|
||||||
|
npm install better-auth@1.2.0
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
## 🔌 New Plugins
|
||||||
|
|
||||||
|
### **Stripe Plugin (Beta)**
|
||||||
|
Stripe integration for customer management, subscriptions, and webhooks. [Learn more](/docs/plugins/stripe)
|
||||||
|
|
||||||
|
### **Captcha Plugin**
|
||||||
|
Protect your authentication flows with Google reCAPTCHA and Cloudflare Turnstile. Works for signup, signin, and password resets. [Learn more](/docs/plugins/captcha)
|
||||||
|
|
||||||
|
### **API Key Plugin**
|
||||||
|
Generate and manage API keys with rate limiting, expiration, and metadata. Supports session creation from API keys. [Learn more](/docs/plugins/api-keys)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 Plugin Enhancements
|
||||||
|
|
||||||
|
### **Username Plugin**
|
||||||
|
- Added `displayName` for case-insensitive lookups while preserving original formatting.
|
||||||
|
- Built-in validation.
|
||||||
|
|
||||||
|
<Callout type="info">
|
||||||
|
If you're using the Username plugin, make sure to add the `displayName` field to your schema.
|
||||||
|
</Callout>
|
||||||
|
|
||||||
|
### **Organization Plugin**
|
||||||
|
- **Teams & Access Control** – Custom roles and permissions for org members, no extra work needed. [Learn more](/docs/plugins/organization)
|
||||||
|
- **Multiple Roles per User** – Assign more than one role to a user.
|
||||||
|
|
||||||
|
### **Admin Plugin**
|
||||||
|
- Manage roles and permissions directly within the admin panel. [Learn more](/docs/plugins/admin)
|
||||||
|
- `adminUserIds` option to grant specific users admin privileges. [Learn more](/docs/plugins/admin#usage)
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎭 New Social Providers
|
||||||
|
- TikTok
|
||||||
|
- Roblox
|
||||||
|
- VK
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✨ Core Enhancements
|
||||||
|
|
||||||
|
- **Auto Cleanup** for expired verification data
|
||||||
|
- **Improved Google One Tap** integration with JWT verification and enhanced prompt handling
|
||||||
|
- **Phone-based Password Reset** functionality
|
||||||
|
- **Provider Control Options**:
|
||||||
|
- Disable signups for specific providers
|
||||||
|
- Disable implicit signups for specific providers
|
||||||
|
- Control default scopes and allow custom scopes on request
|
||||||
|
- **Enhanced Database Hooks** with additional context information
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Performance Boosts
|
||||||
|
We rewrote **better-call** (the core library behind Better Auth) to fix TypeScript editor lag. Your IDE should now feel much snappier when working with Better Auth.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚡ CLI Enhancements
|
||||||
|
|
||||||
|
### **`init` Command**
|
||||||
|
The CLI now includes an `init` command to speed up setup:
|
||||||
|
- Scaffold new projects
|
||||||
|
- Generate schemas
|
||||||
|
- Run migrations
|
||||||
|
|
||||||
|
[Learn more](/docs/concepts/cli)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠 Bug Fixes & Stability Improvements
|
||||||
|
A lot of fixes and refinements to make everything smoother, faster, and more reliable. Check out the [changelog](https://github.com/better-auth/better-auth/blob/main/packages/better-auth/CHANGELOG.md) for more details.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
```package-install
|
||||||
|
npm install better-auth@1.2.0
|
||||||
|
```
|
||||||
|
|
||||||
|
**Upgrade now and take advantage of these powerful new features!** 🚀
|
||||||
52
docs/content/changelogs/1.0.mdx
Normal file
52
docs/content/changelogs/1.0.mdx
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
---
|
||||||
|
title: v1.0
|
||||||
|
description: Built in CLI for managing your project.
|
||||||
|
date: 2021-10-01
|
||||||
|
---
|
||||||
|
|
||||||
|
Version update
|
||||||
|
|
||||||
|
Better Auth comes with a built-in CLI to help you manage the database schema needed for both core functionality and plugins.
|
||||||
|
|
||||||
|
## Generate
|
||||||
|
|
||||||
|
The `generate` command creates the schema required by Better Auth. If you're using a database adapter like Prisma or Drizzle, this command will generate the right schema for your ORM. If you're using the built-in Kysely adapter, it will generate an SQL file you can run directly on your database.
|
||||||
|
|
||||||
|
```bash title="Terminal"
|
||||||
|
npx @better-auth/cli@latest generate
|
||||||
|
```
|
||||||
|
|
||||||
|
### Options
|
||||||
|
|
||||||
|
- `--output` - Where to save the generated schema. For Prisma, it will be saved in prisma/schema.prisma. For Drizzle, it goes to schema.ts in your project root. For Kysely, it’s an SQL file saved as schema.sql in your project root.
|
||||||
|
- `--config` - The path to your Better Auth config file. By default, the CLI will search for a better-auth.ts file in **./**, **./utils**, **./lib**, or any of these directories under `src` directory.
|
||||||
|
- `--y` - Skip the confirmation prompt and generate the schema directly.
|
||||||
|
|
||||||
|
## Migrate
|
||||||
|
|
||||||
|
The migrate command applies the Better Auth schema directly to your database. This is available if you’re using the built-in Kysely adapter.
|
||||||
|
|
||||||
|
```bash title="Terminal"
|
||||||
|
npx @better-auth/cli@latest migrate
|
||||||
|
```
|
||||||
|
|
||||||
|
### Options
|
||||||
|
|
||||||
|
- `--config` - The path to your Better Auth config file. By default, the CLI will search for a better-auth.ts file in **./**, **./utils**, **./lib**, or any of these directories under `src` directory.
|
||||||
|
- `--y` - Skip the confirmation prompt and apply the schema directly.
|
||||||
|
|
||||||
|
## Common Issues
|
||||||
|
|
||||||
|
**Error: Cannot find module X**
|
||||||
|
|
||||||
|
If you see this error, it means the CLI can’t resolve imported modules in your Better Auth config file. We're working on a fix for many of these issues, but in the meantime, you can try the following:
|
||||||
|
|
||||||
|
- Remove any import aliases in your config file and use relative paths instead. After running the CLI, you can revert to using aliases.
|
||||||
|
|
||||||
|
## Secret
|
||||||
|
|
||||||
|
The CLI also provides a way to generate a secret key for your Better Auth instance.
|
||||||
|
|
||||||
|
```bash title="Terminal"
|
||||||
|
npx @better-auth/cli@latest secret
|
||||||
|
```
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
import { clsx, type ClassValue } from "clsx";
|
import { clsx, type ClassValue } from "clsx";
|
||||||
import { twMerge } from "tailwind-merge";
|
import { twMerge } from "tailwind-merge";
|
||||||
|
|
||||||
export function cn(...inputs: ClassValue[]) {
|
export function cn(...inputs: ClassValue[]) {
|
||||||
return twMerge(clsx(inputs));
|
return twMerge(clsx(inputs));
|
||||||
}
|
}
|
||||||
@@ -12,3 +11,14 @@ export function kFormatter(num: number) {
|
|||||||
? Math.sign(num) * parseFloat((Math.abs(num) / 1000).toFixed(1)) + "k"
|
? Math.sign(num) * parseFloat((Math.abs(num) / 1000).toFixed(1)) + "k"
|
||||||
: Math.sign(num) * Math.abs(num);
|
: Math.sign(num) * Math.abs(num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const baseUrl =
|
||||||
|
process.env.NODE_ENV === "development" || !process.env.VERCEL_URL
|
||||||
|
? new URL("http://localhost:3000")
|
||||||
|
: new URL(`https://${process.env.VERCEL_URL}`);
|
||||||
|
export function formatDate(date: Date) {
|
||||||
|
let d = new Date(date);
|
||||||
|
return d
|
||||||
|
.toLocaleDateString("en-US", { month: "short", day: "numeric" })
|
||||||
|
.replace(",", "");
|
||||||
|
}
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ export default withMDX({
|
|||||||
{
|
{
|
||||||
hostname: "github.com",
|
hostname: "github.com",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
hostname: "hebbkx1anhila5yf.public.blob.vercel-storage.com",
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
devIndicators: {
|
devIndicators: {
|
||||||
|
|||||||
1
docs/public/plus.svg
Normal file
1
docs/public/plus.svg
Normal file
@@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" viewBox="0 0 800 800" width="800" height="800"><g stroke-width="3.5" stroke="hsla(0, 0%, 100%, 1.00)" fill="none"><rect width="200" height="8.578947368421051" x="-100" y="-4.289473684210526" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="-4.289473684210526" y="-100" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="300" y="-4.289473684210526" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="395.7105263157895" y="-100" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="700" y="-4.289473684210526" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="795.7105263157895" y="-100" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="-100" y="395.7105263157895" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="-4.289473684210526" y="300" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="300" y="395.7105263157895" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="395.7105263157895" y="300" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="700" y="395.7105263157895" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="795.7105263157895" y="300" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="-100" y="795.7105263157895" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="-4.289473684210526" y="700" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="300" y="795.7105263157895" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="395.7105263157895" y="700" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="200" height="8.578947368421051" x="700" y="795.7105263157895" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect><rect width="8.578947368421051" height="200" x="795.7105263157895" y="700" stroke="none" fill="hsla(0, 0%, 100%, 1.00)" rx="4.289473684210526"></rect></g></svg>
|
||||||
|
After Width: | Height: | Size: 2.9 KiB |
@@ -17,11 +17,13 @@ export default defineConfig({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
export const changelog = defineCollections({
|
export const changelogCollection = defineCollections({
|
||||||
type: "doc",
|
type: "doc",
|
||||||
dir: "./content/changelog",
|
dir: "./content/changelogs",
|
||||||
schema: z.object({
|
schema: z.object({
|
||||||
title: z.string(),
|
title: z.string(),
|
||||||
|
description: z.string(),
|
||||||
|
date: z.date(),
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -184,7 +184,7 @@ export const anonymous = (options?: AnonymousOptions) => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Make sure the use had an anonymous session.
|
* Make sure the user had an anonymous session.
|
||||||
*/
|
*/
|
||||||
const session = await getSessionFromCtx<{ isAnonymous: boolean }>(
|
const session = await getSessionFromCtx<{ isAnonymous: boolean }>(
|
||||||
ctx,
|
ctx,
|
||||||
|
|||||||
357
pnpm-lock.yaml
generated
357
pnpm-lock.yaml
generated
@@ -13,8 +13,8 @@ catalogs:
|
|||||||
specifier: ^1.0.3
|
specifier: ^1.0.3
|
||||||
version: 1.0.3
|
version: 1.0.3
|
||||||
typescript:
|
typescript:
|
||||||
specifier: ^5.7.2
|
specifier: ^5.7.3
|
||||||
version: 5.7.2
|
version: 5.7.3
|
||||||
unbuild:
|
unbuild:
|
||||||
specifier: ^3.5.0
|
specifier: ^3.5.0
|
||||||
version: 3.5.0
|
version: 3.5.0
|
||||||
@@ -981,7 +981,7 @@ importers:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@radix-icons/vue':
|
'@radix-icons/vue':
|
||||||
specifier: ^1.0.0
|
specifier: ^1.0.0
|
||||||
version: 1.0.0(vue@3.5.13(typescript@5.7.2))
|
version: 1.0.0(vue@3.5.13(typescript@5.7.3))
|
||||||
'@types/better-sqlite3':
|
'@types/better-sqlite3':
|
||||||
specifier: ^7.6.12
|
specifier: ^7.6.12
|
||||||
version: 7.6.12
|
version: 7.6.12
|
||||||
@@ -990,13 +990,13 @@ importers:
|
|||||||
version: 1.4.3-beta.0
|
version: 1.4.3-beta.0
|
||||||
'@unovis/vue':
|
'@unovis/vue':
|
||||||
specifier: 1.4.3-beta.0
|
specifier: 1.4.3-beta.0
|
||||||
version: 1.4.3-beta.0(@unovis/ts@1.4.3-beta.0)(vue@3.5.13(typescript@5.7.2))
|
version: 1.4.3-beta.0(@unovis/ts@1.4.3-beta.0)(vue@3.5.13(typescript@5.7.3))
|
||||||
'@vee-validate/zod':
|
'@vee-validate/zod':
|
||||||
specifier: ^4.14.7
|
specifier: ^4.14.7
|
||||||
version: 4.14.7(vue@3.5.13(typescript@5.7.2))
|
version: 4.14.7(vue@3.5.13(typescript@5.7.3))
|
||||||
'@vueuse/core':
|
'@vueuse/core':
|
||||||
specifier: ^11.3.0
|
specifier: ^11.3.0
|
||||||
version: 11.3.0(vue@3.5.13(typescript@5.7.2))
|
version: 11.3.0(vue@3.5.13(typescript@5.7.3))
|
||||||
better-auth:
|
better-auth:
|
||||||
specifier: workspace:*
|
specifier: workspace:*
|
||||||
version: link:../../packages/better-auth
|
version: link:../../packages/better-auth
|
||||||
@@ -1011,13 +1011,13 @@ importers:
|
|||||||
version: 2.1.1
|
version: 2.1.1
|
||||||
embla-carousel-vue:
|
embla-carousel-vue:
|
||||||
specifier: ^8.5.1
|
specifier: ^8.5.1
|
||||||
version: 8.5.1(vue@3.5.13(typescript@5.7.2))
|
version: 8.5.1(vue@3.5.13(typescript@5.7.3))
|
||||||
nuxt:
|
nuxt:
|
||||||
specifier: ^3.14.1592
|
specifier: ^3.14.1592
|
||||||
version: 3.14.1592(@azure/identity@4.6.0)(@biomejs/biome@1.9.4)(@libsql/client@0.12.0)(@parcel/watcher@2.4.1)(@types/node@22.10.7)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(eslint@8.57.1)(ioredis@5.4.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(mysql2@3.11.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.2)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))
|
version: 3.14.1592(@azure/identity@4.6.0)(@biomejs/biome@1.9.4)(@libsql/client@0.12.0)(@parcel/watcher@2.4.1)(@types/node@22.10.7)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(eslint@8.57.1)(ioredis@5.4.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(mysql2@3.11.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.3)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))
|
||||||
radix-vue:
|
radix-vue:
|
||||||
specifier: ^1.9.11
|
specifier: ^1.9.11
|
||||||
version: 1.9.11(vue@3.5.13(typescript@5.7.2))
|
version: 1.9.11(vue@3.5.13(typescript@5.7.3))
|
||||||
shadcn-nuxt:
|
shadcn-nuxt:
|
||||||
specifier: ^0.10.4
|
specifier: ^0.10.4
|
||||||
version: 0.10.4(magicast@0.3.5)(rollup@4.31.0)
|
version: 0.10.4(magicast@0.3.5)(rollup@4.31.0)
|
||||||
@@ -1029,19 +1029,19 @@ importers:
|
|||||||
version: 1.0.7(tailwindcss@3.4.16)
|
version: 1.0.7(tailwindcss@3.4.16)
|
||||||
v-calendar:
|
v-calendar:
|
||||||
specifier: ^3.1.2
|
specifier: ^3.1.2
|
||||||
version: 3.1.2(@popperjs/core@2.11.8)(vue@3.5.13(typescript@5.7.2))
|
version: 3.1.2(@popperjs/core@2.11.8)(vue@3.5.13(typescript@5.7.3))
|
||||||
vaul-vue:
|
vaul-vue:
|
||||||
specifier: ^0.2.0
|
specifier: ^0.2.0
|
||||||
version: 0.2.0(radix-vue@1.9.11(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2))
|
version: 0.2.0(radix-vue@1.9.11(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
|
||||||
vee-validate:
|
vee-validate:
|
||||||
specifier: ^4.14.7
|
specifier: ^4.14.7
|
||||||
version: 4.14.7(vue@3.5.13(typescript@5.7.2))
|
version: 4.14.7(vue@3.5.13(typescript@5.7.3))
|
||||||
vue:
|
vue:
|
||||||
specifier: latest
|
specifier: latest
|
||||||
version: 3.5.13(typescript@5.7.2)
|
version: 3.5.13(typescript@5.7.3)
|
||||||
vue-router:
|
vue-router:
|
||||||
specifier: latest
|
specifier: latest
|
||||||
version: 4.5.0(vue@3.5.13(typescript@5.7.2))
|
version: 4.5.0(vue@3.5.13(typescript@5.7.3))
|
||||||
vue-sonner:
|
vue-sonner:
|
||||||
specifier: ^1.3.0
|
specifier: ^1.3.0
|
||||||
version: 1.3.0
|
version: 1.3.0
|
||||||
@@ -1522,7 +1522,7 @@ importers:
|
|||||||
version: 0.11.3
|
version: 0.11.3
|
||||||
valibot:
|
valibot:
|
||||||
specifier: 1.0.0-beta.15
|
specifier: 1.0.0-beta.15
|
||||||
version: 1.0.0-beta.15(typescript@5.7.2)
|
version: 1.0.0-beta.15(typescript@5.7.3)
|
||||||
zod:
|
zod:
|
||||||
specifier: ^3.24.1
|
specifier: ^3.24.1
|
||||||
version: 3.24.1
|
version: 3.24.1
|
||||||
@@ -1592,16 +1592,16 @@ importers:
|
|||||||
version: 18.6.1
|
version: 18.6.1
|
||||||
typescript:
|
typescript:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 5.7.2
|
version: 5.7.3
|
||||||
unbuild:
|
unbuild:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 3.5.0(sass@1.83.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))
|
version: 3.5.0(sass@1.83.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))
|
||||||
vitest:
|
vitest:
|
||||||
specifier: ^1.6.0
|
specifier: ^1.6.0
|
||||||
version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
||||||
vue:
|
vue:
|
||||||
specifier: ^3.5.13
|
specifier: ^3.5.13
|
||||||
version: 3.5.13(typescript@5.7.2)
|
version: 3.5.13(typescript@5.7.3)
|
||||||
|
|
||||||
packages/cli:
|
packages/cli:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -1683,10 +1683,10 @@ importers:
|
|||||||
version: 11.0.4
|
version: 11.0.4
|
||||||
typescript:
|
typescript:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 5.7.2
|
version: 5.7.3
|
||||||
unbuild:
|
unbuild:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 3.5.0(sass@1.83.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))
|
version: 3.5.0(sass@1.83.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))
|
||||||
vitest:
|
vitest:
|
||||||
specifier: ^1.6.0
|
specifier: ^1.6.0
|
||||||
version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
||||||
@@ -1726,7 +1726,32 @@ importers:
|
|||||||
version: 13.0.3(expo@52.0.25(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.9(encoding@0.1.13))(@types/react@18.3.14)(encoding@0.1.13)(react@19.0.0-rc-7771d3a7-20240827)))(encoding@0.1.13)(graphql@15.8.0)(react-native@0.76.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.9(encoding@0.1.13))(@types/react@18.3.14)(encoding@0.1.13)(react@19.0.0-rc-7771d3a7-20240827))(react@19.0.0-rc-7771d3a7-20240827))
|
version: 13.0.3(expo@52.0.25(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@expo/metro-runtime@4.0.0(react-native@0.76.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.9(encoding@0.1.13))(@types/react@18.3.14)(encoding@0.1.13)(react@19.0.0-rc-7771d3a7-20240827)))(encoding@0.1.13)(graphql@15.8.0)(react-native@0.76.6(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@13.6.9(encoding@0.1.13))(@types/react@18.3.14)(encoding@0.1.13)(react@19.0.0-rc-7771d3a7-20240827))(react@19.0.0-rc-7771d3a7-20240827))
|
||||||
unbuild:
|
unbuild:
|
||||||
specifier: ^3.5.0
|
specifier: ^3.5.0
|
||||||
version: 3.5.0(sass@1.83.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))
|
version: 3.5.0(sass@1.83.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))
|
||||||
|
vitest:
|
||||||
|
specifier: ^1.6.0
|
||||||
|
version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
||||||
|
|
||||||
|
packages/stripe:
|
||||||
|
dependencies:
|
||||||
|
better-auth:
|
||||||
|
specifier: workspace:^
|
||||||
|
version: link:../better-auth
|
||||||
|
zod:
|
||||||
|
specifier: ^3.24.1
|
||||||
|
version: 3.24.2
|
||||||
|
devDependencies:
|
||||||
|
'@types/better-sqlite3':
|
||||||
|
specifier: ^7.6.12
|
||||||
|
version: 7.6.12
|
||||||
|
better-call:
|
||||||
|
specifier: 'catalog:'
|
||||||
|
version: 1.0.3
|
||||||
|
better-sqlite3:
|
||||||
|
specifier: ^11.6.0
|
||||||
|
version: 11.6.0
|
||||||
|
stripe:
|
||||||
|
specifier: ^17.7.0
|
||||||
|
version: 17.7.0
|
||||||
vitest:
|
vitest:
|
||||||
specifier: ^1.6.0
|
specifier: ^1.6.0
|
||||||
version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
version: 1.6.0(@types/node@22.10.7)(happy-dom@15.11.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
||||||
@@ -19396,6 +19421,11 @@ packages:
|
|||||||
engines: {node: '>=14.17'}
|
engines: {node: '>=14.17'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
typescript@5.7.3:
|
||||||
|
resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==}
|
||||||
|
engines: {node: '>=14.17'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
ua-parser-js@0.7.39:
|
ua-parser-js@0.7.39:
|
||||||
resolution: {integrity: sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==}
|
resolution: {integrity: sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
@@ -23510,11 +23540,11 @@ snapshots:
|
|||||||
|
|
||||||
'@floating-ui/utils@0.2.8': {}
|
'@floating-ui/utils@0.2.8': {}
|
||||||
|
|
||||||
'@floating-ui/vue@1.1.5(vue@3.5.13(typescript@5.7.2))':
|
'@floating-ui/vue@1.1.5(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@floating-ui/dom': 1.6.12
|
'@floating-ui/dom': 1.6.12
|
||||||
'@floating-ui/utils': 0.2.8
|
'@floating-ui/utils': 0.2.8
|
||||||
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2))
|
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@vue/composition-api'
|
- '@vue/composition-api'
|
||||||
- vue
|
- vue
|
||||||
@@ -24516,13 +24546,13 @@ snapshots:
|
|||||||
rc9: 2.1.2
|
rc9: 2.1.2
|
||||||
semver: 7.7.1
|
semver: 7.7.1
|
||||||
|
|
||||||
'@nuxt/devtools@1.6.0(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))':
|
'@nuxt/devtools@1.6.0(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@antfu/utils': 0.7.10
|
'@antfu/utils': 0.7.10
|
||||||
'@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))
|
'@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))
|
||||||
'@nuxt/devtools-wizard': 1.6.0
|
'@nuxt/devtools-wizard': 1.6.0
|
||||||
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.31.0)
|
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.31.0)
|
||||||
'@vue/devtools-core': 7.4.4(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))
|
'@vue/devtools-core': 7.4.4(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))
|
||||||
'@vue/devtools-kit': 7.4.4
|
'@vue/devtools-kit': 7.4.4
|
||||||
birpc: 0.2.19
|
birpc: 0.2.19
|
||||||
consola: 3.2.3
|
consola: 3.2.3
|
||||||
@@ -24635,12 +24665,12 @@ snapshots:
|
|||||||
- rollup
|
- rollup
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@nuxt/vite-builder@3.14.1592(@biomejs/biome@1.9.4)(@types/node@22.10.7)(eslint@8.57.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))':
|
'@nuxt/vite-builder@3.14.1592(@biomejs/biome@1.9.4)(@types/node@22.10.7)(eslint@8.57.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.31.0)
|
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.31.0)
|
||||||
'@rollup/plugin-replace': 6.0.1(rollup@4.31.0)
|
'@rollup/plugin-replace': 6.0.1(rollup@4.31.0)
|
||||||
'@vitejs/plugin-vue': 5.2.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))
|
'@vitejs/plugin-vue': 5.2.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))
|
||||||
'@vitejs/plugin-vue-jsx': 4.1.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))
|
'@vitejs/plugin-vue-jsx': 4.1.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))
|
||||||
autoprefixer: 10.4.20(postcss@8.4.49)
|
autoprefixer: 10.4.20(postcss@8.4.49)
|
||||||
clear: 0.1.0
|
clear: 0.1.0
|
||||||
consola: 3.2.3
|
consola: 3.2.3
|
||||||
@@ -24669,8 +24699,8 @@ snapshots:
|
|||||||
unplugin: 1.16.0
|
unplugin: 1.16.0
|
||||||
vite: 5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
vite: 5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
||||||
vite-node: 2.1.8(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
vite-node: 2.1.8(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
||||||
vite-plugin-checker: 0.8.0(@biomejs/biome@1.9.4)(eslint@8.57.1)(optionator@0.9.4)(typescript@5.7.2)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))
|
vite-plugin-checker: 0.8.0(@biomejs/biome@1.9.4)(eslint@8.57.1)(optionator@0.9.4)(typescript@5.7.3)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
vue-bundle-renderer: 2.1.1
|
vue-bundle-renderer: 2.1.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@biomejs/biome'
|
- '@biomejs/biome'
|
||||||
@@ -25976,9 +26006,9 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@prisma/debug': 5.22.0
|
'@prisma/debug': 5.22.0
|
||||||
|
|
||||||
'@radix-icons/vue@1.0.0(vue@3.5.13(typescript@5.7.2))':
|
'@radix-icons/vue@1.0.0(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
|
|
||||||
'@radix-ui/number@1.1.0': {}
|
'@radix-ui/number@1.1.0': {}
|
||||||
|
|
||||||
@@ -29111,10 +29141,10 @@ snapshots:
|
|||||||
|
|
||||||
'@tanstack/virtual-file-routes@1.81.9': {}
|
'@tanstack/virtual-file-routes@1.81.9': {}
|
||||||
|
|
||||||
'@tanstack/vue-virtual@3.10.8(vue@3.5.13(typescript@5.7.2))':
|
'@tanstack/vue-virtual@3.10.8(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tanstack/virtual-core': 3.10.8
|
'@tanstack/virtual-core': 3.10.8
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
|
|
||||||
'@trysound/sax@0.2.0': {}
|
'@trysound/sax@0.2.0': {}
|
||||||
|
|
||||||
@@ -29908,14 +29938,14 @@ snapshots:
|
|||||||
'@unhead/schema': 1.11.13
|
'@unhead/schema': 1.11.13
|
||||||
'@unhead/shared': 1.11.13
|
'@unhead/shared': 1.11.13
|
||||||
|
|
||||||
'@unhead/vue@1.11.13(vue@3.5.13(typescript@5.7.2))':
|
'@unhead/vue@1.11.13(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@unhead/schema': 1.11.13
|
'@unhead/schema': 1.11.13
|
||||||
'@unhead/shared': 1.11.13
|
'@unhead/shared': 1.11.13
|
||||||
defu: 6.1.4
|
defu: 6.1.4
|
||||||
hookable: 5.5.3
|
hookable: 5.5.3
|
||||||
unhead: 1.11.13
|
unhead: 1.11.13
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
|
|
||||||
'@unovis/dagre-layout@0.8.8-2':
|
'@unovis/dagre-layout@0.8.8-2':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -29963,10 +29993,10 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@unovis/vue@1.4.3-beta.0(@unovis/ts@1.4.3-beta.0)(vue@3.5.13(typescript@5.7.2))':
|
'@unovis/vue@1.4.3-beta.0(@unovis/ts@1.4.3-beta.0)(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@unovis/ts': 1.4.3-beta.0
|
'@unovis/ts': 1.4.3-beta.0
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
|
|
||||||
'@urql/core@5.1.0(graphql@15.8.0)':
|
'@urql/core@5.1.0(graphql@15.8.0)':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -30032,10 +30062,10 @@ snapshots:
|
|||||||
|
|
||||||
'@vanilla-extract/private@1.0.6': {}
|
'@vanilla-extract/private@1.0.6': {}
|
||||||
|
|
||||||
'@vee-validate/zod@4.14.7(vue@3.5.13(typescript@5.7.2))':
|
'@vee-validate/zod@4.14.7(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
type-fest: 4.26.1
|
type-fest: 4.26.1
|
||||||
vee-validate: 4.14.7(vue@3.5.13(typescript@5.7.2))
|
vee-validate: 4.14.7(vue@3.5.13(typescript@5.7.3))
|
||||||
zod: 3.24.1
|
zod: 3.24.1
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- vue
|
- vue
|
||||||
@@ -30154,20 +30184,20 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@vitejs/plugin-vue-jsx@4.1.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))':
|
'@vitejs/plugin-vue-jsx@4.1.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/core': 7.26.0
|
'@babel/core': 7.26.0
|
||||||
'@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0)
|
'@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0)
|
||||||
'@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0)
|
'@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.26.0)
|
||||||
vite: 5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
vite: 5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@vitejs/plugin-vue@5.2.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))':
|
'@vitejs/plugin-vue@5.2.1(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
vite: 5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
vite: 5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
|
|
||||||
'@vitest/expect@1.6.0':
|
'@vitest/expect@1.6.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -30292,7 +30322,7 @@ snapshots:
|
|||||||
|
|
||||||
'@vscode/l10n@0.0.18': {}
|
'@vscode/l10n@0.0.18': {}
|
||||||
|
|
||||||
'@vue-macros/common@1.15.0(rollup@4.31.0)(vue@3.5.13(typescript@5.7.2))':
|
'@vue-macros/common@1.15.0(rollup@4.31.0)(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/types': 7.26.5
|
'@babel/types': 7.26.5
|
||||||
'@rollup/pluginutils': 5.1.3(rollup@4.31.0)
|
'@rollup/pluginutils': 5.1.3(rollup@4.31.0)
|
||||||
@@ -30301,7 +30331,7 @@ snapshots:
|
|||||||
local-pkg: 0.5.1
|
local-pkg: 0.5.1
|
||||||
magic-string-ast: 0.6.2
|
magic-string-ast: 0.6.2
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- rollup
|
- rollup
|
||||||
|
|
||||||
@@ -30401,7 +30431,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@vue/devtools-kit': 7.6.2
|
'@vue/devtools-kit': 7.6.2
|
||||||
|
|
||||||
'@vue/devtools-core@7.4.4(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))':
|
'@vue/devtools-core@7.4.4(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/devtools-kit': 7.6.2
|
'@vue/devtools-kit': 7.6.2
|
||||||
'@vue/devtools-shared': 7.6.2
|
'@vue/devtools-shared': 7.6.2
|
||||||
@@ -30409,7 +30439,7 @@ snapshots:
|
|||||||
nanoid: 3.3.8
|
nanoid: 3.3.8
|
||||||
pathe: 1.1.2
|
pathe: 1.1.2
|
||||||
vite-hot-client: 0.2.3(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))
|
vite-hot-client: 0.2.3(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- vite
|
- vite
|
||||||
|
|
||||||
@@ -30482,32 +30512,32 @@ snapshots:
|
|||||||
'@vue/shared': 3.3.4
|
'@vue/shared': 3.3.4
|
||||||
vue: 3.3.4
|
vue: 3.3.4
|
||||||
|
|
||||||
'@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.7.2))':
|
'@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/compiler-ssr': 3.5.13
|
'@vue/compiler-ssr': 3.5.13
|
||||||
'@vue/shared': 3.5.13
|
'@vue/shared': 3.5.13
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
|
|
||||||
'@vue/shared@3.3.4': {}
|
'@vue/shared@3.3.4': {}
|
||||||
|
|
||||||
'@vue/shared@3.5.13': {}
|
'@vue/shared@3.5.13': {}
|
||||||
|
|
||||||
'@vueuse/core@10.11.1(vue@3.5.13(typescript@5.7.2))':
|
'@vueuse/core@10.11.1(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/web-bluetooth': 0.0.20
|
'@types/web-bluetooth': 0.0.20
|
||||||
'@vueuse/metadata': 10.11.1
|
'@vueuse/metadata': 10.11.1
|
||||||
'@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.2))
|
'@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.3))
|
||||||
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2))
|
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@vue/composition-api'
|
- '@vue/composition-api'
|
||||||
- vue
|
- vue
|
||||||
|
|
||||||
'@vueuse/core@11.3.0(vue@3.5.13(typescript@5.7.2))':
|
'@vueuse/core@11.3.0(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/web-bluetooth': 0.0.20
|
'@types/web-bluetooth': 0.0.20
|
||||||
'@vueuse/metadata': 11.3.0
|
'@vueuse/metadata': 11.3.0
|
||||||
'@vueuse/shared': 11.3.0(vue@3.5.13(typescript@5.7.2))
|
'@vueuse/shared': 11.3.0(vue@3.5.13(typescript@5.7.3))
|
||||||
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2))
|
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@vue/composition-api'
|
- '@vue/composition-api'
|
||||||
- vue
|
- vue
|
||||||
@@ -30516,16 +30546,16 @@ snapshots:
|
|||||||
|
|
||||||
'@vueuse/metadata@11.3.0': {}
|
'@vueuse/metadata@11.3.0': {}
|
||||||
|
|
||||||
'@vueuse/shared@10.11.1(vue@3.5.13(typescript@5.7.2))':
|
'@vueuse/shared@10.11.1(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2))
|
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@vue/composition-api'
|
- '@vue/composition-api'
|
||||||
- vue
|
- vue
|
||||||
|
|
||||||
'@vueuse/shared@11.3.0(vue@3.5.13(typescript@5.7.2))':
|
'@vueuse/shared@11.3.0(vue@3.5.13(typescript@5.7.3))':
|
||||||
dependencies:
|
dependencies:
|
||||||
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.2))
|
vue-demi: 0.14.10(vue@3.5.13(typescript@5.7.3))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@vue/composition-api'
|
- '@vue/composition-api'
|
||||||
- vue
|
- vue
|
||||||
@@ -33454,11 +33484,11 @@ snapshots:
|
|||||||
embla-carousel-reactive-utils: 8.5.1(embla-carousel@8.5.1)
|
embla-carousel-reactive-utils: 8.5.1(embla-carousel@8.5.1)
|
||||||
svelte: 4.2.19
|
svelte: 4.2.19
|
||||||
|
|
||||||
embla-carousel-vue@8.5.1(vue@3.5.13(typescript@5.7.2)):
|
embla-carousel-vue@8.5.1(vue@3.5.13(typescript@5.7.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
embla-carousel: 8.5.1
|
embla-carousel: 8.5.1
|
||||||
embla-carousel-reactive-utils: 8.5.1(embla-carousel@8.5.1)
|
embla-carousel-reactive-utils: 8.5.1(embla-carousel@8.5.1)
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
|
|
||||||
embla-carousel@8.5.1: {}
|
embla-carousel@8.5.1: {}
|
||||||
|
|
||||||
@@ -38632,7 +38662,7 @@ snapshots:
|
|||||||
|
|
||||||
mkdirp@1.0.4: {}
|
mkdirp@1.0.4: {}
|
||||||
|
|
||||||
mkdist@2.2.0(sass@1.83.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)):
|
mkdist@2.2.0(sass@1.83.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
autoprefixer: 10.4.20(postcss@8.4.49)
|
autoprefixer: 10.4.20(postcss@8.4.49)
|
||||||
citty: 0.1.6
|
citty: 0.1.6
|
||||||
@@ -38649,8 +38679,8 @@ snapshots:
|
|||||||
tinyglobby: 0.2.12
|
tinyglobby: 0.2.12
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
sass: 1.83.1
|
sass: 1.83.1
|
||||||
typescript: 5.7.2
|
typescript: 5.7.3
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
|
|
||||||
mlly@1.7.3:
|
mlly@1.7.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -39010,6 +39040,98 @@ snapshots:
|
|||||||
- supports-color
|
- supports-color
|
||||||
- typescript
|
- typescript
|
||||||
|
|
||||||
|
nitropack@2.10.4(@azure/identity@4.6.0)(@libsql/client@0.12.0)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(mysql2@3.11.5)(typescript@5.7.3):
|
||||||
|
dependencies:
|
||||||
|
'@cloudflare/kv-asset-handler': 0.3.4
|
||||||
|
'@netlify/functions': 2.8.2
|
||||||
|
'@rollup/plugin-alias': 5.1.1(rollup@4.31.0)
|
||||||
|
'@rollup/plugin-commonjs': 28.0.1(rollup@4.31.0)
|
||||||
|
'@rollup/plugin-inject': 5.0.5(rollup@4.31.0)
|
||||||
|
'@rollup/plugin-json': 6.1.0(rollup@4.31.0)
|
||||||
|
'@rollup/plugin-node-resolve': 15.3.0(rollup@4.31.0)
|
||||||
|
'@rollup/plugin-replace': 6.0.1(rollup@4.31.0)
|
||||||
|
'@rollup/plugin-terser': 0.4.4(rollup@4.31.0)
|
||||||
|
'@rollup/pluginutils': 5.1.3(rollup@4.31.0)
|
||||||
|
'@types/http-proxy': 1.17.15
|
||||||
|
'@vercel/nft': 0.27.5(encoding@0.1.13)
|
||||||
|
archiver: 7.0.1
|
||||||
|
c12: 2.0.1(magicast@0.3.5)
|
||||||
|
chokidar: 3.6.0
|
||||||
|
citty: 0.1.6
|
||||||
|
compatx: 0.1.8
|
||||||
|
confbox: 0.1.8
|
||||||
|
consola: 3.2.3
|
||||||
|
cookie-es: 1.2.2
|
||||||
|
croner: 9.0.0
|
||||||
|
crossws: 0.3.1
|
||||||
|
db0: 0.2.1(@libsql/client@0.12.0)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(mysql2@3.11.5)
|
||||||
|
defu: 6.1.4
|
||||||
|
destr: 2.0.3
|
||||||
|
dot-prop: 9.0.0
|
||||||
|
esbuild: 0.24.2
|
||||||
|
escape-string-regexp: 5.0.0
|
||||||
|
etag: 1.8.1
|
||||||
|
fs-extra: 11.3.0
|
||||||
|
globby: 14.0.2
|
||||||
|
gzip-size: 7.0.0
|
||||||
|
h3: 1.13.0
|
||||||
|
hookable: 5.5.3
|
||||||
|
httpxy: 0.1.5
|
||||||
|
ioredis: 5.4.1
|
||||||
|
jiti: 2.4.0
|
||||||
|
klona: 2.0.6
|
||||||
|
knitwork: 1.1.0
|
||||||
|
listhen: 1.9.0
|
||||||
|
magic-string: 0.30.14
|
||||||
|
magicast: 0.3.5
|
||||||
|
mime: 4.0.4
|
||||||
|
mlly: 1.7.4
|
||||||
|
node-fetch-native: 1.6.4
|
||||||
|
ofetch: 1.4.1
|
||||||
|
ohash: 1.1.4
|
||||||
|
openapi-typescript: 7.4.2(encoding@0.1.13)(typescript@5.7.3)
|
||||||
|
pathe: 1.1.2
|
||||||
|
perfect-debounce: 1.0.0
|
||||||
|
pkg-types: 1.3.1
|
||||||
|
pretty-bytes: 6.1.1
|
||||||
|
radix3: 1.1.2
|
||||||
|
rollup: 4.31.0
|
||||||
|
rollup-plugin-visualizer: 5.12.0(rollup@4.31.0)
|
||||||
|
scule: 1.3.0
|
||||||
|
semver: 7.7.1
|
||||||
|
serve-placeholder: 2.0.2
|
||||||
|
serve-static: 1.16.2
|
||||||
|
std-env: 3.8.0
|
||||||
|
ufo: 1.5.4
|
||||||
|
uncrypto: 0.1.3
|
||||||
|
unctx: 2.3.1
|
||||||
|
unenv: 1.10.0
|
||||||
|
unimport: 3.14.4(rollup@4.31.0)
|
||||||
|
unstorage: 1.13.1(@azure/identity@4.6.0)(ioredis@5.4.1)
|
||||||
|
untyped: 1.5.1
|
||||||
|
unwasm: 0.3.9
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- '@azure/app-configuration'
|
||||||
|
- '@azure/cosmos'
|
||||||
|
- '@azure/data-tables'
|
||||||
|
- '@azure/identity'
|
||||||
|
- '@azure/keyvault-secrets'
|
||||||
|
- '@azure/storage-blob'
|
||||||
|
- '@capacitor/preferences'
|
||||||
|
- '@electric-sql/pglite'
|
||||||
|
- '@libsql/client'
|
||||||
|
- '@netlify/blobs'
|
||||||
|
- '@planetscale/database'
|
||||||
|
- '@upstash/redis'
|
||||||
|
- '@vercel/kv'
|
||||||
|
- better-sqlite3
|
||||||
|
- drizzle-orm
|
||||||
|
- encoding
|
||||||
|
- idb-keyval
|
||||||
|
- mysql2
|
||||||
|
- supports-color
|
||||||
|
- typescript
|
||||||
|
|
||||||
nlcst-to-string@4.0.0:
|
nlcst-to-string@4.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/nlcst': 2.0.3
|
'@types/nlcst': 2.0.3
|
||||||
@@ -39182,18 +39304,18 @@ snapshots:
|
|||||||
|
|
||||||
nuxi@3.15.0: {}
|
nuxi@3.15.0: {}
|
||||||
|
|
||||||
nuxt@3.14.1592(@azure/identity@4.6.0)(@biomejs/biome@1.9.4)(@libsql/client@0.12.0)(@parcel/watcher@2.4.1)(@types/node@22.10.7)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(eslint@8.57.1)(ioredis@5.4.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(mysql2@3.11.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.2)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)):
|
nuxt@3.14.1592(@azure/identity@4.6.0)(@biomejs/biome@1.9.4)(@libsql/client@0.12.0)(@parcel/watcher@2.4.1)(@types/node@22.10.7)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(eslint@8.57.1)(ioredis@5.4.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(mysql2@3.11.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.3)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nuxt/devalue': 2.0.2
|
'@nuxt/devalue': 2.0.2
|
||||||
'@nuxt/devtools': 1.6.0(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.2))
|
'@nuxt/devtools': 1.6.0(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0))(vue@3.5.13(typescript@5.7.3))
|
||||||
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.31.0)
|
'@nuxt/kit': 3.14.1592(magicast@0.3.5)(rollup@4.31.0)
|
||||||
'@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@4.31.0)
|
'@nuxt/schema': 3.14.1592(magicast@0.3.5)(rollup@4.31.0)
|
||||||
'@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.31.0)
|
'@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.31.0)
|
||||||
'@nuxt/vite-builder': 3.14.1592(@biomejs/biome@1.9.4)(@types/node@22.10.7)(eslint@8.57.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))
|
'@nuxt/vite-builder': 3.14.1592(@biomejs/biome@1.9.4)(@types/node@22.10.7)(eslint@8.57.1)(less@4.2.1)(lightningcss@1.27.0)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.31.0)(sass@1.83.1)(terser@5.36.0)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))
|
||||||
'@unhead/dom': 1.11.13
|
'@unhead/dom': 1.11.13
|
||||||
'@unhead/shared': 1.11.13
|
'@unhead/shared': 1.11.13
|
||||||
'@unhead/ssr': 1.11.13
|
'@unhead/ssr': 1.11.13
|
||||||
'@unhead/vue': 1.11.13(vue@3.5.13(typescript@5.7.2))
|
'@unhead/vue': 1.11.13(vue@3.5.13(typescript@5.7.3))
|
||||||
'@vue/shared': 3.5.13
|
'@vue/shared': 3.5.13
|
||||||
acorn: 8.14.0
|
acorn: 8.14.0
|
||||||
c12: 2.0.1(magicast@0.3.5)
|
c12: 2.0.1(magicast@0.3.5)
|
||||||
@@ -39219,7 +39341,7 @@ snapshots:
|
|||||||
magic-string: 0.30.14
|
magic-string: 0.30.14
|
||||||
mlly: 1.7.3
|
mlly: 1.7.3
|
||||||
nanotar: 0.1.1
|
nanotar: 0.1.1
|
||||||
nitropack: 2.10.4(@azure/identity@4.6.0)(@libsql/client@0.12.0)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(mysql2@3.11.5)(typescript@5.7.2)
|
nitropack: 2.10.4(@azure/identity@4.6.0)(@libsql/client@0.12.0)(better-sqlite3@11.6.0)(drizzle-orm@0.39.3(@cloudflare/workers-types@4.20250214.0)(@libsql/client-wasm@0.14.0)(@libsql/client@0.12.0)(@prisma/client@5.22.0(prisma@5.22.0))(@types/better-sqlite3@7.6.12)(@types/pg@8.11.10)(better-sqlite3@11.6.0)(bun-types@1.2.4)(kysely@0.27.4)(mysql2@3.11.5)(pg@8.13.1)(prisma@5.22.0))(encoding@0.1.13)(mysql2@3.11.5)(typescript@5.7.3)
|
||||||
nuxi: 3.15.0
|
nuxi: 3.15.0
|
||||||
nypm: 0.3.12
|
nypm: 0.3.12
|
||||||
ofetch: 1.4.1
|
ofetch: 1.4.1
|
||||||
@@ -39241,13 +39363,13 @@ snapshots:
|
|||||||
unhead: 1.11.13
|
unhead: 1.11.13
|
||||||
unimport: 3.14.4(rollup@4.31.0)
|
unimport: 3.14.4(rollup@4.31.0)
|
||||||
unplugin: 1.16.0
|
unplugin: 1.16.0
|
||||||
unplugin-vue-router: 0.10.8(rollup@4.31.0)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2))
|
unplugin-vue-router: 0.10.8(rollup@4.31.0)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3))
|
||||||
unstorage: 1.13.1(@azure/identity@4.6.0)(ioredis@5.4.1)
|
unstorage: 1.13.1(@azure/identity@4.6.0)(ioredis@5.4.1)
|
||||||
untyped: 1.5.1
|
untyped: 1.5.1
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
vue-bundle-renderer: 2.1.1
|
vue-bundle-renderer: 2.1.1
|
||||||
vue-devtools-stub: 0.1.0
|
vue-devtools-stub: 0.1.0
|
||||||
vue-router: 4.5.0(vue@3.5.13(typescript@5.7.2))
|
vue-router: 4.5.0(vue@3.5.13(typescript@5.7.3))
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@parcel/watcher': 2.4.1
|
'@parcel/watcher': 2.4.1
|
||||||
'@types/node': 22.10.7
|
'@types/node': 22.10.7
|
||||||
@@ -39460,6 +39582,18 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- encoding
|
- encoding
|
||||||
|
|
||||||
|
openapi-typescript@7.4.2(encoding@0.1.13)(typescript@5.7.3):
|
||||||
|
dependencies:
|
||||||
|
'@redocly/openapi-core': 1.25.10(encoding@0.1.13)(supports-color@9.4.0)
|
||||||
|
ansi-colors: 4.1.3
|
||||||
|
change-case: 5.4.4
|
||||||
|
parse-json: 8.1.0
|
||||||
|
supports-color: 9.4.0
|
||||||
|
typescript: 5.7.3
|
||||||
|
yargs-parser: 21.1.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- encoding
|
||||||
|
|
||||||
optionator@0.9.4:
|
optionator@0.9.4:
|
||||||
dependencies:
|
dependencies:
|
||||||
deep-is: 0.1.4
|
deep-is: 0.1.4
|
||||||
@@ -40708,20 +40842,20 @@ snapshots:
|
|||||||
|
|
||||||
quickselect@2.0.0: {}
|
quickselect@2.0.0: {}
|
||||||
|
|
||||||
radix-vue@1.9.11(vue@3.5.13(typescript@5.7.2)):
|
radix-vue@1.9.11(vue@3.5.13(typescript@5.7.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@floating-ui/dom': 1.6.12
|
'@floating-ui/dom': 1.6.12
|
||||||
'@floating-ui/vue': 1.1.5(vue@3.5.13(typescript@5.7.2))
|
'@floating-ui/vue': 1.1.5(vue@3.5.13(typescript@5.7.3))
|
||||||
'@internationalized/date': 3.6.0
|
'@internationalized/date': 3.6.0
|
||||||
'@internationalized/number': 3.5.4
|
'@internationalized/number': 3.5.4
|
||||||
'@tanstack/vue-virtual': 3.10.8(vue@3.5.13(typescript@5.7.2))
|
'@tanstack/vue-virtual': 3.10.8(vue@3.5.13(typescript@5.7.3))
|
||||||
'@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.2))
|
'@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.3))
|
||||||
'@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.2))
|
'@vueuse/shared': 10.11.1(vue@3.5.13(typescript@5.7.3))
|
||||||
aria-hidden: 1.2.4
|
aria-hidden: 1.2.4
|
||||||
defu: 6.1.4
|
defu: 6.1.4
|
||||||
fast-deep-equal: 3.1.3
|
fast-deep-equal: 3.1.3
|
||||||
nanoid: 5.0.9
|
nanoid: 5.0.9
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@vue/composition-api'
|
- '@vue/composition-api'
|
||||||
|
|
||||||
@@ -41774,11 +41908,11 @@ snapshots:
|
|||||||
|
|
||||||
robust-predicates@3.0.2: {}
|
robust-predicates@3.0.2: {}
|
||||||
|
|
||||||
rollup-plugin-dts@6.1.1(rollup@4.34.8)(typescript@5.7.2):
|
rollup-plugin-dts@6.1.1(rollup@4.34.8)(typescript@5.7.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
magic-string: 0.30.17
|
magic-string: 0.30.17
|
||||||
rollup: 4.34.8
|
rollup: 4.34.8
|
||||||
typescript: 5.7.2
|
typescript: 5.7.3
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@babel/code-frame': 7.26.2
|
'@babel/code-frame': 7.26.2
|
||||||
|
|
||||||
@@ -43317,6 +43451,8 @@ snapshots:
|
|||||||
|
|
||||||
typescript@5.7.2: {}
|
typescript@5.7.2: {}
|
||||||
|
|
||||||
|
typescript@5.7.3: {}
|
||||||
|
|
||||||
ua-parser-js@0.7.39: {}
|
ua-parser-js@0.7.39: {}
|
||||||
|
|
||||||
ua-parser-js@1.0.39: {}
|
ua-parser-js@1.0.39: {}
|
||||||
@@ -43332,7 +43468,7 @@ snapshots:
|
|||||||
has-symbols: 1.0.3
|
has-symbols: 1.0.3
|
||||||
which-boxed-primitive: 1.0.2
|
which-boxed-primitive: 1.0.2
|
||||||
|
|
||||||
unbuild@3.5.0(sass@1.83.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2)):
|
unbuild@3.5.0(sass@1.83.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@rollup/plugin-alias': 5.1.1(rollup@4.34.8)
|
'@rollup/plugin-alias': 5.1.1(rollup@4.34.8)
|
||||||
'@rollup/plugin-commonjs': 28.0.2(rollup@4.34.8)
|
'@rollup/plugin-commonjs': 28.0.2(rollup@4.34.8)
|
||||||
@@ -43348,18 +43484,18 @@ snapshots:
|
|||||||
hookable: 5.5.3
|
hookable: 5.5.3
|
||||||
jiti: 2.4.2
|
jiti: 2.4.2
|
||||||
magic-string: 0.30.17
|
magic-string: 0.30.17
|
||||||
mkdist: 2.2.0(sass@1.83.1)(typescript@5.7.2)(vue@3.5.13(typescript@5.7.2))
|
mkdist: 2.2.0(sass@1.83.1)(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3))
|
||||||
mlly: 1.7.4
|
mlly: 1.7.4
|
||||||
pathe: 2.0.3
|
pathe: 2.0.3
|
||||||
pkg-types: 2.0.0
|
pkg-types: 2.0.0
|
||||||
pretty-bytes: 6.1.1
|
pretty-bytes: 6.1.1
|
||||||
rollup: 4.34.8
|
rollup: 4.34.8
|
||||||
rollup-plugin-dts: 6.1.1(rollup@4.34.8)(typescript@5.7.2)
|
rollup-plugin-dts: 6.1.1(rollup@4.34.8)(typescript@5.7.3)
|
||||||
scule: 1.3.0
|
scule: 1.3.0
|
||||||
tinyglobby: 0.2.12
|
tinyglobby: 0.2.12
|
||||||
untyped: 2.0.0
|
untyped: 2.0.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.7.2
|
typescript: 5.7.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- sass
|
- sass
|
||||||
- vue
|
- vue
|
||||||
@@ -43602,11 +43738,11 @@ snapshots:
|
|||||||
|
|
||||||
unpipe@1.0.0: {}
|
unpipe@1.0.0: {}
|
||||||
|
|
||||||
unplugin-vue-router@0.10.8(rollup@4.31.0)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)):
|
unplugin-vue-router@0.10.8(rollup@4.31.0)(vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/types': 7.26.5
|
'@babel/types': 7.26.5
|
||||||
'@rollup/pluginutils': 5.1.3(rollup@4.31.0)
|
'@rollup/pluginutils': 5.1.3(rollup@4.31.0)
|
||||||
'@vue-macros/common': 1.15.0(rollup@4.31.0)(vue@3.5.13(typescript@5.7.2))
|
'@vue-macros/common': 1.15.0(rollup@4.31.0)(vue@3.5.13(typescript@5.7.3))
|
||||||
ast-walker-scope: 0.6.2
|
ast-walker-scope: 0.6.2
|
||||||
chokidar: 3.6.0
|
chokidar: 3.6.0
|
||||||
fast-glob: 3.3.3
|
fast-glob: 3.3.3
|
||||||
@@ -43619,7 +43755,7 @@ snapshots:
|
|||||||
unplugin: 1.16.0
|
unplugin: 1.16.0
|
||||||
yaml: 2.6.0
|
yaml: 2.6.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
vue-router: 4.5.0(vue@3.5.13(typescript@5.7.2))
|
vue-router: 4.5.0(vue@3.5.13(typescript@5.7.3))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- rollup
|
- rollup
|
||||||
- vue
|
- vue
|
||||||
@@ -43790,7 +43926,7 @@ snapshots:
|
|||||||
kleur: 4.1.5
|
kleur: 4.1.5
|
||||||
sade: 1.8.1
|
sade: 1.8.1
|
||||||
|
|
||||||
v-calendar@3.1.2(@popperjs/core@2.11.8)(vue@3.5.13(typescript@5.7.2)):
|
v-calendar@3.1.2(@popperjs/core@2.11.8)(vue@3.5.13(typescript@5.7.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@popperjs/core': 2.11.8
|
'@popperjs/core': 2.11.8
|
||||||
'@types/lodash': 4.17.13
|
'@types/lodash': 4.17.13
|
||||||
@@ -43798,8 +43934,8 @@ snapshots:
|
|||||||
date-fns: 2.30.0
|
date-fns: 2.30.0
|
||||||
date-fns-tz: 2.0.1(date-fns@2.30.0)
|
date-fns-tz: 2.0.1(date-fns@2.30.0)
|
||||||
lodash: 4.17.21
|
lodash: 4.17.21
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
vue-screen-utils: 1.0.0-beta.13(vue@3.5.13(typescript@5.7.2))
|
vue-screen-utils: 1.0.0-beta.13(vue@3.5.13(typescript@5.7.3))
|
||||||
|
|
||||||
valibot@0.31.1:
|
valibot@0.31.1:
|
||||||
optional: true
|
optional: true
|
||||||
@@ -43811,6 +43947,11 @@ snapshots:
|
|||||||
valibot@1.0.0-beta.15(typescript@5.7.2):
|
valibot@1.0.0-beta.15(typescript@5.7.2):
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.7.2
|
typescript: 5.7.2
|
||||||
|
optional: true
|
||||||
|
|
||||||
|
valibot@1.0.0-beta.15(typescript@5.7.3):
|
||||||
|
optionalDependencies:
|
||||||
|
typescript: 5.7.3
|
||||||
|
|
||||||
validate-html-nesting@1.2.2: {}
|
validate-html-nesting@1.2.2: {}
|
||||||
|
|
||||||
@@ -43835,11 +43976,11 @@ snapshots:
|
|||||||
bits-ui: 0.21.16(svelte@4.2.19)
|
bits-ui: 0.21.16(svelte@4.2.19)
|
||||||
svelte: 4.2.19
|
svelte: 4.2.19
|
||||||
|
|
||||||
vaul-vue@0.2.0(radix-vue@1.9.11(vue@3.5.13(typescript@5.7.2)))(vue@3.5.13(typescript@5.7.2)):
|
vaul-vue@0.2.0(radix-vue@1.9.11(vue@3.5.13(typescript@5.7.3)))(vue@3.5.13(typescript@5.7.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.2))
|
'@vueuse/core': 10.11.1(vue@3.5.13(typescript@5.7.3))
|
||||||
radix-vue: 1.9.11(vue@3.5.13(typescript@5.7.2))
|
radix-vue: 1.9.11(vue@3.5.13(typescript@5.7.3))
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@vue/composition-api'
|
- '@vue/composition-api'
|
||||||
|
|
||||||
@@ -43861,11 +44002,11 @@ snapshots:
|
|||||||
- '@types/react'
|
- '@types/react'
|
||||||
- '@types/react-dom'
|
- '@types/react-dom'
|
||||||
|
|
||||||
vee-validate@4.14.7(vue@3.5.13(typescript@5.7.2)):
|
vee-validate@4.14.7(vue@3.5.13(typescript@5.7.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/devtools-api': 7.6.2
|
'@vue/devtools-api': 7.6.2
|
||||||
type-fest: 4.26.1
|
type-fest: 4.26.1
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
|
|
||||||
vfile-location@5.0.3:
|
vfile-location@5.0.3:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -44105,7 +44246,7 @@ snapshots:
|
|||||||
- supports-color
|
- supports-color
|
||||||
- terser
|
- terser
|
||||||
|
|
||||||
vite-plugin-checker@0.8.0(@biomejs/biome@1.9.4)(eslint@8.57.1)(optionator@0.9.4)(typescript@5.7.2)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)):
|
vite-plugin-checker@0.8.0(@biomejs/biome@1.9.4)(eslint@8.57.1)(optionator@0.9.4)(typescript@5.7.3)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@babel/code-frame': 7.26.2
|
'@babel/code-frame': 7.26.2
|
||||||
ansi-escapes: 4.3.2
|
ansi-escapes: 4.3.2
|
||||||
@@ -44126,7 +44267,7 @@ snapshots:
|
|||||||
'@biomejs/biome': 1.9.4
|
'@biomejs/biome': 1.9.4
|
||||||
eslint: 8.57.1
|
eslint: 8.57.1
|
||||||
optionator: 0.9.4
|
optionator: 0.9.4
|
||||||
typescript: 5.7.2
|
typescript: 5.7.3
|
||||||
|
|
||||||
vite-plugin-inspect@0.8.7(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.31.0))(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)):
|
vite-plugin-inspect@0.8.7(@nuxt/kit@3.14.1592(magicast@0.3.5)(rollup@4.31.0))(rollup@4.31.0)(vite@5.4.14(@types/node@22.10.7)(less@4.2.1)(lightningcss@1.27.0)(sass@1.83.1)(terser@5.36.0)):
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -44434,20 +44575,20 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
ufo: 1.5.4
|
ufo: 1.5.4
|
||||||
|
|
||||||
vue-demi@0.14.10(vue@3.5.13(typescript@5.7.2)):
|
vue-demi@0.14.10(vue@3.5.13(typescript@5.7.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
|
|
||||||
vue-devtools-stub@0.1.0: {}
|
vue-devtools-stub@0.1.0: {}
|
||||||
|
|
||||||
vue-router@4.5.0(vue@3.5.13(typescript@5.7.2)):
|
vue-router@4.5.0(vue@3.5.13(typescript@5.7.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/devtools-api': 6.6.4
|
'@vue/devtools-api': 6.6.4
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
|
|
||||||
vue-screen-utils@1.0.0-beta.13(vue@3.5.13(typescript@5.7.2)):
|
vue-screen-utils@1.0.0-beta.13(vue@3.5.13(typescript@5.7.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
vue: 3.5.13(typescript@5.7.2)
|
vue: 3.5.13(typescript@5.7.3)
|
||||||
|
|
||||||
vue-sonner@1.3.0: {}
|
vue-sonner@1.3.0: {}
|
||||||
|
|
||||||
@@ -44459,15 +44600,15 @@ snapshots:
|
|||||||
'@vue/server-renderer': 3.3.4(vue@3.3.4)
|
'@vue/server-renderer': 3.3.4(vue@3.3.4)
|
||||||
'@vue/shared': 3.3.4
|
'@vue/shared': 3.3.4
|
||||||
|
|
||||||
vue@3.5.13(typescript@5.7.2):
|
vue@3.5.13(typescript@5.7.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vue/compiler-dom': 3.5.13
|
'@vue/compiler-dom': 3.5.13
|
||||||
'@vue/compiler-sfc': 3.5.13
|
'@vue/compiler-sfc': 3.5.13
|
||||||
'@vue/runtime-dom': 3.5.13
|
'@vue/runtime-dom': 3.5.13
|
||||||
'@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.7.2))
|
'@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.7.3))
|
||||||
'@vue/shared': 3.5.13
|
'@vue/shared': 3.5.13
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.7.2
|
typescript: 5.7.3
|
||||||
|
|
||||||
w3c-keyname@2.2.8: {}
|
w3c-keyname@2.2.8: {}
|
||||||
|
|
||||||
|
|||||||
@@ -14,4 +14,4 @@ catalog:
|
|||||||
"better-call": "^1.0.3"
|
"better-call": "^1.0.3"
|
||||||
"@better-fetch/fetch": "^1.1.15"
|
"@better-fetch/fetch": "^1.1.15"
|
||||||
"unbuild": "^3.5.0"
|
"unbuild": "^3.5.0"
|
||||||
"typescript": "^5.7.2"
|
"typescript": "^5.7.3"
|
||||||
Reference in New Issue
Block a user