Compare commits
13 Commits
d3f32ce7b6
...
7a402d81b9
Author | SHA1 | Date | |
---|---|---|---|
|
7a402d81b9 | ||
c540828463 | |||
a6b678c6ae | |||
6d35009593 | |||
dc735f1a2c | |||
c49acf8ab6 | |||
52fb808d45 | |||
d307ff6927 | |||
b7e2bbb46f | |||
3f38a9191f | |||
07476221c3 | |||
b1339e2ce9 | |||
ff73133e05 |
@ -3,7 +3,9 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { AbstractApi, } from '@/app/api/abstract-api';
|
import { AbstractApi, } from '@/app/api/abstract-api';
|
||||||
|
import { Group, GroupSerializer } from '@/app/lib/group';
|
||||||
import { Guest, GuestSerializer } from '@/app/lib/guest';
|
import { Guest, GuestSerializer } from '@/app/lib/guest';
|
||||||
|
import AffinitiesFormDialog from '@/app/ui/components/affinities-form-dialog';
|
||||||
import { classNames } from '@/app/ui/components/button';
|
import { classNames } from '@/app/ui/components/button';
|
||||||
import GroupFormDialog from '@/app/ui/components/group-form-dialog';
|
import GroupFormDialog from '@/app/ui/components/group-form-dialog';
|
||||||
import GuestFormDialog from '@/app/ui/components/guest-form-dialog';
|
import GuestFormDialog from '@/app/ui/components/guest-form-dialog';
|
||||||
@ -12,7 +14,6 @@ import SkeletonTable from '@/app/ui/guests/skeleton-row';
|
|||||||
import GuestsTable from '@/app/ui/guests/table';
|
import GuestsTable from '@/app/ui/guests/table';
|
||||||
import { TabPanel, TabView } from 'primereact/tabview';
|
import { TabPanel, TabView } from 'primereact/tabview';
|
||||||
import { Suspense, useState } from 'react';
|
import { Suspense, useState } from 'react';
|
||||||
import { Group, GroupSerializer } from '@/app/lib/group';
|
|
||||||
|
|
||||||
|
|
||||||
export default function Page() {
|
export default function Page() {
|
||||||
@ -34,6 +35,8 @@ export default function Page() {
|
|||||||
const [groups, setGroups] = useState<Array<Group>>([]);
|
const [groups, setGroups] = useState<Array<Group>>([]);
|
||||||
const [groupBeingEdited, setGroupBeingEdited] = useState<Group | undefined>(undefined);
|
const [groupBeingEdited, setGroupBeingEdited] = useState<Group | undefined>(undefined);
|
||||||
|
|
||||||
|
const [groupAffinitiesBeingEditted, setGroupAffinitiesBeingEditted] = useState<Group | undefined>(undefined);
|
||||||
|
|
||||||
const [guestsLoaded, setGuestsLoaded] = useState(false);
|
const [guestsLoaded, setGuestsLoaded] = useState(false);
|
||||||
const [guests, setGuests] = useState<Array<Guest>>([]);
|
const [guests, setGuests] = useState<Array<Guest>>([]);
|
||||||
const [guestBeingEdited, setGuestBeingEdited] = useState<Guest | undefined>(undefined);
|
const [guestBeingEdited, setGuestBeingEdited] = useState<Guest | undefined>(undefined);
|
||||||
@ -77,11 +80,19 @@ export default function Page() {
|
|||||||
onHide={() => { setGroupBeingEdited(undefined) }}
|
onHide={() => { setGroupBeingEdited(undefined) }}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<AffinitiesFormDialog
|
||||||
|
groups={groups}
|
||||||
|
group={groupAffinitiesBeingEditted}
|
||||||
|
visible={groupAffinitiesBeingEditted !== undefined}
|
||||||
|
onHide={() => { setGroupAffinitiesBeingEditted(undefined) }}
|
||||||
|
/>
|
||||||
|
|
||||||
<Suspense fallback={<SkeletonTable />}>
|
<Suspense fallback={<SkeletonTable />}>
|
||||||
<GroupsTable
|
<GroupsTable
|
||||||
groups={groups}
|
groups={groups}
|
||||||
onUpdate={refreshGroups}
|
onUpdate={refreshGroups}
|
||||||
onEdit={(group) => setGroupBeingEdited(group)}
|
onEdit={(group) => setGroupBeingEdited(group)}
|
||||||
|
onEditAffinities={(group) => setGroupAffinitiesBeingEditted(group)}
|
||||||
/>
|
/>
|
||||||
</Suspense>
|
</Suspense>
|
||||||
</div>
|
</div>
|
||||||
|
7
app/api/health/route.ts
Normal file
7
app/api/health/route.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
/* Copyright (C) 2024 Manuel Bustillo*/
|
||||||
|
|
||||||
|
import { NextResponse } from "next/server";
|
||||||
|
|
||||||
|
export function GET() {
|
||||||
|
return NextResponse.json({});
|
||||||
|
}
|
5
app/lib/affinities.tsx
Normal file
5
app/lib/affinities.tsx
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
/* Copyright (C) 2024 Manuel Bustillo*/
|
||||||
|
|
||||||
|
export class Affinities {
|
||||||
|
[key:string]: number;
|
||||||
|
}
|
69
app/ui/components/affinities-form-dialog.tsx
Normal file
69
app/ui/components/affinities-form-dialog.tsx
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/* Copyright (C) 2024 Manuel Bustillo*/
|
||||||
|
|
||||||
|
'use client';
|
||||||
|
|
||||||
|
import { Affinities } from '@/app/lib/affinities';
|
||||||
|
import { Group } from '@/app/lib/group';
|
||||||
|
import { getCsrfToken, getSlug } from '@/app/lib/utils';
|
||||||
|
import { classNames } from '@/app/ui/components/button';
|
||||||
|
import { Dialog } from 'primereact/dialog';
|
||||||
|
import { useEffect, useState } from 'react';
|
||||||
|
import AffinitySlider from './form/affinitySlider';
|
||||||
|
|
||||||
|
export default function AffinitiesFormDialog({ groups, group, visible, onHide }: {
|
||||||
|
groups: Group[],
|
||||||
|
group?: Group,
|
||||||
|
visible: boolean,
|
||||||
|
onHide: () => void,
|
||||||
|
}) {
|
||||||
|
const [affinities, setAffinities] = useState<Affinities>({});
|
||||||
|
const [isLoadingAffinities, setIsLoadingAffinities] = useState(true);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setIsLoadingAffinities(true);
|
||||||
|
if (group?.id === undefined) {
|
||||||
|
setAffinities({});
|
||||||
|
setIsLoadingAffinities(false)
|
||||||
|
} else {
|
||||||
|
fetch(`/api/${getSlug()}/groups/${group?.id}/affinities`)
|
||||||
|
.then((response) => response.json())
|
||||||
|
.then((data) => {
|
||||||
|
setAffinities(data);
|
||||||
|
setIsLoadingAffinities(false)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}, [group]);
|
||||||
|
|
||||||
|
function submitAffinities() {
|
||||||
|
const formattedAffinities = Object.entries(affinities).map(([groupId, affinity]) => ({ group_id: groupId, affinity: affinity }));
|
||||||
|
fetch(`/api/${getSlug()}/groups/${group?.id}/affinities/bulk_update`, {
|
||||||
|
method: 'PUT',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'X-CSRF-TOKEN': getCsrfToken(),
|
||||||
|
},
|
||||||
|
body: JSON.stringify({ affinities: formattedAffinities })
|
||||||
|
}).then(() => {
|
||||||
|
onHide();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Dialog header="Update affinities" visible={visible} style={{ width: '60vw' }} onHide={onHide}>
|
||||||
|
{!isLoadingAffinities && <div className="card justify-evenly py-5 bg-gray-200 flex flex-col">
|
||||||
|
<span className="text-center p-4">Describe the affinity with the rest of the groups</span>
|
||||||
|
|
||||||
|
{
|
||||||
|
groups.filter((currentGroup) => currentGroup.id !== group?.id).map((group) =>
|
||||||
|
<div key={group.id} className="flex flex-row hover:bg-gray-300 px-3 py-2 items-center">
|
||||||
|
<span className="w-1/3 text-right px-4">{group.name}</span>
|
||||||
|
<AffinitySlider value={group.id && affinities[group.id] || 1} onChange={(value) => setAffinities({ ...affinities, [group.id || "default"]: value })} />
|
||||||
|
</div>)
|
||||||
|
}
|
||||||
|
|
||||||
|
<button className={classNames('primary')} onClick={submitAffinities} >Update</button>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</Dialog>
|
||||||
|
);
|
||||||
|
}
|
40
app/ui/components/form/affinitySlider.tsx
Normal file
40
app/ui/components/form/affinitySlider.tsx
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/* Copyright (C) 2024 Manuel Bustillo*/
|
||||||
|
|
||||||
|
import { Slider } from 'primereact/slider';
|
||||||
|
|
||||||
|
export default function AffinitySlider({ value, onChange }: { value: number, onChange: (value: number) => void }) {
|
||||||
|
|
||||||
|
const toNumber = (value : number | [number, number]) => {
|
||||||
|
if(value instanceof Array) {
|
||||||
|
return value[0];
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
const label = (value: number) => {
|
||||||
|
if (value < 0.2) {
|
||||||
|
return 'Nemesis';
|
||||||
|
} else if (value < 0.5) {
|
||||||
|
return 'Enemies';
|
||||||
|
} else if (value < 0.9) {
|
||||||
|
return 'Bad vibes';
|
||||||
|
} else if (value < 1.1) {
|
||||||
|
return 'Neutral';
|
||||||
|
} else if (value < 1.5) {
|
||||||
|
return 'Good vibes';
|
||||||
|
} else if (value < 1.8) {
|
||||||
|
return 'Good friends';
|
||||||
|
} else {
|
||||||
|
return 'Besties';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<Slider value={value} min={0} max={2} step={.1} onChange={(e) => onChange(toNumber(e.value))} className='w-80 bg-gray-400' />
|
||||||
|
<span className="px-4 w-1/5">
|
||||||
|
{label(value)}
|
||||||
|
</span>
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
}
|
@ -2,16 +2,15 @@
|
|||||||
|
|
||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
|
import { AbstractApi } from '@/app/api/abstract-api';
|
||||||
|
import { Group, GroupSerializer } from '@/app/lib/group';
|
||||||
import { classNames } from '@/app/ui/components/button';
|
import { classNames } from '@/app/ui/components/button';
|
||||||
import { Dialog } from 'primereact/dialog';
|
|
||||||
import { ColorPicker } from 'primereact/colorpicker';
|
import { ColorPicker } from 'primereact/colorpicker';
|
||||||
|
import { Dialog } from 'primereact/dialog';
|
||||||
import { Dropdown } from 'primereact/dropdown';
|
import { Dropdown } from 'primereact/dropdown';
|
||||||
import { FloatLabel } from 'primereact/floatlabel';
|
import { FloatLabel } from 'primereact/floatlabel';
|
||||||
import { InputText } from 'primereact/inputtext';
|
import { InputText } from 'primereact/inputtext';
|
||||||
import { useState } from 'react';
|
import { useState } from 'react';
|
||||||
import { Group, GroupSerializer } from '@/app/lib/group';
|
|
||||||
import { ApiError } from 'next/dist/server/api-utils';
|
|
||||||
import { AbstractApi } from '@/app/api/abstract-api';
|
|
||||||
|
|
||||||
export default function GroupFormDialog({ groups, onCreate, onHide, group, visible }: {
|
export default function GroupFormDialog({ groups, onCreate, onHide, group, visible }: {
|
||||||
groups: Group[],
|
groups: Group[],
|
||||||
|
@ -2,18 +2,18 @@
|
|||||||
|
|
||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { Group, GroupSerializer } from '@/app/lib/group';
|
|
||||||
import TableOfContents from '../components/table-of-contents';
|
|
||||||
import { MapPinIcon, PencilIcon, TrashIcon } from '@heroicons/react/24/outline';
|
|
||||||
import { AbstractApi } from '@/app/api/abstract-api';
|
import { AbstractApi } from '@/app/api/abstract-api';
|
||||||
import { TreeTable } from 'primereact/treetable';
|
import { Group, GroupSerializer } from '@/app/lib/group';
|
||||||
|
import { AdjustmentsHorizontalIcon, PencilIcon, TrashIcon } from '@heroicons/react/24/outline';
|
||||||
import { Column } from 'primereact/column';
|
import { Column } from 'primereact/column';
|
||||||
import { TreeNode } from 'primereact/treenode';
|
import { TreeNode } from 'primereact/treenode';
|
||||||
|
import { TreeTable } from 'primereact/treetable';
|
||||||
|
|
||||||
export default function GroupsTable({ groups, onUpdate, onEdit }: {
|
export default function GroupsTable({ groups, onUpdate, onEdit, onEditAffinities }: {
|
||||||
groups: Group[],
|
groups: Group[],
|
||||||
onUpdate: () => void,
|
onUpdate: () => void,
|
||||||
onEdit: (group: Group) => void,
|
onEdit: (group: Group) => void,
|
||||||
|
onEditAffinities: (group: Group) => void,
|
||||||
}) {
|
}) {
|
||||||
|
|
||||||
const api = new AbstractApi<Group>();
|
const api = new AbstractApi<Group>();
|
||||||
@ -23,6 +23,7 @@ export default function GroupsTable({ groups, onUpdate, onEdit }: {
|
|||||||
<div className="flex flex-row items-center">
|
<div className="flex flex-row items-center">
|
||||||
<TrashIcon className='size-6 cursor-pointer' onClick={() => { api.destroy(serializer, group, onUpdate) }} />
|
<TrashIcon className='size-6 cursor-pointer' onClick={() => { api.destroy(serializer, group, onUpdate) }} />
|
||||||
<PencilIcon className='size-6 cursor-pointer' onClick={() => onEdit(group)} />
|
<PencilIcon className='size-6 cursor-pointer' onClick={() => onEdit(group)} />
|
||||||
|
<AdjustmentsHorizontalIcon className='size-6 cursor-pointer' onClick={() => onEditAffinities(group)} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
"autoprefixer": "10.4.20",
|
"autoprefixer": "10.4.20",
|
||||||
"bcrypt": "^5.1.1",
|
"bcrypt": "^5.1.1",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"next": "15.1.2",
|
"next": "15.1.3",
|
||||||
"next-auth": "5.0.0-beta.25",
|
"next-auth": "5.0.0-beta.25",
|
||||||
"postcss": "8.4.49",
|
"postcss": "8.4.49",
|
||||||
"primeicons": "^7.0.0",
|
"primeicons": "^7.0.0",
|
||||||
|
96
pnpm-lock.yaml
generated
96
pnpm-lock.yaml
generated
@ -24,11 +24,11 @@ importers:
|
|||||||
specifier: ^2.1.1
|
specifier: ^2.1.1
|
||||||
version: 2.1.1
|
version: 2.1.1
|
||||||
next:
|
next:
|
||||||
specifier: 15.1.2
|
specifier: 15.1.3
|
||||||
version: 15.1.2(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704)
|
version: 15.1.3(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704)
|
||||||
next-auth:
|
next-auth:
|
||||||
specifier: 5.0.0-beta.25
|
specifier: 5.0.0-beta.25
|
||||||
version: 5.0.0-beta.25(next@15.1.2(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704)
|
version: 5.0.0-beta.25(next@15.1.3(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704)
|
||||||
postcss:
|
postcss:
|
||||||
specifier: 8.4.49
|
specifier: 8.4.49
|
||||||
version: 8.4.49
|
version: 8.4.49
|
||||||
@ -239,53 +239,53 @@ packages:
|
|||||||
resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
|
resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
'@next/env@15.1.2':
|
'@next/env@15.1.3':
|
||||||
resolution: {integrity: sha512-Hm3jIGsoUl6RLB1vzY+dZeqb+/kWPZ+h34yiWxW0dV87l8Im/eMOwpOA+a0L78U0HM04syEjXuRlCozqpwuojQ==}
|
resolution: {integrity: sha512-Q1tXwQCGWyA3ehMph3VO+E6xFPHDKdHFYosadt0F78EObYxPio0S09H9UGYznDe6Wc8eLKLG89GqcFJJDiK5xw==}
|
||||||
|
|
||||||
'@next/swc-darwin-arm64@15.1.2':
|
'@next/swc-darwin-arm64@15.1.3':
|
||||||
resolution: {integrity: sha512-b9TN7q+j5/7+rGLhFAVZiKJGIASuo8tWvInGfAd8wsULjB1uNGRCj1z1WZwwPWzVQbIKWFYqc+9L7W09qwt52w==}
|
resolution: {integrity: sha512-aZtmIh8jU89DZahXQt1La0f2EMPt/i7W+rG1sLtYJERsP7GRnNFghsciFpQcKHcGh4dUiyTB5C1X3Dde/Gw8gg==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@next/swc-darwin-x64@15.1.2':
|
'@next/swc-darwin-x64@15.1.3':
|
||||||
resolution: {integrity: sha512-caR62jNDUCU+qobStO6YJ05p9E+LR0EoXh1EEmyU69cYydsAy7drMcOlUlRtQihM6K6QfvNwJuLhsHcCzNpqtA==}
|
resolution: {integrity: sha512-aw8901rjkVBK5mbq5oV32IqkJg+CQa6aULNlN8zyCWSsePzEG3kpDkAFkkTOh3eJ0p95KbkLyWBzslQKamXsLA==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@next/swc-linux-arm64-gnu@15.1.2':
|
'@next/swc-linux-arm64-gnu@15.1.3':
|
||||||
resolution: {integrity: sha512-fHHXBusURjBmN6VBUtu6/5s7cCeEkuGAb/ZZiGHBLVBXMBy4D5QpM8P33Or8JD1nlOjm/ZT9sEE5HouQ0F+hUA==}
|
resolution: {integrity: sha512-YbdaYjyHa4fPK4GR4k2XgXV0p8vbU1SZh7vv6El4bl9N+ZSiMfbmqCuCuNU1Z4ebJMumafaz6UCC2zaJCsdzjw==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@next/swc-linux-arm64-musl@15.1.2':
|
'@next/swc-linux-arm64-musl@15.1.3':
|
||||||
resolution: {integrity: sha512-9CF1Pnivij7+M3G74lxr+e9h6o2YNIe7QtExWq1KUK4hsOLTBv6FJikEwCaC3NeYTflzrm69E5UfwEAbV2U9/g==}
|
resolution: {integrity: sha512-qgH/aRj2xcr4BouwKG3XdqNu33SDadqbkqB6KaZZkozar857upxKakbRllpqZgWl/NDeSCBYPmUAZPBHZpbA0w==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@next/swc-linux-x64-gnu@15.1.2':
|
'@next/swc-linux-x64-gnu@15.1.3':
|
||||||
resolution: {integrity: sha512-tINV7WmcTUf4oM/eN3Yuu/f8jQ5C6AkueZPKeALs/qfdfX57eNv4Ij7rt0SA6iZ8+fMobVfcFVv664Op0caCCg==}
|
resolution: {integrity: sha512-uzafnTFwZCPN499fNVnS2xFME8WLC9y7PLRs/yqz5lz1X/ySoxfaK2Hbz74zYUdEg+iDZPd8KlsWaw9HKkLEVw==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@next/swc-linux-x64-musl@15.1.2':
|
'@next/swc-linux-x64-musl@15.1.3':
|
||||||
resolution: {integrity: sha512-jf2IseC4WRsGkzeUw/cK3wci9pxR53GlLAt30+y+B+2qAQxMw6WAC3QrANIKxkcoPU3JFh/10uFfmoMDF9JXKg==}
|
resolution: {integrity: sha512-el6GUFi4SiDYnMTTlJJFMU+GHvw0UIFnffP1qhurrN1qJV3BqaSRUjkDUgVV44T6zpw1Lc6u+yn0puDKHs+Sbw==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@next/swc-win32-arm64-msvc@15.1.2':
|
'@next/swc-win32-arm64-msvc@15.1.3':
|
||||||
resolution: {integrity: sha512-wvg7MlfnaociP7k8lxLX4s2iBJm4BrNiNFhVUY+Yur5yhAJHfkS8qPPeDEUH8rQiY0PX3u/P7Q/wcg6Mv6GSAA==}
|
resolution: {integrity: sha512-6RxKjvnvVMM89giYGI1qye9ODsBQpHSHVo8vqA8xGhmRPZHDQUE4jcDbhBwK0GnFMqBnu+XMg3nYukNkmLOLWw==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@next/swc-win32-x64-msvc@15.1.2':
|
'@next/swc-win32-x64-msvc@15.1.3':
|
||||||
resolution: {integrity: sha512-D3cNA8NoT3aWISWmo7HF5Eyko/0OdOO+VagkoJuiTk7pyX3P/b+n8XA/MYvyR+xSVcbKn68B1rY9fgqjNISqzQ==}
|
resolution: {integrity: sha512-VId/f5blObG7IodwC5Grf+aYP0O8Saz1/aeU3YcWqNdIUAmFQY3VEPKPaIzfv32F/clvanOb2K2BR5DtDs6XyQ==}
|
||||||
engines: {node: '>= 10'}
|
engines: {node: '>= 10'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
@ -740,8 +740,8 @@ packages:
|
|||||||
nodemailer:
|
nodemailer:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
next@15.1.2:
|
next@15.1.3:
|
||||||
resolution: {integrity: sha512-nLJDV7peNy+0oHlmY2JZjzMfJ8Aj0/dd3jCwSZS8ZiO5nkQfcZRqDrRN3U5rJtqVTQneIOGZzb6LCNrk7trMCQ==}
|
resolution: {integrity: sha512-5igmb8N8AEhWDYzogcJvtcRDU6n4cMGtBklxKD4biYv4LXN8+awc/bbQ2IM2NQHdVPgJ6XumYXfo3hBtErg1DA==}
|
||||||
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:
|
||||||
@ -1094,9 +1094,6 @@ packages:
|
|||||||
ts-interface-checker@0.1.13:
|
ts-interface-checker@0.1.13:
|
||||||
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
|
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
|
||||||
|
|
||||||
tslib@2.6.3:
|
|
||||||
resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==}
|
|
||||||
|
|
||||||
tslib@2.8.1:
|
tslib@2.8.1:
|
||||||
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
|
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
|
||||||
|
|
||||||
@ -1183,7 +1180,7 @@ snapshots:
|
|||||||
|
|
||||||
'@emnapi/runtime@1.2.0':
|
'@emnapi/runtime@1.2.0':
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib: 2.6.3
|
tslib: 2.8.1
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@heroicons/react@2.2.0(react@19.0.0-rc-f38c22b244-20240704)':
|
'@heroicons/react@2.2.0(react@19.0.0-rc-f38c22b244-20240704)':
|
||||||
@ -1306,30 +1303,30 @@ snapshots:
|
|||||||
- encoding
|
- encoding
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@next/env@15.1.2': {}
|
'@next/env@15.1.3': {}
|
||||||
|
|
||||||
'@next/swc-darwin-arm64@15.1.2':
|
'@next/swc-darwin-arm64@15.1.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-darwin-x64@15.1.2':
|
'@next/swc-darwin-x64@15.1.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-linux-arm64-gnu@15.1.2':
|
'@next/swc-linux-arm64-gnu@15.1.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-linux-arm64-musl@15.1.2':
|
'@next/swc-linux-arm64-musl@15.1.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-linux-x64-gnu@15.1.2':
|
'@next/swc-linux-x64-gnu@15.1.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-linux-x64-musl@15.1.2':
|
'@next/swc-linux-x64-musl@15.1.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-win32-arm64-msvc@15.1.2':
|
'@next/swc-win32-arm64-msvc@15.1.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@next/swc-win32-x64-msvc@15.1.2':
|
'@next/swc-win32-x64-msvc@15.1.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@nodelib/fs.scandir@2.1.5':
|
'@nodelib/fs.scandir@2.1.5':
|
||||||
@ -1741,15 +1738,15 @@ snapshots:
|
|||||||
|
|
||||||
nanoid@3.3.7: {}
|
nanoid@3.3.7: {}
|
||||||
|
|
||||||
next-auth@5.0.0-beta.25(next@15.1.2(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704):
|
next-auth@5.0.0-beta.25(next@15.1.3(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@auth/core': 0.37.2
|
'@auth/core': 0.37.2
|
||||||
next: 15.1.2(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704)
|
next: 15.1.3(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704)
|
||||||
react: 19.0.0-rc-f38c22b244-20240704
|
react: 19.0.0-rc-f38c22b244-20240704
|
||||||
|
|
||||||
next@15.1.2(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704):
|
next@15.1.3(@playwright/test@1.49.1)(react-dom@19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704))(react@19.0.0-rc-f38c22b244-20240704):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@next/env': 15.1.2
|
'@next/env': 15.1.3
|
||||||
'@swc/counter': 0.1.3
|
'@swc/counter': 0.1.3
|
||||||
'@swc/helpers': 0.5.15
|
'@swc/helpers': 0.5.15
|
||||||
busboy: 1.6.0
|
busboy: 1.6.0
|
||||||
@ -1759,14 +1756,14 @@ snapshots:
|
|||||||
react-dom: 19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704)
|
react-dom: 19.0.0-rc-f38c22b244-20240704(react@19.0.0-rc-f38c22b244-20240704)
|
||||||
styled-jsx: 5.1.6(react@19.0.0-rc-f38c22b244-20240704)
|
styled-jsx: 5.1.6(react@19.0.0-rc-f38c22b244-20240704)
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@next/swc-darwin-arm64': 15.1.2
|
'@next/swc-darwin-arm64': 15.1.3
|
||||||
'@next/swc-darwin-x64': 15.1.2
|
'@next/swc-darwin-x64': 15.1.3
|
||||||
'@next/swc-linux-arm64-gnu': 15.1.2
|
'@next/swc-linux-arm64-gnu': 15.1.3
|
||||||
'@next/swc-linux-arm64-musl': 15.1.2
|
'@next/swc-linux-arm64-musl': 15.1.3
|
||||||
'@next/swc-linux-x64-gnu': 15.1.2
|
'@next/swc-linux-x64-gnu': 15.1.3
|
||||||
'@next/swc-linux-x64-musl': 15.1.2
|
'@next/swc-linux-x64-musl': 15.1.3
|
||||||
'@next/swc-win32-arm64-msvc': 15.1.2
|
'@next/swc-win32-arm64-msvc': 15.1.3
|
||||||
'@next/swc-win32-x64-msvc': 15.1.2
|
'@next/swc-win32-x64-msvc': 15.1.3
|
||||||
'@playwright/test': 1.49.1
|
'@playwright/test': 1.49.1
|
||||||
sharp: 0.33.5
|
sharp: 0.33.5
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@ -2108,9 +2105,6 @@ snapshots:
|
|||||||
|
|
||||||
ts-interface-checker@0.1.13: {}
|
ts-interface-checker@0.1.13: {}
|
||||||
|
|
||||||
tslib@2.6.3:
|
|
||||||
optional: true
|
|
||||||
|
|
||||||
tslib@2.8.1: {}
|
tslib@2.8.1: {}
|
||||||
|
|
||||||
typescript@5.7.2: {}
|
typescript@5.7.2: {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user