Compare commits
11 Commits
5d9eb9217e
...
main
Author | SHA1 | Date | |
---|---|---|---|
0888cca45b | |||
5314c98508 | |||
484047a7bd | |||
80d95065e8 | |||
5386dad5c9 | |||
4e63d0ac42 | |||
485e75dc93 | |||
49c8389d9d | |||
92a27f544b | |||
b02f5e6364 | |||
f5fff9c52b |
@@ -4,16 +4,17 @@ import { generateMemorableToken, isValidToken } from '@/lib/auth/tokens';
|
|||||||
import { setTokenCookie, getTokenCookie } from '@/lib/auth/cookies';
|
import { setTokenCookie, getTokenCookie } from '@/lib/auth/cookies';
|
||||||
import { eq } from 'drizzle-orm';
|
import { eq } from 'drizzle-orm';
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET() {
|
||||||
try {
|
try {
|
||||||
// Check if user already has a token
|
// Check if user already has a token
|
||||||
const existingToken = await getTokenCookie();
|
const existingToken = await getTokenCookie();
|
||||||
|
|
||||||
if (existingToken) {
|
if (existingToken) {
|
||||||
// Verify token exists in database
|
// Verify token exists in database
|
||||||
const [user] = await db.select().from(users).where(eq(users.token, existingToken));
|
const userRows = await db.select().from(users).where(eq(users.token, existingToken));
|
||||||
|
|
||||||
if (user) {
|
if (userRows.length > 0) {
|
||||||
|
const user = userRows[0];
|
||||||
return NextResponse.json({
|
return NextResponse.json({
|
||||||
authenticated: true,
|
authenticated: true,
|
||||||
token: existingToken,
|
token: existingToken,
|
||||||
@@ -31,20 +32,25 @@ export async function GET(request: NextRequest) {
|
|||||||
|
|
||||||
export async function POST(request: NextRequest) {
|
export async function POST(request: NextRequest) {
|
||||||
try {
|
try {
|
||||||
const body = await request.json();
|
const body = (await request.json()) as { action: string; token?: string };
|
||||||
const { action, token } = body;
|
const { action, token } = body;
|
||||||
|
|
||||||
if (action === 'create') {
|
if (action === 'create') {
|
||||||
// Generate new token and create user
|
// Generate new token and create user
|
||||||
const newToken = generateMemorableToken();
|
const newToken = generateMemorableToken();
|
||||||
|
|
||||||
const [newUser] = await db
|
const newUserRows = await db
|
||||||
.insert(users)
|
.insert(users)
|
||||||
.values({
|
.values({
|
||||||
token: newToken,
|
token: newToken,
|
||||||
})
|
})
|
||||||
.returning();
|
.returning();
|
||||||
|
|
||||||
|
if (newUserRows.length === 0) {
|
||||||
|
throw new Error('Failed to create user');
|
||||||
|
}
|
||||||
|
|
||||||
|
const newUser = newUserRows[0];
|
||||||
await setTokenCookie(newToken);
|
await setTokenCookie(newToken);
|
||||||
|
|
||||||
return NextResponse.json({
|
return NextResponse.json({
|
||||||
@@ -67,9 +73,9 @@ export async function POST(request: NextRequest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if token exists
|
// Check if token exists
|
||||||
const [user] = await db.select().from(users).where(eq(users.token, token));
|
const userRows = await db.select().from(users).where(eq(users.token, token));
|
||||||
|
|
||||||
if (!user) {
|
if (userRows.length === 0) {
|
||||||
return NextResponse.json(
|
return NextResponse.json(
|
||||||
{
|
{
|
||||||
success: false,
|
success: false,
|
||||||
@@ -79,6 +85,7 @@ export async function POST(request: NextRequest) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const user = userRows[0];
|
||||||
await setTokenCookie(token);
|
await setTokenCookie(token);
|
||||||
|
|
||||||
return NextResponse.json({
|
return NextResponse.json({
|
||||||
|
@@ -7,8 +7,8 @@ async function getUserFromToken() {
|
|||||||
const token = await getTokenCookie();
|
const token = await getTokenCookie();
|
||||||
if (!token) return null;
|
if (!token) return null;
|
||||||
|
|
||||||
const [user] = await db.select().from(users).where(eq(users.token, token));
|
const userRows = await db.select().from(users).where(eq(users.token, token));
|
||||||
return user;
|
return userRows.length > 0 ? userRows[0] : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function POST(request: NextRequest, { params }: { params: Promise<{ id: string }> }) {
|
export async function POST(request: NextRequest, { params }: { params: Promise<{ id: string }> }) {
|
||||||
@@ -26,20 +26,20 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Verify habit belongs to user
|
// Verify habit belongs to user
|
||||||
const [habit] = await db
|
const habitRows = await db
|
||||||
.select()
|
.select()
|
||||||
.from(habits)
|
.from(habits)
|
||||||
.where(and(eq(habits.id, habitId), eq(habits.userId, user.id)));
|
.where(and(eq(habits.id, habitId), eq(habits.userId, user.id)));
|
||||||
|
|
||||||
if (!habit) {
|
if (habitRows.length === 0) {
|
||||||
return NextResponse.json({ error: 'Habit not found' }, { status: 404 });
|
return NextResponse.json({ error: 'Habit not found' }, { status: 404 });
|
||||||
}
|
}
|
||||||
|
|
||||||
const body = await request.json();
|
const body = (await request.json()) as { note?: string };
|
||||||
const { note } = body;
|
const { note } = body;
|
||||||
|
|
||||||
// Create log entry
|
// Create log entry
|
||||||
const [log] = await db
|
const logRows = await db
|
||||||
.insert(habitLogs)
|
.insert(habitLogs)
|
||||||
.values({
|
.values({
|
||||||
habitId,
|
habitId,
|
||||||
@@ -47,6 +47,11 @@ export async function POST(request: NextRequest, { params }: { params: Promise<{
|
|||||||
})
|
})
|
||||||
.returning();
|
.returning();
|
||||||
|
|
||||||
|
if (logRows.length === 0) {
|
||||||
|
throw new Error('Failed to create log entry');
|
||||||
|
}
|
||||||
|
|
||||||
|
const log = logRows[0];
|
||||||
return NextResponse.json({ log });
|
return NextResponse.json({ log });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Log habit error:', error);
|
console.error('Log habit error:', error);
|
||||||
|
@@ -7,11 +7,11 @@ async function getUserFromToken() {
|
|||||||
const token = await getTokenCookie();
|
const token = await getTokenCookie();
|
||||||
if (!token) return null;
|
if (!token) return null;
|
||||||
|
|
||||||
const [user] = await db.select().from(users).where(eq(users.token, token));
|
const userRows = await db.select().from(users).where(eq(users.token, token));
|
||||||
return user;
|
return userRows.length > 0 ? userRows[0] : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function GET(request: NextRequest) {
|
export async function GET() {
|
||||||
try {
|
try {
|
||||||
const user = await getUserFromToken();
|
const user = await getUserFromToken();
|
||||||
if (!user) {
|
if (!user) {
|
||||||
@@ -83,7 +83,13 @@ export async function POST(request: NextRequest) {
|
|||||||
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
|
||||||
}
|
}
|
||||||
|
|
||||||
const body = await request.json();
|
const body = (await request.json()) as {
|
||||||
|
name: string;
|
||||||
|
type: string;
|
||||||
|
targetFrequency?: { value: number; period: 'day' | 'week' | 'month' };
|
||||||
|
color?: string;
|
||||||
|
icon?: string;
|
||||||
|
};
|
||||||
const { name, type, targetFrequency, color, icon } = body;
|
const { name, type, targetFrequency, color, icon } = body;
|
||||||
|
|
||||||
if (!name || !type) {
|
if (!name || !type) {
|
||||||
@@ -95,18 +101,33 @@ export async function POST(request: NextRequest) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const [newHabit] = await db
|
// Validate type is one of the allowed enum values
|
||||||
|
if (!['positive', 'neutral', 'negative'].includes(type)) {
|
||||||
|
return NextResponse.json(
|
||||||
|
{
|
||||||
|
error: 'Type must be one of: positive, neutral, negative',
|
||||||
|
},
|
||||||
|
{ status: 400 },
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const newHabitRows = await db
|
||||||
.insert(habits)
|
.insert(habits)
|
||||||
.values({
|
.values({
|
||||||
userId: user.id,
|
userId: user.id,
|
||||||
name,
|
name,
|
||||||
type,
|
type: type as 'positive' | 'neutral' | 'negative',
|
||||||
targetFrequency,
|
targetFrequency,
|
||||||
color,
|
color,
|
||||||
icon,
|
icon,
|
||||||
})
|
})
|
||||||
.returning();
|
.returning();
|
||||||
|
|
||||||
|
if (newHabitRows.length === 0) {
|
||||||
|
throw new Error('Failed to create habit');
|
||||||
|
}
|
||||||
|
|
||||||
|
const newHabit = newHabitRows[0];
|
||||||
return NextResponse.json({ habit: newHabit });
|
return NextResponse.json({ habit: newHabit });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Create habit error:', error);
|
console.error('Create habit error:', error);
|
||||||
|
@@ -36,6 +36,12 @@ import { Alert, AlertDescription } from '@/components/ui/alert';
|
|||||||
import { Separator } from '@/components/ui/separator';
|
import { Separator } from '@/components/ui/separator';
|
||||||
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip';
|
||||||
|
|
||||||
|
interface AuthData {
|
||||||
|
authenticated: boolean;
|
||||||
|
token?: string;
|
||||||
|
userId?: string;
|
||||||
|
}
|
||||||
|
|
||||||
interface Habit {
|
interface Habit {
|
||||||
id: number;
|
id: number;
|
||||||
name: string;
|
name: string;
|
||||||
@@ -47,6 +53,23 @@ interface Habit {
|
|||||||
createdAt: string;
|
createdAt: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface HabitsResponse {
|
||||||
|
habits: Habit[];
|
||||||
|
}
|
||||||
|
|
||||||
|
interface LogResponse {
|
||||||
|
log: {
|
||||||
|
id: number;
|
||||||
|
habitId: number;
|
||||||
|
loggedAt: string;
|
||||||
|
note?: string;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
interface HabitResponse {
|
||||||
|
habit: Habit;
|
||||||
|
}
|
||||||
|
|
||||||
export default function Dashboard() {
|
export default function Dashboard() {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const queryClient = useQueryClient();
|
const queryClient = useQueryClient();
|
||||||
@@ -57,11 +80,11 @@ export default function Dashboard() {
|
|||||||
const [copiedToken, setCopiedToken] = useState(false);
|
const [copiedToken, setCopiedToken] = useState(false);
|
||||||
|
|
||||||
// Check authentication
|
// Check authentication
|
||||||
const { data: authData, isLoading: authLoading } = useQuery({
|
const { data: authData, isLoading: authLoading } = useQuery<AuthData>({
|
||||||
queryKey: ['auth'],
|
queryKey: ['auth'],
|
||||||
queryFn: async () => {
|
queryFn: async (): Promise<AuthData> => {
|
||||||
const res = await fetch('/api/auth');
|
const res = await fetch('/api/auth');
|
||||||
const data = await res.json();
|
const data = (await res.json()) as AuthData;
|
||||||
if (!data.authenticated) {
|
if (!data.authenticated) {
|
||||||
router.push('/');
|
router.push('/');
|
||||||
}
|
}
|
||||||
@@ -76,45 +99,45 @@ export default function Dashboard() {
|
|||||||
}, [authData]);
|
}, [authData]);
|
||||||
|
|
||||||
// Fetch habits
|
// Fetch habits
|
||||||
const { data: habitsData, isLoading: habitsLoading } = useQuery({
|
const { data: habitsData, isLoading: habitsLoading } = useQuery<HabitsResponse>({
|
||||||
queryKey: ['habits'],
|
queryKey: ['habits'],
|
||||||
queryFn: async () => {
|
queryFn: async (): Promise<HabitsResponse> => {
|
||||||
const res = await fetch('/api/habits');
|
const res = await fetch('/api/habits');
|
||||||
if (!res.ok) throw new Error('Failed to fetch habits');
|
if (!res.ok) throw new Error('Failed to fetch habits');
|
||||||
return res.json();
|
return res.json() as Promise<HabitsResponse>;
|
||||||
},
|
},
|
||||||
enabled: !!authData?.authenticated,
|
enabled: !!authData?.authenticated,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Log habit mutation
|
// Log habit mutation
|
||||||
const logHabitMutation = useMutation({
|
const logHabitMutation = useMutation<LogResponse, Error, number>({
|
||||||
mutationFn: async (habitId: number) => {
|
mutationFn: async (habitId: number): Promise<LogResponse> => {
|
||||||
const res = await fetch(`/api/habits/${habitId}/log`, {
|
const res = await fetch(`/api/habits/${String(habitId)}/log`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify({}),
|
body: JSON.stringify({}),
|
||||||
});
|
});
|
||||||
if (!res.ok) throw new Error('Failed to log habit');
|
if (!res.ok) throw new Error('Failed to log habit');
|
||||||
return res.json();
|
return res.json() as Promise<LogResponse>;
|
||||||
},
|
},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
queryClient.invalidateQueries({ queryKey: ['habits'] });
|
void queryClient.invalidateQueries({ queryKey: ['habits'] });
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// Create habit mutation
|
// Create habit mutation
|
||||||
const createHabitMutation = useMutation({
|
const createHabitMutation = useMutation<HabitResponse, Error, { name: string; type: string }>({
|
||||||
mutationFn: async (data: { name: string; type: string }) => {
|
mutationFn: async (data: { name: string; type: string }): Promise<HabitResponse> => {
|
||||||
const res = await fetch('/api/habits', {
|
const res = await fetch('/api/habits', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify(data),
|
body: JSON.stringify(data),
|
||||||
});
|
});
|
||||||
if (!res.ok) throw new Error('Failed to create habit');
|
if (!res.ok) throw new Error('Failed to create habit');
|
||||||
return res.json();
|
return res.json() as Promise<HabitResponse>;
|
||||||
},
|
},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
queryClient.invalidateQueries({ queryKey: ['habits'] });
|
void queryClient.invalidateQueries({ queryKey: ['habits'] });
|
||||||
setShowNewHabitDialog(false);
|
setShowNewHabitDialog(false);
|
||||||
setNewHabitName('');
|
setNewHabitName('');
|
||||||
setNewHabitType('neutral');
|
setNewHabitType('neutral');
|
||||||
@@ -132,9 +155,11 @@ export default function Dashboard() {
|
|||||||
|
|
||||||
const copyToken = () => {
|
const copyToken = () => {
|
||||||
if (userToken) {
|
if (userToken) {
|
||||||
navigator.clipboard.writeText(userToken);
|
void navigator.clipboard.writeText(userToken);
|
||||||
setCopiedToken(true);
|
setCopiedToken(true);
|
||||||
setTimeout(() => setCopiedToken(false), 2000);
|
setTimeout(() => {
|
||||||
|
setCopiedToken(false);
|
||||||
|
}, 2000);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -199,7 +224,7 @@ export default function Dashboard() {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const habits = habitsData?.habits || [];
|
const habits = habitsData?.habits ?? [];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="min-h-screen bg-black">
|
<div className="min-h-screen bg-black">
|
||||||
@@ -233,13 +258,20 @@ export default function Dashboard() {
|
|||||||
id="name"
|
id="name"
|
||||||
placeholder="e.g., Exercise, Read, Meditate..."
|
placeholder="e.g., Exercise, Read, Meditate..."
|
||||||
value={newHabitName}
|
value={newHabitName}
|
||||||
onChange={(e) => setNewHabitName(e.target.value)}
|
onChange={(e) => {
|
||||||
|
setNewHabitName(e.target.value);
|
||||||
|
}}
|
||||||
className="border-zinc-800 bg-zinc-900"
|
className="border-zinc-800 bg-zinc-900"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className="grid gap-2">
|
<div className="grid gap-2">
|
||||||
<Label htmlFor="type">Habit Type</Label>
|
<Label htmlFor="type">Habit Type</Label>
|
||||||
<Select value={newHabitType} onValueChange={(value: any) => setNewHabitType(value)}>
|
<Select
|
||||||
|
value={newHabitType}
|
||||||
|
onValueChange={(value: 'positive' | 'neutral' | 'negative') => {
|
||||||
|
setNewHabitType(value);
|
||||||
|
}}
|
||||||
|
>
|
||||||
<SelectTrigger className="border-zinc-800 bg-zinc-900">
|
<SelectTrigger className="border-zinc-800 bg-zinc-900">
|
||||||
<SelectValue />
|
<SelectValue />
|
||||||
</SelectTrigger>
|
</SelectTrigger>
|
||||||
@@ -267,7 +299,12 @@ export default function Dashboard() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<DialogFooter>
|
<DialogFooter>
|
||||||
<Button variant="outline" onClick={() => setShowNewHabitDialog(false)}>
|
<Button
|
||||||
|
variant="outline"
|
||||||
|
onClick={() => {
|
||||||
|
setShowNewHabitDialog(false);
|
||||||
|
}}
|
||||||
|
>
|
||||||
Cancel
|
Cancel
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
@@ -317,7 +354,9 @@ export default function Dashboard() {
|
|||||||
className={`transform cursor-pointer transition-all duration-200 hover:scale-[1.02] ${getHabitCardClass(
|
className={`transform cursor-pointer transition-all duration-200 hover:scale-[1.02] ${getHabitCardClass(
|
||||||
habit.type,
|
habit.type,
|
||||||
)} ${logHabitMutation.isPending ? 'opacity-75' : ''}`}
|
)} ${logHabitMutation.isPending ? 'opacity-75' : ''}`}
|
||||||
onClick={() => logHabitMutation.mutate(habit.id)}
|
onClick={() => {
|
||||||
|
logHabitMutation.mutate(habit.id);
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
<CardHeader className="pb-3">
|
<CardHeader className="pb-3">
|
||||||
<div className="flex items-start justify-between">
|
<div className="flex items-start justify-between">
|
||||||
@@ -384,7 +423,9 @@ export default function Dashboard() {
|
|||||||
<h3 className="mb-2 text-lg font-semibold">No habits yet</h3>
|
<h3 className="mb-2 text-lg font-semibold">No habits yet</h3>
|
||||||
<p className="mb-4 text-sm text-zinc-500">Start building better habits today</p>
|
<p className="mb-4 text-sm text-zinc-500">Start building better habits today</p>
|
||||||
<Button
|
<Button
|
||||||
onClick={() => setShowNewHabitDialog(true)}
|
onClick={() => {
|
||||||
|
setShowNewHabitDialog(true);
|
||||||
|
}}
|
||||||
className="bg-emerald-600 hover:bg-emerald-700"
|
className="bg-emerald-600 hover:bg-emerald-700"
|
||||||
>
|
>
|
||||||
<Plus className="mr-2 h-4 w-4" />
|
<Plus className="mr-2 h-4 w-4" />
|
||||||
|
@@ -9,7 +9,14 @@ import { Input } from '@/components/ui/input';
|
|||||||
import { Label } from '@/components/ui/label';
|
import { Label } from '@/components/ui/label';
|
||||||
import { Alert, AlertDescription } from '@/components/ui/alert';
|
import { Alert, AlertDescription } from '@/components/ui/alert';
|
||||||
import { Separator } from '@/components/ui/separator';
|
import { Separator } from '@/components/ui/separator';
|
||||||
import { LogIn, Sparkles, Shield, Zap, ArrowLeft } from 'lucide-react';
|
import { LogIn, Shield, Zap, ArrowLeft, Activity, CalendarCheck } from 'lucide-react';
|
||||||
|
|
||||||
|
interface AuthResponse {
|
||||||
|
success?: boolean;
|
||||||
|
token?: string;
|
||||||
|
userId?: string;
|
||||||
|
error?: string;
|
||||||
|
}
|
||||||
|
|
||||||
export default function Welcome() {
|
export default function Welcome() {
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@@ -18,14 +25,14 @@ export default function Welcome() {
|
|||||||
const [error, setError] = useState('');
|
const [error, setError] = useState('');
|
||||||
|
|
||||||
const createAccountMutation = useMutation({
|
const createAccountMutation = useMutation({
|
||||||
mutationFn: async () => {
|
mutationFn: async (): Promise<AuthResponse> => {
|
||||||
const res = await fetch('/api/auth', {
|
const res = await fetch('/api/auth', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify({ action: 'create' }),
|
body: JSON.stringify({ action: 'create' }),
|
||||||
});
|
});
|
||||||
if (!res.ok) throw new Error('Failed to create account');
|
if (!res.ok) throw new Error('Failed to create account');
|
||||||
return res.json();
|
return res.json() as Promise<AuthResponse>;
|
||||||
},
|
},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
router.push('/dashboard');
|
router.push('/dashboard');
|
||||||
@@ -36,17 +43,17 @@ export default function Welcome() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const loginMutation = useMutation({
|
const loginMutation = useMutation({
|
||||||
mutationFn: async (token: string) => {
|
mutationFn: async (token: string): Promise<AuthResponse> => {
|
||||||
const res = await fetch('/api/auth', {
|
const res = await fetch('/api/auth', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
headers: { 'Content-Type': 'application/json' },
|
||||||
body: JSON.stringify({ action: 'login', token }),
|
body: JSON.stringify({ action: 'login', token }),
|
||||||
});
|
});
|
||||||
if (!res.ok) {
|
if (!res.ok) {
|
||||||
const data = await res.json();
|
const data = (await res.json()) as AuthResponse;
|
||||||
throw new Error(data.error || 'Failed to login');
|
throw new Error(data.error ?? 'Failed to login');
|
||||||
}
|
}
|
||||||
return res.json();
|
return res.json() as Promise<AuthResponse>;
|
||||||
},
|
},
|
||||||
onSuccess: () => {
|
onSuccess: () => {
|
||||||
router.push('/dashboard');
|
router.push('/dashboard');
|
||||||
@@ -63,6 +70,12 @@ export default function Welcome() {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleKeyDown = (e: React.KeyboardEvent) => {
|
||||||
|
if (e.key === 'Enter') {
|
||||||
|
handleTokenLogin();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Card className="w-full max-w-md border-zinc-800 bg-zinc-950">
|
<Card className="w-full max-w-md border-zinc-800 bg-zinc-950">
|
||||||
<CardHeader className="space-y-2 text-center">
|
<CardHeader className="space-y-2 text-center">
|
||||||
@@ -93,7 +106,7 @@ export default function Welcome() {
|
|||||||
</div>
|
</div>
|
||||||
<div className="flex items-center gap-3">
|
<div className="flex items-center gap-3">
|
||||||
<div className="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-emerald-950">
|
<div className="flex h-8 w-8 flex-shrink-0 items-center justify-center rounded-lg bg-emerald-950">
|
||||||
<Sparkles className="h-4 w-4 text-emerald-500" />
|
<Activity className="h-4 w-4 text-emerald-500" />
|
||||||
</div>
|
</div>
|
||||||
<p className="text-zinc-400">Track positive, neutral, or negative habits</p>
|
<p className="text-zinc-400">Track positive, neutral, or negative habits</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -104,7 +117,9 @@ export default function Welcome() {
|
|||||||
{/* Actions */}
|
{/* Actions */}
|
||||||
<div className="space-y-3">
|
<div className="space-y-3">
|
||||||
<Button
|
<Button
|
||||||
onClick={() => createAccountMutation.mutate()}
|
onClick={() => {
|
||||||
|
createAccountMutation.mutate();
|
||||||
|
}}
|
||||||
disabled={createAccountMutation.isPending}
|
disabled={createAccountMutation.isPending}
|
||||||
className="w-full bg-emerald-600 text-white hover:bg-emerald-700"
|
className="w-full bg-emerald-600 text-white hover:bg-emerald-700"
|
||||||
size="lg"
|
size="lg"
|
||||||
@@ -113,7 +128,7 @@ export default function Welcome() {
|
|||||||
<>Creating your account...</>
|
<>Creating your account...</>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<>
|
||||||
<Sparkles className="mr-2 h-4 w-4" />
|
<CalendarCheck className="mr-2 h-4 w-4" />
|
||||||
Start Tracking Now
|
Start Tracking Now
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
@@ -130,7 +145,9 @@ export default function Welcome() {
|
|||||||
|
|
||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
onClick={() => setShowTokenInput(true)}
|
onClick={() => {
|
||||||
|
setShowTokenInput(true);
|
||||||
|
}}
|
||||||
className="w-full border-zinc-800 hover:bg-zinc-900"
|
className="w-full border-zinc-800 hover:bg-zinc-900"
|
||||||
size="lg"
|
size="lg"
|
||||||
>
|
>
|
||||||
@@ -161,8 +178,10 @@ export default function Welcome() {
|
|||||||
type="text"
|
type="text"
|
||||||
placeholder="e.g., happy-blue-cat-1234"
|
placeholder="e.g., happy-blue-cat-1234"
|
||||||
value={tokenInput}
|
value={tokenInput}
|
||||||
onChange={(e) => setTokenInput(e.target.value)}
|
onChange={(e) => {
|
||||||
onKeyPress={(e) => e.key === 'Enter' && handleTokenLogin()}
|
setTokenInput(e.target.value);
|
||||||
|
}}
|
||||||
|
onKeyDown={handleKeyDown}
|
||||||
className="border-zinc-800 bg-zinc-900 placeholder:text-zinc-600"
|
className="border-zinc-800 bg-zinc-900 placeholder:text-zinc-600"
|
||||||
autoFocus
|
autoFocus
|
||||||
/>
|
/>
|
||||||
|
@@ -1,11 +1,17 @@
|
|||||||
import { defineConfig } from 'drizzle-kit';
|
import { defineConfig } from 'drizzle-kit';
|
||||||
import { env } from 'node:process';
|
import dotenv from 'dotenv';
|
||||||
|
dotenv.config({ path: ['.env.local', '.env'] });
|
||||||
|
|
||||||
|
const DATABASE_URL = process.env.POSTGRES_URL;
|
||||||
|
if (!DATABASE_URL) {
|
||||||
|
throw new Error('POSTGRES_URL environment variable is required');
|
||||||
|
}
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
schema: './lib/db/schema.ts',
|
schema: './lib/db/schema.ts',
|
||||||
dialect: 'postgresql',
|
dialect: 'postgresql',
|
||||||
dbCredentials: {
|
dbCredentials: {
|
||||||
url: env.POSTGRES_URL!,
|
url: DATABASE_URL,
|
||||||
},
|
},
|
||||||
out: './drizzle',
|
out: './drizzle',
|
||||||
});
|
});
|
||||||
|
@@ -1,8 +1,14 @@
|
|||||||
import { drizzle } from 'drizzle-orm/node-postgres';
|
import { drizzle } from 'drizzle-orm/node-postgres';
|
||||||
import * as schema from './schema';
|
import * as schema from './schema';
|
||||||
import 'dotenv/config';
|
import dotenv from 'dotenv';
|
||||||
|
dotenv.config({ path: ['.env.local', '.env'] });
|
||||||
|
|
||||||
export const db = drizzle(process.env.POSTGRES_URL!, { schema });
|
const DATABASE_URL = process.env.POSTGRES_URL;
|
||||||
|
if (!DATABASE_URL) {
|
||||||
|
throw new Error('POSTGRES_URL environment variable is required');
|
||||||
|
}
|
||||||
|
|
||||||
|
export const db = drizzle(DATABASE_URL, { schema });
|
||||||
|
|
||||||
// Re-export schema types for convenience
|
// Re-export schema types for convenience
|
||||||
export * from './schema';
|
export * from './schema';
|
||||||
|
@@ -28,9 +28,7 @@ export const habits = pgTable(
|
|||||||
createdAt: timestamp('created_at').defaultNow().notNull(),
|
createdAt: timestamp('created_at').defaultNow().notNull(),
|
||||||
archivedAt: timestamp('archived_at'),
|
archivedAt: timestamp('archived_at'),
|
||||||
},
|
},
|
||||||
(table) => ({
|
(table) => [index('habits_user_id_idx').on(table.userId)],
|
||||||
userIdIdx: index('habits_user_id_idx').on(table.userId),
|
|
||||||
}),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
export const habitLogs = pgTable(
|
export const habitLogs = pgTable(
|
||||||
@@ -43,10 +41,10 @@ export const habitLogs = pgTable(
|
|||||||
loggedAt: timestamp('logged_at').defaultNow().notNull(),
|
loggedAt: timestamp('logged_at').defaultNow().notNull(),
|
||||||
note: text('note'),
|
note: text('note'),
|
||||||
},
|
},
|
||||||
(table) => ({
|
(table) => [
|
||||||
habitIdIdx: index('habit_logs_habit_id_idx').on(table.habitId),
|
index('habit_logs_habit_id_idx').on(table.habitId),
|
||||||
loggedAtIdx: index('habit_logs_logged_at_idx').on(table.loggedAt),
|
index('habit_logs_logged_at_idx').on(table.loggedAt),
|
||||||
}),
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
// Relations
|
// Relations
|
||||||
|
30
package.json
30
package.json
@@ -29,9 +29,9 @@
|
|||||||
"date-fns": "^4.1.0",
|
"date-fns": "^4.1.0",
|
||||||
"dotenv": "^17.2.0",
|
"dotenv": "^17.2.0",
|
||||||
"drizzle-orm": "^0.44.3",
|
"drizzle-orm": "^0.44.3",
|
||||||
"lucide-react": "^0.525.0",
|
"lucide-react": "^0.526.0",
|
||||||
"nanoid": "^5.1.5",
|
"nanoid": "^5.1.5",
|
||||||
"next": "15.4.1",
|
"next": "15.4.4",
|
||||||
"next-plausible": "^3.12.4",
|
"next-plausible": "^3.12.4",
|
||||||
"pg": "^8.16.3",
|
"pg": "^8.16.3",
|
||||||
"pg-native": "^3.5.2",
|
"pg-native": "^3.5.2",
|
||||||
@@ -43,25 +43,25 @@
|
|||||||
"tailwindcss-animate": "^1.0.7"
|
"tailwindcss-animate": "^1.0.7"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/js": "^9.31.0",
|
"@eslint/js": "9.32.0",
|
||||||
"@next/eslint-plugin-next": "^15.4.1",
|
"@next/eslint-plugin-next": "15.4.4",
|
||||||
"@tailwindcss/postcss": "4.1.11",
|
"@tailwindcss/postcss": "4.1.11",
|
||||||
"@types/node": "22.16.3",
|
"@types/node": "22.16.5",
|
||||||
"@types/pg": "^8.15.4",
|
"@types/pg": "8.15.4",
|
||||||
"@types/react": "19.1.8",
|
"@types/react": "19.1.8",
|
||||||
"@types/react-dom": "19.1.6",
|
"@types/react-dom": "19.1.6",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.37.0",
|
"@typescript-eslint/eslint-plugin": "8.38.0",
|
||||||
"@typescript-eslint/parser": "^8.37.0",
|
"@typescript-eslint/parser": "8.38.0",
|
||||||
"drizzle-kit": "^0.31.4",
|
"drizzle-kit": "0.31.4",
|
||||||
"eslint": "9.31.0",
|
"eslint": "9.32.0",
|
||||||
"eslint-config-next": "15.4.1",
|
"eslint-config-next": "15.4.4",
|
||||||
"postcss": "8.5.6",
|
"postcss": "8.5.6",
|
||||||
"prettier": "^3.6.2",
|
"prettier": "3.6.2",
|
||||||
"prettier-plugin-tailwindcss": "^0.6.14",
|
"prettier-plugin-tailwindcss": "0.6.14",
|
||||||
"tailwindcss": "4.1.11",
|
"tailwindcss": "4.1.11",
|
||||||
"turbo": "2.5.4",
|
"turbo": "2.5.5",
|
||||||
"typescript": "5.8.3",
|
"typescript": "5.8.3",
|
||||||
"typescript-eslint": "^8.37.0"
|
"typescript-eslint": "8.38.0"
|
||||||
},
|
},
|
||||||
"packageManager": "pnpm@10.13.1"
|
"packageManager": "pnpm@10.13.1"
|
||||||
}
|
}
|
||||||
|
442
pnpm-lock.yaml
generated
442
pnpm-lock.yaml
generated
@@ -43,22 +43,22 @@ importers:
|
|||||||
version: 4.1.0
|
version: 4.1.0
|
||||||
dotenv:
|
dotenv:
|
||||||
specifier: ^17.2.0
|
specifier: ^17.2.0
|
||||||
version: 17.2.0
|
version: 17.2.1
|
||||||
drizzle-orm:
|
drizzle-orm:
|
||||||
specifier: ^0.44.3
|
specifier: ^0.44.3
|
||||||
version: 0.44.3(@types/pg@8.15.4)(@vercel/postgres@0.10.0)(pg@8.16.3(pg-native@3.5.2))
|
version: 0.44.3(@types/pg@8.15.4)(@vercel/postgres@0.10.0)(pg@8.16.3(pg-native@3.5.2))
|
||||||
lucide-react:
|
lucide-react:
|
||||||
specifier: ^0.525.0
|
specifier: ^0.526.0
|
||||||
version: 0.525.0(react@19.1.0)
|
version: 0.526.0(react@19.1.0)
|
||||||
nanoid:
|
nanoid:
|
||||||
specifier: ^5.1.5
|
specifier: ^5.1.5
|
||||||
version: 5.1.5
|
version: 5.1.5
|
||||||
next:
|
next:
|
||||||
specifier: 15.4.1
|
specifier: 15.4.4
|
||||||
version: 15.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
version: 15.4.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||||
next-plausible:
|
next-plausible:
|
||||||
specifier: ^3.12.4
|
specifier: ^3.12.4
|
||||||
version: 3.12.4(next@15.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
version: 3.12.4(next@15.4.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||||
pg:
|
pg:
|
||||||
specifier: ^8.16.3
|
specifier: ^8.16.3
|
||||||
version: 8.16.3(pg-native@3.5.2)
|
version: 8.16.3(pg-native@3.5.2)
|
||||||
@@ -85,19 +85,19 @@ importers:
|
|||||||
version: 1.0.7(tailwindcss@4.1.11)
|
version: 1.0.7(tailwindcss@4.1.11)
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@eslint/js':
|
'@eslint/js':
|
||||||
specifier: ^9.31.0
|
specifier: 9.32.0
|
||||||
version: 9.31.0
|
version: 9.32.0
|
||||||
'@next/eslint-plugin-next':
|
'@next/eslint-plugin-next':
|
||||||
specifier: ^15.4.1
|
specifier: 15.4.4
|
||||||
version: 15.4.1
|
version: 15.4.4
|
||||||
'@tailwindcss/postcss':
|
'@tailwindcss/postcss':
|
||||||
specifier: 4.1.11
|
specifier: 4.1.11
|
||||||
version: 4.1.11
|
version: 4.1.11
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: 22.16.3
|
specifier: 22.16.5
|
||||||
version: 22.16.3
|
version: 22.16.5
|
||||||
'@types/pg':
|
'@types/pg':
|
||||||
specifier: ^8.15.4
|
specifier: 8.15.4
|
||||||
version: 8.15.4
|
version: 8.15.4
|
||||||
'@types/react':
|
'@types/react':
|
||||||
specifier: 19.1.8
|
specifier: 19.1.8
|
||||||
@@ -106,41 +106,41 @@ importers:
|
|||||||
specifier: 19.1.6
|
specifier: 19.1.6
|
||||||
version: 19.1.6(@types/react@19.1.8)
|
version: 19.1.6(@types/react@19.1.8)
|
||||||
'@typescript-eslint/eslint-plugin':
|
'@typescript-eslint/eslint-plugin':
|
||||||
specifier: ^8.37.0
|
specifier: 8.38.0
|
||||||
version: 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
version: 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
'@typescript-eslint/parser':
|
'@typescript-eslint/parser':
|
||||||
specifier: ^8.37.0
|
specifier: 8.38.0
|
||||||
version: 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
version: 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
drizzle-kit:
|
drizzle-kit:
|
||||||
specifier: ^0.31.4
|
specifier: 0.31.4
|
||||||
version: 0.31.4
|
version: 0.31.4
|
||||||
eslint:
|
eslint:
|
||||||
specifier: 9.31.0
|
specifier: 9.32.0
|
||||||
version: 9.31.0(jiti@2.4.2)
|
version: 9.32.0(jiti@2.4.2)
|
||||||
eslint-config-next:
|
eslint-config-next:
|
||||||
specifier: 15.4.1
|
specifier: 15.4.4
|
||||||
version: 15.4.1(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
version: 15.4.4(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
postcss:
|
postcss:
|
||||||
specifier: 8.5.6
|
specifier: 8.5.6
|
||||||
version: 8.5.6
|
version: 8.5.6
|
||||||
prettier:
|
prettier:
|
||||||
specifier: ^3.6.2
|
specifier: 3.6.2
|
||||||
version: 3.6.2
|
version: 3.6.2
|
||||||
prettier-plugin-tailwindcss:
|
prettier-plugin-tailwindcss:
|
||||||
specifier: ^0.6.14
|
specifier: 0.6.14
|
||||||
version: 0.6.14(prettier@3.6.2)
|
version: 0.6.14(prettier@3.6.2)
|
||||||
tailwindcss:
|
tailwindcss:
|
||||||
specifier: 4.1.11
|
specifier: 4.1.11
|
||||||
version: 4.1.11
|
version: 4.1.11
|
||||||
turbo:
|
turbo:
|
||||||
specifier: 2.5.4
|
specifier: 2.5.5
|
||||||
version: 2.5.4
|
version: 2.5.5
|
||||||
typescript:
|
typescript:
|
||||||
specifier: 5.8.3
|
specifier: 5.8.3
|
||||||
version: 5.8.3
|
version: 5.8.3
|
||||||
typescript-eslint:
|
typescript-eslint:
|
||||||
specifier: ^8.37.0
|
specifier: 8.38.0
|
||||||
version: 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
version: 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
|
|
||||||
packages:
|
packages:
|
||||||
|
|
||||||
@@ -744,16 +744,16 @@ packages:
|
|||||||
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
|
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@eslint/js@9.31.0':
|
'@eslint/js@9.32.0':
|
||||||
resolution: {integrity: sha512-LOm5OVt7D4qiKCqoiPbA7LWmI+tbw1VbTUowBcUMgQSuM6poJufkFkYDcQpo5KfgD39TnNySV26QjOh7VFpSyw==}
|
resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@eslint/object-schema@2.1.6':
|
'@eslint/object-schema@2.1.6':
|
||||||
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
|
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@eslint/plugin-kit@0.3.3':
|
'@eslint/plugin-kit@0.3.4':
|
||||||
resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==}
|
resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@floating-ui/core@1.7.2':
|
'@floating-ui/core@1.7.2':
|
||||||
@@ -936,56 +936,56 @@ packages:
|
|||||||
'@neondatabase/serverless@0.9.5':
|
'@neondatabase/serverless@0.9.5':
|
||||||
resolution: {integrity: sha512-siFas6gItqv6wD/pZnvdu34wEqgG3nSE6zWZdq5j2DEsa+VvX8i/5HXJOo06qrw5axPXn+lGCxeR+NLaSPIXug==}
|
resolution: {integrity: sha512-siFas6gItqv6wD/pZnvdu34wEqgG3nSE6zWZdq5j2DEsa+VvX8i/5HXJOo06qrw5axPXn+lGCxeR+NLaSPIXug==}
|
||||||
|
|
||||||
'@next/env@15.4.1':
|
'@next/env@15.4.4':
|
||||||
resolution: {integrity: sha512-DXQwFGAE2VH+f2TJsKepRXpODPU+scf5fDbKOME8MMyeyswe4XwgRdiiIYmBfkXU+2ssliLYznajTrOQdnLR5A==}
|
resolution: {integrity: sha512-SJKOOkULKENyHSYXE5+KiFU6itcIb6wSBjgM92meK0HVKpo94dNOLZVdLLuS7/BxImROkGoPsjR4EnuDucqiiA==}
|
||||||
|
|
||||||
'@next/eslint-plugin-next@15.4.1':
|
'@next/eslint-plugin-next@15.4.4':
|
||||||
resolution: {integrity: sha512-lQnHUxN7mMksK7IxgKDIXNMWFOBmksVrjamMEURXiYfo7zgsc30lnU8u4y/MJktSh+nB80ktTQeQbWdQO6c8Ow==}
|
resolution: {integrity: sha512-1FDsyN//ai3Jd97SEd7scw5h1yLdzDACGOPRofr2GD3sEFsBylEEoL0MHSerd4n2dq9Zm/mFMqi4+NRMOreOKA==}
|
||||||
|
|
||||||
'@next/swc-darwin-arm64@15.4.1':
|
'@next/swc-darwin-arm64@15.4.4':
|
||||||
resolution: {integrity: sha512-L+81yMsiHq82VRXS2RVq6OgDwjvA4kDksGU8hfiDHEXP+ncKIUhUsadAVB+MRIp2FErs/5hpXR0u2eluWPAhig==}
|
resolution: {integrity: sha512-eVG55dnGwfUuG+TtnUCt+mEJ+8TGgul6nHEvdb8HEH7dmJIFYOCApAaFrIrxwtEq2Cdf+0m5sG1Np8cNpw9EAw==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@next/swc-darwin-x64@15.4.1':
|
'@next/swc-darwin-x64@15.4.4':
|
||||||
resolution: {integrity: sha512-jfz1RXu6SzL14lFl05/MNkcN35lTLMJWPbqt7Xaj35+ZWAX342aePIJrN6xBdGeKl6jPXJm0Yqo3Xvh3Gpo3Uw==}
|
resolution: {integrity: sha512-zqG+/8apsu49CltEj4NAmCGZvHcZbOOOsNoTVeIXphYWIbE4l6A/vuQHyqll0flU2o3dmYCXsBW5FmbrGDgljQ==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@next/swc-linux-arm64-gnu@15.4.1':
|
'@next/swc-linux-arm64-gnu@15.4.4':
|
||||||
resolution: {integrity: sha512-k0tOFn3dsnkaGfs6iQz8Ms6f1CyQe4GacXF979sL8PNQxjYS1swx9VsOyUQYaPoGV8nAZ7OX8cYaeiXGq9ahPQ==}
|
resolution: {integrity: sha512-LRD4l2lq4R+2QCHBQVC0wjxxkLlALGJCwigaJ5FSRSqnje+MRKHljQNZgDCaKUZQzO/TXxlmUdkZP/X3KNGZaw==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@next/swc-linux-arm64-musl@15.4.1':
|
'@next/swc-linux-arm64-musl@15.4.4':
|
||||||
resolution: {integrity: sha512-4ogGQ/3qDzbbK3IwV88ltihHFbQVq6Qr+uEapzXHXBH1KsVBZOB50sn6BWHPcFjwSoMX2Tj9eH/fZvQnSIgc3g==}
|
resolution: {integrity: sha512-LsGUCTvuZ0690fFWerA4lnQvjkYg9gHo12A3wiPUR4kCxbx/d+SlwmonuTH2SWZI+RVGA9VL3N0S03WTYv6bYg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@next/swc-linux-x64-gnu@15.4.1':
|
'@next/swc-linux-x64-gnu@15.4.4':
|
||||||
resolution: {integrity: sha512-Jj0Rfw3wIgp+eahMz/tOGwlcYYEFjlBPKU7NqoOkTX0LY45i5W0WcDpgiDWSLrN8KFQq/LW7fZq46gxGCiOYlQ==}
|
resolution: {integrity: sha512-aOy5yNRpLL3wNiJVkFYl6w22hdREERNjvegE6vvtix8LHRdsTHhWTpgvcYdCK7AIDCQW5ATmzr9XkPHvSoAnvg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@next/swc-linux-x64-musl@15.4.1':
|
'@next/swc-linux-x64-musl@15.4.4':
|
||||||
resolution: {integrity: sha512-9WlEZfnw1vFqkWsTMzZDgNL7AUI1aiBHi0S2m8jvycPyCq/fbZjtE/nDkhJRYbSjXbtRHYLDBlmP95kpjEmJbw==}
|
resolution: {integrity: sha512-FL7OAn4UkR8hKQRGBmlHiHinzOb07tsfARdGh7v0Z0jEJ3sz8/7L5bR23ble9E6DZMabSStqlATHlSxv1fuzAg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@next/swc-win32-arm64-msvc@15.4.1':
|
'@next/swc-win32-arm64-msvc@15.4.4':
|
||||||
resolution: {integrity: sha512-WodRbZ9g6CQLRZsG3gtrA9w7Qfa9BwDzhFVdlI6sV0OCPq9JrOrJSp9/ioLsezbV8w9RCJ8v55uzJuJ5RgWLZg==}
|
resolution: {integrity: sha512-eEdNW/TXwjYhOulQh0pffTMMItWVwKCQpbziSBmgBNFZIIRn2GTXrhrewevs8wP8KXWYMx8Z+mNU0X+AfvtrRg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@next/swc-win32-x64-msvc@15.4.1':
|
'@next/swc-win32-x64-msvc@15.4.4':
|
||||||
resolution: {integrity: sha512-y+wTBxelk2xiNofmDOVU7O5WxTHcvOoL3srOM0kxTzKDjQ57kPU0tpnPJ/BWrRnsOwXEv0+3QSbGR7hY4n9LkQ==}
|
resolution: {integrity: sha512-SE5pYNbn/xZKMy1RE3pAs+4xD32OI4rY6mzJa4XUkp/ItZY+OMjIgilskmErt8ls/fVJ+Ihopi2QIeW6O3TrMw==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
@@ -1440,8 +1440,8 @@ packages:
|
|||||||
'@types/json5@0.0.29':
|
'@types/json5@0.0.29':
|
||||||
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
|
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
|
||||||
|
|
||||||
'@types/node@22.16.3':
|
'@types/node@22.16.5':
|
||||||
resolution: {integrity: sha512-sr4Xz74KOUeYadexo1r8imhRtlVXcs+j3XK3TcoiYk7B1t3YRVJgtaD3cwX73NYb71pmVuMLNRhJ9XKdoDB74g==}
|
resolution: {integrity: sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==}
|
||||||
|
|
||||||
'@types/pg@8.11.6':
|
'@types/pg@8.11.6':
|
||||||
resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==}
|
resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==}
|
||||||
@@ -1457,63 +1457,63 @@ packages:
|
|||||||
'@types/react@19.1.8':
|
'@types/react@19.1.8':
|
||||||
resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==}
|
resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==}
|
||||||
|
|
||||||
'@typescript-eslint/eslint-plugin@8.37.0':
|
'@typescript-eslint/eslint-plugin@8.38.0':
|
||||||
resolution: {integrity: sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA==}
|
resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
'@typescript-eslint/parser': ^8.37.0
|
'@typescript-eslint/parser': ^8.38.0
|
||||||
eslint: ^8.57.0 || ^9.0.0
|
eslint: ^8.57.0 || ^9.0.0
|
||||||
typescript: '>=4.8.4 <5.9.0'
|
typescript: '>=4.8.4 <5.9.0'
|
||||||
|
|
||||||
'@typescript-eslint/parser@8.37.0':
|
'@typescript-eslint/parser@8.38.0':
|
||||||
resolution: {integrity: sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA==}
|
resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^8.57.0 || ^9.0.0
|
eslint: ^8.57.0 || ^9.0.0
|
||||||
typescript: '>=4.8.4 <5.9.0'
|
typescript: '>=4.8.4 <5.9.0'
|
||||||
|
|
||||||
'@typescript-eslint/project-service@8.37.0':
|
'@typescript-eslint/project-service@8.38.0':
|
||||||
resolution: {integrity: sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==}
|
resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
typescript: '>=4.8.4 <5.9.0'
|
typescript: '>=4.8.4 <5.9.0'
|
||||||
|
|
||||||
'@typescript-eslint/scope-manager@8.37.0':
|
'@typescript-eslint/scope-manager@8.38.0':
|
||||||
resolution: {integrity: sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==}
|
resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@typescript-eslint/tsconfig-utils@8.37.0':
|
'@typescript-eslint/tsconfig-utils@8.38.0':
|
||||||
resolution: {integrity: sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==}
|
resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
typescript: '>=4.8.4 <5.9.0'
|
typescript: '>=4.8.4 <5.9.0'
|
||||||
|
|
||||||
'@typescript-eslint/type-utils@8.37.0':
|
'@typescript-eslint/type-utils@8.38.0':
|
||||||
resolution: {integrity: sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow==}
|
resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^8.57.0 || ^9.0.0
|
eslint: ^8.57.0 || ^9.0.0
|
||||||
typescript: '>=4.8.4 <5.9.0'
|
typescript: '>=4.8.4 <5.9.0'
|
||||||
|
|
||||||
'@typescript-eslint/types@8.37.0':
|
'@typescript-eslint/types@8.38.0':
|
||||||
resolution: {integrity: sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==}
|
resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@typescript-eslint/typescript-estree@8.37.0':
|
'@typescript-eslint/typescript-estree@8.38.0':
|
||||||
resolution: {integrity: sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==}
|
resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
typescript: '>=4.8.4 <5.9.0'
|
typescript: '>=4.8.4 <5.9.0'
|
||||||
|
|
||||||
'@typescript-eslint/utils@8.37.0':
|
'@typescript-eslint/utils@8.38.0':
|
||||||
resolution: {integrity: sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==}
|
resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^8.57.0 || ^9.0.0
|
eslint: ^8.57.0 || ^9.0.0
|
||||||
typescript: '>=4.8.4 <5.9.0'
|
typescript: '>=4.8.4 <5.9.0'
|
||||||
|
|
||||||
'@typescript-eslint/visitor-keys@8.37.0':
|
'@typescript-eslint/visitor-keys@8.38.0':
|
||||||
resolution: {integrity: sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==}
|
resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
|
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
|
||||||
@@ -1942,8 +1942,8 @@ packages:
|
|||||||
domutils@3.2.2:
|
domutils@3.2.2:
|
||||||
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
|
resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
|
||||||
|
|
||||||
dotenv@17.2.0:
|
dotenv@17.2.1:
|
||||||
resolution: {integrity: sha512-Q4sgBT60gzd0BB0lSyYD3xM4YxrXA9y4uBDof1JNYGzOXrQdQ6yX+7XIAqoFOGQFOTK1D3Hts5OllpxMDZFONQ==}
|
resolution: {integrity: sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
|
||||||
drizzle-kit@0.31.4:
|
drizzle-kit@0.31.4:
|
||||||
@@ -2115,8 +2115,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
|
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
eslint-config-next@15.4.1:
|
eslint-config-next@15.4.4:
|
||||||
resolution: {integrity: sha512-XIIN+lq8XuSwXUrcv+0uHMDFGJFPxLAw04/a4muFZYygSvStvVa15nY7kh4Il6yOVJyxdMUyVdQ9ApGedaeupw==}
|
resolution: {integrity: sha512-sK/lWLUVF5om18O5w76Jt3F8uzu/LP5mVa6TprCMWkjWHUmByq80iHGHcdH7k1dLiJlj+DRIWf98d5piwRsSuA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
|
eslint: ^7.23.0 || ^8.0.0 || ^9.0.0
|
||||||
typescript: '>=3.3.1'
|
typescript: '>=3.3.1'
|
||||||
@@ -2201,8 +2201,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
|
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
|
|
||||||
eslint@9.31.0:
|
eslint@9.32.0:
|
||||||
resolution: {integrity: sha512-QldCVh/ztyKJJZLr4jXNUByx3gR+TDYZCRXEktiZoUR3PGy4qCmSbkxcIle8GEwGpb5JBZazlaJ/CxLidXdEbQ==}
|
resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -2636,8 +2636,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
|
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
lucide-react@0.525.0:
|
lucide-react@0.526.0:
|
||||||
resolution: {integrity: sha512-Tm1txJ2OkymCGkvwoHt33Y2JpN5xucVq1slHcgE6Lk0WjDfjgKWor5CdVER8U6DvcfMwh4M8XxmpTiyzfmfDYQ==}
|
resolution: {integrity: sha512-uGWG/2RKuDLeQHCodn5cmJ9Zij80EstOdcBP+j//B2sr78w7woiEL4aMu6CRlRkyOyJ8sZry8QLhQTmZjynLdA==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
|
|
||||||
@@ -2716,8 +2716,8 @@ packages:
|
|||||||
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
|
||||||
|
|
||||||
next@15.4.1:
|
next@15.4.4:
|
||||||
resolution: {integrity: sha512-eNKB1q8C7o9zXF8+jgJs2CzSLIU3T6bQtX6DcTnCq1sIR1CJ0GlSyRs1BubQi3/JgCnr9Vr+rS5mOMI38FFyQw==}
|
resolution: {integrity: sha512-kNcubvJjOL9yUOfwtZF3HfDhuhp+kVD+FM2A6Tyua1eI/xfmY4r/8ZS913MMz+oWKDlbps/dQOWdDricuIkXLw==}
|
||||||
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
|
engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -3594,38 +3594,38 @@ packages:
|
|||||||
tslib@2.8.1:
|
tslib@2.8.1:
|
||||||
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
|
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
|
||||||
|
|
||||||
turbo-darwin-64@2.5.4:
|
turbo-darwin-64@2.5.5:
|
||||||
resolution: {integrity: sha512-ah6YnH2dErojhFooxEzmvsoZQTMImaruZhFPfMKPBq8sb+hALRdvBNLqfc8NWlZq576FkfRZ/MSi4SHvVFT9PQ==}
|
resolution: {integrity: sha512-RYnTz49u4F5tDD2SUwwtlynABNBAfbyT2uU/brJcyh5k6lDLyNfYKdKmqd3K2ls4AaiALWrFKVSBsiVwhdFNzQ==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
turbo-darwin-arm64@2.5.4:
|
turbo-darwin-arm64@2.5.5:
|
||||||
resolution: {integrity: sha512-2+Nx6LAyuXw2MdXb7pxqle3MYignLvS7OwtsP9SgtSBaMlnNlxl9BovzqdYAgkUW3AsYiQMJ/wBRb7d+xemM5A==}
|
resolution: {integrity: sha512-Tk+ZeSNdBobZiMw9aFypQt0DlLsWSFWu1ymqsAdJLuPoAH05qCfYtRxE1pJuYHcJB5pqI+/HOxtJoQ40726Btw==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
turbo-linux-64@2.5.4:
|
turbo-linux-64@2.5.5:
|
||||||
resolution: {integrity: sha512-5May2kjWbc8w4XxswGAl74GZ5eM4Gr6IiroqdLhXeXyfvWEdm2mFYCSWOzz0/z5cAgqyGidF1jt1qzUR8hTmOA==}
|
resolution: {integrity: sha512-2/XvMGykD7VgsvWesZZYIIVXMlgBcQy+ZAryjugoTcvJv8TZzSU/B1nShcA7IAjZ0q7OsZ45uP2cOb8EgKT30w==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
turbo-linux-arm64@2.5.4:
|
turbo-linux-arm64@2.5.5:
|
||||||
resolution: {integrity: sha512-/2yqFaS3TbfxV3P5yG2JUI79P7OUQKOUvAnx4MV9Bdz6jqHsHwc9WZPpO4QseQm+NvmgY6ICORnoVPODxGUiJg==}
|
resolution: {integrity: sha512-DW+8CjCjybu0d7TFm9dovTTVg1VRnlkZ1rceO4zqsaLrit3DgHnN4to4uwyuf9s2V/BwS3IYcRy+HG9BL596Iw==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
turbo-windows-64@2.5.4:
|
turbo-windows-64@2.5.5:
|
||||||
resolution: {integrity: sha512-EQUO4SmaCDhO6zYohxIjJpOKRN3wlfU7jMAj3CgcyTPvQR/UFLEKAYHqJOnJtymbQmiiM/ihX6c6W6Uq0yC7mA==}
|
resolution: {integrity: sha512-q5p1BOy8ChtSZfULuF1BhFMYIx6bevXu4fJ+TE/hyNfyHJIfjl90Z6jWdqAlyaFLmn99X/uw+7d6T/Y/dr5JwQ==}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
turbo-windows-arm64@2.5.4:
|
turbo-windows-arm64@2.5.5:
|
||||||
resolution: {integrity: sha512-oQ8RrK1VS8lrxkLriotFq+PiF7iiGgkZtfLKF4DDKsmdbPo0O9R2mQxm7jHLuXraRCuIQDWMIw6dpcr7Iykf4A==}
|
resolution: {integrity: sha512-AXbF1KmpHUq3PKQwddMGoKMYhHsy5t1YBQO8HZ04HLMR0rWv9adYlQ8kaeQJTko1Ay1anOBFTqaxfVOOsu7+1Q==}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
turbo@2.5.4:
|
turbo@2.5.5:
|
||||||
resolution: {integrity: sha512-kc8ZibdRcuWUG1pbYSBFWqmIjynlD8Lp7IB6U3vIzvOv9VG+6Sp8bzyeBWE3Oi8XV5KsQrznyRTBPvrf99E4mA==}
|
resolution: {integrity: sha512-eZ7wI6KjtT1eBqCnh2JPXWNUAxtoxxfi6VdBdZFvil0ychCOTxbm7YLRBi1JSt7U3c+u3CLxpoPxLdvr/Npr3A==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
type-check@0.4.0:
|
type-check@0.4.0:
|
||||||
@@ -3648,8 +3648,8 @@ packages:
|
|||||||
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
|
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
|
|
||||||
typescript-eslint@8.37.0:
|
typescript-eslint@8.38.0:
|
||||||
resolution: {integrity: sha512-TnbEjzkE9EmcO0Q2zM+GE8NQLItNAJpMmED1BdgoBMYNdqMhzlbqfdSwiRlAzEK2pA9UzVW0gzaaIzXWg2BjfA==}
|
resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==}
|
||||||
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
eslint: ^8.57.0 || ^9.0.0
|
eslint: ^8.57.0 || ^9.0.0
|
||||||
@@ -4193,9 +4193,9 @@ snapshots:
|
|||||||
'@esbuild/win32-x64@0.25.6':
|
'@esbuild/win32-x64@0.25.6':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@eslint-community/eslint-utils@4.7.0(eslint@9.31.0(jiti@2.4.2))':
|
'@eslint-community/eslint-utils@4.7.0(eslint@9.32.0(jiti@2.4.2))':
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint: 9.31.0(jiti@2.4.2)
|
eslint: 9.32.0(jiti@2.4.2)
|
||||||
eslint-visitor-keys: 3.4.3
|
eslint-visitor-keys: 3.4.3
|
||||||
|
|
||||||
'@eslint-community/regexpp@4.12.1': {}
|
'@eslint-community/regexpp@4.12.1': {}
|
||||||
@@ -4228,11 +4228,11 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@eslint/js@9.31.0': {}
|
'@eslint/js@9.32.0': {}
|
||||||
|
|
||||||
'@eslint/object-schema@2.1.6': {}
|
'@eslint/object-schema@2.1.6': {}
|
||||||
|
|
||||||
'@eslint/plugin-kit@0.3.3':
|
'@eslint/plugin-kit@0.3.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint/core': 0.15.1
|
'@eslint/core': 0.15.1
|
||||||
levn: 0.4.1
|
levn: 0.4.1
|
||||||
@@ -4383,34 +4383,34 @@ snapshots:
|
|||||||
'@types/pg': 8.11.6
|
'@types/pg': 8.11.6
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/env@15.4.1': {}
|
'@next/env@15.4.4': {}
|
||||||
|
|
||||||
'@next/eslint-plugin-next@15.4.1':
|
'@next/eslint-plugin-next@15.4.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
fast-glob: 3.3.1
|
fast-glob: 3.3.1
|
||||||
|
|
||||||
'@next/swc-darwin-arm64@15.4.1':
|
'@next/swc-darwin-arm64@15.4.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-darwin-x64@15.4.1':
|
'@next/swc-darwin-x64@15.4.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-linux-arm64-gnu@15.4.1':
|
'@next/swc-linux-arm64-gnu@15.4.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-linux-arm64-musl@15.4.1':
|
'@next/swc-linux-arm64-musl@15.4.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-linux-x64-gnu@15.4.1':
|
'@next/swc-linux-x64-gnu@15.4.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-linux-x64-musl@15.4.1':
|
'@next/swc-linux-x64-musl@15.4.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-win32-arm64-msvc@15.4.1':
|
'@next/swc-win32-arm64-msvc@15.4.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-win32-x64-msvc@15.4.1':
|
'@next/swc-win32-x64-msvc@15.4.4':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@nodelib/fs.scandir@2.1.5':
|
'@nodelib/fs.scandir@2.1.5':
|
||||||
@@ -4813,20 +4813,20 @@ snapshots:
|
|||||||
|
|
||||||
'@types/json5@0.0.29': {}
|
'@types/json5@0.0.29': {}
|
||||||
|
|
||||||
'@types/node@22.16.3':
|
'@types/node@22.16.5':
|
||||||
dependencies:
|
dependencies:
|
||||||
undici-types: 6.21.0
|
undici-types: 6.21.0
|
||||||
|
|
||||||
'@types/pg@8.11.6':
|
'@types/pg@8.11.6':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 22.16.3
|
'@types/node': 22.16.5
|
||||||
pg-protocol: 1.10.3
|
pg-protocol: 1.10.3
|
||||||
pg-types: 4.0.2
|
pg-types: 4.0.2
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@types/pg@8.15.4':
|
'@types/pg@8.15.4':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@types/node': 22.16.3
|
'@types/node': 22.16.5
|
||||||
pg-protocol: 1.10.3
|
pg-protocol: 1.10.3
|
||||||
pg-types: 2.2.0
|
pg-types: 2.2.0
|
||||||
|
|
||||||
@@ -4838,15 +4838,15 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
csstype: 3.1.3
|
csstype: 3.1.3
|
||||||
|
|
||||||
'@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)':
|
'@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/regexpp': 4.12.1
|
'@eslint-community/regexpp': 4.12.1
|
||||||
'@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
'@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
'@typescript-eslint/scope-manager': 8.37.0
|
'@typescript-eslint/scope-manager': 8.38.0
|
||||||
'@typescript-eslint/type-utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
'@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
'@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
'@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
'@typescript-eslint/visitor-keys': 8.37.0
|
'@typescript-eslint/visitor-keys': 8.38.0
|
||||||
eslint: 9.31.0(jiti@2.4.2)
|
eslint: 9.32.0(jiti@2.4.2)
|
||||||
graphemer: 1.4.0
|
graphemer: 1.4.0
|
||||||
ignore: 7.0.5
|
ignore: 7.0.5
|
||||||
natural-compare: 1.4.0
|
natural-compare: 1.4.0
|
||||||
@@ -4855,56 +4855,56 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)':
|
'@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/scope-manager': 8.37.0
|
'@typescript-eslint/scope-manager': 8.38.0
|
||||||
'@typescript-eslint/types': 8.37.0
|
'@typescript-eslint/types': 8.38.0
|
||||||
'@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3)
|
'@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3)
|
||||||
'@typescript-eslint/visitor-keys': 8.37.0
|
'@typescript-eslint/visitor-keys': 8.38.0
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
eslint: 9.31.0(jiti@2.4.2)
|
eslint: 9.32.0(jiti@2.4.2)
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/project-service@8.37.0(typescript@5.8.3)':
|
'@typescript-eslint/project-service@8.38.0(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3)
|
'@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3)
|
||||||
'@typescript-eslint/types': 8.37.0
|
'@typescript-eslint/types': 8.38.0
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/scope-manager@8.37.0':
|
'@typescript-eslint/scope-manager@8.38.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/types': 8.37.0
|
'@typescript-eslint/types': 8.38.0
|
||||||
'@typescript-eslint/visitor-keys': 8.37.0
|
'@typescript-eslint/visitor-keys': 8.38.0
|
||||||
|
|
||||||
'@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.8.3)':
|
'@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
|
|
||||||
'@typescript-eslint/type-utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)':
|
'@typescript-eslint/type-utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/types': 8.37.0
|
'@typescript-eslint/types': 8.38.0
|
||||||
'@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3)
|
'@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3)
|
||||||
'@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
'@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
eslint: 9.31.0(jiti@2.4.2)
|
eslint: 9.32.0(jiti@2.4.2)
|
||||||
ts-api-utils: 2.1.0(typescript@5.8.3)
|
ts-api-utils: 2.1.0(typescript@5.8.3)
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/types@8.37.0': {}
|
'@typescript-eslint/types@8.38.0': {}
|
||||||
|
|
||||||
'@typescript-eslint/typescript-estree@8.37.0(typescript@5.8.3)':
|
'@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/project-service': 8.37.0(typescript@5.8.3)
|
'@typescript-eslint/project-service': 8.38.0(typescript@5.8.3)
|
||||||
'@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3)
|
'@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3)
|
||||||
'@typescript-eslint/types': 8.37.0
|
'@typescript-eslint/types': 8.38.0
|
||||||
'@typescript-eslint/visitor-keys': 8.37.0
|
'@typescript-eslint/visitor-keys': 8.38.0
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
fast-glob: 3.3.3
|
fast-glob: 3.3.3
|
||||||
is-glob: 4.0.3
|
is-glob: 4.0.3
|
||||||
@@ -4915,20 +4915,20 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/utils@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)':
|
'@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2))
|
'@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2))
|
||||||
'@typescript-eslint/scope-manager': 8.37.0
|
'@typescript-eslint/scope-manager': 8.38.0
|
||||||
'@typescript-eslint/types': 8.37.0
|
'@typescript-eslint/types': 8.38.0
|
||||||
'@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3)
|
'@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3)
|
||||||
eslint: 9.31.0(jiti@2.4.2)
|
eslint: 9.32.0(jiti@2.4.2)
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/visitor-keys@8.37.0':
|
'@typescript-eslint/visitor-keys@8.38.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/types': 8.37.0
|
'@typescript-eslint/types': 8.38.0
|
||||||
eslint-visitor-keys: 4.2.1
|
eslint-visitor-keys: 4.2.1
|
||||||
|
|
||||||
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
|
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
|
||||||
@@ -5385,7 +5385,7 @@ snapshots:
|
|||||||
domelementtype: 2.3.0
|
domelementtype: 2.3.0
|
||||||
domhandler: 5.0.3
|
domhandler: 5.0.3
|
||||||
|
|
||||||
dotenv@17.2.0: {}
|
dotenv@17.2.1: {}
|
||||||
|
|
||||||
drizzle-kit@0.31.4:
|
drizzle-kit@0.31.4:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -5585,19 +5585,19 @@ snapshots:
|
|||||||
|
|
||||||
escape-string-regexp@4.0.0: {}
|
escape-string-regexp@4.0.0: {}
|
||||||
|
|
||||||
eslint-config-next@15.4.1(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3):
|
eslint-config-next@15.4.4(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@next/eslint-plugin-next': 15.4.1
|
'@next/eslint-plugin-next': 15.4.4
|
||||||
'@rushstack/eslint-patch': 1.12.0
|
'@rushstack/eslint-patch': 1.12.0
|
||||||
'@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
'@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
'@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
'@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
eslint: 9.31.0(jiti@2.4.2)
|
eslint: 9.32.0(jiti@2.4.2)
|
||||||
eslint-import-resolver-node: 0.3.9
|
eslint-import-resolver-node: 0.3.9
|
||||||
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.4.2))
|
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.32.0(jiti@2.4.2))
|
||||||
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.4.2))
|
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.32.0(jiti@2.4.2))
|
||||||
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.31.0(jiti@2.4.2))
|
eslint-plugin-jsx-a11y: 6.10.2(eslint@9.32.0(jiti@2.4.2))
|
||||||
eslint-plugin-react: 7.37.5(eslint@9.31.0(jiti@2.4.2))
|
eslint-plugin-react: 7.37.5(eslint@9.32.0(jiti@2.4.2))
|
||||||
eslint-plugin-react-hooks: 5.2.0(eslint@9.31.0(jiti@2.4.2))
|
eslint-plugin-react-hooks: 5.2.0(eslint@9.32.0(jiti@2.4.2))
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@@ -5613,33 +5613,33 @@ snapshots:
|
|||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.4.2)):
|
eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.32.0(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nolyfill/is-core-module': 1.0.39
|
'@nolyfill/is-core-module': 1.0.39
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
eslint: 9.31.0(jiti@2.4.2)
|
eslint: 9.32.0(jiti@2.4.2)
|
||||||
get-tsconfig: 4.10.1
|
get-tsconfig: 4.10.1
|
||||||
is-bun-module: 2.0.0
|
is-bun-module: 2.0.0
|
||||||
stable-hash: 0.0.5
|
stable-hash: 0.0.5
|
||||||
tinyglobby: 0.2.14
|
tinyglobby: 0.2.14
|
||||||
unrs-resolver: 1.11.1
|
unrs-resolver: 1.11.1
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.4.2))
|
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.32.0(jiti@2.4.2))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.4.2)):
|
eslint-module-utils@2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.32.0(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 3.2.7
|
debug: 3.2.7
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
'@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
eslint: 9.31.0(jiti@2.4.2)
|
eslint: 9.32.0(jiti@2.4.2)
|
||||||
eslint-import-resolver-node: 0.3.9
|
eslint-import-resolver-node: 0.3.9
|
||||||
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.31.0(jiti@2.4.2))
|
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@9.32.0(jiti@2.4.2))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.4.2)):
|
eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@9.32.0(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@rtsao/scc': 1.1.0
|
'@rtsao/scc': 1.1.0
|
||||||
array-includes: 3.1.9
|
array-includes: 3.1.9
|
||||||
@@ -5648,9 +5648,9 @@ snapshots:
|
|||||||
array.prototype.flatmap: 1.3.3
|
array.prototype.flatmap: 1.3.3
|
||||||
debug: 3.2.7
|
debug: 3.2.7
|
||||||
doctrine: 2.1.0
|
doctrine: 2.1.0
|
||||||
eslint: 9.31.0(jiti@2.4.2)
|
eslint: 9.32.0(jiti@2.4.2)
|
||||||
eslint-import-resolver-node: 0.3.9
|
eslint-import-resolver-node: 0.3.9
|
||||||
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.31.0(jiti@2.4.2))
|
eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1)(eslint@9.32.0(jiti@2.4.2))
|
||||||
hasown: 2.0.2
|
hasown: 2.0.2
|
||||||
is-core-module: 2.16.1
|
is-core-module: 2.16.1
|
||||||
is-glob: 4.0.3
|
is-glob: 4.0.3
|
||||||
@@ -5662,13 +5662,13 @@ snapshots:
|
|||||||
string.prototype.trimend: 1.0.9
|
string.prototype.trimend: 1.0.9
|
||||||
tsconfig-paths: 3.15.0
|
tsconfig-paths: 3.15.0
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
'@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- eslint-import-resolver-typescript
|
- eslint-import-resolver-typescript
|
||||||
- eslint-import-resolver-webpack
|
- eslint-import-resolver-webpack
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
eslint-plugin-jsx-a11y@6.10.2(eslint@9.31.0(jiti@2.4.2)):
|
eslint-plugin-jsx-a11y@6.10.2(eslint@9.32.0(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
aria-query: 5.3.2
|
aria-query: 5.3.2
|
||||||
array-includes: 3.1.9
|
array-includes: 3.1.9
|
||||||
@@ -5678,7 +5678,7 @@ snapshots:
|
|||||||
axobject-query: 4.1.0
|
axobject-query: 4.1.0
|
||||||
damerau-levenshtein: 1.0.8
|
damerau-levenshtein: 1.0.8
|
||||||
emoji-regex: 9.2.2
|
emoji-regex: 9.2.2
|
||||||
eslint: 9.31.0(jiti@2.4.2)
|
eslint: 9.32.0(jiti@2.4.2)
|
||||||
hasown: 2.0.2
|
hasown: 2.0.2
|
||||||
jsx-ast-utils: 3.3.5
|
jsx-ast-utils: 3.3.5
|
||||||
language-tags: 1.0.9
|
language-tags: 1.0.9
|
||||||
@@ -5687,11 +5687,11 @@ snapshots:
|
|||||||
safe-regex-test: 1.1.0
|
safe-regex-test: 1.1.0
|
||||||
string.prototype.includes: 2.0.1
|
string.prototype.includes: 2.0.1
|
||||||
|
|
||||||
eslint-plugin-react-hooks@5.2.0(eslint@9.31.0(jiti@2.4.2)):
|
eslint-plugin-react-hooks@5.2.0(eslint@9.32.0(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint: 9.31.0(jiti@2.4.2)
|
eslint: 9.32.0(jiti@2.4.2)
|
||||||
|
|
||||||
eslint-plugin-react@7.37.5(eslint@9.31.0(jiti@2.4.2)):
|
eslint-plugin-react@7.37.5(eslint@9.32.0(jiti@2.4.2)):
|
||||||
dependencies:
|
dependencies:
|
||||||
array-includes: 3.1.9
|
array-includes: 3.1.9
|
||||||
array.prototype.findlast: 1.2.5
|
array.prototype.findlast: 1.2.5
|
||||||
@@ -5699,7 +5699,7 @@ snapshots:
|
|||||||
array.prototype.tosorted: 1.1.4
|
array.prototype.tosorted: 1.1.4
|
||||||
doctrine: 2.1.0
|
doctrine: 2.1.0
|
||||||
es-iterator-helpers: 1.2.1
|
es-iterator-helpers: 1.2.1
|
||||||
eslint: 9.31.0(jiti@2.4.2)
|
eslint: 9.32.0(jiti@2.4.2)
|
||||||
estraverse: 5.3.0
|
estraverse: 5.3.0
|
||||||
hasown: 2.0.2
|
hasown: 2.0.2
|
||||||
jsx-ast-utils: 3.3.5
|
jsx-ast-utils: 3.3.5
|
||||||
@@ -5722,16 +5722,16 @@ snapshots:
|
|||||||
|
|
||||||
eslint-visitor-keys@4.2.1: {}
|
eslint-visitor-keys@4.2.1: {}
|
||||||
|
|
||||||
eslint@9.31.0(jiti@2.4.2):
|
eslint@9.32.0(jiti@2.4.2):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-utils': 4.7.0(eslint@9.31.0(jiti@2.4.2))
|
'@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2))
|
||||||
'@eslint-community/regexpp': 4.12.1
|
'@eslint-community/regexpp': 4.12.1
|
||||||
'@eslint/config-array': 0.21.0
|
'@eslint/config-array': 0.21.0
|
||||||
'@eslint/config-helpers': 0.3.0
|
'@eslint/config-helpers': 0.3.0
|
||||||
'@eslint/core': 0.15.1
|
'@eslint/core': 0.15.1
|
||||||
'@eslint/eslintrc': 3.3.1
|
'@eslint/eslintrc': 3.3.1
|
||||||
'@eslint/js': 9.31.0
|
'@eslint/js': 9.32.0
|
||||||
'@eslint/plugin-kit': 0.3.3
|
'@eslint/plugin-kit': 0.3.4
|
||||||
'@humanfs/node': 0.16.6
|
'@humanfs/node': 0.16.6
|
||||||
'@humanwhocodes/module-importer': 1.0.1
|
'@humanwhocodes/module-importer': 1.0.1
|
||||||
'@humanwhocodes/retry': 0.4.3
|
'@humanwhocodes/retry': 0.4.3
|
||||||
@@ -6176,7 +6176,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
js-tokens: 4.0.0
|
js-tokens: 4.0.0
|
||||||
|
|
||||||
lucide-react@0.525.0(react@19.1.0):
|
lucide-react@0.526.0(react@19.1.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
react: 19.1.0
|
react: 19.1.0
|
||||||
|
|
||||||
@@ -6227,15 +6227,15 @@ snapshots:
|
|||||||
|
|
||||||
natural-compare@1.4.0: {}
|
natural-compare@1.4.0: {}
|
||||||
|
|
||||||
next-plausible@3.12.4(next@15.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
|
next-plausible@3.12.4(next@15.4.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
next: 15.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
next: 15.4.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
|
||||||
react: 19.1.0
|
react: 19.1.0
|
||||||
react-dom: 19.1.0(react@19.1.0)
|
react-dom: 19.1.0(react@19.1.0)
|
||||||
|
|
||||||
next@15.4.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
|
next@15.4.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@next/env': 15.4.1
|
'@next/env': 15.4.4
|
||||||
'@swc/helpers': 0.5.15
|
'@swc/helpers': 0.5.15
|
||||||
caniuse-lite: 1.0.30001727
|
caniuse-lite: 1.0.30001727
|
||||||
postcss: 8.4.31
|
postcss: 8.4.31
|
||||||
@@ -6243,14 +6243,14 @@ snapshots:
|
|||||||
react-dom: 19.1.0(react@19.1.0)
|
react-dom: 19.1.0(react@19.1.0)
|
||||||
styled-jsx: 5.1.6(react@19.1.0)
|
styled-jsx: 5.1.6(react@19.1.0)
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@next/swc-darwin-arm64': 15.4.1
|
'@next/swc-darwin-arm64': 15.4.4
|
||||||
'@next/swc-darwin-x64': 15.4.1
|
'@next/swc-darwin-x64': 15.4.4
|
||||||
'@next/swc-linux-arm64-gnu': 15.4.1
|
'@next/swc-linux-arm64-gnu': 15.4.4
|
||||||
'@next/swc-linux-arm64-musl': 15.4.1
|
'@next/swc-linux-arm64-musl': 15.4.4
|
||||||
'@next/swc-linux-x64-gnu': 15.4.1
|
'@next/swc-linux-x64-gnu': 15.4.4
|
||||||
'@next/swc-linux-x64-musl': 15.4.1
|
'@next/swc-linux-x64-musl': 15.4.4
|
||||||
'@next/swc-win32-arm64-msvc': 15.4.1
|
'@next/swc-win32-arm64-msvc': 15.4.4
|
||||||
'@next/swc-win32-x64-msvc': 15.4.1
|
'@next/swc-win32-x64-msvc': 15.4.4
|
||||||
sharp: 0.34.3
|
sharp: 0.34.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- '@babel/core'
|
- '@babel/core'
|
||||||
@@ -7174,32 +7174,32 @@ snapshots:
|
|||||||
|
|
||||||
tslib@2.8.1: {}
|
tslib@2.8.1: {}
|
||||||
|
|
||||||
turbo-darwin-64@2.5.4:
|
turbo-darwin-64@2.5.5:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
turbo-darwin-arm64@2.5.4:
|
turbo-darwin-arm64@2.5.5:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
turbo-linux-64@2.5.4:
|
turbo-linux-64@2.5.5:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
turbo-linux-arm64@2.5.4:
|
turbo-linux-arm64@2.5.5:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
turbo-windows-64@2.5.4:
|
turbo-windows-64@2.5.5:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
turbo-windows-arm64@2.5.4:
|
turbo-windows-arm64@2.5.5:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
turbo@2.5.4:
|
turbo@2.5.5:
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
turbo-darwin-64: 2.5.4
|
turbo-darwin-64: 2.5.5
|
||||||
turbo-darwin-arm64: 2.5.4
|
turbo-darwin-arm64: 2.5.5
|
||||||
turbo-linux-64: 2.5.4
|
turbo-linux-64: 2.5.5
|
||||||
turbo-linux-arm64: 2.5.4
|
turbo-linux-arm64: 2.5.5
|
||||||
turbo-windows-64: 2.5.4
|
turbo-windows-64: 2.5.5
|
||||||
turbo-windows-arm64: 2.5.4
|
turbo-windows-arm64: 2.5.5
|
||||||
|
|
||||||
type-check@0.4.0:
|
type-check@0.4.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -7238,13 +7238,13 @@ snapshots:
|
|||||||
possible-typed-array-names: 1.1.0
|
possible-typed-array-names: 1.1.0
|
||||||
reflect.getprototypeof: 1.0.10
|
reflect.getprototypeof: 1.0.10
|
||||||
|
|
||||||
typescript-eslint@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3):
|
typescript-eslint@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/eslint-plugin': 8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
'@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
'@typescript-eslint/parser': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
'@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
'@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3)
|
'@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3)
|
||||||
'@typescript-eslint/utils': 8.37.0(eslint@9.31.0(jiti@2.4.2))(typescript@5.8.3)
|
'@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.4.2))(typescript@5.8.3)
|
||||||
eslint: 9.31.0(jiti@2.4.2)
|
eslint: 9.32.0(jiti@2.4.2)
|
||||||
typescript: 5.8.3
|
typescript: 5.8.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
onlyBuiltDependencies:
|
onlyBuiltDependencies:
|
||||||
- '@tailwindcss/oxide'
|
- '@tailwindcss/oxide'
|
||||||
- libpq
|
|
||||||
- sharp
|
- sharp
|
||||||
|
Reference in New Issue
Block a user